Home > Articles

This chapter is from the book

Facing the Unknown in Software Development

If you are familiar with software development, you probably have experienced the following situations:

  • Release dates of products and features are delayed significantly, and sometimes multiple times.

  • Initial plans need complete rework due to mistakes, assumptions, and new insights gained by doing the work.

  • Customers are unhappy when viewing the product for the first time, as it was not what they expected.

In my experience, there are two primary reasons why these kinds of situations happen:

  • Building software products is predominantly an exercise in dealing with uncertainty and complexity. The inherent uncertainty and complexity make it foolish to stick to the plans we came up with before doing any of the work.

  • We struggle when we must deal with uncertainty and complexity. We try to apply our usual and familiar approaches of spending more time on planning and analysis to gain control. But those methods are ineffective and often just make things worse.

Our typical response when we encounter uncertainty and complexity is to concentrate on more planning and analysis. We start with turning inward, focusing on what we know, because we believe that is where the solution lies. Common examples of this ineffective behavior are spending many hours in Sprint Planning or endlessly revisiting the same Product Backlog Item at refinement.

But is what we know what matters most before starting the work? Or is it what we don’t know and what we believe we know—often erroneously—that matter most? And if our wrong assumptions and what we don’t know carry substantial weight, will we gain the needed knowledge by talking in meeting rooms and going in circles, limited by the knowledge we can have before starting the work?

Why are detailed planning and spending more time on analysis ineffective, and why do they frequently make matters worse? Let me tell you a story about a deceptively simple software problem that turned out to be too complex to manage using traditional project management methods. This story illustrates how software development is often similar to finding your way back in Vlieland, with every step of the way shaping the subsequent path to follow.

Locked in by Four Digits

“You took the shortest route to the exit.” Project Manager Willem-Jan Ageling was given this grim message by his colleagues when they reassigned him to a crucial project within the organization. He was only a few months in at his new company, a successful payment processing company in the Netherlands. The problem Willem-Jan faced was deceptively simple.

Willem-Jan was tasked with increasing the length of the client identification number. Up to now, the client number had a maximum of four digits, and the company was nearing the limit of 9999 customers. If it didn’t fix this problem before the number of customers reached the limit, then it wouldn’t be able to onboard any new customers.

The decision to create a four-digit client number had been made 20 years earlier. The original developers who had made that decision were no longer working at the company. They probably thought that by the time they reached the limit of those four digits, the company would be so flush with money that fixing it would not pose any problem. If only they had known how much stress and how many headaches their decision would cause 20 years later!

Willem-Jan’s assignment was straightforward: expand the client number so the business could continue growing without bumping into the artificial ceiling imposed by the four-digit limit. He managed the project using traditional project management techniques that he had mastered over many years of working as a project manager.

Once the project started, things were going swell until the project team entered uncharted territory: the replication of customer data from a legacy database to a new database. No one had done this before, and the necessary steps to make it a success were entirely unclear.

Dealing with the legacy database was challenging. Whenever the project team believed they had found a solution, they bumped into a novel problem. The project team members were on a continuous journey of discovery, similar to my journey on the island of Vlieland. Every step of the way shaped the next steps to take—except they could not change their direction as quickly as we kids in Vlieland, because they needed first to run every change of the plan by the Change Advisory Board (CAB).

Each time the project team discovered something they didn’t know, it meant issuing a change proposal to the CAB. Presenting changes to the CAB meant losing face and explaining why their plans—and by extension, Willem-Jan himself—had failed. Willem-Jan was the unlucky person who had to face the wrath of the CAB whenever this happened.

Willem-Jan became a regular visitor at the CAB meetings, and the ordeal began to annoy him. Constantly being grilled about changes to the plan that were beyond anyone’s control became exceedingly frustrating. He was okay with returning to ask for more changes to the plan but realized all those changes were inevitable. He understood there was nothing he could do to prevent his frequent appearances before the CAB. No matter how well he did his job, he would never be able to make perfect plans that could circumvent all the unknowable obstacles the team faced. He could deal with these obstacles only after the team’s actions revealed their existence.

