Iterative Development
Iterative development
is an approach to building software (or anything) in which the overall lifecycle is
Figure 2.1. iterative and incremental development
Although an iteration can in theory be only for clean-up or performance tuning, usually the partial system grows incrementally with new features, iteration by iteration; in other words,
incremental development
. The concept of growing a system via iterations has been called
iterative and incremental development
(
IID
), although simply "iterative development" is common. Some older process literature [Wong84] used the
Most projects have at least three iterations before a final public release; I've seen a two-year Valtech project composed of close to 20 iterations averaging around four weeks each, and I know of at least one long project with 45 iterations.
Each iteration includes production-quality programming, not just requirements analysis, for example. And the software resulting from each iteration is not a prototype or proof of concept, but a subset of the final system. More broadly, viewing an iteration as a self-contained mini-project, activities in many disciplines (requirements analysis, testing, and so on) occur within an iteration (see Figure 2.2). Figure 2.2. disciplines across iterations
|
|
|
risk-driven |
|
ranking risks |
|
first iteration |
|
use cases and iteration planning |
Client-driven iterative development
implies that the choice of features for the next iteration comes from the client—whatever they perceive as the highest business value to them. In this way, the client steers the project, iteration by iteration, requesting the features that they
currently
think are most
|
adaptive and client-driven planning |
Apply both schemes. Clients do not always appreciate what is technically hard or risky. Developers do not always appreciate what has high business value.
|
mixing and ranking iteration goals |