Published on 04/23/2023 11:38 by Rahul
Thought Experiment - 🧠Exploring the idea of Quality Engineering
Recently, as part of Delivery to one of our customers, our team embarked on an exciting experiment with a high-level Discovery framework, where we delved into the Why, What, Where, and How aspects of our work. This approach not only streamlined our efforts but also fostered a shared understanding of our journey, leading to impressive outcomes in both the discovery and delivery phases.
Although the specific techniques employed during the discovery phase may warrant a separate discussion, the success of our experiment sparked a fascinating thought: What if we apply the same lens to evaluate Quality Engineering? In this blog post, we will explore this intriguing concept, examining how the principles of QE can be better understood and appreciated through the insightful perspectives gained from our Discovery framework experiment.
Why Quality Engineering?
The importance of maintaining quality, or striking a balance for the sustainable operation of a business, is widely acknowledged. However, In my view, the emergence of Quality Engineering (QE) as a distinct concept can be attributed to the prevalent misperceptions surrounding disciplines like Quality Assurance (QA) & Testing in the software industry.
In an insightful talk, the speaker eloquently highlighted some of these common misperceptions that led to the need for a more comprehensive and collaborative approach to ensuring software quality, embodied by QE:
-
The fallacy of a single team owning quality: This notion perpetuates the idea that quality is the sole responsibility of a specific team, rather than being a collective effort that involves various stakeholders.
-
Disregarding quality as a skill: This perspective overlooks the expertise and knowledge required to ensure and maintain high standards of quality in software development.
-
The “Mistake Finder” stereotype: This misrepresentation reduces the role of QA professionals to merely identifying errors, rather than proactively working towards preventing them and enhancing overall quality.
-
QA as an inspector, which fosters several negative consequences:
-
Encouraging a false sense of non-ownership among stakeholders: This mindset absolves other team members from taking responsibility for the quality of their work.
-
Undermining trust in team members’ ability to verify their work: This assumption disregards the competence of individuals to self-assess and ensure the quality of their contributions.
-
Perpetuating an “us vs them” mentality: This attitude breeds a divide between QA professionals and other team members, hindering collaboration and shared accountability for software quality.
-
By recognizing and addressing these misperceptions, Quality Engineering paves the way for a more holistic, collaborative, and effective approach to software quality, fostering a culture of shared responsibility and continuous improvement.
What is QE?
Quality Engineering (QE), as defined by Wikipedia, is an engineering discipline focused on the principles and practices of product and service quality assurance and control. While this definition may capture the essence of the concept, it’s vital to explore its practical implications within the software industry.
Quality Engineering can be thought of as an engineering discipline that serves as a catalyst, enabling teams to embrace a Product Mindset and Systems Thinking, which are central to Agile & DevOps.
By seamlessly integrating with lean and agile product and project discovery and management frameworks, QE fosters a cohesive approach to software delivery. It also complements engineering disciplines such as Site Reliability Engineering, Chaos Engineering, and Platform Engineering, empowering cross-functional teams to deliver faster while building observability across the value streams.
Quality Engineering champions continuous learning and improvement, facilitating the development of the technical, process, and cultural capabilities. Drawing upon ideas from Continuous Testing and Holistic Testing, QE promotes a “testing-as-a-way-of-thinking” mentality, transforming it into an integral aspect of the software delivery lifecycle, akin to a lifestyle.
In essence, Quality Engineering represents a paradigm shift in the software industry, merging the core principles of quality assurance with the agility and adaptability required for modern software development, ultimately driving innovation and excellence. QE helps create an environment that fosters innovation, excellence, and most importantly, a human-centred approach to delivering quality software solutions.
Where to leverage QE?
Quality Engineering (QE) is a highly adaptable discipline that plays a significant role in a wide range of ecosystems seeking to transform their ways of working or delivering value faster. By embedding testing as “a way of thinking” across the entire value stream, QE acts as a powerful catalyst for cultural change.
The importance of QE in Agile and DevOps ecosystems is evident, but its influence extends beyond these frameworks. Even in relatively traditional environments, QE can bring about much-needed change by enhancing the observability of the delivery process and encouraging teams to continuously improve.
Embracing a holistic perspective, QE recognizes and addresses the unique needs of both build and buy ecosystems, empowering teams to cultivate technical, process, and cultural capabilities. Although the methods of developing these specific capabilities may differ across various environments, the underlying ideology and philosophy of QE remain steadfast and consistent, fostering a unified approach to quality across diverse contexts.
In essence, Quality Engineering is all about empowering people, nurturing collaboration, and promoting a growth mindset, regardless of the ecosystem in which it is applied. By adopting a human-centred approach, QE paves the way for more efficient, resilient, and innovative software development processes that deliver exceptional value to end users.
How to Engineer Quality?
To engineer quality in software delivery ecosystems, it’s vital to have a deep understanding of Product Mindset, Systems Thinking, and their connection to approaches like Agile and DevOps.
One of the primary challenges in engineering quality is gaining a well-rounded understanding of the landscape, considering cultural, process, and technology aspects, and then designing and continually refining a solution tailored to these unique contexts. To help us navigate this challenge and effectively integrate quality into the management, development, operation, and maintenance of IT systems, I’ve tried compiling a list of guiding principles that take these diverse aspects into account:
-
People over process: Cherish the unique skills, creativity, and collaborative spirit of individuals both within and outside of teams, while still maintaining efficient processes that enable seamless and consistent delivery. Recognize that it’s the people who truly drive innovation and success, and processes should serve to support and empower them.
-
Testability over testing: Design, build, and maintain systems with testability in mind, making it easier to identify and resolve issues, rather than solely concentrating on the act of testing.
-
Observability over understanding: Prioritize monitoring and analyzing system behaviour and performance, recognizing that complete understanding can be elusive, especially in complex and rapidly evolving systems.
-
Collaboration in testing over testing: Equip team members with the necessary tools, techniques, and knowledge to effectively carry out testing, placing emphasis on fostering collaboration and sharing knowledge rather than merely increasing the volume of testing conducted throughout the development process.
-
Playbooks over plans: Create adaptable playbooks that guide your team’s actions and decisions, as opposed to relying on inflexible plans that may not account for changes or unforeseen challenges.
-
Risks over coverage: Target identifying and mitigating risks that could significantly impact the system’s performance and user experience, instead of merely striving for extensive test coverage.
-
Problem over tools: Focus on addressing the root causes of problems and continuously improving processes, rather than depending exclusively on tools to resolve issues.
-
Context over test approach (scripted, automated, exploratory): Understand the unique context of each testing situation and select the most appropriate approach, rather than adhering to a one-size-fits-all strategy.
-
Automation over automation testing: Leverage automation to support, enhance, and enable testing, rather than viewing it as a replacement for manual testing efforts.
By adopting these principles in your software delivery ecosystem, you can cultivate a culture of continuous improvement, collaboration, and innovation, ultimately leading to higher-quality products and services that delight your users.
Written by Rahul
← Back to blog