This blog is no longer being maintained, please go to The missing link of Agile instead

Sunday, May 03, 2009

Delivering the code is like doing the laundry

I hate doing the laundry.. it's definitely in the top 5 of housework activities I hate.. Recently I talked with my friend about - no, not about doing the laundry ;) but nonetheless the topic came around. He was actually amazed how might I not like this particular activity - 'cause in his eyes it was nothing more than putting your dirty stuff to the washing machine, switching it on and doing nothing for an hour or so. I couldn't answer right away so I decided to focus next time I'm doing the laundry on what exactly I don't like about it. Identifying the precise reason behind reluctance to a certain thing or activity is after all the first step to overcome it ;)). Then the day came - stuff started to pour out of the clothes basket (as usual) and I was forced to clean this mess up.. To spare you the details, the list of activities being part of doing the laundry is:

  1. sorting the laundry
  2. stuffing it to the washing machine
  3. going to the market because you forgot you were low on the @#$#@ washing powder
  4. taking the laundry out and hanging it on a dryer
  5. collecting the laundry after it dries
  6. ironing (personally at this point I'm too pissed about the whole activity and skip this point)
  7. folding clothes and putting them to the drawers, wardrobe or wherever they should be stuffed..

So this basic task is as a matter of fact damn strategic operation ;] And that's the precise reason why I hate doing the laundry :) (And will probably continue to not like it :]) At this point you must already be wondering "what the hell is this guy prattling about?" Let's begin a second story then! ;)

Recently I had a small discussion with my colleague about the (un) importance of testing. He defended the concept of testing being time-consuming and thus not acceptable in software business. He represented the old school of "yes I know it's important but we don't have time for this stuff we need to get the implementation fast". What drew my attention was the last part of this sentence "we need to get the implementation fast". As if in the software business we were responsible to push the code out of the door and not give a damn where/when/what it'll be used (for). This is not the first time I hear this opinion - software developers too often forget that the code is not what we produce (yes, I know it's easy to see it this way). Our job is however do deliver functionality to the client and not the crappy, low-quality kind of functionality which she/he never wanted. The high-quality and precise reflection of her/his requirements (which she/he might have not even been aware of.. that's the hard part).
When unit testing is not the elementary part of software development the whole activity of delivering a single requirement consists of:

  1. requirements elicitation
  2. coding
  3. QA testing
  4. fixing the code
  5. QA testing
  6. deployment
  7. client finding bugs (this is the optimistic version where the software actually reflects her/his requirements)
  8. fixing the code
  9. deployment

Finally what's the resemblance between doing the laundry and delivering the code, you ask. There is a clear tendency for both to be interpreted too narrow! :)

Just like doing the laundry is more than putting clothes to the washing machine,
delivering the code is more than coding the implementation.