Driving a car or riding the bus

Posted by Chris on October 04, 2006

Here is an interesting question. You are at point A and want to get to point B. The problem is that you do not know exactly where point B is. So to help you find it you have a device that always shows you the current direction to point B. You now have two alternatives of getting to point B. You can either take your car and drive there letting the device show you the direction. Naturally you will not be able to just fix the steering wheel in the correct position and take a nap since there will be obstacles in the way, but you will be able to quickly adapt to any detours encountered. The second alternative is to get on a bus that is headed more-or-less in the correct direction. When it starts to deviate too much you can get off it and change to another bus, and if you keep doing that eventually you will get to point B (or close enough to walk).

Disregarding any environmental and economical factors, which alternative would you choose? Most of us, I think, would choose the car. Now compare this to software design. Which one of the two alternatives best resembles the way most people design software? Unfortunately the bus is a lot more common than the car. Requirements are ’set in stone’ initially even though they are not fully known (and they can’t be of course). The developers then try and implement some of the requirements and when they are done they leave it for QA (and/or the customer) to test and give them feedback on the direction. Sure, there are lots of processes and ideas on how to refine the bus trip to make it as smooth as possible, but the fact is you are on that bus and you are not driving. You can only get feedback (or at least react to it) when the bus stops, and as soon as you get on the next bus you are once again working in unknown land until the next stop.

The way we use the car instead of the bus trip in software design is that we increase the frequency of feedback. By testing first, continuously integrating, evolving the design and ‘requirements’ and always communicating with the customer (in fact putting the customer in the passenger seat of our car) we get feedback as often as possible which lets us adapt to the current direction we need to be moving in.


Trackbacks are closed.

blog comments powered by Disqus