Wednesday, October 10, 2007

Design evolution

There are two significantly different approaches to the SW design (or SW architecture in small), evolution and revolution approach. Under evolution approach I understand creation of simplest possible solution that will work and satisfy requirements and then evolving it over time. Revolution approach will include planning phase which is much longer than in evolution case and therefore will bring some bigger architecture/design parts up front.

You can think about tree search algorithm, deep search and wide search, deep search is like quick prototyping or tracer bullets (copyright pragmatic programmers), wide search will solve one level of design at time.

So, in short, I really hate the design revolution, it is definitely needed sometime but evolution is much better.

I'm involved in the project where whole system is not even run, but we already have megabytes of the source code with 100 different features inside, but no end2end usecases are implemented yet.

It is always a trade off in some sense, evolving design is very hard, sometimes I'm thinking that I would better spend more time on this particular level (wide search) than going down or up (deep search). But most of the time it's bed temptation.

There are some clear prerequisites for the design evolution - aka refactoring, and it is:

GOOD UNIT TESTS

I can't really express how important it is. Without the unit test coverage system can't evolve, and to be honest sometimes we need to do a revolution to enable evolution.

Hm...

No comments: