Skip to content
All posts
April 1, 20266 min read

QA vs Developer: Who Owns Quality in 2026?

The old model of 'devs build, QA tests' is broken. Here's how responsibility is actually distributed in modern teams, why both sides fail when they misunderstand their role, and what a working quality culture looks like.

TestingEngineeringTeamBest Practices
Share:

The most common quality failure I've seen in teams has nothing to do with testing tools or test coverage. It's this: developers think QA will catch their bugs, and QA thinks developers should write bug-free code.

Both assumptions are wrong. Both create gaps. And the bugs that fall through those gaps are the ones that reach your users.


The Old Model (And Why It's Broken)

The traditional model: developers write code, throw it over the wall to QA, QA finds bugs, developers fix them, repeat.

This creates several problems:

Problem 1: QA is a bottleneck. Everything stops at QA. Release velocity is limited by how fast the QA team can test. As the product grows, the QA team can never scale fast enough.

Problem 2: Bugs are expensive at this stage. Finding a bug in QA means the developer context-switches back to code they finished days ago. Finding it in production is even worse. The further from the moment of writing, the more expensive the fix.

Problem 3: "QA will catch it" becomes an excuse. When developers know someone else will test their work, there's less incentive to test it themselves. Code quality slowly drifts. The QA team inherits the resulting mess.

Problem 4: QA becomes a gatekeeper, not a partner. QA is adversarial instead of collaborative. Developers resent the bugs QA files. QA resents the volume of issues that should have been caught earlier.

[!NOTE] The problem isn't that QA exists — it's where in the process quality work happens. Finding problems early is dramatically cheaper than finding them late.


What Developers Own

Quality starts with the developer. Not because they're better testers, but because they're closest to the code when it's written.

Developers should own:

Unit and Integration Tests

The developer knows what the function is supposed to do. They should write tests that prove it does that thing, including edge cases they know about from implementation.

kotlin
// Developer writes this at the same time as the implementation
@Test
fun `parseDepatureTime returns null for malformed time string`() {
    val result = DepartureParser.parseTime("not-a-time")
    assertNull(result)
}

@Test
fun `parseDepatureTime handles midnight correctly`() {
    val result = DepartureParser.parseTime("00:00")
    assertEquals(LocalTime.MIDNIGHT, result)
}

Code Review

Before anything reaches QA, another developer should have read it. Code review catches logical errors, missing error handling, and cases the author didn't consider. It's not a formality.

Self-Testing Before Handoff

Every developer should test their own code before marking a ticket as "ready for QA." This means: run it, try to break it, check the obvious edge cases. Not comprehensive testing — that's QA's job. But basic verification that the implementation works as intended.

Build Stability

If the build is broken, QA can't test. Broken builds are developer failures, not QA delays.


What QA Owns

QA's job is not to be a second-pass developer. It's a different discipline entirely.

QA should own:

Test Strategy

Which features need automation? Which need exploratory testing? What's the regression scope for this release? These are judgment calls that require understanding the product, the risk areas, and the release timeline. This is QA's domain.

Exploratory Testing

QA brings a user perspective. They test things developers didn't think to test. They find the interaction between features, the edge cases in user journeys, the inconsistencies across platforms. This is uniquely human work.

Non-Functional Testing

Performance, security, accessibility, localization. These cut across features and require dedicated attention. Developers rarely have the time or tooling to cover these systematically.

Release Sign-Off

QA provides the final confidence signal before a release. Not "I tested everything" — that's impossible — but "I've tested the critical paths, covered the high-risk areas, and I'm confident this is releasable."

Reporting and Feedback Loops

Good QA teams don't just file bugs — they analyze patterns. "We've seen three payment-related regressions this quarter. All were in the same module. Let's talk about test coverage there." That's a QA contribution developers can't make from their position.


The Shift-Left Reality

"Shift left" means moving quality work earlier in the process — closer to development, further from deployment. In practice:

  • QA is involved in requirements review, not just test execution
  • Test cases are written before implementation, not after
  • Automation runs on every commit, not just before release
  • QA and developers pair on complex features during development
code
Old model:   Design → Build → QA → Deploy
Shift-left:  Design → (QA) → Build → (QA) → Deploy
                     ↑                 ↑
              requirements          automation
                  review              + PR checks

[!TIP] Shift-left doesn't mean developers do QA's job. It means QA's input comes earlier. The clearest sign of shift-left done right: QA is flagging edge cases during design review, before a single line of code is written.


Where Teams Fail

Mistake 1: QA only at the end QA gets the build three days before the release deadline. They find significant issues. There's no time to fix and retest properly. The release is either delayed or ships with known issues. This is a process failure, not a QA failure.

Mistake 2: Developers who don't test "That's what QA is for." No. QA is for the things developers missed. If developers don't test at all, QA becomes a debugging service — too slow, too expensive, and too late.

Mistake 3: QA without access to developers Bug filed → developer responds a week later → QA re-tests but can't reproduce → ticket goes stale. QA and developers need direct communication, not ticket queues.

Mistake 4: Treating QA as a cost center Quality failures in production are expensive. QA is insurance against that cost. Teams that cut QA to ship faster usually end up paying more in incident response, hotfixes, and user churn.


What Actually Works

The teams I've seen do this well have a few things in common:

  1. QA is in the room during sprint planning. They know what's being built and can flag risk areas before development starts.

  2. Developers are expected to test their own work. Not comprehensively — but enough that QA isn't discovering basic bugs that the developer could have found themselves.

  3. Automation is a team responsibility. QA owns the strategy, but developers contribute. Unit tests, API tests, and CI pipeline configuration are engineering work, not just QA work.

  4. Bugs are treated as system failures, not individual failures. "Who wrote the bug?" is the wrong question. "Why didn't our process catch this?" is the right one.

Quality isn't owned by QA. It's owned by the team. QA's job is to make quality work systematic, measurable, and sustainable — not to carry the entire burden alone.

Share:
S

Sudarshan Chaudhari

AI Systems Builder / Product Engineer

Bangkok, Thailand

Solo Android developer with 13+ years in QA, building Android apps, AI automation systems, and developer tools at SudarshanTechLabs.

Stay updated

Get new posts on Android, Kotlin, and solo dev straight to your inbox.

Newsletter preferences

Building something? Available for Android dev and QA consulting.

Work with me

Comments — powered by Giscus