Saturday 31 January 2009

The benefits of evolutionary design

Creating a well-planned design can be very difficult. Well-planned designs are often over-engineered. This means that a design can be flexible in areas that didn't need flexibility and inflexible in areas that did need it.

With evolutionary design, the design evolves slowly over the course of the development. You begin by coding a small amount of functionality, adding more functionality, and letting the design shift and shape.

Refactoring is an important part of this evolutionary design process. Design improvements are made whenever your code needs them. By having both unit tests and a disciplined technique of refactoring on top of the tests, changes can be made quickly and without introducing defects.

The key benefit to evolutionary design over a well-planned design is that you reduce the amount of work you over- or under-engineer. This in turn leads to an increase in team productivity.