7 Reasons Why Low-Quality Software Actually Costs More Than It Saves

The overall quality of a software product is not visible to the naked eye. The application itself may look great and it certainly provides value to its users. But as the software grows, it gets more complex. In practice, quality assurance gets left out in favor of a fast delivery. But this approach can introduce more costs than it saves. Unfortunately, they surface much later in the product lifecycle.

When a feature needs to get shipped really fast, mistakes happen. These seven points tell you why you should avoid technical debt at any costs.


As humans of the 21st century, we all know low-quality software systems. — Programs that don’t give us a clue on how to do something or just crash in the middle of an interaction. But as IT professionals, we also know the production side.

Most of the time the resulting defects could be fixed easily. But the problem lies in the delay between the introduction of the defect into the product and its removal. Unfortunately, they will surface in some way or another.

Whether it’s your boss to tell you to leave out some testing, a colleague who or maybe even you yourself think of doing just a ‘fast’ prototype: Keep in mind that you’re incurring technical debt.

The Cost of Quality (CoQ) includes all costs to provide quality (drawing diagrams, creating an architecture, testing, pair programming…).

The Cost of Non-Quality (CoNQ) includes all costs to repair what should have been done right from the start.

Oftentimes these are problems regarding the structural or internal quality of the product.

Typical situations include:

  • Pressure to deliver
  • Cost cutting and leaving out unit testing
  • Very important (and huge) last-minute feature desired by the customer
  • A project manager wanting to please the customer by pressuring developers

Here are seven reasons to keep in mind and to speak up when you’re confronted with any of these situations:

It takes longer

2) Higher Maintenance Costs

Bad code documentation
no design documents, basic diagrams or references in the source code.

In the beginning, you might think: ‘The software won’t be there forever so it doesn’t really matter.’ — Unfortunately, because it’s so cheap to let software stay in production, it usually stays there for longer than expected.

3) Extension Gets Really Hard

It is extremely hard to extend a broken system because you have to use all the crutches that have been built into it to make it work.

How heavy is an adult indian elephant?

How heavy is an adult indian elephant?

4) Change

Imagine you need to change a method’s signature to finish a new feature. The best case is that a test case fails and tells you which parts to fix. This might be a lot, but at least you can decide on really changing the signature and related calls or thinking about another way to solve the problem. The worst case is that absolutely nothing happens. — Except for a really bad feeling.

No unit tests for a certain area of your product means that refactoring will become a nightmare. Failures will occur with a delay that is impossible to predict because you don’t even know there’s a defect. That’s one of the main arguments for unit testing and test-driven design. Also, the random nature of such failures burdens the team (late-night wake-up calls, anyone?) and decreases the reliability and robustness of the software product.




André Nitze

André Nitze

André is a researcher and lecturer at the Brandenburg University of Applied Sciences. His industry-oriented research is focused on software quality and mobile applications. Based on his internationally published findings, he guides organizations to craft and implement successful strategies and solutions.
André Nitze

Leave a Reply

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