DEV Community

Cover image for Essential Steps for Creating a Robust Software Quality Foundation - Culture, Roles & Mindset
idavidov13
idavidov13

Posted on • Originally published at idavidov.eu

Essential Steps for Creating a Robust Software Quality Foundation - Culture, Roles & Mindset

In our previous article (The Complete Quality Engineering Roadmap), we laid out a five-phase roadmap for building quality into software. We argued that you can't test your way to a great product, simply because quality has to be built from the ground up. Now, we're going to start that foundation.

This isn't just a philosophical discussion. This is a practical guide to Phase 1: Culture, Roles, and Mindset. We'll break down each foundational principle and give you a clear framework for what it is, why it's a non-negotiable part of success, and how you can actually implement it with your team, starting today.

Practical Guide


A Shared Definition of "Quality"

  • WHAT it is: A shared definition of quality is a clear, explicit agreement across the entire team (product, design, development, and QA) on the specific attributes that make your product "good". It’s a consensus on the target you are all aiming for.

  • WHY it matters: Without a shared definition, everyone operates on assumptions. A developer might define quality as "bug-free, performant code". A product manager might see it as "shipping features that meet business goals". When these definitions clash, you get chaos and a product that excels at nothing. A shared definition aligns everyone's efforts toward the same outcome.

  • HOW to create it: Run a "Quality Definition" workshop. Get everyone in a room and ask probing questions:

    • For our customers, what does quality feel like? Is it speed? Reliability? Ease of use? Security?
    • Who are our main competitors, and what is their quality bar? Where must we be better?
    • Write down the results. List the top 3-5 attributes that are a must for your product and post them visibly for the whole team.

Quality is Everyone's Responsibility

  • WHAT it is: This is the principle that quality is not the job of a single department ("QA team"). Instead, it is a core competency and a daily responsibility for every single person involved in building the product.

  • WHY it matters: When quality is siloed, it becomes a gate at the end of the process. This creates an "us vs. them" mentality, where developers "throw code over the wall" for QAs to "catch the bugs". This is incredibly inefficient, as issues are found far too late. Shared responsibility makes quality an ongoing activity, not a final inspection.

  • HOW to implement it:

    • Integrate quality into rituals. During sprint planning, ask "How will we ensure this story is high-quality?" not just "How long will it take?"
    • Eliminate the "Ready for QA" column. Treat quality as a continuous conversation where developers and QAs collaborate throughout the development of a feature.
    • Share quality metrics with everyone. Make bug counts, performance data, and uptime visible to the entire team. What gets measured and seen gets improved.

Psychological Safety

  • WHAT it is: Psychological safety is a shared belief that team members can take interpersonal risks without fear of being punished or humiliated. It's the confidence to speak up, ask questions, admit mistakes, or challenge the status quo.

  • WHY it matters: This is the bedrock of a healthy culture. Without it, you are just gambling. Team members will hide mistakes and stay silent about risks. This silence is where bugs, security vulnerabilities, and bad architectural decisions are born. Psychological safety turns silence into valuable information.

  • HOW to build it: This is primarily the leader's responsibility.

    • Model vulnerability. Acknowledge your own mistakes. "I was wrong about that assumption" is one of the most powerful things a leader can say.
    • Treat questions as a gift. When someone asks a "dumb" question, thank them. It's likely others had the same question but were afraid to ask.
    • Focus on the process, not the person. When a mistake happens, ask "How can we prevent this in the future?" not "Why did you do that?"

Visible Leadership Buy-In

  • WHAT it is: This is tangible, consistent proof from leadership that quality is a top-tier business priority, not just a talking point. It’s action, not just words.

  • WHY it matters: Teams take their cues from leadership. If a leader says quality is important but then consistently pushes the team to cut corners to meet a deadline, the message is clear - speed matters more. Visible buy-in empowers teams to do the right thing.

  • HOW to spot it (and do it):

    • Budgeting: Leaders allocate time and money to address technical debt. They approve the purchase of better tools and training.
    • Prioritization: When a critical bug is found, they prioritize fixing it over starting the next new feature.
    • Reinforcement: They publicly praise teams for a smooth, high-quality release, not just for shipping a feature fast. They back the QA's decision when a serious risk is flagged.

