Drawing by Jeff Patton
What is iterative and what is incremental development? Even the experts are confusing themselves when describing it. Perhaps our language is an inadequate reflection of reality.
Jeff Patton thinks software should be built the way an artist works. The artist "iterates" on the whole thing and the potential of the whole picture is visible in every iteration from the initial sketch to the final painting. The complete work comes gradually into focus. Patton calls this "iterative" development.
However, this is exactly what Mills and Brooks call "incremental" development. They advocate growing software like a plant. This is a similar metaphor to the way an artist's sketch "grows."
Harlan Mills of IBM first published this concept in “Debugging Techniques in Large Systems” Prentice Hall, 1971. (Any software system should be grown by incremental development.)
Fred Brooks popularized the concept in “No Silver Bullet: Essence and Accidents of Software Engineering” first published in IEEE Computer, April 1987 with the final version published in the anniversary edition of “The Mythical Man Month.”
So Patton has the right idea, but his use of the term iterative development is wrong. Incremental development is iterating on the whole thing (each iteration is a minimal useable feature set that is potentially shippable).
Patton slams the common practice of building one feature completely in an iteration, then a second feature in a subsequent iteration. He calls this incremental development (wrong!). He is out of step with the terminology used by computer scientists over many decades.
Key to the Mills/Brooks concept of incremental development is the idea that every iteration is usable in some way (potentially shippable software). The first Scrum shipped all increments at the end of each iteration and they were used by internal consultants “in anger” to execute on revenue generating customer projects. It was only “potentially shippable” because the Product Owner (Don Roedner) was not ready to release it to the general market.
Patton is not clear on what we meant by potentially shippable software which is that every iteration is useable. “Potentially shippable” was first described by Ken Schwaber in his OOPSLA 1995 paper on Scrum after observing the first Scrum team. This first paper on Scrum is republished in “The Scrum Papers.” Perhaps Ken and I could have been clearer on what “potential shippable software” means.
So Scrum is both interative and incremental development when done properly. Each iteration delivers a fully functional increment, just as a plant works at every stage of growth. If it does this every iteration is “potentially shippable" and in the ideal case is shipped to a set of end users who use it to get real work done and provide feedback.