Agile has been most widely used in “product” development environments and less widely used in “project” development environments. The difference between those two environments is not widely recognized. Of course, this is not a totally universal, black-and-white distinction; but, in general:
- Products are less deterministic and the business model is usually a little more open-ended. For example, a company might say that we want to develop a product to satisfy “X” market need (where that market need may only be generally defined and might need to be validated) and we’re going to invest $X to fund a team for ongoing development to support that product development initiative.
For many products, it’s an effort that simply goes on-and-on without end to provide ongoing support and enhancements for the life of the product. Products are generally somewhat speculative and might require a significant amount of innovation particularly if it is something that has never been done before. For that reason, a product development effort is very well-suited to an Agile development process.
The business model behind a product development effort is typically based on a projected return on investment (ROI) that the decision to invest $X in the ongoing development effort will provide an acceptable return from the profitability that the product will generate over a period of time.
The decision process associated with a product development effort is generally focused on prioritizing what features should be added to the product to provide the highest level of customer satisfaction and profitability. That decision process is ideally suited to an agile development process.
- Projects are typically more deterministic and less speculative. Very few development teams are given a “blank check” to do some kind of project without having some expectations of what the project will accomplish, what it’s going to cost, and what the schedule will be.
The business model behind projects is also typically very different. A company typically has a given amount of funding to invest in projects and some kind of project portfolio management approach is generally needed to determine the appropriate mix of projects that will provide the greatest overall benefit. In order to make that decision, something must be known about the expected results, costs, and schedules of the projects in that portfolio and there is an ongoing need to monitor the performance of those projects to see if they really are going in the right direction to provide the return that was expected.
The process associated with managing a “project” is also typically different…the general nature of the features the “project” will provide would generally be much more well-defined prior to the start of the project, there would typically be some expectations about what the cost and schedule of the project would be, and it probably wouldn’t be completely open-ended to add features as a “product” might be. These are key reasons why it is more difficult to apply an Agile development model to projects than it is to products.
Applying Agile principles and practices in a “project” development environment rather than a “product” development environment can be a bit more challenging but it definitely can be done. Agile works best where there are no constraints on costs and schedules and the primary goal is to add features to maximize customer satisfaction (product model). When you introduce constraints on costs and schedules (project model), this is the area where it is many times appropriate to use some kind of hybrid managed agile approach to meet the competing demands of a highly flexible and adaptive development approach and the predictability of meeting cost and schedule constraints that is often demanded in a project environment.
The Hybrid Agile Development Approach I’ve described in one of my other posts is an example of how this can be done. It involves wrapping a “shell” around an Agile development process that can be as thick or thin as you want it to be to provide a sufficient level of planning and predictability to meet the needs of the business environment while retaining a lot of flexibility and adaptivity within the development process.