Over a million developers have joined DZone.

Creating a Culture of Quality

· Agile Zone

Reduce testing time & get feedback faster through automation. Read the Benefits of Parallel Testing, brought to you in partnership with Sauce Labs.

Every product company wants to delight customers with a high-quality product, and many engineering organizations naturally focus on process improvements to reach quality goals. But organizational culture eats strategy and process for breakfast. So how do you create a culture of quality?

Product quality is one of the areas that most engineering teams monitor closely throughout the software development lifecycle. When quality improvements are needed, many engineering teams focus on process improvements as the way to get there. After all, the quality of the product is a manifestation of the quality of the process that was used to create it, right?

Products are manifestations of the culture that created them, too. As Bill Aulet, managing director of the Martin Trust Center for MIT Entrepreneurship and a senior lecturer at Sloan, reminds us, culture eats strategy for breakfast - and, I argue, process as well. When organizational culture clashes with the spirit of a process change - such as when a command and control culture tries to achieve productivity gains through self-managed, agile teams - culture wins every time.

So how do you drive quality through culture? In their HBR article on creating a culture of quality, Ashwin Srinivasan and Bryan Kurey of CEB share the results of their recent research on this question. They studied over 850 employees who impact quality from 80 multinationals to find four factors that drive quality as a cultural value:

  1. Leadership emphasis. Managers need to demonstrate how to "walk the walk" with respect to quality, and this must come right from the top. You can do this by:
    • Tracking quality metrics. Define meaningful measures of quality that senior leadership, product management, QA, and engineering can all agree to.
    • Making your metrics visible. Pull them out frequently in meetings, and review them in regular check-ins with your team.
    • Using quality in trade-offs. Create clear definitions and guidelines for minimum quality levels, and use them in meetings when trade-offs need to be made at the end of a release. When your team sees quality metrics being used in trade-off decision-making, they'll know that quality matters.

  2. Message credibility. Successful managers carefully choose the right way to communicate the quality message based on what resonates with their team. You can do this through experimentation. Communicate the perspective of different internal or external stakeholders about product quality, and see what lights your team up. Examples might include:
    • Customer satisfaction. Interview or survey customers on their overall satisfaction with the product, and include quotes to bring their sentiment to life.
    • Sales experience during demos. As any sales rep will tell you, having the product crash during a prospect demo can be very damaging - and awkward for the sales rep. Find out how sales reps experience the product during demos and how reliably they can show it off.
    • Perceptions of senior leadership. In many organizations, senior leaders (especially founders) love to play with new product capabilities. Invite them to get involved towards the tail end of a release and interview them about their experience.

  3. Peer involvement. Your team will internalize quality once they begin engage each other about it - and you can help encourage this by taking various steps:
    • Create rituals at design time. During design discussions, help your team develop a routine to evaluate the quality impact of various design options. Provide questions for the team to answer for each design being considered, and after a release show how these contributed to overall quality.
    • Invite peer assessments. During periodic status meetings, show your team the latest quality metrics and ask each person to make their own assessment of where you stand. Where is there agreement and where do conclusions diverge? Regardless of the answer, simply inviting the team to make their own assessment will get them thinking about quality.
    • Pair programming. If done at regular intervals, particularly between junior and senior developers, this will help encourage discussions around quality at design and implementation time. Encourage your senior developers to discuss this in each pair programming session.

  4. Employee ownership & empowerment. You can empower your team to make quality decisions and feel greater ownership over the results. To do this, consider the following:
    • Recognize quality initiatives. Create individual measures of quality (such as bugs per developer, perhaps scaled by project complexity) and provide visibility and recognition to those on your team who get results. Create a dashboard displayed prominently for each person to see how they stack up against peers. Use this in meetings.
    • Create competitions. For a big project, consider awarding prizes to the top performers who implement the highest-quality code. Be sure to announce the competition at the outset and clarify how people will be measured. Have fun with it.
    • Create learning opportunities. Invite team members with the best track record to deliver lunch talks on how they approach quality, design choices they made, and the outcomes of recent projects. In preparing the talk, encourage the team member to show links between their approach to quality during a feature implementation and how customers, sales reps, or senior leaders experienced it.

The Agile Zone is brought to you in partnership with Sauce Labs. Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure.

Topics:

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}