Bug Report Template — Repro Steps Devs Actually Need
“It crashed.” Black screenshot. No OS. No build. No steps. That ticket sits in triage for two days while someone DMs “can you repro?” A usable bug report is a gift to future-you and the person who ships the fix — especially for game crashes where “sometimes when fighting” wastes a sprint.
The minimum viable report
| Field | Why it matters |
|---|---|
| Title | Searchable one-liner (Crash on save when inventory full) |
| Build / version | “Latest” is not a version — use commit, build number, or store version |
| Platform | Windows 11, iOS 18.1, Chrome 126, Steam Deck… |
| Hardware extras | GPU, controller, headset — for games especially |
| Repro rate | 1/1, 3/10, once-only |
| Steps | Numbered, start from a known state |
| Expected / Actual | What should happen vs what happened |
| Evidence | Log snippet, stack, clip, save file |
Draft structure with a bug report template, then paste into GitHub/Jira/Discord and attach evidence. Fill environment before you write the novel.
Repro steps that do not waste time
Bad: “Open the game and mess around until it dies.”
Better:
1. New game → difficulty Normal
2. Reach tutorial chest (first room)
3. Fill inventory to 20/20
4. Open inventory → drag potion onto hotbar slot 1
5. Actual: freeze 3s → desktop
Expected: potion equips
One action per line. Name UI labels exactly as shown. Note timing for race bugs (“within 1s of landing”). If a save file or seed is required, say so in step 0.
Games vs web vs mobile
Games: graphics preset, fullscreen vs windowed, VSync, overlays (Discord/NVIDIA/Steam), mods, save/seed, multiplayer region. Attach Player.log / crash dumps when the engine provides them.
Web: browser + version, account role/feature flags, exact URL (redact secrets), console errors, Network status codes, whether hard refresh changes anything.
Mobile: device model, OS build, install source (TestFlight, Play internal track, store), storage pressure, backgrounded vs foreground crash.
Evidence without dumping secrets
| Good | Risky |
|---|---|
| Last 50 log lines, IDs scrubbed | Full .env / auth tokens |
| 10–30s clip of the freeze | Hour-long desktop stream with Slack open |
AbortError stack | Customer PII / chat contents in screenshots |
| Redacted HAR of the failing call | Session cookies in HAR |
If legal or support needs the full dump, share via a private channel with retention limits — not a public Discord.
Severity without ALL CAPS
Pair impact with scope — not just “URGENT!!!”:
- Blocker — cannot purchase / soft-locks new users / data loss
- Major — frequent crash on a common path
- Minor — cosmetic, rare, workaround exists
Useful labels: crash, softlock, regression, platform-pc, needs-repro. Three severity levels beat twenty synonyms. Note if this is a regression from build N−1 — that halves investigation time.
Flaky and once-only crashes
If repro is 1/20, say so honestly and list suspects (overlays, low disk, thermal throttling, specific locale). Capture:
- Exact time (UTC) for log correlation
- Whether other apps crashed
- Whether it happened after sleep/resume
Do not force a “100% repro” claim you cannot defend. Engineers prioritize differently when they know it is intermittent.
Player and support intake
Rewrite messy player emails into the template before eng pickup — five minutes of cleanup saves fifty of clarification. Support macros that ask for build + platform + steps up front pay for themselves. For Discord communities, pin the skeleton and reject empty “game broken” posts gently with a link.
Copy-paste skeleton
### Summary
### Environment
- App / build:
- OS / device:
- Repro rate:
### Steps
1.
2.
### Expected
### Actual
### Attachments
Triage hygiene for teams
- Duplicate search by title keywords before filing
- One bug per ticket (do not bundle three crashes)
- Update the ticket when you find a shorter repro
- Close with the fixing PR / patch notes build number
Unstructured reports create ping-pong. Structured ones get labeled and fixed. Next crash — fill the fields once, attach evidence, and skip the two-day “what build?” loop.