What Means Software Reliability
In the context of software engineering, software quality measures how well the software is designed (quality of design), and how well the software conforms to that design (quality of conformance). It is often described as the ‘fitness for purpose’ of a piece of software.
One year ago, when we thought about having our own software company, we knew that quality should be part of our DNA. But because quality has a lot of definitions and meanings, we need to describe what is quality for The Crafters Lab.
Quality vs Reliability
Going further the quality meaning, at The Crafters Lab we thought that we have to go deeper in this term and analyze if it’s enough this word to reflect what the market expects for a successful product.
It is clear that the quality term is not enough. We need more precision because we don’t want a product just conforming to specifications. We want a product that evolves as the specifications evolve. Let’s talk then about reliable products.
Quality and reliability are terms close connected but not the same. Quality is about conformance to specifications. Reliability has a component of durability over time. Because of the way software projects are built nowadays, quality can change over time because specifications also change. But we must keep the reliability in the product.
As a team, we truly believe in this idea and we try to make this understandable for all the people we work with. It's hard to admit that many software teams often fail to understand that speed has minimal value if there is a lack of reliability. It is our responsibility as experts to guide the customer on the importance of establishing it as a fundamental and transversal piece.
From Reliability To Happiness
When a word acquires a real meaning everything changes. Because reliability has a big impact on the product-building mindset and how engineers work.
In a long term is an investment that returns not just in met specs but on happiness for everyone. Stakeholders, engineers, and customers will trust what they are building and using. When this happens, there are no wrong interactions with a lack of trust and resentment.
- Happiness for the customer. Because having a product that breaks and it’s not useful does not make sense. Furthermore, as the product grows, if there is not a solid base of reliability, it will be more and more difficult to understand why adding a label breaks the main page.
- Happiness for the software development team. Quality is not just a matter of reliability in the customer but the engineering team. It is the base for increasing the developer experience. I have been in companies that did not deploy on Fridays, where the days of deployment were marked with blood on the calendar, or that the deploys had a person in charge who could not sleep the night before due to the anxiety.
- Happiness for the stakeholders. They know that they can add and modify features adapting to the market without having to think that customers will be affected by each change, unlocking a fast delivery mindset.
Keeping It Over Time
It does not matter if you are using an agile vision or not when you think about reliability. Everyone wants to have a reliable product. But remember that the key is to keep quality over time.
Agile is a customer-centric vision of building a product. There is a short feedback loop where the customer will influence the actions. Therefore all the team must contribute to having reliability as a backbone.
But the same happens with other cultures, where the product needs to be maintainable and sustainable. As the product evolves, the logic is harder to understand and more edge cases have to be considered. Because changes affect everyone, everyone must be implied in reliability.
Not just the product evolves also teams do. Teams are increasingly rotating and mechanisms based on automation are a must nowadays. Reliability can not be owned by an isolated person or team.
Reliability Must Be Part Of The Culture
If someone asks you about what is the most important feature of your product, sure that you will not say - it works-. It’s something everyone expects, but is it real?
Do you remember this?
But if you are one of those that think that some years ago we had better software... what about this one?
Reliability should involve everyone in the team. We should avoid focusing on just specific testing roles because the focus must be a quality culture. Increasing levels of automation and a collaborative approach are also the keys to success.
When the reliability is part of the team, all the team shared the same responsibility through it. Responsibility creates positive satisfaction in teams and it is one of the motivators described by Frederick Herzberg as part of the two-factor theory.
Reliability is an essential part of a high-performance team and is especially relevant in agile environments where changes are the key to a successful go-to-market. Reliability is part of our DNA.