Quality Engineering in Agile and DevOps
Early in the software engineering journey, there were primarily developers. Developers had a wide array of accountabilities: designing, coding, testing, deploying, maintaining, and more. Quality was inherently built in and championed by the triad of the customer, the business, and the developers.
As we scaled, we segmented these responsibilities across roles, which came with both benefits and challenges. For example, ensuring that quality is advocated for at every step along the lifecycle, from ideation to deployment, can be tough.
One easy response is, “Quality is everyone’s job”—after all, whole-team accountability is a key tenet of agile. But what does this really mean in practice? What approaches and roles help us embrace a culture of whole-team accountability for quality?
Quality engineer, quality advocate, quality champion, and quality evangelist are roles that I think better represent what we need across teams as our agile and DevOps practices continue to mature. Ultimately, a high-performing agile team defines, implements, and manages quality practices in all aspects of their work themselves. For teams that need some assistance in getting this culture and these practices in place, an enablement role—with skills and experience around building quality in—is required.
While testing is an important part of developing and delivering a quality product, quality goes far beyond testing to ensure that a product meets the client or business needs. Beyond the testing role, we also need team members who are accountable for the broader quality scope, ensuring that quality methods, practices, processes, tools, technology, audits, and measures and metrics are in place.
In agile and DevOps, we’d like to instill a quality engineering attitude and culture in every team member. Quality engineering in software development and delivery is the management, development, operation, and maintenance of IT systems and architectures, with a high quality standard.
Broadening our thinking from merely testing to quality engineering includes:
- Collaborating with clients, customers, and the business to understand their product and service quality criteria
- An attitude, culture, and approach of checking at every step, from ideation to production operation
- Not only developing great testing skills, but also understanding and implementing quality skills and practices
- Defining and implementing quality management approaches within teams and across teams of teams
Quality engineering responsibilities may include a range of contributions throughout the software engineering process, such as defining and implementing quality methods for product development and delivery, contributing to product- and service-level quality goals and objectives, software design, code reviews, code refactoring, story and acceptance criteria reviews, quantifying nonfunctional requirements, defining the quality measurement system, implementing automated quality gates within the DevOps pipeline, putting feedback systems in place for customer experience and production operations, and, of course, unit, integration, story, exploratory, and acceptance testing.
The key point is that in agile and DevOps, the goal is to design quality in, establish a quality engineering mindset, and ensure that everyone on the team has the required skills to design, implement, and maintain this quality management system. As with most changes, culture is the first step.
Michael, thank you for addressing this. Quality engineering has been quite a debatable subject in my network. And, for sure, quality is everybody's responsibility. But, it is also important that everyone understands their responsibility clearly. Otherwise, it would just be a major chaos.
I am really happy with the quality and presentation of the article. Thanks a lot for keeping great stuff.