Saturday, February 26, 2005

Creating space for evolutionary design

Fowler seems to be observing what many have been using as an objection to the "let's use evolutionary design for everything". Good technical leadership (as opposed to dictatorship - do not confuse the two) is required for successful software projects, particularly those above a certain size. In one of his examples, a problem where a project had multiple solutions to the same problem was fixed by adding an 'architecture team that forged a base approach to these problems'. He then goes on to say that in fact he thinks it is "Continuous attention to technical excellence and good design enhances agility." that is needed. Well yes, and that requires the team need to be able to spot better solutions or identify unwanted divergence[1] in the existing solution. That's hard across a code base where your team can't keep it all in their heads or where the collective understanding is spread across too many teams to make a query efficient.

In larger projects that often means you need a team that addresses the macro structure. They are needed to ensure that the project establishes and looks after the load bearing walls. After all, on larger projects it is these load bearing walls that end up delineating the space within which evolutionary design can occur.

[1] sometimes you want divergence, because the original solution has reached its limits.