The Defect LedgerSeverity · priority · triage

Defect board › Bug Reports

Stop Filing Vague Bugs: Write the Symptom, Not Your Theory

Logged 2026-10-14

01 Overview

A bug report is not a place to show how clever you are at guessing root cause. It is a precise description of what happened, what you expected, and how someone else can see it for themselves. When you write the symptom instead of your theory, you give the team a stable target. The symptom is observable: a button does nothing, a page shows the wrong total, a request returns an error. Your theory is a hypothesis, and hypotheses change as evidence arrives. If the report is built around a theory, the whole thing collapses when the theory is wrong, even if the defect is still real.

This article is about the craft of writing defect reports that survive review, handoff, and re-testing. It treats the bug tracker as a communication tool, not a confessional. The goal is not to sound authoritative; the goal is to make the defect easy to confirm, easy to route, and easy to verify after a fix. That means separating what you saw from what you think it means, and writing steps that another person can follow without asking you a single question. The discipline pays off in faster triage, fewer back-and-forth comments, and a cleaner history of what actually shipped.

02 What the report is actually claiming

Every defect report makes a claim: under certain conditions, the system does something it should not do. The strongest reports state that claim in observable terms. They say what the tester did, what the system displayed or returned, and what was expected instead. They do not say the cache is stale, the state machine is broken, or the developer forgot to await a promise. Those are explanations, not observations. An explanation can be useful, but it belongs in a clearly marked note, not in the title or the reproduction steps.

When a report leads with a theory, it quietly changes the claim. Instead of asking the team to confirm a behavior, it asks them to confirm a diagnosis. If the diagnosis is wrong, the report may be closed as invalid even though the behavior still exists. Worse, a confident-sounding theory can send triage down the wrong path, wasting time on a component that is not involved. The fix is simple: write the symptom first, in plain language, and let the evidence point to the cause. If you have a strong hypothesis, add it as a separate paragraph labeled as a hypothesis, so it can be tested rather than trusted.

03 Severity versus priority

Severity describes how much damage a defect causes. Priority describes when the team intends to fix it. These are related but not the same, and confusing them leads to bad triage. A crash that loses user data is high severity. A typo in a rarely visited admin screen is low severity. But a low-severity cosmetic issue on the checkout page during a major sale might be high priority because it affects revenue and trust. Conversely, a high-severity crash in a feature that is not yet enabled for users might be low priority until launch. Severity is a property of the defect; priority is a property of the schedule.

When you file a report, you can suggest severity based on impact, but you should not assume priority. Priority is a team decision that weighs severity against business goals, release timing, and available capacity. A good report gives triage enough information to set both: what breaks, who is affected, how often, and whether there is a workaround. If you write the symptom clearly, the severity is easier to judge. If you write only your theory, the severity may be overstated or understated because the actual behavior is hidden. Keep the two concepts separate in your own mind, and the report will be easier to route.

04 Writing steps someone else can follow

Reproduction steps are the heart of a defect report. They should be the shortest reliable path to the symptom, written as a sequence of actions and observations. Start from a known state: a fresh session, a specific account, a particular data setup. Then list each action in order, using plain verbs. After each action, state what you observed. Do not combine multiple actions into one step, and do not skip steps because they seem obvious. The test is whether a colleague on a different machine can follow the steps and see the same result without asking you anything.

Include the environment details that matter: browser or client version, operating system, device type, and any feature flags or configuration that affect the path. If the defect depends on data, describe the data shape without pasting sensitive values. If the symptom is intermittent, say so and give your best estimate of how often it occurs, but do not invent a percentage. Attach evidence such as a screenshot, a short screen recording, or a log excerpt, and point to the exact moment in the evidence where the symptom appears. Finally, state the expected result in one sentence. The expected result is not a design document; it is the behavior a reasonable user would expect, or the behavior defined by the specification if one exists.

05 Running the triage queue

Triage is a routing decision, not a debate about whether the tester is right. The queue exists to move each report to the right owner with the right severity, priority, and next action. A well-written report makes triage fast because the symptom is clear, the steps are reproducible, and the affected area is named. A vague report slows the whole queue because someone has to ask clarifying questions, and the defect may sit unresolved while the conversation continues. The triage meeting should focus on decisions: is this a defect or expected behavior, which component owns it, how severe is the impact, and when should it be fixed.

During triage, resist the urge to re-diagnose. The goal is to confirm the symptom and assign ownership. If the report includes a hypothesis, treat it as a lead, not a conclusion. If the symptom cannot be reproduced, mark it as such and ask for more evidence rather than closing it outright. If the defect is real but low priority, say so explicitly and record the reason, so the decision is visible later. Keep the status field honest: new, triaged, in progress, fixed, verified, or closed. A clean triage queue is a sign of a healthy process, and it starts with reports that describe behavior instead of guessing at causes.

06 When a defect comes back

A defect that comes back after a fix is not a failure of the tester; it is new information. The first question is whether the original symptom is still present, or whether a related symptom has appeared. Re-read the original report and compare the current behavior to the original steps. If the steps no longer reproduce the issue, say so clearly and note what changed. If the issue reproduces but in a different way, write a new report or update the existing one with the new symptom, keeping the original steps intact for history. Do not overwrite the original description with a new theory, because that destroys the record of what was actually fixed.

When a defect returns, check the environment and data first. A fix may have been verified on a different build, with different configuration, or with a different data set. If the fix was partial, the remaining symptom should be described as a new defect with its own severity and priority. If the fix introduced a regression, link the new report to the original and note the relationship. The goal is to keep the ledger accurate: what was reported, what was fixed, what was verified, and what remains. A defect that comes back is a chance to improve the reproduction steps and the expected result, so the next fix is easier to confirm.

07 Frequently asked questions

How much detail is too much? Include enough detail to reproduce the symptom reliably, and no more. If a step does not affect the outcome, leave it out. If you are unsure whether a detail matters, include it in a separate note rather than in the main steps. The main steps should be the shortest path to the symptom.

Should I include my theory about the cause? You can, but label it clearly as a hypothesis and keep it out of the title and the reproduction steps. The report should stand on the symptom alone. If your theory is wrong, the report should still be valid and useful.

What if I cannot reproduce the defect consistently? Say so, and describe what you have observed so far. Include any patterns you noticed, such as timing, data, or environment, but do not present a guess as a fact. Intermittent defects are still worth filing because they may indicate a real race condition or environmental issue.

Who decides severity and priority? The triage team decides, using the impact described in the report. You can suggest a severity, but priority is a scheduling decision that belongs to the team. The best thing you can do is write a clear symptom and let the evidence speak.