The Defect LedgerSeverity · priority · triage

Defect board › Bug Reports

The Bug Report Is a Contract Between Tester and Engineer

Logged 2026-10-20

01 Overview

A bug report is not a complaint, a suggestion, or a diary entry. It is a contract between the person who found the defect and the person expected to fix it. Like any contract, it works only when both parties share the same understanding of what is being promised. The tester promises that the defect is real, reproducible, and described clearly enough to act on. The engineer promises to read it, evaluate it, and either fix it or explain why it will not be fixed now. When that mutual understanding breaks down, the defect lingers, the team argues about severity, and trust erodes.

This article treats the bug report as a piece of craft, not paperwork. The goal is not to satisfy a template but to transfer understanding from one mind to another with as little loss as possible. That means writing for a reader who was not there when you found the problem, who may not know your test data, and who has a queue of other work competing for attention. A strong report respects that reader's time by being complete, specific, and honest about uncertainty.

The contract metaphor matters because it changes how you write. You are not venting. You are not proving your worth as a tester. You are making a precise claim that someone else can verify and act on. Every section that follows builds toward that claim: what the defect is, how bad it is, how to see it, who should handle it, and what happens when it comes back.

02 What the report is actually claiming

Every bug report makes three implicit claims. First, that the observed behavior differs from expected behavior. Second, that the difference is caused by the product rather than by the environment, test data, or the tester's own mistake. Third, that the difference matters enough to warrant someone's attention. If any of those claims is weak, the report is weak, no matter how politely it is written. The engineer reading it is silently asking: is this real, is this ours, and is this worth my time right now?

Expected behavior is the hardest part to get right because it is often assumed rather than stated. A report that says 'the save button does not work' leaves the reader guessing. Does it not respond to clicks? Does it respond but fail to persist? Does it persist but show the wrong confirmation? The claim must be specific enough that a reasonable person could disagree with it. If no one could disagree, you have not described a defect; you have described a mood.

Causation is the second claim, and it is where testers often overreach. Finding a defect in a particular build, browser, or account does not prove that the build, browser, or account caused it. Good reports separate what was observed from what was inferred. They say 'this happens on this build with this data' rather than 'this is broken because of the new caching layer.' Inference is useful, but it belongs in a note, not in the claim itself. The claim should be something the engineer can confirm or refute with evidence.

03 Severity versus priority

Severity describes how much damage the defect causes when it occurs. Priority describes when the team intends to fix it. These are related but not identical, and confusing them is one of the most common sources of friction between testers and engineers. A defect can be high severity and low priority, or low severity and high priority. Severity is a property of the defect. Priority is a property of the schedule. The tester usually owns the severity assessment; the product owner or engineering lead usually owns priority.

Consider a crash that occurs only when a user imports a file format that almost no one uses. The damage is severe when it happens: data loss, a hard stop, no workaround. But if the format is rare and the fix is expensive, the team may reasonably schedule it after more visible work. Conversely, a typo in the headline of the checkout page is low severity in terms of function, but high priority because it damages trust on every visit. Neither judgment is wrong. They are answering different questions.

When you write a report, state severity with a short justification tied to user impact, not to your personal frustration. Avoid words like 'critical' unless you can explain what becomes impossible or unsafe. If you believe priority should be high, say why in scheduling terms: it blocks a release, it affects a launch, it generates support load. Separating the two keeps the conversation about the defect rather than about the tester's judgment. It also gives the triage group room to make a defensible decision without feeling pressured to accept your framing wholesale.

04 Writing steps someone else can follow

Reproduction steps are the heart of the contract. If the engineer cannot reproduce the defect, the report is not actionable, and the defect may be closed as cannot reproduce even though it is real. The goal is not to document everything you did. The goal is to give the shortest reliable path from a known starting state to the observed failure. Start from a clean state whenever possible: fresh account, default settings, known build. Then list only the actions that matter. If a step does not change the outcome, cut it.

Be concrete about data. 'Enter a valid email' is weaker than 'enter [email protected].' 'Use a large file' is weaker than 'use a 12 MB PNG.' The reader should not have to invent inputs. If the defect depends on timing, say so. If it depends on a previous action, include that action even if it seems unrelated. If you are not sure which step is essential, say which steps you have varied and which you have not. That honesty helps the engineer narrow the search.

