The growth of a feature

For some time I have been looking for the time to post a general picture of the design and programming approach I have been trying in several projects, the life-cycle for a single feature would be depicted like this:

The main points here are:

  • Functional capacity is accumulated and maintained in time as iterations are done.

  • Each iteration ends with a releasable, production-grade slice of functionality from each feature selected for version N.

  • Each iteration ends with a useful version from the customer perspective so that if the project ends at that time, there is an up and running subset of capacity.

  • RTM date planned accordingly to a chosen capacity level.

  • The design is always in flux, even after RTM N. Actually at RTM timepoint there is a frozen branch in the version control system for the shipped bits, but the mainline version continues in flow.

Part of the background of this life-cycle is explained by the following post:

Organic and evolutionary software design – a metaphor http://blogs.msdn.com/marcod/archive/2005/04/14/TheEmbryo.aspx