Iterations and increments explained

These days many people talk and write about iterative and incremental development and most often those terms are used inter-changeably. Some people, specifically Scrum folks, even use the term sprint. Agile software development methods are said to be BOTH iterative and incremental. So what does it mean?


Iterative development

Wikipedia has the definitive explanation on what it means to iterate:

Iteration means the act of repeating a process usually with the aim of approaching a desired goal or target or result. Each repetition of the process is also called an “iteration”, and the results of one iteration are used as the starting point for the next iteration.

In software development the desired goal is of course a shippable software product. So instead of having a big bang one-shot release (as known from waterfall process) the development team comes up with one version, which is immediately iterated into next version. The product is ready as soon as the product reaches good-enough quality level.

Iterative development is good for providing rapid feedback from users, but it’s weakness is that the whole product must be taken into production in one shot. The whole product is iterated all the time. (This of course is in the purest iterative, non-incremental case)

Incremental development

Let’s again borrow the definition from Wikipedia:

Incrementalism is a method of working by adding to a project using many small, incremental changes instead of a few (extensively planned) large jumps.

So what this means is that incremental is what has been called staged delivery for decades. It means you develop one part of the system and when it’s ready you develop the next part. In the purest version, you can first make the analysis and design, then develop first increment then develop the next increment and so on as long as all the features are developed.

The difference and the synergy

The elevator pitch for iterative and incremental development goes like this: iterative means making better something that has been done earlier and incremental means adding new features on top of what has been done before. These two ideas can be used without each other (as shown earlier) but they can be used together as well – which is actually a Very Good Idea as it turns out.

Iterative-incremental method space

Alternative view on iterativeness and incrementalism

As incremental development goes through all the phases of development (analysis, testing, development, design, integration, production) it is a perfect tool to expose all problems in the process. Should the integration be difficult, using incremental process you’ll face it early and repeat it many times so you’ll have to fix the problem, not postpone it into the end of the project (when you’ll be already late).

Iterative process means rework on the existing product, so it doesn’t help that much on the process-side, but it makes the product better. Usually agile teams first come up with a walking skeleton which is an end-to-end solution to the problem but may miss some features. So after getting feedback from customer the skeleton is iterated into next version by adding some muscles onto it.

So we could state that:
- incrementalism improves the process
- iterativity improves the product

Enter agile

So agile methods are said to be both iterative AND incremental. As we learned from previous chapters they are different things and actually we can think of them orthogonal axes in the method space (see picture). Plain waterfall is non-iterative, non-incremental process (have you seen such in reality?) so it is in the lowest left corner. The good-old staged delivery is incremental but not iterative so it is in the lowest right corner.

However, spiral model is highly iterative but not at all incremental so it is in upper left corner. Thus the last corner, upper right, is reserved for agile methods. I’ve drawn it as an area, not a point because there is not just one agile process but many different flavors. The process must be in that area to be agile by definition but the amount of iterativity and incrementalness can vary. This is actually one of the key questions when architecting the process for any given project.

Sprint, increments and iterations

What is a sprint anyway?

In Scrum we use the term sprint. What does it mean, is it an iteration or an increment? The term sprint is merely a fixed timebox, and Scrum doesn’t care whether you are iterating or incrementing your project. Most scrum teams keeps doing both types of work in any given sprint.

A good pattern is to think of it this way: the sprint is one increment in which you do all the activities you need to, from analysis to deployment. Think of it as a release. Inside a release it is good idea to have a few iterations – or internal releases – to make sure your increment will meet the requirements of your customer who will be analyzing your work in the sprint review.


Tags: , , ,