Based on the current information, which he knew was inadequate and limited, Willem-Jan thought the project would take many more months than initially anticipated. Usually, this would be the moment to pull the plug on the project, but for this project, failure was not an option. Its success was crucial for the future of the company.

In the end, Willem-Jan decided to face the CAB head-on. He gave them a presentation explaining all the uncertainties, risks, and things they would be doing for the first time. He made the CAB aware of the significant and pervasive fog surrounding the work. During his presentation, the extreme uncertainty and complexity of the initiative became evident to everyone. The current situation was so uncertain and rife with so many unknowns that creating an accurate long-term plan based on what the project team knew was impossible.

The CAB gave Willem-Jan the green light to drop the long-term planning. In turn, he switched to making short-term weekly plans—planning based only on what the team knew and not on what they believed they knew. Then, the project team made a new plan every week based on what was discovered and learned. Instead of doing overconfident planning, they switched to doing humble planning—planning based solely on what they knew and were able to foresee.

By dropping the overconfident long-term planning and switching to humble planning, Willem-Jan’s plans became rooted in reality. The plans considered the presence of the fog of beforehand and intentionally limited the fog of speculation by planning based only on what was known. By performing the work and exposing the reality, the planning was adjusted based on what the team discovered.

Ultimately, the project was a big success, despite all the risk, uncertainty, and things the team was doing for the first time. Sometimes there was good progress, and occasionally new information was discovered that disrupted the playing field. But since everyone was aware of the uncertain nature of the situation, Willem-Jan was no longer being grilled by the CAB to explain every change. He could apply his energy and focus to those parts of the project actually under his control.

As mentioned in the opening paragraph of this section, Willem-Jan was told by his colleagues that taking on this project would most likely lead to his departure from the company. And it was, indeed, Willem-Jan Ageling’s final project as a project manager at the company—not because he got fired as his colleagues predicted, but because the project was a great success and opened Willem-Jan’s eyes to a different way of working. After the project, Willem-Jan decided to stop working as a project manager and continue his career as a Scrum Master.

As this story shows, it was only after the CAB embraced uncertainty and complexity that the project got on a better path toward success. The project was managed by responding to changes as they presented themselves and swiftly overcoming obstacles instead of trying to fight uncertainty and complexity through more planning and better analysis. The barriers for making changes to the plan were removed by dropping the CAB’s change approval process.

In theory, extending a client number would usually be categorized as trivial and easy work. But in practice, even seemingly simple changes sometimes can be a herculean undertaking where the team is clueless about how to pull it off. Willem-Jan’s story is a beautiful example of being unable to come up with a definitive plan without first doing the work, despite the deceptive simplicity of the problem at hand.

Now that we’ve linked the Vlieland “De Dropping” story to the realm of software development, let’s turn to the history of military warfare. There’s a lot software developers can learn from the military’s approach to solving these kinds of planning problems.

How Excessive Planning and Preparation Can Lead to Defeat

On October 14, 1806, the Prussian army suffered a crushing defeat by the French army in the twin battles of Jena and Auerstedt. When the battle started, the Prussian forces vastly exceeded the French troops. At Auerstedt, the Prussians outnumbered the French with a ratio greater than 2:1. Despite superior numbers, the Prussians were unable to make a strong stand against the French.

In preparation for the encounter, the Prussians drafted, discussed, and contemplated five different plans to best their French opponents, but they struggled to come up with an unified plan of battle. If more time spent preparing and planning won every battle, then surely the Prussians should have emerged victorious.

While the Prussians were busy pondering and reflecting on their best course of action, the nimble French army, led by Napoleon, seized the initiative. All that time spent planning and deliberating buried the Prussian infantry with instructions and information. The inevitable result: confusion and inaction among the Prussian soldiers. The bloated, elaborate Prussian plans weighed their troops down and became nothing more than delayed responses to Napoleon’s swift, unforeseen decisions and movements. The battle was lost before it had even started. At the end of the battle, at least three Prussians lost their lives for every French casualty.

What on paper should have been a straightforward victory turned into a bitter, unexpected defeat that shook the Prussian army’s organizational structure to its core. The Prussians who survived the battle realized the ineffectiveness of their approach and the need for significant reforms.

