Think About Quality Programming

Everyone in the software industry is familiar with the infamous responsibility disclaimer, which is part of practically any software licensing agreement.

Why is it infamous?

Well, to start with there is no other kind of product or service in the world with such a waiver of responsibility attached to it. No other industry is so forgiving when it comes to flawed products that cause severe damages to customers. Software is the only field in which it is common to say things such as “Bugs will always be part of the product”.

Why is that?

Some claim the cause is that the software industry is relatively a new industry. All the phenomena listed above might be the result of lack of maturity of our industry. However, this is a slightly simplified, not to say forgiving, explanation.

We have the knowledge, the practices and the tools to greatly reduce the number of problems found in software products, and to increase the quality of these products. The fact is that most companies don’t do what they can do in order to deliver a better product to their customers. Moreover, certain types of software, such as software for medical equipment, are considered reliable. The only conclusion is that this degree of reliability is achievable in the real world – it is not theoretical.

So maturity is not the main issue. The second common argument is that the competition and the business environment dictate the constraints leading to poor quality products. That is an interesting claim: we are delivering flawed products because we want to precede our competition.

Nice try! Is the software industry the only industry with strong competition? Are the car industry, the hardware industry, and the medicine industry less competitive? I believe they aren’t (although I must confess that I’ve never worked for a car manufacturer or a medicine company).

Let’s give it another try: complexity. Maybe the complexity of software is what makes flaws inherent to this domain. Now we might be getting somewhere. It is truly difficult, if not impossible, to compare the complexity of a software product to the complexity of any other product.

I really don’t know if designing and creating a brand new CPU is less complex than writing average-size software, but let’s say for the sake of the argument that it is. Can we really use this as an excuse for delivering poor quality software products?

I believe the answer is no. If software is that complex, the resources we invest in creating the product should be proportional to its complexity in order to ensure it is a quality product. Unfortunately, most of us are not trying to deal with the complexity of the products we create – we are just using it as an excuse.

So, back to square one: why aren’t we holding ourselves responsible for flawed software products? Well, the reason, my friends, is our customers. Our customers are too forgiving. They accept almost anything we do and expect it to crash, to lose data, to jeopardize security, etc. If our customers are forgiving, and will continue to buy our products no matter what damages they cause them, why should we invest more resources in quality?

Well, things are starting to change. People and organizations are tired of spending their valuable time and money on problems caused by the software they buy. With a disclaimer or without it, our customers are already rightfully expecting more.

They want a working product that will not damage their system or their data; they want a product with good and prompt service; they want a product that could be seamlessly installed and activated; they want a product like any other product they buy. Soon, we will have to meet these expectations, and we might as well be ready for this today.

Take for example the emergence of Firefox. In the past year, the market share of Firefox has significantly grown on the expense of Microsoft’s Internet Explorer. Why is that? The reason is simple: Firefox is better in every aspect, and an increasing number of users know that.

Firefox is better not because it is free and based on open source. It is better because its creators are determined to make it better. Complexity issues, competition, and the history of the software industry – none got in the way of creating a good (although still not perfect) software product.

What can you do today?

A lot! First of all, you should be aware of the importance of quality in its broadest sense: the functionality of the product, its usability, the ability to support the product and extend it easily and without breaking it – all these are important aspects of quality that affect not only your customers but also you as the creator of the product. Next, you should analyze your long-term business needs. Don’t settle for the immediate needs of your company – they are always just part of the picture. Thinking only about hitting the market first will not ensure market dominance for long. Remember, your customers expect more!

The most important thing you should do, however, is not settling for the first two things. Many organizations say that the quality of their products is important to them. Many even consider it an important business goal. But, not all of them are providing their developers with the facilities needed in order to achieve this level of quality. They expect it to just happen, or even worst, they demand it from their employees, but they do not backup this request with what is needed in order to achieve it.

Quality does not come free, although it will pay off. Achieving quality requires an initial investment: in education, in resources, and in time. In the majority of cases, this investment is safe – a cost-effective investment that will be of great benefit to your company.

Developers, team leaders, QC Engineers, and every other participant in the development process are each responsible for the quality of the product, but they cannot achieve it without the organization’s support. They have to be trained and mentored in achieving high quality; they have to be provided with tools that will help them achieving it; and they must have reasonable time and resources for doing their tasks.

Yes, I know: you don’t have time. Customers (or marketing) are pressuring you and constantly requesting more features in less time. You must demand your developers to do more of what it is they are doing in less time and resources. Deep inside you know, however, that when it comes to quality there is no magic: if you don’t have the proper time to do a task, the chances of doing it well are not high.

Don’t take your customers for granted. Soon, they will want to buy a good product, and not just a product that was first on the market. Not always you can achieve both. You have to decide what is more important on a per-case basis. But you can’t always ignore long-term goals. No business can survive with only short-term goals.

We have to change our mindset. We have to think more than one-step ahead. We have to learn to do a better job, not just demand it. The first to realize that and the first to act upon it will be the first to succeed in the new reality of software products delivered without disclaimers.

0 thoughts on “Think About Quality Programming”

Write a Reply or Comment

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