Welcome!

I am a software developer from Calgary, Canada. I like to dabble in open-source software when not slinging Java at my day job.

You're currently only seeing the public areas of my site. For access to personal photos, videos, and blog posts, you'll need to login.

Around the Web

Recent Blog Posts

play blog%> House now fully framed
2010-02-24 at 07:26 pm
tech blog%> Release Planning based on Team Velocity
2010-02-21 at 01:52 pm
play blog%> Geo-exchange holes being drilled
2010-02-06 at 05:28 pm
play blog%> Main Floor coming together
2010-01-16 at 02:53 pm
play blog%> Leaving Facebook
2010-01-14 at 01:23 pm
tech blog%> Wind Mobile and Google's New Phone
2010-01-12 at 04:11 pm
play blog%> Foundation has been back-filled
2009-12-27 at 02:57 pm
play blog%> Copehagen fails...
2009-12-19 at 07:58 am

Recent Comments

Listening To

Release Planning based on Team Velocity

Due to a recent shake-up at work, I've been asked to handle release planning for our software product. Up to now, I've been primarily concerned with iteration planning for our two-week sprints. Release planning covers a wider scope of up to a year in our case. So I was handed a MS Excel spreadsheet which held the release plan from our previous manager. I was a bit surprised by what I found.

First some history. Our team follows a Scrum process using the XPlanner web app for tracking (shown on right). We've done this for a number of years now and it has worked well for us. Key steps in this process for us:

  • Entire team estimates using planning poker. This gives better task estimates which the team feels committed to achieving.
  • We learn from our successes and failures by holding sprint retrospectives. This helps improve our estimates going forward.
  • We use our project velocity to guide our workload for the next iteration.

Considering our commitment to Agile software development, I was surprised to see the release plan spreadsheet consisted of:

  • New features (user stories) estimated by the manager in terms of days of effort required.
  • A static resource analysis that assumes project velocity is simply number of hours in the office, discounted by a factor of 0.7.
  • Finally, the spreadsheet didn't actually prioritize every story in a single list. It just grouped them into quarters, within which no priority was given.

This traditional analysis is flawed in a few key ways:

  1. Since the team didn't have input on the story estimates, they feel they don't have control over the process and are not committed to the goal of accomplishing the work in the estimated time.
  2. By planning release milestones using a theoretical resource calculation, the release plan ignores a key team metric: project velocity. Project velocity is the number of story points completed in an iteration. When normalized to 100% team strength, this velocity number can be used to predict how many prioritized stories can be completed in the coming sprints.

Since a key function of the product backlog is to provide a total ordering of the stories by priority, I've moved the product backlog out of the spreadsheet and into XPlanner. We're now using our project velocity to determine which stories will be completed in which milestone. Finally, I've started getting story estimates from the entire team.

Should upper management still require burn up charts in spreadsheets for reporting, I'll generate them periodically from XPlanner. Hopefully, this more realistic approach will begin to improve our release process, resulting in better software releases in the future.

Note: Since XPlanner is a dead product, we're considering alternatives, but it works for now. As well, we're currently estimating both the sprint backlog and product backlog in ideal time. I'd like to adopt Mike Cohn's approach of using different units (story points) for the product backlog soon.

Posted by Guy | Posted on 2010-02-21 at 1:52 PM | Comments (View)

Wind Mobile and Google's New Phone

Canada finally has some competition in the mobile phone market. However, Canada's backwater market needs to see a number of other developments before I spring for a real smartphone:

  • Google Nexus One offered by Wind Mobile: hopefully coming soon!
  • Google Voice made available in Canada: currently delayed by either Google or dumb government regulations?
  • Google Voice start using VOIP so I don't need a voice plan: Google's taking their sweet time on this one.
  • Wind offer a data plan at a good rate, no requirement for a voice plan: Will Canada ever have a good price for data-only?

