(c)2007, Dave W. Smith
As software developers, and managers of software developers, we have a reputation for making pretty lousy estimates. Part of that rap is unfair; many times the requirements that we’re asked to provide estimates for are vague, and change as the work progresses.
But a large part of that reputation is true. We make lousy estimates, and we don’t seem to get much better as we go. One problem is that the feedback loop between the estimate and the achievement is often long. When you don’t begin working on a task until weeks or months after you estimate that work, the original mental context has been lost, making it difficult to use feedback to learn.
Here’s a simple way you can begin to shorten that feedback loop and put yourself on the track to becoming a better estimator. All you need is a stack of 3×5 cards, a pen, and a watch or clock.
It works like this: Keep a few 3×5 index cards in your pocket or within reach. Before you begin a task, which could be a task for a project at work or a task at home, pull out a card and jot down a short description of the task on the front of the card. Short is good—you only need enough to recognize the task, which helps if you interleave work on several tasks and thus will have multiple active index cards.
Next, take a moment to think through what “done” means for the task, and what you need to do to get there. Now estimate how many hours it will take you to complete the task, and jot that down on the card. If you’re uncertain, write down a time range (e.g., “Est: 1/2″, “Est: 5-6″).
This process should take less than a minute. It it takes longer, or you can’t first the task description on the card, or if your estimate is larger than 8 hours, take it as a hint that you need to consider breaking the task into smaller pieces. Rip up the card, and start over. One of the secrets to better estimating is admitting when you’ve bitten off more than you can chew, and then backing off to take smaller bites.
As you start the task, turn the card over and note the date and start time on the back. If you break off from the task, or get interrupted, note the time, or at least make a check mark for each interruption. Seeing how often you get interrupted may surprise you, and the data can be useful when you look at it later for patterns.
The back of one of my recent task cards (for a writing project) looks like this:
5/30/07 6/1/07 ------ ------- 9:00 9:15 11:30 10:05 phone 10:10 10:45
When you finish the task, total up the time and write an “Actual:” number below the estimate on the front of the card. And, while memory is still fresh, take a moment to reflect on what happened. If your estimate and actual match, congratulations. More likely, you’ve earned an opportunity to improve. (Even if your estimate was spot-on, you still have an opportunity.) Ask yourself: “What happened? What parts did I forget to estimate? What went harder or easier than I first thought? What could I remember to consider the next time I’m estimating a task like this one? What about my environment interfered, and how can I either change that or account for it in future estimates?”
File the card away. If you keep a journal, jot down your thoughts.
After doing tracking task time for a few weeks, you may notice patterns and recurring themes. Are you getting interrupted more at some times of day than at others? Are you better at estimating certain sizes or types of tasks? Are your actuals closer to estimates when you’re juggling fewer tasks? Noticing patterns in your own work will give you practice in noticing patterns in team projects, which improves your ability to help with team estimates.
Tracking estimates and actuals has shown me that I have several distinct patterns of consistent underestimation. When estimating a writing task, I often underestimate how long a rough draft will take to revise. Now I break out separate tasks for drafting, revising, and final edits, and double my gut estimate for revising.
Tracking your time can be a simple practice, and can be remarkably revealing. Give it a try.