Describe the observed result in plain language, then describe the expected result. Avoid interpreting the failure in the steps themselves. Keep the steps neutral: click here, enter this, observe that. Put your theory about the cause in a separate note. If the defect is intermittent, say how often you saw it and what you tried to make it more reliable. An intermittent defect with clear frequency information is far more useful than a confident claim that turns out to be unreproducible. The contract holds only when the other person can walk the same path and see the same thing.

05 Running the triage queue

Triage is the routing decision made at review. It is not a debate about whether the tester is right. It is a working session that answers a small set of questions for each report: is this real, is this ours, how bad is it, when should we fix it, and who owns the next action. A good triage process keeps those questions separate. Mixing them turns the meeting into a negotiation about blame or urgency, which slows everything down and produces inconsistent decisions.

The first pass is confirmation. Someone other than the reporter should be able to follow the steps and see the defect. If they cannot, the report goes back for more information rather than being closed outright. The second pass is classification: affected area, severity, and likely cause. The third pass is scheduling: priority, owner, and target. Not every report needs a deep discussion. Many can be routed in seconds once the claim is clear. The value of triage is consistency, not ceremony.

A healthy queue has a visible order and a visible rationale. Reports that are waiting on information should be marked as such, not left in limbo. Reports that are deferred should say why, so the tester understands the decision and can plan around it. Reports that are duplicates should be linked, not silently discarded. The triage group should also watch for patterns: repeated defects in the same area may indicate a design problem rather than a series of isolated bugs. The queue is not just a list of work. It is a signal about where the product is fragile, and that signal is worth reading.

06 When a defect comes back

A defect that returns after being marked fixed is not a failure of the contract. It is a new event that requires the same discipline as the original report. The temptation is to reopen the old ticket with a terse comment like 'still broken.' That may feel efficient, but it often loses the context that made the original report useful. A better approach is to add a clear update: what build you tested, what steps you followed, what you observed, and how it differs from the original failure. If the behavior is different, say so. A partial fix that changes the symptom is still valuable information.

Reopening also raises a question about status. The report moves from resolved back to confirmed or in progress, and the owner may change. That transition should be explicit. If the original fix was verified by someone else, note that the verification no longer holds. If the defect now appears in a different environment, record that environment. The goal is to give the next reader the same clean starting point the original report provided, without forcing them to reconstruct history from a long comment thread.

Sometimes a defect comes back because the fix addressed a symptom rather than a cause. Sometimes it comes back because a related change reintroduced it. Sometimes it was never really fixed and the verification was too shallow. In each case, the response should be proportionate. Do not assume malice or carelessness. Do assume that the report needs to stand on its own again. The contract is renewed every time someone picks up the ticket, and it is renewed best when the information is current, specific, and honest about what is known and what is not.

07 Frequently asked questions

How much detail is enough? Enough that a competent engineer who was not involved can reproduce the defect without asking you a question. That usually means a clean starting state, a short numbered sequence, concrete data, and a clear observed-versus-expected statement. If you find yourself writing a paragraph of caveats, consider whether the caveats belong in a note rather than the steps. The steps should be the shortest reliable path. The notes can carry uncertainty and theory.

What if I cannot reproduce it reliably? Say so, and say what you tried. Include frequency, environment, and any patterns you noticed. An intermittent report is still a report. It may be triaged as needing more information, but it should not be dismissed. If you can capture logs, screenshots, or a recording, include them, but do not let artifacts replace a clear written claim. The written claim is what gets routed and scheduled.

Who decides severity and priority? Severity is usually proposed by the tester based on user impact, then confirmed or adjusted during triage. Priority is usually decided by the product owner or engineering lead based on schedule, risk, and cost. If you disagree with a priority decision, ask for the reasoning rather than restating the severity. The two are different questions, and treating them as one makes the conversation harder. Finally, remember that a bug report is a professional document. It should be calm, specific, and free of blame. The contract works when both sides can read it and know exactly what happens next.