Every once in a while I have one of those, “Science catches up with reality.” moments. Take, for example, this weekend. I was putting the Christmas lights up on our house. You know, that yearly ritual where an otherwise sane man will risk life and limb in the pursuit of putting more lights on the outside of his house than his neighbor has. I fall victim to this peculiar form of insanity about once every 12 months. So there I was, cursing as I disentangled myself from a particularly aggressive set of C9’s. I was just about done. Icicle lights along the roof line, LED’s along the garage, rope lights arrayed down the driveway, lighted Christmas tree and snowman in the front yard – my chest positively swelled with pride. All I had to do was to plug it in and survey this masterpiece of suburban manhood. I stick the plug in the socket and I hear a “pop!” as the fuse in the snowman blows, and then I look up to notice that half the lights on my roofline are not lighting up. Cue more vehement cursing.
I had broken the first rule of agile development – Test First! Of course, any reasonably competent handyman would have known to try plugging in each strand of lights before beginning the life threatening task of suspending them from the roof – right? As I stood there at the foot of the ladder and contemplated my predicament, It occurred to me that the consequences of failing to test in the real world are a whole lot more painful than in the digital world. It’s really quite amazing that Test Driven Development hadn’t come along much earlier. If you stop and look around, people are doing it everywhere! Doing some woodworking? Measure twice, cut once.
Why did it take so long for us developers to catch on? Perhaps it is just because in the digital world, the consequences of failing to test your work really don’t have any physical pain associated with them. Anguish maybe, but pain? No. Was I going to be in pain replacing those lights? Oh yes.
I’ve always suspected that every developer’s chair should have a Taser installed in the seat. Broken build? Bring on the voltage baby! Maybe a more severe appreciation for the consequences of breakage is what we all need. As I returned to my roofline to retrieve the dead strands of lights, I realized that even the most trivial activities can benefit from the application of Test First or TDD. After all, if you had asked me, I would have described putting lights on the house as anything but a challenging intellectual activity. Hah! now I was the idiot desperately clinging to the frozen eves of my own house, praying that I wouldn’t fall. As my flimsy ladder shifted beneath me, my life flashed before my eyes like a bad ‘B’ movie (very boring – gotta get a new writer) I realized the error of my ways.
To make matters worse, I had a string of lights that would sort of randomly turn off if I happened to jiggle them just right. My tests on the ground would prove they were fine, but then if I moved them a little, they just might just as easily test as bad. What can I do to solve this problem? Test first doesn’t do me any good here. Then I had an epiphany: why not use Continuous Integration! If I leave the lights on while I’m hanging them, then I can always visually see if I’ve created a problem as I’m in the process of hanging the lights. Cool! I can make changes to the layout of the lights based on the feedback I get as I actually lay the strands out. Blow a fuse? No problem, time to rethink that strand arrangement. So now I’ve managed to incorporate two principles of agile development into my process for hanging Christmas lights: Test Driven Development, and Continuous Integration.
I know what you are thinking – this guy seriously needs to get a life.
But honestly, I think it helps to try and find examples of these principles in your daily life. As we focus more and more on changing our fundamental paradigm for software development from waterfall to agile, we need to keep seeking validation in the “real” world. Look to other disciplines, look to the mundane, the everyday things that we do. Check and see if the premises that we use for Agile Development apply elsewhere. So, the next time you find yourself facing one of those everyday challenges, take a moment to reflect on whether the application of a few agile principles might be just the thing to help you out. And who knows, you might actually get those Christmas lights working…
Merry Christmas and Happy Testing!