Building Software is Like Buying a Puppy
These thoughts were originally posted at http://ardentdev.com in 2011. I’ve moved them here in order to repurpose that domain for a software development podcast.
Scott McNealy and Scott Hanselman have both said that open source software is free like a puppy, but a lot of open source software is free like a mature housebroken dog you get from a friendly neighbour. Building software, on the other hand, is like buying a puppy. A really young puppy that’s not housebroken. With its tail held on with tape and wire. And it probably started out as a dire wolf or a cat or a gerbil.
It’s exciting to buy a new puppy. You envision a blissful future with walks in the park and playing fetch at the lake. You aren’t thinking of the late night walks in the blistering cold or trips to the vet. We build software thinking of all the ecstatic users who will flock to our creation. Our euphoria causes us to minimize in our minds the pain of the support calls, the server maintenance, the bug fixes, the security patches, the Cyber Monday web site failures, and the never ending list of nice-to-have features that won’t make it into the first release.
When an enticing software project is staring at you with those big puppy dog eyes, try to remember the following points.
Puppies Need Attention
I can think of two software projects I worked on in my career that reached a stable feature set and remained in active daily use without intervention for months or years at a time. Most software needs some level of care and feeding whether it’s bug fixes or investigating run-time errors or replacing a failing hardware component or renewing a license. Anything nontrivial that you throw up on a server or give out to users is going to generate work for you in the future if people start using it.
More than a decade ago I took over a small software product. If I recall correctly, a license was $150 and an annual support contract was $80. I stopped selling licenses and support for that product 5 or 6 years ago yet 2011 was the first year I didn’t receive at least one request for help from someone.
Puppies Have Ongoing Costs
Software is never truly free of cost. Delivery of software costs something even if it’s trivial at low volume. If you host software as a service, you have server and bandwidth costs along with storage for backups, web site hosting, and domain name registration. Even some little open source utility you release on a whim requires some bandwidth for downloads. In some cases you can offload those costs to someone else (e.g., put projects on GitHub) but the costs still exist.
And remember that software requires attention. Unless you personally are doing all the work out of the goodness of your heart, someone is getting paid to pay attention to your little puppy.
Puppies Can Be Sickly
Somewhere right now someone is releasing software with bugs in it. “Known Issues” is a whitewash of a phrase that tries desperately to make it sound like the team behind a software release is really on top of things, but it is really an admission that a release is flawed or incomplete or imperfect by someone’s standard. Known issues lists are a well-established tradition in the ritual of releasing software and I’m OK with that as much as I cringe to ever see a Known Issues list.
The more problematic yet equally well-established tradition is releasing software rife with unknownissues. There are plenty of best practices for increasing your confidence in the quality of your software before releasing, but bugs still make it into software that was considered ready for prime time. People who take seemingly healthy pups home from the SPCA aren’t expecting emergency visits to the vet the next night. Or for the puppy to refuse to eat. Or for the puppy to violently attack the cat. But it happens sometimes. When you unleash your puppy unto the world, be prepared to deal with an emergency if one arises.
Puppies Can Invite Over Some Unsavoury Friends
I’ve always been a little weirded out by those little pet doors. A door that lets your pet come and go freely can just as easily let other animals come and go freely. Every piece of software you deploy is potentially a little door into your database, your network, or your file system.
Your software can be up and running for months or years and then one morning you get a frantic 5am phone call from your database administrator saying your database records are gone except for one row full of profanities.
Before you roll out a piece of software, ask yourself what you will do if a critical security vulnerability is discovered. This is especially important if you are outsourcing development work as the original dev team members may not be readily available to address a critical issue quickly and an attack can happen anytime. You are never truly safe. It might be years before someone discovers you have a vulnerability or an operating system update might open your systems up to a zero-day exploit.
Puppies Can Grow Up To Be Big Dogs
Have you ever visited a relative with a little yappy lap dog that comes tearing down the hallway barking at you like you are evil incarnate come to enslave the household he so valiantly defends? No big deal, just a little dog. But if a 95 pound German Shepherd is running at you full tilt with a crazed look in his eye, that’s a different story. You’re going to pay close attention to his every move as your life flashes before your eyes.
When you are building software, you hopefully have a general sense of the scope of the project and the target audience. You should know within an order of magnitude how many users you will allow on the system and whether you expect the user base to stay relatively constant or grow significantly over time.
And then things change. Oprah recommends your wedding planning app. Your sales team signs its first large enterprise customer. Your DIY clothing design software is featured in a syndicated fashion column. Or user adoption grows 5 or 10 or 1000 times faster than projected because your software simply kicks butt.
Whatever the reason, if your software is successful, you will have to deal with it. And while that can be a great problem to have, dealing with fast growth and scalability can be very challenging. Suppose you started out with a little side project on a shared hosting server. Demand hits hard so you have to move to a dedicated server, then two, then three. Then demand spikes and you can’t get servers fast enough to keep up. Performance lags and key customers start calling to complain. Although you don’t have a firm SLA, big clients start asking for refunds and your project is suddenly in the red and tarnishing your reputation with your customers.
The Twitter “fail whale” is a perfect example of how painful scaling can be (http://en.wikipedia.org/wiki/Twitter#Outages).
Make sure you know what you’ll do if your little puppy grows into a 300 lb Mastiff.
Caveat Structor (Builder Beware)
The ongoing costs and commitments associated with creating and running software are frequently overlooked or underestimated by stakeholders. As software builders, we need to consider the long term implications of our decisions to build and release a piece of software. Failure to think about the costs, commitments, and risks in advance can leave you wishing you had never decided to adopt that puppy.