Delivering an application on the date specified at the beginning of a project is rarely, if ever, achieved; especially if the delivery is expressed as a single date (commitment) instead of a range of dates (estimate). However, there are ways to estimate the probability of delivering on specific dates using relatively simple formulas in just two steps.

**Step 1: Calculate the standard deviation for each task**

This isn't as scary as it sounds. Here is the formula:

*StandardDeviation = (SumOfWorstCaseEstimates - SumOfBestCaseEstimates)/6*

Your estimates are based on Worst, Best, and Expected cases, right? I hope so. The denominator (6) in the formula counts as one standard deviation. One standard deviation means that 99.7% of your estimates will fall within the Worst/Best range. Depending on the risks associated with the project or your skill with estimating you may want to decrease the denominator as a buffer. For example, using 2 as the denominator means that 68% of the actual effort per task will fall into the Worst/Best range. Steve McConnell's opinion in his book *Software Estimation: Demystifying the Black Art* is that accomplishing a 68% accuracy is achievable __with practice__ so you might want to start out using a denominator of 2 or less until your historical data tells you otherwise.

**Step 2: Calculate the probabilities for delivery **The next step is to apply the standard deviation to calculate the likelihood of delivery. Below is a table with the probabilities:

Percent Likely | Calculation |

2% | Expected case - (2 x StandardDeviation) |

10% | Expected case - (1.28 x StandardDeviation) |

16% | Expected case - (1 x StandardDeviation) |

20% | Expected case - (0.84 x StandardDeviation) |

25% | Expected case - (0.67 x StandardDeviation) |

30% | Expected case - (0.52 x StandardDeviation) |

40% | Expected case - (0.25 x StandardDeviation) |

50% | Expected case |

60% | Expected case + (0.25 x StandardDeviation) |

70% | Expected case + (0.52 x StandardDeviation) |

75% | Expected case +(0.67 x StandardDeviation) |

80% | Expected case + (0.84x StandardDeviation) |

84% | Expected case + (1 x StandardDeviation) |

90% | Expected case + (1.28 x StandardDeviation) |

98% | Expected case +(2 x StandardDeviation) |

There are more complex methods for calculating deliver dates for projects that have greater than 10 tasks. I’ll be writing about those in future articles.

I have a variation of the above in the form of a spreadsheet that I use as a template for inputting tasks with their respective estimates. The spreadsheet will automatically calculate the standard deviation and percent likely delivery dates. If you would like me to send it to you feel free to email me at jack@notarangelo.com and I’ll send it along.

Aren't these numbers based on normal distribution? Are there studies proving that the distribution of estimates is, in fact, normal? My suspicion is that it is not and usage of standard deviation and nice numbers like 68% is BS.

ReplyDeleteKeep in mind that this method is for fewer than 10 tasks. So, if I want to use a quick method to estimate the likelihood of delivering those 5 tasks this helps to solve the problem. There are more sophisticated methods of estimating delivery dates for larger sized projects. It sounds like you have a better quantifiable method for determining delivery dates and in the spirit of this blog I'm looking forward to you sharing your methodology.

ReplyDelete