You Can Estimate Anything!
Quite often people say that they are being asked to provide an estimate before they have enough information. This usually happens in the very early stages of a project, but can also occur anytime a major change comes in and we need to figure out how long it will take to get the job done.
The scenario usually plays out in a manner that serves nobody well. The team commits to doing something that they all knew from the start would take an absolute miracle to achieve. They fail miserably, end up taking far more time than allocated, people are disappointed and the results are shoddy.
What started this whole dance, though, is not an estimate. Perhaps capitulation or surrender, maybe a bit of wrangling or fudging, but by no means an estimate.
All this, and the information required to put together a credible estimate was right in front of the team the whole time.
Most of the time, when we say we are estimating, the product of our efforts is a number, or a simple affirmative response. “That should take me two weeks”. “Sure, I can get that done by the end of the week”. Then off to work we go. A single point number is a target or line in the sand, but not an estimate.
Especially in the early stages of a project, the key component of an estimate is not that line in the sand, but an expression of the uncertainty associated with that number. This uncertainty reflects the unknowns in the information you have been provided. The less you know, the greater the magnitude and importance of that uncertainty. Indeed, early-stage estimates are usually best represented only as a range, with no commitment to a specific single number at all.
Jon Bentley’s Programming Pearls has a great exercise that expresses this concept. You are asked to come up with an estimate for a variety of items, some of which you would know very little about. How many signers were there for the Declaration of Independence? How far apart are the two main towers of the Golden Gate Bridge? The goal is to come up with a range, two numbers far enough apart (based on your knowledge of the problem) such that the chances of the actual number will fall into this range with a 90% probability.
This is the essence of estimation.
People can have absolutely no knowledge of US history and still have a good estimate. People can know nothing more than the fact that the Golden Gate Bridge is a famous bridge and come up with a good estimate. Their ranges will be far greater than a US Historian or a Civil Engineer from San Francisco, but they will still be able to provide a good estimate.
Thinking this way about estimation is counter to what we have been acclimatized to expect. Actually doing well in this can be very difficult initially, but your skills will improve with practice (most people score less than 30% on this quiz the first time through.
It is the width of the range that drives our next decision. Is the range narrow enough for us to proceed with a tolerable level of risk? Is it so wide that we need to dig deeper into the problem and break it down into more precisely estimable chunks?
This digging deeper is one of the primary reasons for expanding our understanding of the system into requirements, architecture and design. Having clarified our understanding of the problem, we have an opportunity to revisit our initial estimates and narrow that uncertainty accordingly. There will be times when you dig down to reveal insights that invalidate your initial assumptions, and your more precise understanding will indicate that you actually can’t get the task completed in the time you had hoped.
The discipline of having to choose a range makes you actually think about what you know about the problem, which is the key. Discussing the challenge in terms of uncertainty allows you to debate rationally, rather than the traditional Name That Tune style of commitment that usually takes place. Acknowledging that uncertainty points you in the right direction for discovering the important issues early and solving the problem in an effective manner.
Given the right perspective and a little practice, we can all estimate anything, at any time. We just need to be comfortable with knowing that we don’t know everything. – JB