Finding the bug is half the job. The other half is communicating it in a way that leads to a quick fix. A good report saves hours of back and forth between QA and development.
The anatomy of a good bug report
- Objective title: what + where + when. "Checkout fails when applying an expired coupon" > "cart error".
- Steps to reproduce: numbered, from the initial state to the failure.
- Expected vs. actual result: the difference is the bug.
- Evidence: screenshot, video, logs, request/response, trace.
- Environment: browser, version, build, user, data.
- Severity vs. priority: business impact vs. urgency of the fix.
A lean example
Title: Expired coupon is accepted at checkout (web, build 4.12.0)
Steps:
1. Add an item to the cart
2. Apply the coupon "PROMO2023" (expired on 12/31/2023)
3. Complete the purchase
Expected: coupon rejected with the message "Coupon expired"
Actual: 20% discount applied and order completed
Evidence: video.mp4, POST /coupons response (200, valid=true)
Environment: Chrome 124, production-staging, user qa01
Severity: High (revenue loss) · Priority: High
A bug report is an act of empathy: you write it so someone else can reproduce the problem without having to ask you anything.
Conclusion
Clear reports speed up the fix, reduce friction, and raise QA's reputation as a partner of the team, not as a messenger of bad news. Reproduce, document, and add context: the rest follows.