Agile Software Estimation Best Practices
Oct 25th 2017 (updated Apr 3rd 2023)
Estimating software development work is a crucial part of the development process, enabling teams to plan and prioritize work, set deadlines, and allocate resources. However, it can be a daunting task. In this article, we will explore some of the best practices for estimating work in software development teams.
Estimate in Relative Size
When estimating software development work, it is better to estimate in relative size rather than in absolute terms. People are much better at estimating size relative to something else, and using relative estimates helps in establishing a baseline for estimating future work.
"Bucket"/Group Similar Work
Building on the idea of relative sizing, grouping similar work into buckets can help in estimating software development work quickly, easily, and accurately. This method is especially helpful for new teams or projects where there is less historical context.
Prefer Precision over Accuracy
While accuracy is desirable from a planning point of view, it is much harder for humans to achieve. Instead, aim for precise estimates, which can be made "accurate" by applying an adjustment factor based on historical data. Don't waste effort and time trying to get people to give 100% accurate estimates.
Understand what you're estimating
You can only estimate what you understand. Ensure that the ask is clear and that the team has the context for the work they are estimating. This will help ensure that the team is on the same page and able to provide useful estimates.
Break down larger work
Breaking down larger work into smaller, more manageable pieces makes it easier to estimate. It allows for more precise estimates and helps the team avoid being overwhelmed by the scope of the work. Ensure that the work breakdown structure follows the INVEST principles.
Estimate as a Team
Estimates by consensus are generally more accurate (as long as they don't bias one another). The team can discuss any differences in estimates and arrive at a final estimate together, leveraging the "wisdom of crowds" to improve the precision of the estimate.
Those doing the work provide the estimates
The people who will perform the work are the best people to estimate the work required to complete it. Involving the team in the estimation process promotes ownership of the work and provides an early exposure to what the work entails.
Estimates are not commitments
Estimates are a planning tool, not a commitment. When treated as a commitment, it can lead to overestimation, increased stress, lower morale, and less focus on delivering the work. Estimation should be used as a reference point for reflection, not a rigid commitment to deliver by a specific time.
Use Planning Poker
Using Planning Poker is an effective way to estimate work as a team. By keeping estimates hidden until everyone has provided their estimate, it can help avoid the "bandwagon effect" where people copy the most senior team member's estimate. It can also prevent the "halo effect," where people are drawn to something with a positive sheen to it.
Use Fibonacci Sequence for Estimating
Estimating larger work items can be challenging. The larger the work item, the more inaccurate the estimate becomes. Using the Fibonacci sequence can help reflect the challenge of estimating larger work.
By following these best practices, Scrum and Agile teams can estimate software development work effectively and efficiently, enabling them to plan and prioritize work, set deadlines, and allocate resources with confidence.
References
- Cohn, M. (2005). Agile estimating and planning. Prentice Hall.
- Cockburn, A. (2000). Selecting a project's methodology. Communications of the ACM, 43(6), 27-29.
- International Scrum Institute. (2021). The Agile Estimating and Planning Process. Retrieved from https://www.scrum-institute.org/Agile-Estimating-and-Planning-Process.php
- Mountain Goat Software. (n.d.). Agile Estimating and Planning. Retrieved from https://www.mountaingoatsoftware.com/agile/estimating-and-planning
- Agile Alliance. (n.d.). Estimation. Retrieved from https://www.agilealliance.org/glossary/estimation/