One of the Prussians who survived the battle of Jena–Auerstedt was a young Carl von Clausewitz, quoted at the beginning of this chapter: “The enemy of a good plan is the dream of a perfect plan.” Everybody knows too little planning is ineffective. But von Clausewitz’s quote perfectly captures how too much planning can also be futile. He witnessed firsthand the failings of excessive analysis, communication, and planning that resulted in the Prussian downfall and led to his incarceration as a prisoner of war in France.

von Clausewitz would later play a crucial role in successfully transforming the Prussian army. And after the Prussians became part of the German army, their novel military doctrine in dealing with uncertainty and complexity became one of the most effective in the world. When the French and the Germans clashed again in the Franco-Prussian war in 1870, the tables had turned. The German army crushed the French troops decisively. What had changed in the German army to make this victory possible?

What Can We Learn from the German Army?

Before I elaborate on the revolutionary changes in the German army, please note that it isn’t my intent to glorify war in any fashion. I compare building software products to warfare because the complex work of building a product shares the same challenges you encounter during a battle. You never have enough information, time, or understanding to produce a perfect plan before the fight starts.

But that is where the comparison stops. It would be nonsensical and disrespectful to suggest building software products entails anything similar to the horrors and tragedy of war. In battle, everyone is fighting for their lives and trying to outwit the opponent. War is messy, uncertain, cruel, and chaotic. Rarely anything pans out as initially predicted. Because of what is at stake, successful execution of strategy and plans on the battlefield is the ultimate exercise in dealing with uncertainty and complexity.

General von Clausewitz invented the concept of friction to explain why it is so difficult for plans to be executed successfully and to produce the desired results on the battlefield. Here’s a quote from von Clausewitz that perfectly captures how friction can throw sand in your gears when you’re tackling even the simplest of tasks:

Everything in war is very simple, but the simplest thing is difficult. Friction, as we choose to call it, is the force that makes the apparently easy so difficult. Friction distinguishes real war from war on paper.

von Clausewitz argues that a central characteristic of friction is that it is difficult to predict how it will manifest itself because it is the sum of an infinity of petty circumstances:

This tremendous friction, which cannot, as in mechanics, be reduced to a few points, is everywhere in contact with chance, and brings about effects that cannot be measured, just because they are largely due to chance. One, for example, is the weather. Fog can prevent the enemy from being seen in time, a gun from firing when it should, a report from reaching the commanding officer. Rain can prevent a battalion from arriving, make another late by keeping it not three but eight hours on the march, ruin a cavalry charge by bogging down the horses in mud, etc.

Just a little bit of fog can bring about all these unanticipated effects. But you don’t even need a physical fog for friction to occur. Friction occurs when independent minds try to realize a common goal in a rapidly changing, complex environment. In such an environment, we never have perfect information at our disposal. And even if we do, people will process that information differently and may arrive at different conclusions. Friction causes our plans to be imperfect and our execution flawed. It explains our inability to predict the results of our actions and plans.

Friction is ultimately rooted in human finitude. Humans are limited by their comprehension, processing speed, and individual biases, and they are affected by their environment, emotions, stress, and personal interests. All of these many factors rooted in human finitude can combine to produce significant amounts of friction.

Humans have limited knowledge and act as independent agents according to their own will. They are affected by unpredictable events and have imperfect information at their disposal. Even with the proper understanding, inadequate information transfer may produce confusion. Even if we transfer information perfectly, individuals may have different interpretations, agendas, and priorities that create misunderstandings and generate noise. The unpredictability of the environment and the complexity may also work together to produce noise, create chance effects, and make it difficult to obtain data.

In short, personal interests, uncertainty, complexity, and the combination of emotions and stress work together to produce friction. The situation and the context determine the extent to which friction plays a role and affects our ability to make the right decisions.

I define friction as follows: Friction is anything that increases the chance of surprises happening.

The more friction we experience, the more frequently we will encounter surprises. The famous mathematician and computer scientist Claude Shannon established the link between information and surprise. The more information an event contains, the more surprising the event is. Discovering more surprises means we’re unearthing more information we have to incorporate in our plans and actions to produce the desired results.

