Capture the failure while you are still inside it

The difference between a bug report that gets fixed and one that gets closed is simple: whether you dictate bug reports repro steps while you are still inside the failure. Reproduction evidence decays fast. The command you ran at 3pm is not the command you remember at 5pm, and the sequence that triggered the error is the first thing to blur. Dictate the steps at the moment of failure, before you start debugging, and you preserve the exact sequence that will let someone else see it too. The report is written by the person who saw it, not by the person who recalls it. The moment matters, and the details matter more.
Filing a report is a transfer of context, and context is what voice captures best. You can say the whole story in thirty seconds: what you were doing, what you expected, what appeared instead. Typing the same narrative takes five minutes and compresses it into two careful sentences. Keep the spoken version, with the hesitations and the then-it-now moments, because those moments are usually the trigger. The bug that cannot be reproduced by others is usually the bug whose timeline got cleaned up in the retelling. The hesitations are the evidence; keep them and let the report own them. Clean text is a rerun later.
Do not wait for the ticket system. Dictate the report into your notes, a local file, or the ticket field the moment the error appears, then move on. Coming back to the failure later to write it up reintroduces exactly the memory loss that produced the bug in the first place. If the reproduction involves a customer or a user, the dictated record is also the record you can quote back to them. Capture once, at the moment, and file it when the system allows. A report made at the desk is worth two made from memory. The moment is the whole point of the habit.
Walk through the sequence while you perform it, one step per sentence: I opened the dashboard, I selected the customer, I clicked export, nothing happened. Number the steps as you say them, because numbered steps are checkable and checkable steps get followed. Include the pauses, the retries, and the screen you were on. The version you narrate during the actual attempt contains the details that the clean retelling always drops. Dictate the retry too, because the second attempt often reveals which step was actually decisive. Numbering is the price of a repro that travels, and it costs nothing to say. Count out loud.
Then run the reproduction a second time with the notes open, and correct the transcript as you go: step three is actually step two, the modal closes before the export starts, the error appears after the refresh. Live iteration catches the ambiguity that a single pass hides. Finish by asking whether the steps reproduce on a fresh session, and if they do not, say what changed in between. A reproduction that depends on prior state is a report that needs that state written down, not an excuse to close the ticket. Ambiguity is what kills a repro pass, and the second run is where it dies.
Give the report a baseline: the earliest known good state and the exact change that preceded the failure. Say the commit, the deploy, the config change, or the data update that happened nearby. One sentence of context often does more than ten screenshots, because it points the investigator at the code they should read. Then hold to the discipline of one repro per report. Two related failures in one ticket is how repros get lost and browsers get wasted. The baseline sentence is the one that points the investigator at the diff they should read. Give it first. Then the report writes itself.
Fill the environment fields while you are still at the machine: OS, browser or client version, service version, deploy hash, config profile, data tenant. Say them in one breath, then move on; the fields exist because the bug is in the combinations, not in the code alone. Dictate the version numbers since they are tokens, and tools that learn your vocabulary keep them exact. A report that names the environment is a report the next person can trust, and trust is what determines whether the investigation starts with the ticket or with a re-ask to the developer. The fields are the contract; fill them at the machine.
The expected versus actual section is the heart of the report, and it is worth saying twice. First state what you expected, in terms of a user outcome, not an implementation: I expected the export to finish within a minute. Then state what happened, with the evidence and not the interpretation: it sat at zero percent and the network tab showed a 502. The gap between those two sentences is the bug, and the gap is much clearer when both sides are spoken plainly. Avoid the phrase it should work without saying what working looks like. The gap is the bug, and the gap has two sides.
Rate the severity honestly while you are inside the impact: how many users, how often, how much money, whether data is at risk. Say the level you think it is and the evidence that supports it, then let triage question it. If you cannot say the impact, the report is a question, and questions should be labeled as questions rather than dressed as bugs. A clear expected-versus-actual plus an honest severity lets the owner make the call without a back-and-forth. The report's job is to make the decision cheap. Severity is a judgment, and judgments need evidence attached to the level.
Attach the evidence in the order the failure occurred: the screenshot of the first sign, the console output, the log excerpt, the network request. Dictate the timeline as you attach each item: at 14:02 the dashboard showed the error, at 14:04 the log line appeared after the timeout, at 14:06 the retry produced a second 502. Spoken timelines are more complete than written ones, because the words come out without the summary reflex. Put the evidence next to the steps they support, and the report reads as one story rather than two piles. The order of the evidence is the order of the story.
Logs deserve a short dictation too. Read the relevant lines aloud in order, note the timestamp and the correlation id, and say which lines matter and which do not. Then say what you ruled out based on the logs: it is not a permissions error, the request never reached the service, the payload is empty. Ruled-out hypotheses are the most valuable part of a report, and they are usually skipped because typing them costs more than saying them. The investigator starts from your conclusion instead of redoing your two hours. The ruled-out list is what saves the next person the two hours you already spent.
Tag the artifacts consistently: the screenshot file, the log file, the replay. Say the artifact name while you refer to it, so the ticket links the evidence to the claim. For intermittent failures, dictate a pattern log: each occurrence with the time, the pattern, and the surrounding change, over the days the bug lives with you. Intermittent bugs are won by pattern data, and pattern data is easiest to collect in the moment. The report becomes a log of a live investigation instead of a snapshot of one attempt. Pattern data is boring and it is the only thing that beats an intermittent bug.
If you are the person receiving reports, dictation changes the triage itself. Read the report out loud as you evaluate it, because hearing a reproduction sequence exposes the skipped steps that reading glosses over. Narrate your verdict and the next action: needs a repro, cannot reproduce, likely a duplicate of ticket 412. The spoken verdict becomes the comment on the ticket. Triage is a decision pipeline, and decisions get faster when the reasoning is said instead of labored over in prose. Hearing the repro is a different test from reading it, and the difference shows in the verdict. Speak the verdict and file it. The decision is the deliverable, not the comment.
Cluster the incoming reports by their spoken cores. Say the pattern out loud: three reports today mention the export timeout, all from the same region. Then dictate the summary that links them, note the earliest report as the tracking ticket, and close the rest with a pointer. This is the moment where teams lose the signal; the voice summary is the fastest way to keep it. Then copy the pattern into the searchable channel so the next report autocompletes instead of reopening a ghost. The tracking ticket is the hinge; the pattern summary is the glue. Autocomplete beats ghost-hunting. Keep the summary short.
End each triage session with a ten-second reflection, dictated into the team notes: what the reports said this week, what class of bug is rising, what the written reports still lack. These reflections accumulate into a field guide for future reports, because they tell you which fields the team skips and which instructions they misread. Update the template based on what you dictated. The reporting system is an artifact like any other: it only improves when it is corrected from real data. The reflection is five sentences and it changes the template for everyone. End the session with it. The data is the teacher.
At the moment of the failure, before you debug. The reproduction sequence is the fastest-decaying evidence you have, and debugging contaminates it: your searches, restarts, and workarounds mask the original trigger. Dictate the steps, the environment, and the expected result within the first minutes, then investigate. You can also narrate while re-running the repro to catch what your first pass missed. Capture first, fix second.
Dictate exactly that: the steps you tried, the state of the session, and any difference from the original run. A non-reproducible report with a detailed attempt log is worth more than a vague repro claim, because the attempt log shows what was ruled out. Note the uncertainty in the ticket itself: marked as cannot reproduce, with the attempted steps. The investigator needs the boundary between what is known and what is not.
Paste the error text and read it aloud to place it in the timeline; the typed text stays exact while speech describes its meaning and position. Say the version numbers and identifiers normally, and trained vocabulary keeps service names and internal codes exact. The combination is what matters: dictation for the story, paste for the tokens. Never transcribe an error by hand when you can paste it and narrate around it.
Include them clearly labeled as hypotheses. Say what you suspect and what evidence supports the suspicion, then stop before the investigation: you are filing a report, not a patch. A hypothesis gives the investigator a head start and shows the reproduction was understood. But keep it separate from the facts and label it hypothesis. Reports that mix evidence and speculation produce fixes for the wrong bug. Say the guess, mark the guess.

Choose a real task, follow the steps, and review the results with your team before expanding the rollout.
Use it across macOS, Windows, iOS, and Android