TL;DR
Most agile frameworks don't really address budgeting directly. Like most other aspects of such frameworks, budgeting is usually an emergent property of a given framework's implementation. That said, estimating an agile budget is often most effective when each outcome-based milestone defined in an agile release plan is budgeted based on a fixed, per-iteration cost multiplied by the expected number of iterations needed to reach the milestone. Then sum all currently-planned milestone costs for a rough whole-plan estimate.
Next, ensure sufficient slack between milestones, and apply any necessary fudge factors for milestones further in the future that are likely to change in scope or may involve either known-unknowns or unknown-unknowns. This is most easily represented as a factor of your iteration-based budget, and often increases with project length. Factors of 1.2 to 4.0, or 1-2 standard deviations from the mean of the schedule range, are pretty typical values. However, the actual values are often heavily influenced by organizational politics, sales/market pressure, and the optimistic or pessimistic bias in the planning process. (Pro tip: pessimistic plans fail less often.)
Since scope is usually the variable constraint in agile frameworks and methodologies, you should try to tie the budgeting process to one or more outcomes rather than a fixed scope of work. Well-run agile projects can forecast budget and schedule within a reasonable confidence interval so long as scope (i.e. how the outcomes are achieved) remains flexible.
How to Visualize Budgeting for Business Agility
In most agile frameworks, budgeting is essentially the intersection of two things:
- An agile release plan. (See Also: more related answers on PMSE)
- Your per-iteration run cost for the team or project.
Here is a Venn diagram that may help with visualizing this:
Additional Considerations
Your agile release plan can and should change throughout the lifetime of the project, although there should be some relatively stable objective to achieve. In other words, even when implementing an agile framework, a project is never expected to be open-ended. However, unlike more traditional methodologies that require "big, upfront planning" (BUFD), within more agile frameworks the "what" and "how" can evolve over the life of the project enabling pivots, managing opportunity costs, and reducing sunk costs.
In a properly-implemented iterative framework, after some initial kick-start period you should always have a working product (or at least a working product increment) at the end of each iteration regardless of whether or not the project is completely "done." That is what allows such projects to take advantage of emergent design and just-in-time planning, extract earned value by shipping viable business increments at almost any time, and succeeding or failing early whenever the product is deemed "good enough" or the project's goals can't be achieved without chasing sunk costs.
Agile frameworks like Scrum rely on scope being the flexible project constraint. If you lock scope, then either schedule or cost will need to become more flexible. A fixed scope makes realistic budgeting extremely difficult since cost and schedule are tightly intertwined in such frameworks, so think in terms of a set of acceptable outcomes rather than "scope" (especially in the sense of highly detailed or predefined design specifications) during project initiation.
Successful Outcomes Don't Always Mean Delivering a Successful Product
Also, try to remember that no project plan or budgeting process can provide an actual guarantee of success. Budgeting, like the rest of project management, provides an estimate rather than guaranteed accuracy. Be sure to clearly communicate that the budget is an estimate based on a set of assumptions. Even a project that is roughly identical to a previous project is subject to force majeure, changes in the market, and other unforeseen or unforeseeable circumstances.
Even a literal money-back guarantee only provides a financial stop-loss; it can't actually guarantee the success of a given project as originally planned. That's why agile frameworks focus on adaptability and meaningful outcomes. Historically, 68% of IT projects fail. From that perspective, even failing at a responsible moment can be viewed as a positive outcome. Agilists often call this "failing early," even though it's more accurate to describe it as successful cost savings rather than failure.
Failing early is technically a success if:
- The project has avoided prospective costs already budgeted for the future when the project can't achieve the desirable outcome. All money saved by ending the project early is thus converted to cost-savings.
- The project doesn't chase sunk costs by adding more budget to the costs already incurred, although not all cost overruns are necessarily a sunk-cost fallacy.
Not wasting budget on an outcome that can't be achieved, with or without changes to scope or schedule, is actually a positive outcome. Changing scope or schedule, or even increasing the budget once the cone of uncertainty has narrowed sufficiently, might make sense if done mindfully and if the changes provides sufficient confidence that the project could then meet an updated definition of success. However, this is called the sunk-cost fallacy for a reason. The cognitive biases that drive the continuation of existing projects beyond any reasonable utility and lead to significant cost overruns that don't provide sufficient return on investment are commonplace.
Apply Agile Principles of Transparency and Flexibility to Budget Estimates
Put another way, just be sure your budget is provided as an estimate, not something written in stone. Don't treat budgeting any differently than the other estimation processes you apply to your project. Whether or not you're using an agile methodology is actually a secondary consideration here. The primary consideration is that a budget estimate is an estimate, and the role of project management is to ensure the most positive outcome possible within the original planning values, and to work with the right people to modify the plan when actual values deviate beyond acceptable levels (however your project has defined "acceptable") from previous planning values.
This is just as true in agile frameworks as any other type of framework. The only functional difference is that applied agile principles make this process more flexible and transparent to everyone involved.
fudge_factors(run_time + capital_costs)
. I provide a detailed analytical approach to this in my answer below.