Scrum, like all of the agile processes, is both iterative and incremental. Since these words are used so frequently without definition, let’s define them.
An iterative process is one that makes progress through successive refinement. A development team takes a first cut at a system, knowing it is incomplete or weak in some (perhaps many) areas. The team then iteratively refines those areas until the product is satisfactory. With each iteration, the software is improved through the addition of greater detail.
For example, in a first iteration, a search screen might be coded to support only the simplest type of search. The second iteration might add additional search criteria. Finally, a third iteration may add error handling.
A good analogy is sculpting. First, the sculptor selects a stone of the appropriate size. Next, the sculptor carves the general shape from the stone. At this point, one can perhaps distinguish the head and torso, and discern that the finished work will be of a human body rather than a bird. Next, the sculptor refines her work by adding detail. However, the sculptor is unlikely to look on any one area as complete until the entire work is complete.
An incremental process is one in which software is built and delivered in pieces. Each piece, or increment, represents a complete subset of functionality. The increment may be either small or large, perhaps ranging from just a system’s login screen on the small end, to a highly flexible set of data management screens.
Each increment is fully coded and tested, and the common expectation is that the work of an iteration will not need to be revisited. An incremental sculptor would pick one part of her work and focus entirely on it until it’s finished. She may select small increments (first the nose, then the eyes, then the mouth, and so on) or large increments (head, torso, legs and then arms). However, regardless of the increment size, the incremental sculptor would attempt to finish the work of that increment as completely as possible.
Scrum and agile are both incremental and iterative. They are iterative in that they plan for the work of one iteration to be improved upon in subsequent iterations. They are incremental because completed work is delivered throughout the project.
To better illustrate the differences between iterative and incremental, let’s consider building a dating website iteratively but not incrementally. To do this, the team would build a little of every part of the site—profile management, searching, ads, etc. The team would then revisit all parts, improving each.
The team would then revisit all parts again, making further improvements. In this purely iterative way, the entire site is getting a little better.
Next, consider developing the same site with a purely incremental, but not iterative process. If a dating site were built incrementally, the team would build and perfect profile management before starting on any other part of the site. They would then build and perfect a second area, say searching, before moving onto the third area. Each functional area would be made perfect before the next area was started.
Neither iterative nor incremental is all that great alone. But together—as they are with Scrum—they are fantastic.