Posted by Tejus Parikh on October 30, 2006

It’s often difficult to explain the complexities of building software to those who are more used to traditional manufacturing or development processes. Cranking out code just does not relate to building 1000 widgets. Therefore, we’re normally pretty hard pressed to find a way to communicate why projects seemingly always end up being over-budget and late.

This weekend’s experience with a garage door opener leads me to believe that the most applicable comparison is a home improvement project. This was supposed to be relatively simple project. I had a chain-drive opener that went bad, and a new one sitting in a box. Really, this should have involved 4 nuts. But of course, since the openers were from different manufacturers, nothing was compatible. Instead of just having to replace the drive, we replaced the rails, chain, mounting hardware, and the little warning system. Obviously, since I hadn’t planned on a massive overhaul of the system, I ended up having to make multiple trips to Lowes. Eventually, I ended up with a working door, but one that took 3x long and ended up costing a bit more than I planned. Sound familiar?

The real comparison is that like with software development, home improvment projects normally deal with areas of non-expertise. I’ve never installed a garage-door opener before. If I had, I would have done a lot of things differently, probably from the point where I bought the door. Software’s the same way. I have a good amount of experience writing software, but that’s like having a good amount of experience using a screw-driver and a drill. I know how to use the language, I know a lot about the other available libraries, but I’ve never applied them in that manner before. That’s where the real excitement and the challenge lies. Often, what seems simple on the surface opens a rabit-hole. Some times, things are as easy as they seem. You just never know how it’ll turn out until it’s done.

So the next time you’re boss asks what took so long, as them what happened on their last DIY project. It’ll be a good starting point to gain a common understanding.

Tejus Parikh

Tejus is an software developer, now working at large companies. Find out when I write new posts on twitter, via RSS or subscribe to the newsletter: