This post originated from an RSS feed registered with Agile Buzz
by Keith Ray.
Original Post: Incremental Development
Feed Title: MemoRanda
Feed URL: http://homepage.mac.com/1/homepage404ErrorPage.html
Feed Description: Keith Ray's notes to be remembered on agile software development, project management, oo programming, and other topics.
Imagine that you are developing version N+1 of a software application that has a document format that have to be upgraded to handle the new data that version N did not have. Pretend it's a relational database; you will have to add tables and columns, etc.
One way to handle this is to imagine all the possible transformations you will need to make to the database, and implement them. Here's a list partially taken from Refactoring Databases: Evolutionary Design by Scott W. Ambler and Pramod J. Sadalage.
Add Column
Add Table
Add View
Drop Column
Drop Table
Drop View
Change Column Type (converting values)
Change Column Values
Change Column Format
Introduce Calculated Column
Introduce Surrogate Key
Merge Columns
Merge Tables
Move Column
Rename Column
Rename Table
Rename View
Replace Column
Replace One-to-Many With Associative Table
Replace Surrogate Key with Natural Key
Split Column
Split Table
Implementing every feature in that list (and the other features I didn't mention) will take a while. It gets you a nice, complete file-upgrade library. But we're not in the business of developing libraries, we're in the application business. If you implement every feature, many of them will probably not be used by your application. Waste.
The other way to handle this is to proceed with the development of version N+1 of the application. Whenever you need to do one of the above transformations, you implement it, but only what you need. You get the application delivered sooner, because you're concentrating on customer value. You also have a file-upgrade library that does just what you need.
One of the teams that I worked did precisely this, and choose the incremental approach. It turned out we only needed a few of these features in our file-upgrade code. We did brain-storm a list of all the transformations might need, but we only implemented the ones we needed when the need arose. No waste.