For your consideration, a paper written by Victor Basili and Albert Turner, Iterative Enhancement : A Practical Technique for Software Development. They make some very good points about iterative feature development, some of which I’d like to call out in this post. Here are some quotes from the paper for your consideration.
Building a system using a well modularized, top-down approach requires that the problem and its solution be well understood. Even if the implementers have previously undertaken a similar project, it is still difficult to achieve a good design for a new system on the first try.
… start with a simple initial implementation of a subset of the problem and iteratively enhance existing versions until the full system is implemented. At each step of the process, not only extensions but also design modifications can be made. In fact, each step can make use of stepwise refinement in a more effective way as the system becomes better understood through the iterative process. As these iterations converge to the full solution, fewer and fewer modifications need be made. "Iterative enhancement" represents a practical means of applying stepwise refinement.
Each iterative step consists of selecting and removing the next task from the list, designing the implementation for the selected task (the design phase), coding and debugging the implementation of the task (the implementation phase), performing an analysis of the existing partial implementation developed at this step of the iteration (the analysis phase), and updating the project control list as a result of this analysis. The process is iterated until the project control list is empty, i.e., until a final implementation is developed that meets the project specifications.
Why I am Quoting this Guy
I splurged with an Amazon gift card I got for Christmas and bought a printed version of Foundations of Empirical Software Engineering, The Legacy of Victor R. Basili. You can get the PDF here. The article on Iterative Enhancement is on page 28.
Professor Basili’s observations make even more sense in light of the project he was talking about, his implementation of a programming language. Can you think of a better problem domain for incremental releases? As soon as I have a new language feature, I want to use it in the definition of yet another feature. Beauty personified.
When you note the pub date on these papers, you’ll see that it was published in 1975. I was 5 years old.