Thursday, October 09, 2003

Why software is like a baby

Today I overheard a mother talking about her baby over the phone. The baby had been crying all day and was apparently not well however the mother was just not able to tell what was wrong with it. That's the problem with babies, they have a binary happiness indicator: screaming or not screaming. That tends to rub off on the parents so they become either happy irrepressible champions of their wonderful kids, or screaming beating miserable protagonists of their rotten kids. Both kids and parents alternate between the various states at varying frequencies and seldom is a steady state ever achieved.

While listening to the mother trying to figure out what was wrong with said baby over the phone I was reminded of a software engineer asking a customer or field service person technical questions about their application.

Parent debugging childEngineer debugging program
Is it crying now?Is it still running?
Did you try changing its diaper?Did you apply all the patches?
Did it throw up?Did you get an error message?
Did it have a bowel movement?Did you get a core dump?
Does it keep crying after a bath and feeding?Does it crash after you power off and restart?
Is it screaming and kicking?Is the code thrashing?
Is it lethargic?Is the program slow to respond?
Has it become strangely silent?Has the program hung?

And so it goes on. The evolution of software from its earliest, must buggy days is much like a baby growing up. However unless given the right nurturing it may remain unpredictable, buggy and vulnerable. Much like a baby growing into a kid and eventually an adult. But as we know even adults and mature software are prone to succumb to really nasty viruses and collapse in a useless heap possibly infecting all around them before the do.

A well raised program will give informative error messages, be designed for easy tracing of faults to allow quick diagnosis, and support quick and easy patching for remedy of faults. Moreover it will be well tested, as will patches. The code will be robustly engineered to detect and reject bad inputs or state thus preventing problems from remaining undetected, or causing major unrecoverable data loss and system failure.

So right now as the pointy haired bosses are about to embark on a management offsite I feel like I'm the baby-sitter looking after some software that is undergoing yet another bi-polar disorder episode. Meanwhile the dysfunctional parents are out in the woods trying to find themselves with some primal screaming. Too bad they didn't go for shock therapy...

Oh joy. Pass the Lagavulin by the left hand side because it sure beats baby medicine.

No comments: