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.
Quote 1
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.
Quote 2
… 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.
Quote 3
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.
The Kicker
When you note the pub date on these papers, you’ll see that it was published in 1975. I was 5 years old.
David,
Checkout the early work of Mills. http://wohlin.eu/Articles/SQM94.pdf. In particular I like this quote
The essence of incremental development relates to the 1930s work of Walter Shewhart on iterative improvement cycles [5]. The X-15 hypersonic jet was developed using in-cremental ideas which were then in NASA’s Project Mercury (probably the first incremental project involving software development [ibid.].
In the early 1970s, Mills contended that the best way to produce software was to design a main program and to gradually develop the rest of the sub-programs level by level [6], with each module added progressively while paying attention to testing and integration [7]. In 1980, Mills reported the successful completion of the US Navy LAMPS project using incremental development to deliver seven million lines of code in 45 increments [8]. The 200 person-year project was completed in four years with monthly deliveries finalised on time and within budget.
Project Mercury was around when I was 5 years old, which says how much older I am then you 🙂
Great post Dave. I am hoping over the next year to get my company moving in this direction.