Wednesday, August 13, 2008

Software as Bricks

It happens all the time. A discussion flourish about software development as assembling toy bricks. Such a comparison may hold some merit, but as always, it falls way short of providing any actually usable guidance in the day-to-day operations of developing software. And it does little on my ability to argue in the quick’n’dirty one-liner fashion that would save the day on the heated battlefields of water-cooler debates, or allow the boss to admit defeat without loosing face.

We just might, as a matter of intellectual curiosity, exploit this venue a bit. Imagine the seminal brick toy, Lego. If you enter a toy store just about anywhere in the world, you will probably find an entire wall - a department, even - of Lego kits. To know them is to love them. In my childhood -- way too removed from the present day to dwell on -- what you got was a bucket of bricks, as simple as that. They varied in color and size, but that was about it. Then you went home, spilled the lot on the floor and, well, got going. Just like that.

The kids of this day and age (sic!) have a much more, shall we say, augmented experience. All sorts of special kits, blockbuster merchandizing, Bionicle, Mindstorm and whatever else they dream up i Billund, tends to confuse a lot of basic issues, but at the end of the day, you have all these little thingies and you stick them together and something strange or funny or even artful ends up occupying the entire kitchen table just in time for dinner.

And how is this connected to the world of software development? Well, not very much, actually, although it is one the more prolific metafors of this our profession. I think we can all see where it starts: you have all these little bitsy thingies and you stick them together and ... the rest is history, except for the just-in-time-for-dinner part.

To be frank, these bricks are so ripe with metafor, it reeks. But we should not let ourselves get carried away. Below, I have compiled a short list of reasons why software development is not like assembling brick, whatever their make:

  • Software may consist of bricks, thousands of them, but no two are the same!
  • Not only are all the bricks different, they change all the time!
  • Batteries are missing, too!
  • Batteries are not enough, you need a diesel generator.
  • You can not be sure that you need all the available bricks!
  • Or that you got all the bricks you need!
  • You thought a kitchen table would hold the assembly, but what you need is the entire living room floor!
  • Some of them are not even bricks, they are tetrahedroids! How does that fit in?
  • Same goes with them balls!
  • Somebody glued these nine bricks together! Why?
  • And how did that piece of chewing gum end up over there?
  • The kit does not come with instructions!
  • And if it does, they change every time you read them.
  • And if they don't, they are written in sanskrit!

... and the list goes on and on, I suppose. On the face of it, I think we should make a habit of compiling such analogical anti-lists, just so we can rake in debating points whenever we have the need. Not because the original analogy is a bag of useless drivel, but to remind us that it is only that, an analogy, and the reason we made it in the first place, is that we do not have anything better.

DISCLAIMER: I am a dane and LEGO is a danish company, and while I am in no way affiliated with that company, I am very partial to most of what they fancy to send on the market.