Tuesday, January 24, 2006

Continuous Design

I have been preaching the software design methodology where you release early and release often. After each release, you add just one new feature at a time and then release again. This ensures that you always have a recent working demo available online while you work on the next feature. This is ideal for Open Source projects.

I have seen this called the "spiral", "component assembly", or "incremental release" design lifecycle. From what I can tell from this recent About.com article, it is also called "evolutionary", "emergent", and "continuous" design. Is it all the same thing or are there subtle differences?

Regardless of what it is called, I think it is a good way to go.


kevin Taylor said...

Hi David,

My name is Kevin Taylor and I posted the blog entry on http://java.about.com regarding "Continuous Design." Releasing early and often is one part of this concept. This gives you frequent feedback from your users as to what they want added next. Of course, this changes frequently as they see each new release.

But, the crux of "Continuous Design" is writing code using very simple idioms and architecture. Doing the simplest thing that will work to solve the current problem. Then, as the code needs more complex/sophisticated design patterns, the existing "simple" designs are refactored to accommodate the new complexity.

An example of this is conditional logic. First you may create a simple if/else to handle conditional logic. But, at some point you may start to see the same if/else crop up elsewhere. Or you need to add another else, (if/elseif/else). At this point you refactor the code to use polymorphism or strategy or ...


David Wallace Croft said...

Hi Kevin,

I am on your About.com mailing list. Good stuff.