RDEL #53: How does Google describe software quality?
A look at how the Google research team characterizes the core aspects of software quality from a cross-functional perspective.
Welcome back to Research-Driven Engineering Leadership. Each week, we pose an interesting topic in engineering leadership, and apply the latest research in the field to drive to an answer.
Software quality is an extremely important, yet often misunderstood across various functions within a tech organization. This week, we review Google’s research and ask: how does Google describe software quality?
The context
Productivity in engineering isn't solely about the speed or volume of code produced; it also encompasses the quality of the software developed. High-quality software is crucial for user satisfaction, maintainability, reliability, and overall project success.
Different stakeholders, including business leaders, developers, and operations teams, often have varying definitions and priorities regarding software quality, which can lead to conflicts or misaligned objectives. Achieving alignment on the definition of software quality ensures that all stakeholders work towards consistent goals, facilitating better communication and collaboration. Additionally, alignment allows teams to build quantifiable metrics, enabling continuous measurement and improvement of software quality.
The research
Google researchers studied this topic and explored the different facets of software quality and how they interrelate to overall developer productivity. The researchers conducted two series of interviews with Google developers, focusing on their perceptions of code quality and product quality. They identified four main types of quality—process, code, system, and product quality—and theorized how these types influence each other.
Four Types of Quality:
Code Quality: This aspect of quality is focused on the internal attributes of the code itself. Key factors include:
Maintainability: How easily code can be understood, corrected, adapted, and enhanced.
Testability: How code supports testing efforts, allowing for automated tests and ensuring that defects can be efficiently identified.
Comprehensibility: How easily a developer can understand the code.
Complexity: The level of complication within the code.
Readability: How easily the code can be read and understood.
System Quality: This pertains to the performance and reliability of the overall system. Key components include:
Reliability: The ability of the system to operate without failure over a specific period under predetermined conditions.
Performance: The efficiency of the system in terms of response times and resource usage, ensuring that the system performs well under various conditions and loads.
Low Defect Rates: Ensuring that the system has minimal bugs or issues.
Process Quality: This focuses on the quality of the development processes themselves. Important aspects include:
Comprehensive Testing: Implementing thorough testing practices to ensure that defects are identified and resolved early in the development process.
Thorough Code Reviews: Conducting detailed reviews of code by peers to catch potential issues, improve code quality, and share knowledge within the team.
Effective Planning: Ensuring that project planning is robust and realistic.
Product Quality: This is centered on the end user's experience with the final product. Key factors include:
Utility: The usefulness of the product in addressing the needs and requirements of its users.
Usability: The ease with which users can interact with the product.
Reliability: The consistency of the product's performance, ensuring that it works as expected without failures or issues.
The application
The findings of this paper highlight the interconnected nature of software quality, emphasizing the need for a holistic approach to measure and improve it. By breaking down quality into process, code, system, and product quality, the paper provides a nuanced framework that helps stakeholders understand how improvements in one area can influence overall software performance and developer productivity.
Engineering leaders can leverage these insights by aligning their teams around a unified understanding of software quality. The benefits of doing so are multi-fold:
Establishing a clear definition of software quality allows teams to set realistic and aligned goals across different teams and departments.
Once goals are set, the team can establish a series of metrics that are regularly discussed, reviewed, and integrated into the development process to ensure continuous improvement and alignment with organizational goals.
On an ongoing basis, clear definitions of quality can help open communication and collaboration across teams on how to meet those goals.
With a clear definition of software quality, engineering teams can strive for continuous improvement.
—
Happy Research Monday!
Lizzie