Operational Excellence – Principle 3: Draw a Line Below Which Quality Does Not Go

I. Problem Description

When you have aggressive deadlines or your project is running out of time or budget, there are only four things you can do:

  1. Reduce the scope
  2. Extend the deadline
  3. Commit additional resources
  4. Sacrifice quality

While the first two options are your best bets, and the third option is not always feasible, the fourth one (sacrificing product or delivery quality) is what most people would consider. There is a good explanation for why this can be appealing; sacrificing quality today will only surface in the future, and it will be someone else’s responsibility.

Sacrificing quality drags on your delivery capabilities. If left uncontrolled, it will transform your product from a lucrative asset to a liability. In the long run, sacrificing quality will have detrimental and irreversible effects on your business.

Peter M. Senge documented this organisational behavioural pattern in a 1990 bookThe Fifth Discipline. Eroding Goals was the name Senge gave to an organisational dynamic describing a positive feedback loop where managers increasingly accept lowering standards to retain the same delivery capabilities.

In software development, Eroding Goals can be seen with rising technical debt. Technical debt makes the next delivery harder, requiring managers to accept more technical debt to keep deliveries on track. At some point, these become so slow that you risk being completely outrun by competition.

Keeping quality above a certain mark prevents organisations from slipping towards a path of earning goals.

II. Levels of Software Quality

Software quality can be broken down into Known limitations, bugs, and technical and architectural debt.
Software quality can be broken down into Known limitations, bugs, and technical and architectural debt.

Technical debt can be subdivided into four categories, not all equally problematic. This means managers can be selective when deciding which to carry and which to avoid. Let’s see what these look like:

  • Known limitations are usually attached to specific features and limit the range of business functionality available within that feature. The core functionality is ideally delivered, but the nice-to-haves are deferred or postponed. This is not an issue but a pragmatic approach to minimizing time to market.
  • Bugs are more serious problems as they can severely impact the application’s service levels. In extreme cases, they may, for example, take down the application, in which case they become critical and must be fixed immediately. Bugs are not smart to carry over between releases or into production; fixing an aeroplane while it’s still on the ground is much easier.
  • Technical debt. When developers compromise code quality for faster delivery, technical debt increases; examples of technical debt are duplicate code, hardcoded functionality, poor software architecture or design, and insufficient testing. Technical debt is transparent to application users and is, therefore, the easiest to rationalize. However, it can slowly accumulate until it significantly erodes a team’s long-term delivery ability.
  • Architectural debt is the most dangerous on the list as it’s both hidden and strategic. Examples of architectural debt include compromising a product’s architectural integrity by allowing it to support functionality it’s not designed for. Fixing architectural debt requires anywhere between refactoring a few classes and redesigning core modules. Ideally, you want to avoid this at all costs.

III. Draw a Line Below Which Quality Does Not Go

The best way to remedy such situations is to avoid being exposed in the first place. This can be achieved by having an open and transparent discussion with business stakeholders every time the backlog is saturated with high-priority items and not waiting for it to overflow. A positive outcome of these discussions means reshuffling priorities, deadlines, or resources.

However, there will be times when moving things around (deadlines, scope, or resources) would not be feasible and when the only option left is delivering on time, regardless of the (technical) risk or cost (such as when the organisation’s reputation is at risk). What should managers do in this case?

The short answer is to draw a line below which quality doesn’t go. The long answer is in the following paragraphs, where we list a few guidelines and best practices for keeping software quality up to scratch.

IV. Guidelines for Maintaining Product and Delivery Quality

Though not mutually exclusive, product and delivery quality might collide head-on with scarce resources or aggressive deadlines. Product quality means building the right thing right, while quality delivery means fast and affordable delivery. Here is a list of actions managers can take when struggling with product vs. delivery priorities. The list is ordered from most recommended to least.

  • Smooth deliveries through Operational Excellence: A recent survey concluded that roughly 70% of software projects fail to deliver on time and budget. The good news is that 30% did. In his book The Toyota Way, Dr Liker describes how Toyota achieved operational excellence by implementing one-piece flows, pull systems, load levelling, Kaizen, and many other ingenious practices. Operational excellence is more than an ideal state organisations hover over but never attain. The fact that companies like Toyota, IBM, and others have managed to survive for decades in their business is proof that it can be done.
  • Zigzagging your way to excellence: Suppose we could imagine an XY plane where the x-axis measured time and the y-axis quality. In that case, operational excellence can be represented by a straight line at 45 degrees where quality would continuously improve as a function of time. However, more realistic scenarios would show a ragged line with alternating horizontal and vertical segments; the horizontal segments show a dash to market with new features, while the vertical dashes show an increase in overall quality (through refactoring, redesign, or introduction of automation or new tools). The key idea here is to occasionally accept technical debt while simultaneously committing to periodic bouts of maintenance. Tactical decisions favour customer satisfaction through fast delivery, while strategic decisions lean towards continuously increasing product quality.
  • Relaxing delivery constraints: This can only work for products and brands dominating their market niche. The strategy here is to leverage the fact that customers are willing to wait as long as it takes to get a great product. For example, the average waiting time for a new Ferrari could be many months. Still, the customer is happy to wait. There are similar examples in software where, for example, the customer and the supplier are different divisions within the same company and have little choice but to work together.

A fourth option, which must never be applied, is sacrificing long-term quality (carrying architectural debt and ignoring technical debt) for short-term wins. Despite its undeniable irrationality, managers may focus solely on the present if their jobs, bonuses, or careers depend on it. This can be observed in a system where the individual and the group’s interests are not aligned or contradictory. Therefore, the rewards system of incentives, benefits, and promotions must favour strategic goals.

Leave a Reply

Your email address will not be published. Required fields are marked *