We all want to build high-quality products. But what do we understand under
high-quality? Is it high test coverage? Low defects rate? Reliability? Compliance? Actually, developers, business and users mean different things under the quality.
There is a really good publication from Google team regarding this topic - Developer Productivity for Humans, Part 7: Software Quality.
The authors break down software quality into 4 types:
🔸 Process Quality. It usually includes code reviews, organizational consistency, effective planning, testing strategy, tests flakiness, distribution of work. Typically, higher process quality leads to higher code quality.
🔸 Code Quality. It's code testability, complexity, readability and maintainability. High code quality improves quality of the system by reducing defects and increasing reliability.
🔸 System Quality. It means high reliability, high performance, security, privacy and low defect rates.
🔸 Product Quality. It's the type of quality experienced by the customers. It includes utility, usability, and reliability. Also this level includes other business parameters: brand reputation, costs and overheads, revenue.
These four types of quality impact each other: the process quality affects code quality, which affects system quality, which affects product quality. The end goal is always to improve product quality.
This model also explains why ideas like "we'll improve test coverage to X% and we'll get the good quality" rarely works in practice. It might help a little bit, but the connection with product quality is far away.
So if the team is concerned about the quality, they need to analyze what type of quality they want to work on and select appropriate metrics.
#engineering #quality