TDD software is an evolved work of art, beautiful like an organically grown crystal.
Compare that with a system that is designed by a software architect. Architecture is about drawing lines, and encapsulation. It is about understanding current and future needs and using that understanding to define the edges of a system, how they should interact, and which pieces should be interchangeable.
Software designed by an architect is like a piece of machinery. It has lots of moving parts, which interact in well-defined ways.
A TDD system that is under the guidance of an architect will be better than one which is not. Similarly, an architected system that is implemented using TDD will be better than one which is not. TDD and architecture are complementary techniques.
At a small scale, the distinction is not as important. For a small system, TDD can evolve something very nice, with limited architectural input. At larger scales however, someone needs to be looking at the big picture. You simply cannot evolve the design of a machine, or a house.
Getting to my point...
It bothers me that none of the Agile techniques stress the need for the role of architect. They assume that you can put together a group of equally skilled programmers and the design will evolve. This is true to an extent, but TDD and similar techniques can only take you so far. At some point, you need someone who can see the "big picture".

2 comments:
exactly what we experienced. TDD can not bring you anywhere in a midsize project. read about controversial ideas of Jim Colien here: http://oo.antville.org/stories/1748233/
Definitely, role of architect in Agile is not something which is well thought.
I agree with you that community to easy discard the need for architect, associating architecture with upfront planning -> waterfall
Nice blog post!
Post a Comment