Agile software development practices are predicated on the following tenets as introduced in 2001 in the Agile Manifesto [1]
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Agile development processes rely on experienced, highly skilled people communicating with clients and each other to deliver software that provides the clients with the most value for the money they spend. This requires both developers and consumers of software to accept the reality that things will change over the course of the project and that the software that is eventually delivered may not be the same as that was envisioned when the project was first kicked off.
At any given time, the agile software development team is only working on the feature that the customer currently feels is the most valuable. Estimation is performed by the team (including developers, BAs, QAs and customer representatives) and is only focused on the feature that is currently on deck. At the end of an iteration, the customer has an opportunity to review the implementation to date and can reprioritize remaining features based on changes in their requirements, market or expectations. So estimating beyond the current feature doesn’t really make agile sense.
Unfortunately, the fact that estimation doesn’t make sense for the agile team does not mean it doesn’t make sense for the business. The business needs to see the forest not just the trees. Customers need an idea when their software will be delivered, businesses need to prep the market for new products and features, businesses need to be able to optimize resource allocations across many projects, etc. This of course begs the question of how to perform an estimate for software when you really don’t know exactly what software you’re going to build. As an industry, we’ve been pretty unsuccessful estimating software projects even when we think we have a handle on the end product – how can we be successful with so much uncertainty.
First we accept uncertainty and commit to incorporating uncertainty into our estimates. Once we’ve made that commitment we are then free to pursue one of many top level estimating techniques to help us get our head around a likely range of values for cost and schedule based on what we currently know about the software project. Parametric techniques are particularly suitable for this task especially for an organization that has some historical data from previous agile projects. Parametric estimating models like TruePlanning for Software provide a repeatable framework through which an organization can study their past performances on similar projects (similar number of features, similar market, similar customer, etc) and use what they learn to perform estimates on the project at hand. The amount and nature of the similarities should guide the amount of uncertainty in the estimate. Organizational history can be used to map Story Points or User Stories to a size measurement such as source lines of code, function points or user points. Analysis of performance on past projects can inform decisions about productivity and other project drivers. This information can be used to drive the parametric algorithms to develop estimates for cost, effort and schedule.
Since we have already acknowledged that we didn’t get the question right, it’s unreasonable to assume that the answer will be ‘the right answer’. What we do come away with is a range for cost, effort and schedule which will give decision makers realistic data to work with. If we have properly studied our history and thoughtfully assessed uncertainty, we can present these ranges with a quantifiable degree of certainty.
What process does your organization employ to plan around agile induced uncertainties?
[1] Agile Alliance, “Agile Software Development Manifesto”, Feb 2001, available at www.agilemanifesto.org (retrieved January 2010)
What is great about sprints, is the ability to commit to work. Simply put: commit to work, complete it within the timebox. Other than that, estimation for the teams are worthless...
Estimating tools are used successfully in both agile and traditional development environments. We serve organizations that have more complex development portfolios and processes that span outside of a small development only environment.
Be sure not to throw the baby out with the bath water. Estimation has its place and like it or not you’re doing it anyway. Automated, knowledge-based tools provide structure, repeatability and industry benchmarks that a group of individual developers do not have. To me that doesn’t sound “worthless”.