October 7, 2006

...Learn TDD with Codemanship

Where 2.0, Guv?

One of the most common pitfalls in software design is getting bogged down in technical detail. Over the 60-year history of modern computing, we have learned to live in what might be called solution space where everything is made of bits and bytes, of peeks and pokes, of IFs and THENs, of FORs and WHENs, of heaps and stacks, of classes and objects, and - more recently - of factories and flyweights.

Similarly, a journey from A to B is made of doors and stairs, of pavements and roads, of junctions and crossings, of roundabouts and flyovers, and of motorways and exits, and so on. But when I get into a taxi in the centre of London, I don't say to the driver "I'd like you to drive down to the next junction and turn left, and then drive to the traffic lights and go right". I simply state my desired destination. My chief concerns are:

1. When will I get there?
2. How much will it cost me?
3. How comfortable will the journey be?

In London, our world-famous black cab drivers have to take an exam popularly known as "the knowledge", which requires them to know pretty much every street you're likely to ask them to take you to. Minicab drivers, on the other hand, just need to have a car and be able to drive. You will often find with minicab drivers that you have to direct them to your destination. And you need to keep your eyes peeled along the way. I've been stung a few times in the wee small hours of Saturday morning when I've nodded off and woken up in an area of London I didn't recognise at all.

And you begin to expect it of them. You slip into the habit of saying "okay, go left here; straight across at the roundabout; then left again". And occasionally it pisses the driver off because he knows where he's going, and nobody likes a backseat driver. But he should stop and ask himself why his customers are giving him detailed directions.

For the same reason, maybe we should stop and ask ourselves why many customers on software projects insist on designing the solution for us. Why can't they just tell us where the software needs to get them, and let us do our jobs? Perhaps it's because they've woken up in too many strange places on previous projects and would prefer not to risk it again.
Posted 14 years, 2 months ago on October 7, 2006