No Uncertainty Here!

Uncertainty has a significant impact on both the business and engineering of software development (in all of its myriad forms).  Wikipedia provides an operational definition of ‘uncertainty’ as, “a situation which involves imperfect and unknown information.” Defining and understanding uncertainty is important because it is a common condition across the entirety of the software development life cycle.  The big BUT that follows the statement that uncertainty is common is that it is often unremarked or ignored, which are rarely useful responses.  Recognizing the uncertainty in any scenario is useful in selling ideas, planning, motivation and in development.  Over the course of the next several articles we will explore uncertainty across the life cycle; however, we begin with some of the sources of uncertainty and why it matters.

There are typically four macro sources of uncertainty:

  • Technology – The translation of needs and requirements is not always as straightforward as writing a couple of lines of code.  In many circumstances, the person writing the code or configuring the software has never solved the business problem before.  This means that while a solution can be envisioned, the path to that solution might not be as predictable as the number of murders on the BBC’s Midsomer Murders.  
  • Market – Changes in the organization’s market, suppliers or even partners can change the business’ requirements for any piece of work.  The longer the time horizon the more uncertainty creeps into the effort.    
  • Environment – Predictions for changes to team size, government regulations, methods, techniques, and resources are often fairly limited to the very near future.  Our environment can be very predictable next week but far less predictable the week after.
  • People – How team members and stakeholders interact and how they acquire and process information is variable, and this variability generates uncertainty.

Most efforts require a lot of prediction (often known as planning, budgeting, and estimation) and assumptions, even if they can be completed in a single iteration.  As real life happens, events often overtake the best-laid plans.  The perception of uncertainty can affect team behavior:

  1. High uncertainty will affect a team’s ability to commit.
  2. Failure to properly perceive uncertainty cause teams to over commit.
  3. Higher levels of uncertainty require lower utilization rates.
  4. High uncertainty causes team anxiety and negative team behavior.
  5. Certainty can cause others to believe you are lying.
  6. Uncertainty can be a tool to generate focus.

Uncertainty is generated by different scenarios and situations.  Many of these scenarios are out of the control of an individual team but can generate very real changes in behavior. As we evaluate the impact of uncertainty we will examine both positive and negative aspects of behaviors and how we should talk about uncertainty.