In the eye-opening book The Art of Action, military historian and consultant Stephen Bungay investigated the lessons that we can draw from the German army and ways that we can use this understanding to overcome friction in the business world. Bungay argues we can apply the same military principles of dealing with uncertainty and complexity to deliver better results in the realm of business. He identified three primary gaps amplified by friction that can prevent your plans from achieving success (Figure 1.1):

  • Knowledge gap: The difference between what we’d like to know and what we actually know.

  • Alignment gap: The difference between what we want people to do and what they actually do.

  • Effects gap: The difference between what we expect our actions to achieve and what they actually achieve.

Figure 1.1

Figure 1.1 The three gaps that are increased by friction and increase the number of surprises we can expect to encounter. (From Stephen Bungay, The Art of Action, Nicholas Brealey Publishing, 2010)

The ideal response to these sources of uncertainty and complexity does not come naturally to us. The main problem is that the default response we fall back on to tackle these three gaps just makes matters worse. The usual approach creates its own mist on top of the natural fog that already exists. The fog of beforehand is worsened even more by injecting the fog of speculation.

When there is a knowledge gap, we know less than we would like to know. We usually react by spending more time planning, analyzing, and debating ways to close the gap. The problem with this approach is that when you lack information to make an adequate plan, no amount of planning or analysis can conjure new information on the unknown out of thin air.

Acting based on conclusions drawn from noise, instead of the signal, is risky and dangerous. The signal is the meaningful information we’re trying to detect and act upon. Noise, like trying to predict the weather based on the number of garden gnome statues that populate our lawn, does not contain information you can use to make better decisions.

The more we over-analyze, the more noise becomes entrenched in our knowledge and plans. As a result, what we believe we know finds its way into our plans, resulting in additional fog that clouds and slows our judgment—the fog of speculation. The fog of speculation is dangerous because it often makes us believe we know more than we actually do. When we believe the noise is true, then we believe we are no longer speculating. The danger is that we may mistake the noise for reality. Speculation can conceal what we do not know, making it even more challenging to adjust our plans.

To make things worse, we also get weighed down by the heavy anchor of over-contemplation. The unwieldy burden of overconfident planning stifles our ability to respond if reality turns out to be quite different than it was initially envisioned in our plans. It is difficult for people to abandon carefully devised plans when reality makes them obsolete. After all, you have invested so much time and cognitive effort in making those brilliant plans. How can they be wrong? The Prussians who were taken by surprise by the French at Jena–Auerstedt could tell you a thing or two about that.

When there is an alignment gap, people do something different than what they were told to do. Even when people know exactly what they should do, they still sometimes make mistakes, especially in stressful situations. The usual response to this problem is to issue more instructions and spend more time on elaboration. If people do something other than what we expected, we need to give better instructions and issue those instructions more frequently—also known as micro-management.

More and better instructions are like receiving a thick instruction manual when we purchase a new product. Who bothers to read all the pages in the manual? And even if we do, we will not understand or remember everything in there. Our situation and context can change so rapidly that the effort required to dig through a large body of knowledge will make it impossible to respond adequately and effectively. And more often than not, the instructions will not cover the exact situation in front of us, as it could not be predicted upfront.

When there is an effects gap, our actions produce different results than we initially expected. The usual response is to impose metrics and tighter controls on our teams to ensure they deliver the desired results next time around. Implementing more controls bakes in constraints and limitations on how teams can respond. Adhering to the controls often becomes the goal, preventing the team from responding swiftly and in the best way.

As customers, we are all too familiar with the customer service agent following controls and procedures instead of trying to help us out. The customer service agent cannot help us because there are rules in place they must follow. Following the rules becomes more important than achieving the optimal customer outcome.

In short, when we experience high friction, we will undoubtedly encounter many surprises in our plans, execution, and results. Our usual response is to spend more time planning, issuing instructions, or imposing tight controls, which makes all three gaps even worse.

These anti-patterns to friction are so common that they even take a central place in the value statements of the Agile Manifesto.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020