is a powerful iterative process of incremental delivery
in which an entire business solution is constructed, validated, and accepted package by package in a series of iterations, where each iteration delivers an operational and functional subset of the total evolving solution. When the last package has been integrated and delivered in this fashion the application is considered complete.
But, why is continuous integration and incremental delivery so powerful?
It turns out that unmanaged risk is the source of all project problems
. And, since risk is a measure of uncertainty, our focus must be on reducing this uncertainty.
After reuse, nothing reduces uncertainty as simply and as effectively as customer usage.
Everything else is merely a weak approximation.
As a result, the use of high frequency iterations in the manner illustrated above has the following benefits:
- Allows progress to be defined in terms of actual customer capabilities that can be touched and experienced, rather than by often abstract technical or project oriented stages, and thus serves as a practical progress management tool
- Creates a momentum of success since new tangible value is available (typically) every few weeks
- Ensures an operational subset of the solution is always available, i.e., the most recent failure free iteration
- Allows the proposed benefit stream to be realized as early as is feasible
- Facilitates the transfer of ownership from the developers to the customer—a critical step for success
- Closes expectation gaps—which may have nothing to do with the stated requirements but only surface when customers actually experience something
- Identifies defects very early in the project life cycle which substantially reduces project costs while improving customer satisfaction
- Increases scheduling flexibility by permitting the delivery sequence to be more easily altered as conditions warrant
- Isolates problems to the current package being integrated, thus dramatically reducing correction and reintegration costs and schedule delays
- Promotes a high degree of parallelism in scheduling that can dramatically reduce overall project calendar time
But, how do we define these iterations?
This process starts with the packaging plan which captures the size, scope, dependencies, and complexity of the packaging structure and from which the resulting iterations can be dynamically assembled. (For more, see the discussion of Glue and its information model
Packages should be small, functionally independent business-centric feature sets. In general, it is important to define packages and the packaging plan so as to maximize:
- Tangible business value to the enterprise
- Momentum of success, especially early in the project
- Early problem detection and especially the validation of architecturally significant requirements and solution components
Finally, it is important to organize and sequence the packages so that they maximize the total return across all benefit streams for the enterprise.
One observation on the size and scope of a package: Size is important, because ideally a project manager will almost always prefer a greater number of smaller packages, rather than only a few large packages. This is for three reasons:
- Allows packages to move more rapidly through the implementation process (typically, every two to four weeks), which creates a momentum of delivery and success
- Presents a smaller conceptual “footprint” to the customer so that it’s content is easier to understand, embrace, and accept
- Increases delivery sequence flexibility by permitting more granularity for rearranging packages to better accommodate changes in project and user priorities, unplanned scheduling contingencies, delays in other packages, etc.
While there are many benefits to this incremental approach to solution delivery, one simple and very powerful benefit is that by chunking the solution delivery one can dramatically reduce sizing (or scoping) risk. This risk is particularly prevalent in situations where there is a high degree of solution complexity, inexperienced teams, unknown or unproven technologies, etc.
The key principle is that by increasing the customer delivery points we increase the effective resolution of the solution delivery process, which quickly and routinely flushes out illogical, missing, or incorrect requirements and expectation gaps, so that rework, delay, and overruns are substantially reduced, while significantly increasing the ultimate quality of the total delivered solution.
Finally, this approach of continuous integration and incremental delivery implies two distinct project management skills:
- How to manage each cycle, i.e., the requirements specification, solution construction, and validation of the feature set or functional chunk associated with that cycle
- How to manage across cycles, i.e., the synchronization, coordination, and integration of each new chunk into an evolving and conceptually whole solution