TRUSTED ADVISOR

What is the Difference between Agile and Iterative Development?

September 2012

Scope of this Report Like many discussions in our profession of , any answer to this question is constrained by the imprecise and cavalier use of words and language such that many authors and experts carry around different definitions and examples of agile and iterative development in their heads. This means that, to many, the broad definition of one of these terms encompasses the broad or narrow definition of the other. To some, this means that the terms can be used interchangeably. Others who believe that the terms are very close in scope are not so comfortable as to use one without the other and fall back on always using them together as in “agile and iterative development” meaning a continuum of overlapping practices.

For the purposes of this report, we will adopt and test the hypothesis that agile development and iterative development are different, look at the characteristics they share and don’t share and then, in conclusions, either accept or reject the hypothesis.

As ever, for these short reports, we assume that the reader is broadly familiar with or can research basic terms.

Definitions

Agile Development (Wikipedia) is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self­organizing, cross­functional teams. The Agile Manifesto introduced the term in 2001.

Iterative development (Cockburn) is a rework scheduling strategy in which time is set aside to revise and improve parts of the system. The alternative strategy to iterative development is to plan to get everything right the first time.

Incremental development (Cockburn) is a staging and scheduling strategy in which various parts of the system are developed at different times or rates and integrated as they are completed. The alternative strategy to incremental development is to develop the entire system with a big­bang integration at the end.

Page 1 of 4 Iterative and Incremental development (Wikipedia) is any combination of both iterative design or iterative method and incremental build model for development. The combination is of long standing and has been widely suggested for large development efforts. During software development, more than one iteration of the software development cycle may be in progress at the same time and this process may be described as an "evolutionary acquisition" or "incremental build" approach. The relationship between iterations and increments is determined by the overall software development methodology and software development process. The exact number and nature of the particular incremental builds and what is iterated will be specific to each individual development effort. Iterative and incremental development are essential parts of the Modified waterfall models, Rational (RUP), (XP) and generally the various agile software development frameworks.

Different? Testing the Hypothesis

Consideration of these carefully selected definitions suggests that some order may emerge from the chaos. We seem to have passed a first test of our hypothesis of difference in that the two terms can be defined separately. Moreover, the definitions above suggest that agile development can be considered as being “based on” iterative and incremental development which in turn is “part of” the various agile software development frameworks (as well as several other software development frameworks which may or may not be considered agile depending, again, on your personal definition set). The picture which comes to mind is of iterative development and increment development being two different types of brick that are used in building agile frameworks.

The next test of our hypothesis is to consider whether iterative development is an essential ingredient of all agile frameworks. If all agile frameworks require iterative and incremental methods then perhaps iterative and incremental methods are only parts of agile and do not have usefulness outside of an agile framework. Broadly, as Wikipedia states, the basic idea behind the agile method is to develop a system through repeated cycles (iterative) and in smaller portions at a time (incremental), allowing software developers to take advantage of what was

Page 2 of 4 learned during development of earlier parts or versions of the system. If we consider the following Agile software development methods, in each case it is possible but not plausible to make a case that they do not require iteration:

. . Agile Unified Process (AUP) . Crystal Clear . Dynamic Systems Development Method (DSDM) . Extreme Programming (XP) . Feature Driven Development (FDD) . Graphical System Design (GSD) . (development) . Lean software development . Scrum . Velocity tracking

We must conclude that a methodology is not agile if it is not iterative. Iterative is an essential part of agile.

This conclusion challenges our hypothesis. So, let’s examine the question from a slightly different perspective. If a methodology is iterative, is it necessarily agile? The classic spiral methodology is clearly iterative but few would claim that it is agile. Few would argue that waterfall is iterative but many, including us, would argue that most modern implementations of waterfall have some iteration built in. As we both away from classical definitions, we start to run back into the definitional cloud. XP is an interesting case in point – even in this paper, Wikipedia has implied that it is not agile while we have asserted that it is agile. If we take one part of XP, pair programming, it is arguable that this is iterative but that the iterations are so short in time that development is more or less continuous.

This nature of pair programming leads to an important distinction. A key difference between agile and iterative (with thanks to Sandy Mamoli) is the importance of the involvement of the customer in agile iterations. This is probably the single most important differentiator between agile iterations and non­agile iterations.

We assert that it is reasonable to conclude that methodologies can be iterative without being agile.

Conclusion

Agile development and iterative development are different. Iterative development is one characteristic of agile development but there are other equally important characteristics such as customer involvement and incremental development which are not necessarily features of iterative development alone or iterative development as it is included in other methodologies.

Page 3 of 4 Sources

Craig Larman, Victor R. Basili (June 2003). "Iterative and Incremental Development: A Brief History". IEEE Computer (IEEE Computer Society) 36 (6): 47– 56.doi:10.1109/MC.2003.1204375. ISSN 0018­9162.

Dr. Alistair Cockburn (May 2008). "Using Both Incremental and Iterative Development". STSC CrossTalk (USAF Software Technology Support Center) 21 (5): 27–30. ISSN d0000089 http://en.wikipedia.org/wiki/Agile_development http://en.wikipedia.org/wiki/Iterative_and_incremental_development

“Should we choose Agile or Iterative development?” Sandy Mamoli, http://www.nomad8.com/page0/files/agile_or_iterative.php

“Agile and Iterative Development: A Manager’s Guide,” , Addison Wesley, 2003.

Page 4 of 4