Concept: Iteration
This guidance describes the basic concept of iteration and its purpose, most notably in software development.
Relationships
Related Elements
Main Description

What is an Iteration?

An iteration encompasses the development activities that lead to a product release-a stable, executable version of the product, together with any other peripheral elements necessary to use this release. So a development iteration is in some sense one complete pass through all the disciplines: Requirements, Analysis & Design, Implementation, and Test, at least. Note that evaluation criteria are established when each iteration is planned. The release will have planned capability which is demonstrable.

The duration of an iteration will vary depending on the size and nature of the project, but it is likely that multiple builds will be constructed in each iteration. One well-known approach is the continuous integration: as unit-tested components become available, they are integrated, then a build is produced and subjected to integration testing. In this way, the capability of the integrated software grows as the iteration proceeds, towards the goals set when the iteration was planned. 

Iterations and releases allow a better usage over time of the various specialties in the team: developers, testers, and so forth. Regular releases let you break down the integration and test issues and spread them across the development cycle. These issues have often been the downfall of large projects because all problems were discovered at once during the single massive integration step, which occurred very late in the cycle, and where a single problem halts the whole team.

At each iteration, artifacts are updated. It is said that this is a bit like "growing" software. Instead of developing artifacts one after another, in a pipeline fashion, they are evolving across the cycle, although at different rates.

Another characteristic of an iteration is to be timeboxed, mening the schedule for an iteration should be regarded as fixed, and the scope of the iteration's content actively managed to meet that schedule. 

Why Iterate?

Traditionally, projects have been organized to go through each discipline in sequence, once and only once. This leads to the waterfall lifecycle:

Diagram show one iteration going from Business Modeling to Deployment

This often results in an integration 'pile-up' late in implementation when, for the first time, the product is built and testing begins. Problems which have remained hidden throughout Analysis, Design and Implementation come boiling to the surface, and the project grinds to a halt as a lengthy bug-fix cycle begins.

A more flexible (and less risky) way to proceed is to go several times through the various development disciplines, building a better understanding of the requirements, engineering a robust architecture, ramping up the development organization, and eventually delivering a series of implementations that are gradually more complete. This is called an iterative lifecycle. Each pass through the sequence of process disciplines is called an iteration.

Diagram shows 3 successive iterations, each one going from Business Modeling to Deployment.

Therefore, from a development perspective the software lifecycle is a succession of iterations, through which the software develops incrementally. Each iteration concludes with the release of an executable product. This product may be a subset of the complete vision, but useful from some engineering or user perspective. Each release is accompanied by supporting work products: release description, user documentation, plans, and so on, and updated models of the system.

The main consequence of this iterative approach is that the work products, described earlier, grow and mature over time, as shown in the following diagram.

Diagram described in accompanying text.

Information set evolution over the development phases.

Minor milestone

Each iteration is concluded by a minor milestone, where the result of the iteration is assessed relative to the objective success criteria of that particular iteration.

Iteration and Phases

Each iteration within a phase results in an executable release of the system.

Each phase can be further broken down into iterations. An iteration is a complete development loop resulting in a release (internal or external) of an executable product, a subset of the final product under development, which grows incrementally from iteration to iteration to become the final system.