Bug Report Form Template

A bug intake that produces reproducible tickets — steps, expected versus actual, severity triage, environment details, and screenshot upload.

Free · copies into your editor in one click
Live preview — try it, nothing is saved

Found something broken? Walk us through it — a report we can reproduce is a report we can fix this week.

Every engineering team knows the two-report problem: the vague one ("login is broken, please fix") that costs an hour of back-and-forth before work can start, and the good one that goes from inbox to fix in a single sitting. The difference is structure, and this form imposes it at the source. Summary, numbered steps, expected versus actual — the classic reproduction triad — are the skeleton, and two of the three are required because a report missing them is a conversation, not a ticket.

Why these fields. The one-line summary becomes the ticket title, so its placeholder models the right shape: symptom plus context. Steps-to-reproduce is the field that separates fixable from unfixable, and the numbered-list placeholder quietly teaches the format QA engineers use. Expected-versus-actual is split into two boxes rather than one because reporters merge them into mush when given a single field — and the "expected" half frequently reveals that the bug is actually a design misunderstanding, which is cheaper to fix in copy than in code. Severity is self-reported and that is fine: you are measuring impact on the reporter, not engineering priority, and the two diverge in informative ways. A blocker answer swaps the ending for a triage-priority message, which reassures the person whose day just stopped. Environment is one free-text line instead of three dropdowns because dropdown taxonomies of browsers and versions rot within months.

What we left out. Account and order identifiers (support tickets need them; bug reports pollute triage with personal data), mandatory screenshots (some bugs are invisible), and reporter contact as a required field — though partial submissions mean even an abandoned half-report reaches you.

Who uses this. Software teams link it from app footers and error pages, agencies hand it to clients during UAT weeks, and open-source maintainers use it as a friendlier front door than a bare issue tracker.

Make it yours. Point a webhook at your issue tracker so reports arrive as tickets with severity pre-labeled. Attachments support up to three files here — screenshots and short recordings under 10MB each. During a beta, add a build-number dropdown; after release, swap it back to free text. Password-protect the form if your beta is private.

Severity as a release thermometer. Because severity here measures impact on the reporter, its distribution over time is a health metric your crash dashboards cannot supply. Establish the normal ratio of blockers to total reports during a quiet fortnight; when a release pushes that ratio past its baseline, you have a rollback conversation, not just a triage queue. Blocker-flagged reports deserve a service habit of their own — skim them before standup, because the person behind each one currently cannot work, and a same-morning workaround message turns a furious user into a patient one. Minor and cosmetic reports batch happily into a weekly sweep.

Frequently asked questions

Can reports create tickets in our tracker automatically?

Yes — add a webhook and each report POSTs as signed JSON on arrival, with retries if your endpoint hiccups. Map the severity answer to labels on your side.

What file types can reporters attach?

Images, PDFs, and common documents up to 10MB per file, three files max on this template. Uploads are kept only when the report is actually submitted.

How do we handle a flood of reports after a bad release?

Duplicate prevention in Settings curbs repeat submissions per device, and the CSV export lets you cluster by summary keywords to find the one bug behind fifty reports.

Should this form be public or behind a password?

Public for released products — friction loses real reports. For private betas, enable password protection in Settings and share the password with the cohort.