Quality is the foundation for long-term success.
I’m convinced that’s true. In this post I talk about why quality matters and what’s the cost of neglecting it.
Let me start with an obvious property of quality code: it works. This blog is about professional software development. Working software is a must - but by no means easy to achieve. However, working software isn’t enough. Quality software is more than just working software. Though, quality helps us to build working software in the first place and to keep it working despite all modifications and extensions along the way.
Which Quality I’m Talking About
Different stakeholders have something very different in mind when we talk about quality. To users a quality application is easy to use, robust and quick. To project managers a quality project is on budget and on time. All the different views on quality are legitimate and important - and they are all affected by the code we write.
This blog is for enterprise software developers - when I talk about quality, I mean the quality of the code we write and the quality of the process we use to write that code. However, code quality is at the basis of the other kinds of quality:
- User experience is a result of the code we write.
- Performance is a result of the code we write.
- Security is a result of the code we write.
- Bugs are a result of the code we write.
- Being able to meet project plans depends on how we write code.
- Being able to quickly respond to changes in the marketplace depends on how we write code.
- The success of the company depends on how we write code.
- Having fun doing our job depends on how we write code.
- How easy it is for new developers to join the team depends on how we write code.
Mark Seemann talks about the difference between software quality and code quality in one of his blog posts.
Why Quality Is Important for Enterprise Software
It’s obvious that the code we write determines the functionality of our application. But that’s not an argument for the importance of code quality yet.
So … Is it possible to be successful with a crappy code base? Sure!
But … Is it possible to be successful in the long run in a constantly changing environment with a crappy code base? I doubt it.
There’s a hilarious video by Robert Martin aka Uncle Bob where he talks about the importance of good code and how bad code can destroy an initially successful company. However, the importance of quality does depend on the type of your application. Let’s say you are writing a promotional app for an event with a fixed date. The day the event happens also marks the end of your project. Mission accomplished - let’s move on to the next project. In such a scenario quality doesn’t matter that much - but even if your project only lasts a few weeks you can start feeling the pain of bad code.
This blog, however, is about enterprise software development. The characteristics of enterprise software are the reason why quality is of such importance:
- Enterprise software is long-lived.
- The requirements are constantly changing.
- You are working on a team.
- Bugs can be costly.
- You have to compete in the marketplace.
Let’s say your software is in a working state called
A. Now, you have to implement a new feature or fix a bug. Let’s call the new working state including the added feature or bug fix
B. That means, you have to transform your software from some working state
A to another working state
Quality isn’t about the working states
B, it’s about the transformation. If the transformation from
B is easy, your code is of high quality. If the transformation from
B is hard, your code is of low quality. That’s my definition of quality: High quality code is easy to change.
What makes the transformation easy? There are two aspects.
First, the state
A matters. If your code is a mess, it’s hard to transform it to
B. If your code is difficult to understand, it’s hard to transform it to
B. If you don’t have any tests, it’s hard to transform it to
Second, the process matters. How you write and test code matters. The programming languages, frameworks and tools you use matter. How the team members work together matters. Project management matters …
There’s No Free Lunch
Quality comes with a cost. You have to put additional effort into your code. You’re not finished once your code works, you have to do a little more and turn it into quality code. But is it worth the effort? Yes. It pays off in the long run. There’s a great blog post by Martin Fowler about it. I really recommend reading it.
How does quality pay off?
If it’s hard to change your software, then …
… it’s hard to add new features.
… it takes a long time to add new features.
… bugs are more likely.
… bugs are hard to fix.
… it takes a long time to fix bugs.
If it’s easy to change your software, then …
… it’s easy to add new features.
… you can add new features quickly.
… bugs are less likely.
… bugs are easy to fix.
… you can fix bugs quickly.
If your goal is long-term success, you have to invest in quality.
This post together with the post about enterprise software is the foundation of my blog. It’s all about writing high quality enterprise software.
Are you convinced of the importance of quality? Or is working software all that matters? Let’s discus it in the comments.