As someone who makes a handful of calls a month, maybe using 20 mins of airtime a month, voice is not a compelling feature. Data is however. I'd like to join the "smart/super phone" world, but the artificial barriers that the big 3 carriers and gov't regulations impose has prevented me from participating. Kudos to Wind for trying, but there are many more pieces (mostly out of Wind's control) that need to fall in place for me to jump on the bandwagon. Hopefully this comes together before I get so old that new tech confuses me. :)

Posted by Guy | Posted on 2010-01-12 at 4:11 PM | Comments (View)

Questions from an aspiring programmer

I was contacted by a SAIT student majoring in Software Development who needs to interview a developer for his "World of Information Technology" course. I figured my responses might be interesting to others as well, so I've posted them below:

Have you always wanted to be a programmer? If so, what sparked your initial interest? If not, what was your initial career path, and what changed you to become a programmer?

Not always. I'd been interested in biology throughout high school due to an excellent teacher (Kim Burley). I started university with an interest in microbiology and immunology, hopefully leading to a medical degree. I ended up getting a BSc in microbiology but didn't make it into med school. This was probably for the best, as I don't think I have the people skills to deal with a steady stream of patients all day. Computers are much simpler after all. :)

I noticed you have various degrees in a few fields, was this all part of a plan, or was it a chain of interest changes?

Computing was a secondary interest of mine, but exposure to the Internet during the late '90s really opened my eyes to all the potential there. So during the 4th year of my microbiology degree, I was already taking CompSci courses, preparing to make the switch. I got a BSc in Computer Science in another two years with 16 months spent on an internship (highly recommended if you can get one). So don't worry too much if you change directions as your education progresses.

What was your first career-related job? What types of tasks were required of you?

My first programming job was my internship with the Alberta Research Council working on consulting projects. I got some exposure to Java on a medical patient record system and the Microsoft-stack on a web-based land imaging system. This internship was invaluable for confirming that software development was interesting enough for me to make it my 'day job'.

One of my favorite parts of Programming is being given a problem, then jumping right into finding a solution. The one thing I am efficient at doing is pseudocode before I write any program I am working on, but I have been told flow charts is an alternative method. I don't enjoy them too much, but what is your take on it? Will I need to be fluent in 'flow charting' to be effective at any programming job I may have? What kinds of steps do you take to tackle a programming problem?

Designs requiring page upon page of technical diagrams are not a good idea. I don't bother with printed flow-charts or even UML (though I can read them if needed). As a developer you need to be able to understand requirements from your customers and be able to communicate those to the rest of your team. This means hashing out the design details in meetings with white-boards on which a flow-chart or two may appear.

But, the key thing is that face-to-face verbal communication is used to transfer understanding. Run away from any development company where the "architect", the "designer", the "coder", and the "tester" sit in separate offices, sending each other long Word documents about how the system should work. Development without these rigid roles and more verbal communication will work better for you in the long run.

Regarding pseudo-code or flow-charts, if it's useful tool when communicating directly with other programmers, then go for it. These days however, powerful scripting languages such as Python or Ruby let you very quickly prototype a design. Don't worry if you end up throwing it away. A snippet of running code is worth far more than a stack of design documentation that becomes outdated the minute the client sees the app and wants something changed.

We are being taught that having great communication skills and being a team player is essential to success. I have no problem with this, but in some cases I prefer to work independently, especially when I am working with code. Since you have been in the industry for years, how important are these skills for success as a programmer?

Absolutely critical. This industry is full of mildly autistic (or just dorky) types (myself included) that are not natural communicators. But believe me, this is a skill you need. If your goal is to write and ship cool software that will be used by lots of people, you'll quickly see you need lots of help from management, marketing, support, etc. You need to be able to interact well with these people to achieve your goals.

On your website it says you are presently working for Petris Technology as Development Team Lead, how do your tasks differ from your first career-related job? Obviously you are now in a leadership role with a team, do you still code programs, or do you just facilitate the process and let others take care of it?

My time is probably 30% interacting with the team and others; one on one or in group meetings. We hold daily Scrum and code review, regular design meetings, and biweekly demos and iteration planning meetings. The rest of the time is spent at my desk coding and testing. So far, I haven't wanted to give up the coding and become a full-time project manager. Maybe one day...

It became pretty clear to me early on that the 30% of time I spent interacting with, organizing, and helping others on the team was more important to our success than the 70% of time I spent coding. My MSc in Software Engineering led me to Agile software development which is a really effective way of keeping a development team running smoothly. Scrum, in particular, is a widely used process here in Calgary.

I noticed on your website that you went to U of A, did you take any of their Artificial Intelligence courses? If so, did you enjoy them? How in depth was the content? As I told you in the original email, I am seeking a career in Artificial Intelligence, particularly in spacecraft systems to support my passion for astronomy, do you have any tips to help me along my way? I understand that this may not be your particular field of specialty, but I thought it was worth a shot to ask.

I do remember taking an intro course at U of A that was good. A U of C course on agent systems was also interesting. I never really followed through farther than that, however it is a very deep topic and I encourage to take option courses in that direction.

There are bound to be some interesting open-source projects out there that involve artificial intelligence and astronomy. Find one that interests you and play around with it. Having an open-source hobby project looks great on a resume.

Any last advice you can give to an aspiring Software Developer?

Let your curiosity lead you. Dabble in various topics like AI and publish your work (papers, code, etc) My feeling is that the interesting development jobs in Calgary go to developers with broad skills sets who have demonstrated a real interest in their field. Best of luck with your education and don't hesitate to contact me in the future.

Posted by Guy | Posted on 2009-10-14 at 2:14 PM | Comments (View)

Yammer adoption faltering at work

This summer I thought I'd try to encourage knowledge sharing and collaboration with Yammer; a corporate networking site. My thought was that by letting others in the organization know what we're doing, we could help each other out and be more efficient. With offices all around the world, Yammer seemed a good fit for our company.

So a few months later, a quarter of the company has signed up. That's good, but most are not posting and many haven't logged in after the first few times. Essentially, Yammer is not leading to further knowledge sharing within the company. After speaking with people about Yammer, I'm hearing a few common concerns:

"Email is what I know. You'll have to pry Outlook from my cold dead hands!"

This a valid point. Is social networking a fad that will never gain any traction against email? I don't think so, but a number of people here don't want to be bothered learning a new tool when they have more important things to do.
Personally, I see Yammer as complementary to email. Yammer is used for group discussions, replacing those annoying broadcast emails. This lets email return to its original purpose of detailed discussion on a topic between two individuals.

"We already have Sharepoint for any collaboration beyond email."

I'd argue that Sharepoint feels too formal for any real sharing. Would you create a new Sharepoint Wiki page just to post a one sentence note about some software that is pissing you off? No, you wouldn't so an opportunity for a co-worker to share a solution with you is lost.

My gut feeling about Sharepoint usage is supported by the fact that our current Sharepoint site is a ghost town with no discernible discussion happening across teams. A couple of teams use Sharepoint for internal discussion, but outsiders (rest of the company) is barred from even reading these team-specific forums -> a good example of why teams are not talking.

So have I given up on Yammer at work? Not really, I'll keep using it as an alternative to email in many cases. Perhaps after another year, usage will slowly increase to the level where true knowledge sharing between geographically-separated offices begins to occur. I'm not holding my breath though...

Posted by Guy | Posted on 2009-10-14 at 1:36 PM | Comments (View)

Back to web hosting on Linux

With the recent release of Mac OS 10.6 (aka Snow Leopard), I decided to be brave and upgrade my iMac. Unfortunately, this broke all the server software running my site and the Baby Name Map. I valiantly tried to get things working again, but eventually gave up due to MacPorts inability to install Tomcat6 and a working rb-rmagick.

So I dusted off a trusty old AMD-64 server of mine and installed Ubuntu Linux 9.04 on it. In a couple of hours, I was able to get Apache, Tomcat, MySQL, and RoR all running smoothly.

Sorry for any disruption to my sites. In particular, I was surprised to find a number of complaints about the data API for the the Baby Name Map going off-line. It's nice to know that project is still seeing good use.

Posted by Guy | Posted on 2009-09-30 at 10:54 AM | Comments (View)

Older Posts >>