Darius J Chuck

On estimation

Here are some of my thoughts about estimation. The only way to accurately and reliably measure how long and how much effort something will take is to do it. So for things that already happened, we can have perfect estimates. Measuring future things, known as estimation in software, is the same thing as prediction or prophecy elsewhere. The most reliable kind of prophecy I know is the scientific kind -- based on rigorous study and control of variables (usually via removing or fixing as much of these as possible). This is also based on the mentioned perfect past observations. I.e. if something happened reliably in a given context in the past, most likely it will happen in the same way in the future. This translates to software estimates which are based on past experience, accurate view of the context, well-defined tasks with no uncertainty. The simpler and more defined the task, the more variables taken into account, the easier and more reliable the estimate. My conclusion from playing Scrum estimation games regularly for a long time is that it's easier to guess how other people are going to guess than how long or how much effort something will actually take. A very good (but not perfect) analogy for estimation is traveling. How long will it take to get from A to B? Depends. If you've been there before, what you do on the way, what vehicle (if any) you use, how fast you go, what is your maximum speed, with whom you travel, how much fuel you have, how often you stop. Whether something unexpected happens along the way. Try to estimate hiking time in unexplored mountainous areas with state-of-the-art routing algorithms. Then go there and see how reliable it turns out to be. For a trivial task you can make a good estimate quickly, but it's less useful. For a complex task an estimate might be more useful, but to make a good one you have to take many variables into account, and often a lot of uncertainty is practically irreducible. The more complex the task, the longer it takes to estimate well. Are you taking the time to do the estimate into account when estimating? Do you write test for your tests? There is a lot more to say on the topic.

Further reading and food for thought: