July 19, 2006

...Learn TDD with Codemanship

Chicken. Egg. Architecture. Code.

Here I am again, banging on about why I gave up calling myself an 'architect'...

The 'a' word (that's 'architect', by the way - not 'agile') comes with enough baggage to sink a cruise liner. People have very definite preconceptions about what is architecture and what they can expect from an architect. And, like dried-in blueberry stains, these preconceptions are deadly difficult to shift.

By far the most popular attitude towards architecture is that old favourite excuse for not writing any code:

"We need a detailed map before we can take the first step on our journey"

Which sounds quite reasonable, on the face of it. Basically, they're saying "give us an architecture and we'll start writing code". We're in deepest Big Design Up-Front jungle here. Everybody is looking to the architect to make the key design decisions for them.

Interestingly enough, these usually turn out to be exactly the same people who - when you present them with a well-defined architecture - are the first ones to say "we don't agree with your architecture", and will tie you up in months of arguments about the tiniest and most inconsequential details of the design.

You're damned if you do and damned if you don't. Don't define the architecture, and they'll sit around with their arms folded saying "we're waiting for the architecture". Give them an architecture, and they'll waste even more time picking it to pieces - because, let's face it, it wasn't invented here. They want to do the design, but they don't want the responsibility of being the designer. Either way, the project will be delayed, and it will be your fault because you either:

a. Didn't produce an architecture fast enough, or
b. Produced a "rubbish architecture that needed to be completely redesigned"

In both instances, they won't be following your design (and that's a promise). So why bother creating one in the first place? What's the "get out of jail free" card you can play if you get caught in this Catch 22 situation?

I find that this magic trick is designed to impress managers who might not be aware that you can deliver working software without defining the architecture first. Like all magic tricks, it's not so impressive when the audience knows how the trick is done. It pays to educate them, believe me.
Posted 1 hour, 4 minutes ago on July 19, 2006