People talk about agile being iterative, and about it being incremental. Sometimes they use the two words interchangeably. The words do mean different things, and agile is both iterative and incremental, but in different ways.
Iterative is about going round and round. We do something, and then we repeatedly revisit and revise it. Agile is iterative for the product, meaning that we try to create a very rudimentary product and get it out the door, but then continually refine and revise. Each time round the circle we should aim to release the product again. Slowly the product becomes more and more refined.
Incremental is about going up and up—or adding more and more. Agile is incremental for the value we deliver, meaning that the first release of the product delivers a bit of value, the next release delivers a bit more, and so on. At every step we deliver a bit more value—whatever we define “value” as being for this particular project.
The value and the product are different. The product is the thing we make, and the value is the benefit we get from it. By going round and round on the product we get to deliver more and more on the value. Although if we don’t release the product each time our value is limited at best.
So-called waterfall development allowed the product to be built up incrementally, and the result was that there was almost no value until the last piece was put in place.
Agile software development often focuses on being able to iterate on the product. But the reason we iterate on the product is so that we can get incremental value. If a particular project or programme delivered value incrementally without being iterative on the product then I think that would still be a good result—indeed, I would probably still call it an agile project. That’s why I talked before about the importance of getting partial value from partial delivery.