The Blameless Retrospective

  • WHAT it is: A structured meeting following an incident (like a production outage) where the entire focus is on understanding the systemic causes and improving the process. Blame is never the objective.

  • WHY it matters: A culture of blame stimulates hiding the truth. If people are afraid of punishment, they will never be fully transparent about what happened. Blamelessness creates an environment where the team can dissect a failure honestly to find the root cause and ensure it never happens again.

  • HOW to run it:

    • Have a neutral facilitator. This person's job is to keep the conversation focused on the process.
    • Ask "how," not "who." The guiding question is always, "How did our process allow this to happen?"
    • Focus on actionable system improvements. The output should be things like "Add a new CI check" or "Improve our deployment runbook," not "Dave needs to be more careful".

Redefining the QA Role: From Gatekeeper to Coach

  • WHAT it is: The evolution of a Quality Assurance professional from a "bug finder" at the end of the line to a "quality coach" and advocate embedded within the team from the very beginning.

  • WHY it matters: Finding bugs late is expensive. The gatekeeper model creates bottlenecks and an competitive relationship. A coaching model prevents entire classes of bugs from ever being written by clarifying requirements and identifying risks upfront. It is proactive, not reactive.

  • HOW to make the shift:

    • Get QAs in the room, early. QAs must be part of initial planning and "Three Amigos" sessions to ask probing questions before a line of code is written.
    • Focus on enablement. The QA's job is to enable developers to test better by championing best practices, maintaining test infrastructure, and pairing with them.
    • Change the metrics. Success isn't "bugs found." It's "preventing bugs" and "increasing team confidence in the release".

Defining the Developer's Role: True Ownership

  • WHAT it is: This is the principle that developers are the primary owners of the quality of their own code. The QA role is a partnership, not a safety net for sloppy work.

  • WHY it matters: The person writing the code has the most context to build quality in from the start. Relying on an external check creates a diffusion of responsibility. When developers own quality, they write more resilient, maintainable, and well-tested code.

  • HOW to foster it:

    • Go beyond unit tests. Ownership includes writing good logs, considering edge cases, and ensuring code is clean and maintainable.
    • Implement Pair Testing. Have a developer and QA test a feature together. This builds empathy and creates a powerful, immediate feedback loop.
    • Make quality part of code reviews. Reviews should check for more than just style. They should ask "Is this functionality robust? Is it well-tested?"

Understanding the Domain In-Depth

  • WHAT it is: This means the QA is not just an expert in testing techniques, but also a deep expert in the business domain, the product's features, and the customer's problems. They are the "glue" between business and technology.

  • WHY it matters: You can't test what you don't understand. Deep domain knowledge allows a QA to identify risks that developers or product owners might miss. They can design tests that simulate real-world usage, not just technical correctness.

  • HOW to develop it:

    • Be relentlessly curious. Research the biggest user pain points for a similar products.
    • Ask "why" five times. Understand the root business need behind every feature.
    • Become the user. Use your product regularly, trying to accomplish the same goals your customers do.

Establish Equal Authority

  • WHAT it is: This means that the QA's voice and professional judgment on matters of quality risk carry the same weight as a developer's voice on technical implementation. It is a partnership of equals.

  • WHY it matters: If there's a power imbalance, quality concerns will always be overruled by delivery pressure. The QA becomes the "little brother" whose warnings are ignored. This leads to a culture where known risks are accepted and shipped. Equal authority ensures a balanced decision-making process.

  • HOW to achieve it:

    • Structurally: QA should report through the same management chain as development, not as a subordinate function.
    • In practice: In meetings, leaders must explicitly give equal speaking time and weight to QA perspectives. A developer shouldn't be able to merge code if the QA has raised a valid, blocking concern that hasn't been addressed.

Foundation


Conclusion: The Groundwork is Laid

Quality Engineering is a mindset, not a role. By establishing this cultural foundation, you stop treating quality as an accident and start building it by design.

With this solid cultural foundation in place, you are no longer guessing about quality—you are ready to design it. The next step is to implement “Proactive Strategies for Pre-Development Success - Requirements, Stories & Planning” that prevents bugs before a single line of code is ever written.

Top comments (0)