<< Idempotency and Two Phase Commit | Home | Professional enterprise JAX-WS in no time at all? >>

Houses of Cards

I have often heard of software systems being compared to a house of cards, meaning that they were poorly built and are ready to topple at any time. The system I am currently helping to maintain has from time to time also been labeled in that way, yet it always manages to go live with quite a few new functions, and apart from the odd all-nighter to fix a few last bugs, it works to the customers satisfaction.

So while I was doing the washing up today, I noticed something. I am well known amongst family and ex-house mates for building what look like unstable piles of washed up dishes, as they dry. Yet I have never ever had a pile collapse on me. Never once have I lost it all. And remember, there are slippery suds involved in holding up these piles!

As I thought a little more about it, it didn't take long to come to the simple conclusion that a pile of washing up is stronger than a house of cards. Cards are uniformly shaped and have no edges or surfaces which help to lock their neighbours in place.  Plates, dishes, cups, pans and cutlery on the other hand can be placed tactically so that they lock together forming a strong structure. Notice in the picture below that the heavy pan is placed at the top!

It still looks ugly though. But as long as its just left to dry it will be safe. Just like our software that is left out in production where it runs and runs and delivers all the time.

Where my piles of washing up do go wrong, are when my inexperienced wife comes along and tries to take it down to put the dishes away. It has been known to collapse at such times (although luckily never spectacularly badly). Similarly, software needs careful hands and experience of how it was built, when taking it down and restructuring it.

Perhaps also relevant to software, is why I build such dodgy looking stacks of dishes. Well I find it the most efficient way. I simply start piling up in the order that the dishes come out of the bowl (please note that my software is designed and planned properly, unlike my dish washing!). What ever comes out of the bowl at that time, finds a good place to be anchored in. Pans get done last, since they are dirtiest and hardest to clean. Just like in software the hardest parts get fixed last because they take the longest to get right. They are put to the side with some water in them to soak away at the hardest parts. And when you are working to a deadline, you don't always have the time to rearrange your pile of dishes and fit those hard parts in, where they would look safe. You just build them in where they fit best. It looks unstable, but you built it and you know the history of why you did it that way. As long as you are involved in the next phase of the project or maintenance, everything will be fine (if you are not, it doesn't matter - see here). It's not ideal, but the software was delivered on time, on budget and it works. And just like with the washing up you don't have to spend your Saturday afternoon in the kitchen.



Copyright (c) 2009 Ant Kutschera

Social Bookmarks :  Add this post to Slashdot    Add this post to Digg    Add this post to Reddit    Add this post to Delicious    Add this post to Stumble it    Add this post to Google    Add this post to Technorati    Add this post to Bloglines    Add this post to Facebook    Add this post to Furl    Add this post to Windows Live    Add this post to Yahoo!



Add a comment Send a TrackBack