The Unknowns of Software Development

The Unknowns of Software Development

"There are known knowns. There are things we know that we know. There are known unknowns. That is to say, there are things that we now know we don't know. But there are also unknown unknowns—the ones we don't know we don't know."

Donald Rumsfeld, 2002.

To have come up with such brilliant semantic logic we think Donald must have spent a lot of time around developers...

As Unique As You Are

Each website we build is unique.  It has a unique design, unique content, unique functionality and is required to satisfy a unique set of business objectives.  In combination, these things are what make the websites we build such a powerful tool for our customers. 

By way of an analogy imagine that you are a high-end car manufacturer but each car you build is different from the last.  Whilst each car may share characteristics (wheels, engine, suspension, etc.) the design of each part may cause it to operate slightly differently.  Occasionally, you may even be asked to develop something which is completely new and unique (like designing the ABS system or the first airbag).  So, even though the tools and materials used to construct the car are the same the end result is very different.  Interestingly, if you asked a car manufacturer how long it would take to develop a new range of cars their answer would be roughly 3 years with up to 6 months (25%) variability around the launch date (Source: SAE).

Bespoke web development operates under the same principles:  It’s the unique differences which give each project its unique challenges and inevitably affects completion dates.

The Unknown World of Software Development

Web development, like any software development, has a combination of three types of activity;

  1. known activities (which are predictable)
  2. known unknowns (which are guessable)
  3. unknown variables (which are unpredictable). 

Known Activities: These are activities which we have done many times before and are common to developing all our websites.  We are able to predict timescales for these very accurately.

Known Unknowns: These are activities we know we need to do but have not done before.  These could be integrating the website with a 3rd party system or getting the navigation to work in a very specific way or even interpreting your unique specification correctly.  We are able to guess timescales but often only within a wide margin.

Unknown Variables: These are variables in a project that are unpredictable.  They can include; bugs, last-minute design changes, unexpected changes to vital parts of the system (changing payment provider, for example) or work interpretation failures (everyone assuming different things about how something should work).  Every project will have some but how many is impossible to predict.  Some of the unknowns fall into the Known Activities or Known Unknowns category once they are discovered.  Unfortunately, some will still remain as Unknown Variables.  A bug is an example of this.  All Unknown Variables are impossible to put a timescale to.  This is because our developers won’t know how long it takes to solve it until they’ve gone through the process of solving it.  (This is because the act of assessing how long an issue will take to resolve can only be done by solving it since working out how to resolve the issue is the most time-consuming part.)

In summary;

  1. Known Variables take a known length of time
  2. Known Unknowns take a guessable length of time within a wide margin
  3. Unknown Variables can take any length of time

It is the last two which, typically, extend a project’s completion date beyond the initial estimate.

So you might ask why can’t the Known Unknowns and Unknown Variables be accounted for as a contingency in the project timeline?  The answer is that we do add a level of contingency to the project but it can never accurately account for either of these two types of issue since their nature and extent is not known until the testing phase is complete.

Timing Is Everything

There is usually a burst of activity towards the end of a project.  For larger and more complex projects this can turn into a flurry as many ‘finishing’ items on our list can only be completed at the last minute.  If at that stage, Known Unknowns and Unknown Variables crop up it can not only delay the project we’re working on but also has a knock-on effect for other projects which are scheduled to start.  This doesn’t happen very often, but it does happen.

Typically we have at least twenty projects on the go at any one time and even though our development team is four strong, scheduling is a challenge because of the variable nature of what we do.  So, we operate under the mantra that it's best to focus on launching a stable, fully functioning and commercially productive website rather than focusing on an arbitrary date.

Published by digitalROAR