Glossary

Why Steps to Reproduce Decide Whether a Bug Gets Fixed

Taras Shynkarenko
Taras Shynkarenko
Updated: 6 min read
Why Steps to Reproduce Decide Whether a Bug Gets FixedWhy Steps to Reproduce Decide Whether a Bug Gets Fixed

TL;DR, Quick Answer

6 min read

Steps to reproduce are the numbered actions, starting state and inputs that let a second person trigger the same bug the first person found. A complete set names the preconditions, the exact clicks or inputs in order, the expected result, the actual result and the environment. Skip any one of those and an engineer either cannot reproduce the bug or reproduces a different one, which is why "works on my machine" is a missing precondition, not a mystery.

What are steps to reproduce in a bug report?

A bug report earns the label reproducible when its steps to reproduce list the exact numbered actions, starting state and inputs needed to trigger the failure again. Anyone reading the list, not just the person who found the bug, should be able to follow it and land on the same error. Write the steps as a short script for another person to run, not as a summary of what happened, or attach a session replay so the script writes itself from the recording.

What does a complete steps to reproduce section contain?

A complete section names five things: the preconditions, the numbered actions, the expected result, the actual result and the environment. Missing any one of them turns a reproducible bug into a guess, since an engineer without the starting state has to reconstruct it before they can even attempt the steps. That same detail also decides severity vs priority, since a scorer without a full reproduction guesses at both the damage and the urgency.

FieldWhat it answersExample
PreconditionsWhat state must exist before step 1Logged in, cart has 2 items, coupon applied
Numbered stepsWhat to click, type or submit, in order1. Open checkout 2. Click "Apply gift card" 3. Enter a 20-digit code
Expected resultWhat should happenError message: "Invalid code"
Actual resultWhat happens insteadPage goes blank, no error shown
EnvironmentWhere it happensChrome 128, macOS 15, staging

A person clicks through a web app at a desk, the kind of session a bug report has to describe step by step.

Why do preconditions matter before the numbered steps?

Preconditions matter because the same click sequence produces different results depending on the state the user started in. "Click checkout" behaves one way with an empty cart and another with a coupon already applied, so a step list without preconditions gives an engineer the actions but not the starting line. State the account type, the data already in the system and any prior actions taken in the same session before step one.

How should expected versus actual behavior be written?

Expected and actual behavior belong on separate lines, each stating one concrete outcome rather than a feeling about the bug. Write the expected result as what the interface is supposed to show, and the actual result as exactly what appeared instead, including error text, a blank screen or a wrong value. "The page looks broken" reproduces nothing; "expected an 'Invalid code' message, got a blank white page with no console output" gives the engineer a specific target to match.

What environment details belong in a bug report?

Environment details cover the browser and version, operating system, screen size, network conditions and whether the bug happened in production, staging or a local build. A layout bug tied to Safari's flexbox handling or a timing bug tied to a slow connection disappears the moment someone tests it on a different setup, so the environment line is what turns "I can't reproduce this" into "I tested the wrong browser."

Two developers compare notes over a laptop, the kind of side-by-side check that catches a mismatched environment.

Why does works on my machine happen?

"Works on my machine" happens when the reporter and the engineer are silently running different preconditions or environments, not when the bug is fake. A feature flag on for one account and off for another, a stale cache, a different screen width or a browser extension that blocks a script all reproduce the failure for one person and hide it from the next. Treat the phrase as a missing field in the report, and go back to fill in the environment and preconditions instead of closing the ticket. When the flow is long, cutting it down to a minimal reproducible example that still fails on a second machine isolates which precondition is actually doing the work.

Same bug, different machine
Feature flagEnabled for one account, disabled for another
Stale cacheServes an outdated version to one person
Screen widthA different viewport shows a different layout
Browser extensionBlocks a script before it runs
Any one of these can differ between the reporter and the engineer, and the same bug disappears for one of them.

How does session replay shortcut writing steps to reproduce?

