There seems to be considerable debate and confusion surrounding the concept of estimation as applied in the agile world. Many appear to argue that estimation has no meaning outside of the agile team, but sponsors and stakeholders need something to base their decisions on and estimation is a key component of it. Perhaps we need to reengineer our definitions and objectives at the higher level.
Typically, management wants to know how much X will cost and how long it will take to deliver before making the investment; where X is some bundle of deployed functionality with an associated business value. Not an unreasonable request in a traditional environment where the application is the focus of attention. The investment decision is how much greater is the value than the cost (the ROI). Unfortunately, the estimation process is subject to considerable uncertainty prior to the initial stages of architecture and design (the uncertainty decreases with subsequent stages but does not reach zero until completion and deployment – and then the estimation of the O&M stage begins) – not a good foundation to base investment decisions on.
If we change our focus from applications to delivering business capabilities and adopt an agile development process, the concept of estimation changes as well. For example, in traditional (stovepiped) development much of the development is actually producing redundant functionality (in terms of delivering business and technical capabilities), but this is obscured by the focus on the app. For example, all apps provide error handling and audit logging as well as security (authentication and authorization) – how many times have these been (re)developed? The same applies to business-related capabilities. If we can take a broad view of the capabilities required and identify sources for providing them, much of the development may be avoided altogether. This, of course, is the benefit from adopting a SOA approach. If we adopt an agile development methods and establish an agile team with an associated cadence, the estimation question should be something more like: how much value can we produce in a given amount of time? Given that the team has a cost for a given period of time (say, a year), and each delivered business capability has a known value, we can still make investment decisions – what is the net value produced from the investment cost.
Economics would say you should invest up to the point where the marginal value derived equals the marginal cost of producing the next increment of functionality (stories, capabilities). From this increments perspective, we should expect the marginal value to be decreasing – because we are developing from the product backlog in order of priority – so we build the highest valued items first. Marginal cost should be flat or decreasing as well – the cost of the team may be constant, but the cost of producing the next item may go down as we build up and consume more (pre-existing) shared services.
So, the investment decision changes from: is it worth building this app? to is it worth funding this agile development team for a year? This approach can be applied to determine how big the team should be and even how many teams should we engage. The value delivered should be maximized because the most valuable capabilities are delivered first (along with the capabilities they are dependent on). This should hold even if the priorities change because the product backlog embodies those priorities.