The Puppy Paradigm for Software Development Estimation
In my previous role as fractional CTO, and even in my current role as a Portfolio Executive for Innovation Works, I’m frequently asked to advise companies that are starting new software development projects. The details of these conversations cover a lot of subjects but they typically come down to two questions: “How much will this cost?” and “How long will it take?”
There’s a long history of antipathy in software development towards estimating development effort for projects of any meaningful size and complexity. And with good reason. Despite decades of experience with software development, most projects still fail to meet initial expectations. The key word there is expectations; we say that the project failed when we really should be saying that the expectations failed. In this article I’m going to describe the Puppy Paradigm; a technique that I hope will help project sponsors frame their expectations around time and budget in a way that more realistically matches the realities of software development.
First, some credit for this concept needs to go to Steve Midgley, the founder and Managing Director of Learning Tapestry, an Education Technology consulting and development firm. I’ve heard him frequently describe software as a free puppy, and I’ve expanded on that concept to develop the Puppy Paradigm.
When you adopt a puppy, there’s some up-front cost. This could be close to zero for a shelter or rescue adoption (my personal preference), all the way to several thousands of dollars for a rare purebred dog. But the real cost of ownership starts when you bring the puppy home. Puppies need food, and annual checkups, shots, flea and tick and other preventatives. Sometimes they get sick and need medicine, or even surgery. Puppies can be destructive when they have excess energy. Part of the cost of your puppy might very well be furniture replacement!
Beyond cost, puppies take a lot of your time. They need walks, play, and grooming. You need to clean up after them if they make a mess or have an accident. You might really want to relax with a book or a movie, but if the puppy needs something, relaxing has to wait. When you consider the life of your puppy all the way to adulthood, the up-front money you spent is negligible!
Software works the same way. When you start a software project, asking “How much will this cost?” and “How long will it take?” carries an implicit assumption that there’s some end state where the software will be “done”. That’s no more true for software than it is to say that a puppy will be fully grown when you first bring it home.
There’s a quote famous in military circles, originally attributed to Helmuth von Moltke; “No plan survives first contact with the enemy”. The implication here is that having the ability to react to external conditions is a better predictor of success than spending a lot of time on up-front planning. There’s a very strong parallel here to software development. No application survives first contact with users. Your software roadmap, including budget and time estimates, need to account for an expectation of frequent change after launch, just like your estimate of how much it costs to raise a puppy needs to account for care and feeding, not just what it cost to adopt the puppy.
One of the reasons sponsors frame software projects in terms of up front cost and time is because of the way companies do budget planning. If the company expects to build and launch a software application in a given calendar year, they need to have a sense of what that might cost so they can be sure the company can afford it. But this model considers the software as a capital expense; a one-time charge (maybe with a smaller amount for maintenance once it is “done”).
If you apply the Puppy Paradigm, software ends up being an Operating Expense, with a budget that may be higher in the initial stages but never goes away. So as you think about estimating effort and time, think about your software project like the lifespan of a puppy. Just like a puppy, your software needs a certain amount of growth to be born. Think of this like your MVP, and try to list the functionality your software needs to be “born” in as much detail as you can. If it helps, you can apply an iterative model from Agile Development to help you plan. For example, at the end of week one we want to be able to register a user and have them log in, at week two we want them to be able to view a list of widgets, at week three they should be able to add widgets, edit them, and remove them, etc. A software developer can provide a more confident estimate of “is one week enough time to build the ability to add, edit, and delete widgets?” than they can estimate how many months it will take to launch the project as a whole.
Once you have a list of all the functionality you need to launch your project, and ideally sequenced estimates for each item in the list, you have an initial launch point including effort and time estimates. But don’t stop there! Your puppy / project will be just born, and it will still need quite a bit of time and effort. The most reasonable estimate you can give here is that your monthly expense post-launch will be the same as during initial development. The reason this is a the most reasonable estimate is because after launch you will start to accumulate change requests, bug fixes, maintenance issues, and new feature ideas that will always outpace your team’s ability to execute. This is not a bad thing, and it matches the puppy cost and time model we described above.
So if you can build a series of small, iterative estimates towards an MVP, you can use that to project the operating cost of your new software project. Once you have a live MVP with usage, you can use your team’s historical pace to project their likely future pace, and use your budgeting cycles to advocate for changes to staffing levels to meet the company’s objectives over time.
How much will your software project cost, and how long will it take? To increase your changes of successfully bringing your project to life, try re-framing those questions with the Puppy Paradigm. As always I’m happy to take thoughts, criticism, success stories, or pictures of your puppy (either real or metaphorical software project) here or on twitter.