The False Trade-off Between Quality and Speed

By Vincent Déniel

What is quality?

When we talk about quality, it is important to clarify what we mean by it, as the term can have multiple meanings. For example, let’s consider this simple question:

Photo by Adrian N on Unsplash
Photo by Martin Katler on Unsplash

Why does quality deteriorate over time?

When you ask an engineering team why the quality of the codebase has deteriorated, the most common reasons are the following:

  • We have a hard deadline and we need to take shortcuts;
  • This is a small feature which is going to be used by just a bunch of users;
  • I will have time later to address quality issues;
  • This is a new product, we still don’t know if users will like it;
  • With the time we are going to save, we can add some extra features;
  • We have a lot of features to build which are business critical;
  • Our stakeholders are ok with lowering quality for faster delivery.
Image: https://martinfowler.com/bliki/images/designStaminaGraph.gif
Diagram: Martin Fowler

The alternative: focus on Sustained Velocity

Speed is obviously important in software development. In general, a faster team will be able to perform more iterations on a product, which will improve the team’s understanding of the customer’s needs and how the product is fulfilling those needs. Or a faster team will be able to enjoy a first-mover advantage where the market allows it.

Build a culture of ownership

Development teams need to feel that they are in charge of the quality of the software, and they are empowered to make decisions on how a project is executed or a product is defined.

Insist on high standards

Quality is essential in all software systems. Prototypes in our world have a strong tendency to become a permanent solution, so we need to ensure that all code deployed to production should be of high quality. These are some of the areas you should set standards for:

  • Have metrics to describe the impact that the software is having on the users, and metrics that are able to tell when you are making things worse;
  • Do peer code reviews for every change shipped to production and design reviews for larger designs;
  • Implement a process for speedy security reviews;
  • Test rigorously which a combination of unit, integration, end-to-end, performance tests;
  • Design your failure modes so you can control how the system reacts when it fails.

Build quality into your estimates and schedules.

Estimates for software projects are notoriously inaccurate, and a team that is running behind an estimated delivery date might feel the pressure to treat the estimate as a deadline, and sacrifice quality to get back on target. As we have previously seen, this usually leads to a further decrease in the speed of the team.

Closing thoughts

In the world of software development, the usual trade-off between cost and quality that we experience in other domains of life does not work in the way most would expect, and thinking in terms of trading quality for cost can lead to a less efficient software development process.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Mario Caropreso

Mario Caropreso

174 Followers

Building Enterprise Software at Meta. Formerly Microsoft, Amazon, Intuit and Skyscanner. I love creating products that users love.