Session replay shortcuts the write-up because the recording already contains every click, input and page state a manual report would have to describe by hand. Flowsery attaches the replay and steps to reproduce to each issue and bug report automatically when it lands in Slack, Linear or Jira, so an engineer watches the exact sequence instead of trusting a user's memory of what they clicked. Rage clicks and dead clicks mark the moment the user hit the failure, which removes the guesswork about where in the flow to start looking, and tagging @flowsery in the same Slack thread opens a draft pull request once the fix is clear.

Writing a report someone else can reproduce
1
State the preconditions. Account state, existing data, and any prior actions in the session.
2
Number every action. One click, tap or input per line, in the order performed.
3
Separate expected from actual. Two concrete lines, not one paragraph about how it felt.
4
Record the environment. Browser, OS, screen size and whether it was production or staging.
Four fields that turn a bug description into steps to reproduce.

Frequently Asked Questions

What makes steps to reproduce good instead of vague?

Good steps to reproduce are numbered, start from a stated precondition, and end with a stated expected result next to the actual result. A vague report describes a feeling ("checkout is broken"); a good one lists five clicks, what should have appeared, and what appeared instead.

What is the difference between steps to reproduce and a bug description?

A bug description explains what went wrong in prose, while steps to reproduce is a script another person can run to see the same failure. A report can have a clear description and still be unreproducible if it skips the numbered actions or the starting state.

Why can't an engineer reproduce a bug that a customer reports?

An engineer usually cannot reproduce a reported bug because the report is missing a precondition or an environment detail, such as an account state, browser version or feature flag that differs between the two setups. The bug is real; the report is incomplete.

What should go in the environment section of a bug report?

The environment section should name the browser and version, operating system, screen size, network conditions and whether the bug occurred in production, staging or local. Any one of these can change whether a bug appears at all.

How many steps should a reproduction have?

A reproduction should have as many numbered steps as there are distinct actions the user took before the failure, no more and no fewer. Combining two actions into one step, or padding the list with steps that do not affect the outcome, makes the report harder to follow, not easier.

Does session replay replace written steps to reproduce?

Session replay replaces the need to write the numbered actions by hand, since the recording shows the exact clicks, inputs and page states in order. The environment and preconditions still get attached automatically with the replay, so the engineer opens one issue instead of asking the reporter for missing details.

Flowsery
Flowsery

Start FREE Trial

Real-time dashboard

Goal tracking

Cookie-free tracking

Why doesn't "the page looks broken" count as a bug report?

"The page looks broken" describes a feeling, not an outcome, so it gives an engineer nothing to match against. A report needs two separate lines: what the interface was expected to show, and exactly what appeared instead, including error text or a blank screen. Compare it to "expected an 'Invalid code' message, got a blank white page with no console output," which points straight at what to check.

How do steps to reproduce affect severity and priority?

A scorer without full reproduction steps has to guess at both the damage a bug causes and how urgently it needs fixing. Preconditions, numbered actions, expected result, actual result and environment together tell a triager what actually breaks and for whom. Skip any of those fields and severity and priority become estimates instead of decisions.

What do rage clicks and dead clicks add to a bug report?

Rage clicks and dead clicks mark the exact moment a user hit the failure inside a session replay. That timestamp removes the guesswork of where in a recorded flow to start looking for the bug. Paired with the automatically attached steps to reproduce, an engineer jumps straight to the failure instead of scrubbing through the whole session.

Which tools does Flowsery attach steps to reproduce to automatically?

Flowsery attaches the session replay and steps to reproduce to each issue automatically when it lands in Slack, Linear or Jira. An engineer then watches the exact sequence of clicks and inputs instead of relying on the reporter's memory of what happened. Tagging @flowsery in the same Slack thread can also open a draft pull request once the fix is clear.

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

Flowsery

Flowsery

Revenue-first analytics for your website

Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.

Real-time dashboard

Goal tracking

Cookie-free tracking

Related Glossary Terms

Related Articles