Estimation on an Agile Software Project
If you’re working on a project where there is uncertainty, agile software development can help you manage that uncertainty and communicate it to your stakeholders. Most software development projects are highly unpredictable, especially early on. The classic way of describing this is the cone of uncertainty. Short software development iterations with goals and estimates can help you set expectations about what you can deliver. But teams struggle with estimation.
There is a tendency to want to use estimates to tightly control a project. But in many cases, as Tom DeMarco points out, not all projects need as much control. For example, a project that promises to deliver high value relative to (estimated) cost would benefit more from short iterations, testing, and frequent validation that you are making progress than from precise estimates that are likely to be inaccurate anyway.
While “estimate as you go” has many benefits, customers aren’t always pleased—and justifiably so—with the concept of an entirely open-ended budget. There are techniques to calculate a project budget and to establish agile contracts that will give you and your customers a target to aim for and a goal to measure against.
Once you have an overall project target, teams need to estimate tasks. A simple approach that can correct for many of the flaws in estimation techniques is planning poker. Planning poker works well in many cases because it can correct for incorrect assumptions, biases, and false precision in estimates for individual stories or tasks.
In addition to planning poker, affinity estimation provides a framework for sizing stories or tasks by comparing them to similar work items.
Estimation is hard work, and people aren’t naturally good at estimation. Agile estimates don’t promise that you’ll deliver on time every time. Rather, estimates in the context of an agile project help you set expectations better and improve stakeholder’s confidence in your team’s ability to deliver.
What are your estimation challenges? How do you help your team estimate effectively?