Session Replay Shows You the Bug. It Doesn't Fix It.
May 14, 2026 · 9 min read
You opened Sentry on a Tuesday morning. Forty-three new errors overnight, but one cluster jumps out: `TypeError: Cannot read properties of undefined (reading 'workspaceId')` — twelve users, three of them paying.
You click into the session replay. There's the user. They open the settings page. They click the integrations tab. They click "Connect Slack." The modal opens. They paste a webhook URL. They click save. The spinner spins. The page hangs. You watch them refresh, try again, refresh again, and eventually close the tab.
You have the video. You have the console output. You have the stack trace.
You still don't have a fix.
This is the gap nobody talks about in the session replay pitch deck. Replay is genuinely excellent at one job — observing what happened in production — and it does that job better than any tool that came before it. But somewhere between "I watched the replay" and "I shipped a fix," there are five steps that you, the engineer, still have to do by hand. And those five steps are where bugs go to die in the backlog.
This post is not anti-replay. LogRocket, FullStory, and Sentry Session Replay are real tools that solve real problems. But if you're a small team without dedicated QA, you've probably noticed that having a replay doesn't actually shorten the path to a shipped fix as much as you'd hoped. Let's talk about why, and what fills the gap.
What session replay is actually great at
Before we get to the gap, let's give replay its due. The category exists because three things were broken before it existed.
You couldn't see what users actually did. Logs told you a request came in. Analytics told you a button got clicked. Neither told you the user clicked the button four times because the first three didn't visibly respond, then rage-clicked the wrong element, then closed the tab. Replay shows you the human on the other side of the screen. That's not a small thing.
You couldn't catch errors you weren't looking for. Without replay, you find out about a bug when a user emails support. With replay tied to error monitoring, you find out the moment the exception fires — often before the user has even given up. Sentry Session Replay paired with their error tracking is, honestly, a step-change in how fast a small team can detect breakage in production.
You couldn't understand the user's mental model. This is the underrated one. Watching a replay teaches you what users think your UI means. You see a user hover over an element for three seconds because they're not sure it's clickable. You see them scroll past a button you thought was prominent. No unit test, no integration test, no checklist QA pass surfaces this. Replay does.
If you don't have replay set up, get it set up. The free tiers on Sentry and LogRocket are enough to start. This is not a "replace your replay tool" post. Replay is observability — it tells you that something happened and roughly how. It belongs in your stack.
The question is what happens next.
The gap session replay leaves
You have the replay. The clock starts on the bug. Here are the five steps between "I watched the replay" and "I shipped a fix," and replay doesn't do any of them.
1. Reproduce on your dev environment. The replay shows the bug in production with a real user's account. You can't fix it from production. You need to make it happen on your laptop or on staging, in a state where you can attach a debugger, change code, and verify the fix. Replay doesn't reproduce. It records.
2. Set up the same data state. The replay user has a specific workspace, a specific subscription tier, a specific integration history, specific feature flags. The bug exists because of that state. Your dev environment doesn't have it. You need to either seed it manually or find a way to mirror it. Replay doesn't help you here. It shows you the symptom, not the conditions.
3. Walk the same sequence. Now you need to perform the exact clicks, in the exact order, with the exact timing if it's a race condition. You watch the replay, alt-tab to your browser, click, alt-tab back, click, alt-tab back. You miss a step. The bug doesn't reproduce. You start over. You're now twenty minutes in.
4. Capture a clean console and network trace. The replay has the user's console — but it's mixed with their browser extensions, their ad blocker noise, the third-party scripts you don't care about. To file a useful issue, you need a clean trace from a clean environment, with just the error you're chasing and the request that failed. Replay gives you a recording. You need an artifact.
5. File a GitHub issue someone else can act on. Not "see attached LogRocket link." An actual issue with reproduction steps, expected behavior, observed behavior, environment, the offending request, the stack trace. Something a teammate — or future you, three weeks from now — can pick up cold and start debugging. Replay doesn't write issues.
Each of these steps is, individually, not hard. Together, on a Tuesday morning when you've also got a feature shipping and a sales call at 2pm, they're the reason the bug doesn't get fixed this week. Or next week. Or the week after that.
The cost of the gap
Here's how it actually plays out on a small team.
A user reports a problem. Or Sentry catches it. The engineer who's on call (which, on a four-person team, is everyone) watches the replay. Thirty seconds in, they think they understand it. They try to reproduce locally. They get close — they trigger the same modal, click the same button — but it works. They switch to staging. Still works. They go back to the replay, scrub through again, and notice the user had a specific integration enabled that they don't have in their test account.
Now they go enable that integration. Halfway through, they remember the OAuth callback needs a real Slack workspace. They use the team's shared dev Slack. They get the integration connected. They walk the sequence again. This time the bug reproduces. It's eleven thirty.
They start debugging. They find the bug. They write a fix. They open a PR. They write up the issue in the PR description, link the original replay, and ship it.
Or — and this is what actually happens more often — they don't have the time to reproduce it themselves, so they file a GitHub issue that says: "User hit this error trying to connect Slack, see Sentry replay [link]. Repro steps unclear, will need someone to dig in." They tag a colleague. The colleague picks it up two days later. They watch the replay. They try to reproduce. They get close but not exact. They eventually figure it out, but they've now repeated the same forty minutes of work the first engineer started.
This is the gap, and it's paid every time the bug gets touched. The replay is reusable observability, but the reproduction work is not reusable. Whoever picks up the issue has to re-do it. The smaller your team, the more this cost compounds, because there's no dedicated QA to absorb it. The "see the replay" handoff is not actually a handoff — it's the beginning of the work, repeated for every person who looks at the ticket.
If this sounds familiar, you've probably also read our piece on why "can't reproduce" is the most expensive sentence in your bug tracker. Same gap, different angle.
From replay to repro — what an agent fills in
Here's the alternative framing. Imagine the inbound signal — whether it's a Sentry replay link, a support ticket from Intercom, a Slack message from a customer, or a Linear ticket pasted by a teammate — kicks off a different process.
An AI agent receives the signal. It reads the description, watches the replay (or reads the support ticket prose), and extracts the user journey: open settings, click integrations, click connect Slack, paste webhook, click save. It signs into your staging environment with a scoped test account. It walks the sequence. It captures a clean console and network trace. It confirms the bug reproduces — or, if it doesn't, it flags that the reported behavior couldn't be confirmed.
If it reproduces, the agent files a GitHub issue. Reproduction steps, expected behavior, observed behavior, the failing request, the stack trace, the console output, environment details, and — yes — a link back to the original replay for the human context. The issue is verified, complete, and actionable by anyone on the team.
This is what FixFirstly does. Replay sees. Agent reproduces and files. They're not the same thing, and neither replaces the other.
The agent doesn't watch your users (replay does that). The agent doesn't catch errors in production (replay and error monitoring do that). The agent picks up where they leave off: turning the recording into a verified, filed, ready-to-debug issue, so the engineer who opens it can go straight to "what's the fix" without spending forty minutes re-doing the reproduction.
Replay + agent: complementary, not competitive
Here's the cleanest way to think about it.
| Session replay | Reproduction agent | |
|---|---|---|
| Primary job | Observability — record what happened | Action — reproduce and file |
| Triggered by | User session, error event | Inbound bug report from any source |
| Output | Video + console + network from production | Verified GitHub issue with clean repro |
| Environment | Production (real users) | Staging (test accounts) |
| Reusable artifact | Recording for review | Filed issue for action |
| When you need it | Always — observability is non-negotiable | When nobody has time to reproduce by hand |
| Replaces | Pre-replay error logs | Manual reproduction work, not replay |
Replay tells you something is broken and gives you context about the user. The agent gives you a verified repro that anyone on the team can ship a fix from. They sit at different points in the pipeline, and a team that uses both spends less time on the gap between them.
If you're already paying for LogRocket, keep paying for LogRocket. Add the agent to the part of the workflow that LogRocket doesn't cover, which is the part between watching the video and shipping the fix.
When to pick just replay, when to add an agent
Not every team needs both. Here's a rough decision matrix.
Just replay is probably enough if:
- You have a dedicated QA engineer who can take a replay and reproduce from it as part of their job. The reproduction work is their work, and they're good at it.
- Your bug volume is low enough that the engineer-watches-replay-and-fixes flow is tractable.
- Your bugs are mostly client-side rendering issues that don't require a specific data state — the replay basically is the repro.
- You're at a stage where every bug gets attention immediately and nothing sits in the backlog.
Add an agent if:
- You don't have dedicated QA. Everyone on the team is also building features, and reproduction work falls to whoever has the bandwidth (which is nobody).
- Bug reports come in from multiple channels — Gmail, Slack, Intercom, Zendesk, Linear, the occasional Loom from a customer — and just triaging them is a job by itself. You probably also want to read our guide to running QA without a QA team if this is you.
- Your bugs frequently require specific data state or specific integrations enabled. The replay shows the bug, but reproducing it locally is non-trivial.
- You have a backlog of "user hit this, see replay, will investigate" tickets that have been sitting for two weeks. The replay caught the bug. Nobody had time to act on it.
- You want every filed issue to be picked up cold by any engineer on the team without re-doing the reproduction work.
If you're in the second bucket, the question is not "replay or agent" — it's "which agent works with my existing replay tool." Sentry replays, LogRocket sessions, and FullStory recordings are all inputs an agent can consume alongside the support tickets that didn't come with a replay attached. (And if you're curious about the manual version of the workflow first, our step-by-step guide to reproducing a bug from a support ticket walks through what an engineer does by hand — and what an agent automates.)
How FixFirstly closes the gap
Here's the pipeline.
A bug report lands. It can be a Sentry alert with a replay link, a customer email forwarded to your support inbox, a Slack message in `#bugs`, an Intercom conversation, a Zendesk ticket, a Linear issue, a CSV dump, or a POST to our API. FixFirstly reads them all.
The agent clusters duplicates by semantic similarity — five customers reporting the Slack integration hang are one issue, not five. It picks the strongest signal in the cluster. It signs into your staging environment with a scoped test account you've configured. It walks the sequence the user walked. It captures the console, the network, the stack trace. If the bug reproduces, it files a verified GitHub issue with the original replay link included for human context.
You open GitHub. You see a clean issue. Reproduction steps are listed. The failing request is highlighted. The stack trace points at the file. You go fix it.
You can read more about how the pipeline works on our how-it-works section.
The closing thought
Session replay is one of the best things to happen to small-team observability in the last decade. Use it. Pay for it. It will catch bugs you would otherwise ship to your users and never know about.
But replay is not reproduction. It is not a filed issue. It is not a fix. The work between "I have a recording" and "I shipped" is real, and on a team without dedicated QA, it's the work that doesn't get done.
The agent is what fills that gap. Not instead of replay — alongside it. Replay sees. Agent reproduces and files. You ship.
FixFirstly is free for the first 5 runs a month, no card. Starter is $79/mo when you outgrow the free tier. If you've got a backlog of "see attached replay link" tickets and nobody on the team has the bandwidth to dig in, this is the missing step.
Related posts
The 5-Engineer QA Playbook: Shipping Weekly With No QA Hire
A practical playbook for post-PMF SaaS teams that ship weekly without a dedicated QA engineer. Ingest, cluster, reproduce, file — what the automated bug loop actually looks like.
Why "Can't Reproduce" Is the Most Expensive Sentence in Your Backlog
The hidden cost of "can't repro" tickets, why reproduction is hard, and what "verified" should mean before a bug enters your sprint.
How to Reproduce Bugs From Vague Support Tickets (Without Pinging the User Five Times)
A step-by-step playbook for reproducing bugs from one-line support tickets. Parse the message, match the environment, replicate data state, walk the sequence, document everything.
Verify your next bug in 24 seconds, not 4 days
FixFirstly reads bug reports from your inbox, reproduces them on staging, and files verified GitHub issues. Free during early access.
Join the waitlist