Opinion: Estimating Software Development Projects

John Parkinson Avatar

Updated on:

One of the hardest things to do in any human endeavor is to predict the future accurately. Since the future hasn’t happened yet, it is, by definition, to some degree uncertain. We may harbor highly developed expectations about what’s going to happen, but in most circumstances, we cannot be entirely sure. Yet for many “economic” endeavors, it’s important to provide just such a prediction. It’s unlikely we will get permission to do something that requires an investment of time, money and other assets if we can’t offer some degree of certainty about the outcome.

Software projects are no different. We need to be able to predict how long the work will take, how much it will cost, how much resources will be required to complete the work, and what skills and experience the people involved in the project will need. One school of thought holds that developing software is more akin to developing a new product than to manufacturing something that is well understood. Requirements evolve as features are developed. Some parts of the job turn out to be harder than expected, others easier. Some people work faster than others or are more skilled, so that even at the same pace their work gets completed faster because they see better ways to solve problems. For managers trying to assess the amount of effort and time will be involved, there are many variables to consider and much ambiguity. What should they do to get the best possible answer? If the future is so uncertain, how can we predict anything useful?

Fortunately, we have some things going for us. First, not everything in the future is actually completely uncertain. The real world exhibits statistically predictable phenomenology at a useful level of detail for many events macro (the sun will rise tomorrow) to micro (my alarm will ring at the time it’s set for).

Second, we can use history as our guide: We can measure and record what actually happened in the past and (a) identify things that always seem to happen and (b) what things seem to cause differences in outcome (the determinants of variability). Then we can use these observations to build predictive models that can be refined and improved through use, and the more we use them the better we should get.

And third, there are constraints (some based on the laws of the universe, some arbitrary, but just as “real”) in the real world that let us eliminate or ignore part of the range of what’s theoretically possible as an outcome.

Estimation is the process by which predictions are constructed, tested and offered up with a known degree of confidence. A lot of different estimation methods have been developed (for software and other kinds of development efforts ranging from civil engineering to event planning). But all successful methods fall into a small number of categories, according to the strategies they use to reduce uncertainty. There are three basic approaches.

Next page: Making Models