A bug report is not a complaint. It’s a set of instructions and evidence that lets someone else reproduce a problem, understand its impact, and decide what to do next. When bug reports are vague, teams burn time on back-and-forth messages, guesswork, and “can’t reproduce” dead ends. When they’re well written, fixes move faster, priorities are clearer, and everyone stays calmer.
This guide shows a practical, developer-friendly way to report bugs. You’ll get a structure that works in any ticket system, tips for writing reproducible steps, a quick severity guide, and ready-to-copy templates and examples.
What a bug report is supposed to achieve
A useful bug report answers three questions:
- Can I reproduce it? (Steps + environment + test data)
- What exactly is wrong? (Actual vs expected behavior)
- How much does it matter? (Impact + severity + frequency)
It also helps classify the issue correctly. Not everything is a “bug.” Sometimes it’s a feature request, a support question, or an environment problem. Clear reporting keeps your backlog clean and your engineering time focused.
Before you write: 5 minutes of prep that saves hours
Check for duplicates
Search existing tickets using keywords such as error messages, feature names, or screen titles. If a similar issue exists, add your details as a comment instead of creating a new ticket.
Reproduce again and capture the exact flow
Try to reproduce the issue one more time and document the steps precisely. If the problem is intermittent, estimate how often it occurs and under what conditions.
Collect the minimum evidence
- Screenshots for UI or layout issues
- Short videos for timing or multi-step problems
- Logs or console output for crashes or API errors
- Sanitized sample data when data triggers the issue
The anatomy of a strong bug report
Title
A good title follows the formula: what happens + where + under what conditions.
- Checkout: “Pay” button stays disabled after applying discount code
- Dashboard reports: CSV export fails for date range over 90 days
- Mobile Safari: sticky header overlaps search results after scroll
Environment
- Application version or build number
- Browser or device and OS version
- User role or permissions
- Locale, timezone, or network conditions if relevant
Preconditions
- User is logged in as Admin
- Account has an active subscription
- Dataset contains a record with empty fields
Steps to reproduce
- Log in as a user with the Manager role.
- Open Reports → Revenue.
- Select date range “Last 180 days”.
- Click Export CSV.
Actual result vs expected result
Actual result describes what actually happens, including any error messages. Expected result describes what should happen from the user’s point of view.
Frequency
- Always
- Often
- Sometimes
- Rare
Severity and impact
| Severity | Meaning | Example |
|---|---|---|
| Blocker | Stops core workflow | Users cannot log in |
| Critical | Data loss or security risk | Records deleted unexpectedly |
| Major | Key feature broken | Export fails without workaround |
| Minor | Annoying but non-blocking | UI alignment issue |
| Trivial | Cosmetic issue | Small typo |
Examples
UI example
Title: Mobile Safari: sticky header overlaps search results after scrolling
Environment: iPhone 13, iOS 17.3, Safari, app build 2.8.1
Preconditions: Logged in as standard user
- Open the Search page.
- Type “polymer” and submit.
- Scroll until 20 results load.
Actual result: Header overlaps the first results.
Expected result: Results are fully visible and clickable.
API example
Title: Reports API returns 500 for exports over 90 days
Environment: Production
Preconditions: Account contains more than 10,000 records
- Open Revenue Report.
- Select date range Last 180 days.
- Click Export CSV.
Actual result: 500 Internal Server Error.
Expected result: CSV downloads successfully or a clear warning is shown.
Bug report template
Title: Environment: Preconditions: Steps to reproduce: 1) 2) 3) Actual result: Expected result: Frequency: Impact: Severity: Workaround: Attachments / Evidence:
Final checklist
- Steps are clear and minimal
- Actual and expected behavior are separated
- Environment and context are included
- Evidence is attached and sanitized
- Impact is explained
Conclusion
A clear bug report saves time for everyone involved. It reduces confusion, speeds up fixes, and improves collaboration between users, QA, and developers. Consistent structure and clarity matter more than length or technical jargon.