Recently I gave a presentation on Agile Estimation, as based on some of the material cover in the course I attended. While I can not take credit for the materials, or the activities, I was keen to write about them as I believe my own perspective could be of benefit to others who find themselves in a similar situation.
Estimation is something that every team does, but approaches vary wildly. Commonly developers will estimate in hours based on their feel for how long a task or activity will take. While this is not terrible the individual doing the estimating makes a number of assumptions about their approach, their experiences of similar tasks, their confidence in finding a solution, the risk involved, etc. However, what if the person that has done the estimate isn’t the person who will complete the task? What if they aren’t aware of the assumptions made and are not able to understand how the estimate was so low or high?
In the session I asked the teams to estimate the distance from our office to Paris. Instantly they started working on understanding the distance, what roads they would need to take, a ferry or a train and if they would need to sleep on the way. Within a very small variance the teams were pretty consistent in the distance it was from our office to Paris. However, when they started to estimate the time required, based on their distance estimate, the hours varied based on speed assumptions, accounting for traffic and other variables.
What I was trying to show the team is that most of us are good at judging the complexity of a task. They were all good at determining the distance, the route and even the car they’d take and those that had driven the route before knew more confidently what the number of miles required to drive.
When teams decouple complexity estimates from duration estimates they are usually more accurate. Even for the guys that had driven to Paris before, the number of miles required to drive was not smaller in any way, the size or complexity of the task didn’t change for them.
Mike Cohn teaches that we should
Estimate size and derive duration
You see duration or velocity is something that a team understands best through practice. Once teams get into a rhythm or cadence they naturally start working more effectively. This will improve the speed that they are working at and the number of tasks that they can complete.
By estimating as a team (or at least in pairs) developers will at least get some peer input into if their estimates to help them check they are in the right sort of range. And through conversation and repeated estimates the teams should see an improved confidence in their estimate ranges.