QA · Read 7 min

How to report a bug the developer will actually want to fix

"It doesn't work" is not a report, it's a complaint. A good defect report is reproducible, states expected versus actual, and cuts the fix time in half.

The short answer: a good defect report gets fixed fast because the developer can reproduce it on their own machine without guessing anything. That takes three things: the exact steps to trigger the failure, what you expected to happen, and what actually happened. If your report has those three, it already beats 80% of what lands on a board. Add environment, evidence and an honest severity, and you have just saved someone half an hour of back and forth.

There is a hidden cost buried in "it's broken, fix it". The developer reads that, cannot reproduce it, and lobs the ball back: "which browser?", "which user?", "can you send a screenshot?". That conversation can drag on for two days over a bug that would have taken twenty minutes to fix. The report is not paperwork: it is the artifact that decides whether the defect closes today or bounces around for a week.

01 · the non-negotiable minimumThe three facts without which there is no report

A defect report that cannot be reproduced is an anecdote, not a defect. That is why the international testing standard, ISO/IEC/IEEE 29119, defines the incident report with mandatory fields, and at its core sit the same three every time: steps to reproduce, expected result and actual result. That trio is the heart of the oracle: without the "expected", nobody can tell whether what you saw is a bug or correct behavior you simply did not know about.

The steps to reproduce are written numbered, from a known state, with concrete data. Not "I logged in and it failed", but "1. Go to /login. 2. Use the user demo@qirava.io. 3. Leave the password empty. 4. Click Sign in". Anyone with those steps lands on the same spot. That is the acid test: if you cannot reproduce it twice in a row following your own steps, you do not have a report yet, you have a hunch.

Without an "expected result", nobody can tell a defect apart from a feature you never understood.

The expected result is the one people forget most and the one that heads off the most arguments. Say where your expectation comes from: the user story, the specification, a business rule, documented common sense. "I expected it to reject the submission with an error message" is a verifiable claim. The actual result is what really happened, exactly as it was, with no interpretation: "the page went blank and the console showed a 500 error".

Figure 1 · anatomy of a report that gets fixed
Specific title: what fails, where and under what condition Steps to reproduce 1. Known initial state 2. Concrete data 3. Action that triggers the failure Expected what should happen (and why) Actual what really happened Environment (build, browser, OS, user) · Evidence (screenshot, log, video) · Severity and priority With these seven pieces, the dev reproduces without asking you a thing.
The central trio (steps, expected, actual) is the minimum. The three bands below are what turns a correct report into one that gets fixed the same day.

02 · the context that saves the round tripEnvironment, evidence and a title that reads at a glance

The trio gives you a valid report. The context gives you a report that does not bounce. First comes the environment: build or version number, browser and operating system, user type or role, and the test data used. Half of all "works on my machine" cases are settled right here, because the bug was living in a version, a browser or a permission the developer was not looking at.

Next comes the evidence. A screenshot with the error area marked, a short video if the failure is a sequence, and above all the log or the literal error message. Copy the error text, do not paraphrase it: that stack trace usually points at the exact line of code. Attaching the real error can be the difference between a ten-minute fix and an afternoon of blind tracing.

The title is the first thing read and what sets the priority

"Login bug" says nothing. "Login accepts an empty password and creates a session with the demo user in Chrome" is understood without opening the ticket, gets prioritized instantly, and is even easy to search for when someone reports the same failure. A good title answers three things: what fails, where, and under what condition.

Copy the literal error message. That text is usually the map that leads to the guilty line.

One detail that sets apart whoever reports well: try to isolate before you send. Does it happen always or only sometimes? With any user or just one? On a single screen or several? Reducing the bug to its minimal conditions is, in practice, half the debugging work already done. The developer is grateful, because you hand over the problem scoped down, not the whole mess.

03 · honest severity and the tone that does not burn bridgesHow to classify without inflating and without blaming

ISTQB draws a line between two things people blur together: severity is how much the defect harms the system; priority is how urgent it is to fix. They are not the same. A typo in the home page logo is low severity but high priority, because everyone sees it. A wrong calculation in an edge case almost nobody touches can be high severity and low priority. Splitting the two heads off the "everything is critical" war.

And there lies the temptation: inflating. If you mark everything as a blocker, within two weeks nobody believes you and your real blockers get lost among the false ones. Honest severity is a trust asset. Report the real impact, with data: "it affects every user who pays by card", not "it's super urgent". Data convinces; the adjective wears people out.

Figure 2 · severity is not the same as priority
Severity Priority High sev · low prio crash in a rare case High sev · high prio payment fails for everyone Low sev · low prio a 1px margin Low sev · high prio error in the home page logo
Technical impact and business urgency are separate axes. Reporting them apart gives the team a real picture of what to attack first.

That leaves the tone, which is what decides whether the developer wants to help you or gets defensive. A defect report describes the behavior of the software, not the incompetence of a person. "The form saves the price without the tax" opens a conversation; "you broke checkout again" ends it. The defect is against the system, never against whoever wrote it. That small shift of subject, from "you" to "the system", is what keeps the team on the same side of the table.

Put it all together and the report stops being a complaint. It becomes a small reproducible experiment: here are the steps, this is what I expected, this is what I got, in this environment, with this evidence, and this is the real damage. With that in hand, the developer does not guess: they reproduce, understand and fix. And the next time you open a ticket, instead of bouncing, it closes the same day. That is the whole difference between reporting a bug and merely warning that something is off.

Sources

  1. ISO/IEC/IEEE 29119-1:2022. Software and systems engineering. Software testing. Part 1: General concepts. International Organization for Standardization. (Defines the incident management process and the content of the incident report.)
  2. ISTQB (International Software Testing Qualifications Board) (2018). Certified Tester Foundation Level Syllabus, v. 2018. Section 5.6, Defect Management. (Distinction between severity and priority; content of a defect report.)
  3. ISO/IEC 25010:2011. Systems and software engineering. Systems and software Quality Requirements and Evaluation (SQuaRE). System and software quality models. International Organization for Standardization. (Reference quality model for expressing the expected result.)
  4. Kaner, C., Falk, J. & Nguyen, H. Q. (1999). Testing Computer Software, 2nd ed. Wiley. Chapter on "Reporting and analyzing bugs". (Classic guide on how to write clear, reproducible and non-accusatory defect reports.)

Learn more about AI

See all Learn AI