Working with developers without the adversarial relationship
You can be brilliant at finding bugs and still be ineffective as a QA if the relationship with developers is wrong. Testing is often framed as adversarial — QA versus developers, gatekeepers versus builders — and that framing quietly wrecks teams. The best QAs are collaborators who make the whole team ship better software, not opponents who catch developers out. This lesson is working with developers well, because how you work with people determines whether your testing actually improves the product.
The trap: QA versus developers
The adversarial model is easy to fall into and corrosive in both directions:
- From the QA side — treating your job as catching developers' mistakes, taking satisfaction in finding bugs because they embarrass someone, being the gate that says "no". This makes developers defensive: they hide problems, argue over bug reports, and see testing as an obstacle rather than help.
- From the developer side — treating QA as beneath engineering, throwing untested work "over the wall" for QA to catch, blaming QA when bugs escape ("why didn't testing find it?").
Both come from the same mistake: seeing testing and building as opposing activities. They are not. You and the developers want the same thing — software that works for users. A bug found is not a point scored against a developer; it is the team avoiding shipping a problem. When that shared goal is genuinely felt on both sides, the relationship works; when it is not, no amount of skill compensates.
The mindset that works: shared goal, no blame
The productive stance is simple to state and takes real discipline to hold:
- The goal is quality software, together — not "QA caught developers". A bug you find is a win for the team, and you frame it that way.
- Bugs are about the code, not the person. Report the behaviour, never the developer ("the endpoint returns 500 on an empty amount", not "you forgot to validate again"). No blame, no I-told-you-so, no audience. This is why the bug-reports lesson insisted on neutral, factual reports — tone is part of the craft.
- Assume competence and good intent. Developers are not careless; software is hard and bugs are normal. Approach a bug as "here is something we should look at", not "here is your mistake".
- Be the person who makes shipping safer, not slower. When QA is experienced as help — catching real problems early, clearly, without drama — developers want you involved. That is the goal.
A QA who is trusted and liked finds more bugs fixed, because developers engage with their reports instead of resisting them. The relationship is not soft-skills fluff; it is what makes your testing land.
Get involved early, not just at the end
The single biggest shift from adversarial to collaborative is when you engage. If QA only appears at the end — handed finished work to test — you are set up to be the gate that blocks release, and bugs are found late when they are expensive (the cost-of-bugs lesson). Instead, get in early:
- In planning and design — ask the testing questions before code is written: what are the edge cases, what could go wrong, how will we test this? A QA in the room when a feature is designed prevents bugs that would otherwise be built in. This is often called "shifting left" — moving testing earlier.
- Review acceptance criteria — make sure a story says what "done and correct" means, so there is a shared definition to test against.
- Test as features are built, not in a big pass at the end — so bugs are found while the code is fresh and cheap to fix, and you are a continuous collaborator rather than a final hurdle.
Early involvement changes the whole dynamic: you are helping build quality in, not inspecting it in afterwards — and building quality in is far more effective than testing it in.
Communicating a bug so it gets fixed
The bug-reports lesson covered the content of a report; the relationship adds the how:
- Be clear and reproducible — a developer can fix fast what they can reproduce; a vague report causes friction and "cannot reproduce" bounces.
- Be factual and neutral — behaviour and evidence, not judgement. Let the facts make the case.
- Discuss, do not decree — for severity or whether something is a bug, talk it through rather than ruling. Sometimes the developer has context you lack; sometimes you do. Severity is often a conversation (the severity lesson).
- Acknowledge good work too — not only report failures. A QA who only ever brings bad news is wearing; noting when something is solid builds the goodwill that makes the bad news land.
The aim is that a developer receiving your bug report thinks "clear, fair, let me fix it" — not "here we go again". That reaction is earned by how you communicate, over time, and it directly determines how much of your testing turns into fixed software.
Check your work
The trap: the adversarial QA-versus-developers framing (QA catching developers out; developers throwing work over the wall / blaming QA). Both come from seeing testing and building as opposing — they are not; both sides want working software. A bug found is a team win, not a point scored.
The mindset: shared goal (quality software, together); bugs about the code not the person (neutral, blame-free, no audience); assume competence and good intent; be the person who makes shipping safer, not slower. A trusted QA gets more bugs fixed because reports are engaged with, not resisted.
Engage early ("shift left"): join planning/design (raise edge cases before code exists), review acceptance criteria (shared definition of correct), test as features are built (bugs found fresh and cheap). Building quality in beats inspecting it in.
Communicate bugs well: clear and reproducible (fast fixes), factual and neutral (facts make the case), discuss don't decree (severity is a conversation), and acknowledge good work (goodwill makes bad news land). Aim for "clear, fair, let me fix it".
Practice
- Rewrite a blaming bug comment ("you broke login again") as a neutral, factual report; explain the difference.
- Give three concrete ways a QA involved in feature planning prevents bugs before code is written.
- Explain "shift left" and why finding bugs early changes the QA-developer relationship.
- Describe how you would handle a disagreement over a bug's severity collaboratively.
- Explain why a QA who only ever reports failures becomes less effective over time.
- Contrast how a developer reacts to a trusted QA's report versus a distrusted one, and what earns the difference.
Official documentation
- Ministry of Testing — Community & collaboration — Working with teams as a tester.
- BrowserStack — What is shift-left testing — Involving testing early in the process.
- Google — Testing on the Toilet / testing culture — How healthy teams treat testing as shared work.
Next: risk-based testing — you cannot test everything.
Stuck on this lesson?
Being stuck is part of it — but being stuck alone for three days is not. Our internship programme pairs this curriculum with code review and one-to-one help from working developers, and it is free.
About the internship