Monday, February 8, 2010

Incremental vs. Iterative Development

I have been in several discussions lately about iterative versus incremental development and there has been a lot of confusion about what each means. I wanted to give my two cents on what I think the differences between the two are.

Incremental development to me is the process of building a whole piece of the solution to its completion and then moving on to the next piece. An analogy that I have used is the building of a house. Using an incremental approach you would build out all of the first floor, including the electrical, plumbing, dry wall, carpeting, etc. before starting anything on the second floor. This way you know that the first floor is complete and ready for the occupants to move in. In software development this would mean completing a subsystem, or a portion of the application, before you start the other subsystems or portions of the application.

Iterative development to me means building a business flow, with the minimum of functionality even, from start to end before adding more features, nice to haves, etc. Using the house analogy you would construct all the framing for a house before you added electrical, plumbing, etc. This way you are sure that all of the framing is solid and the rooms are laid out correctly before you start on the next feature/service.

Incremental and iterative development can co-exist in software development. You could complete one business process with minimal functionality quickly and then start on other business processes. Then you would start working on filling out the functionality of a business process iteratively. This would be incremental and iterative at the same time.

I prefer iterative development because I believe that showing business partners a minimally functioning solution before building out all the functionality gives them the opportunity to change the implementation before it is too costly to make the change. It also means that the business can make a decision that a feature may not be worth the development effort and launch without it.