FENWRIGHT

Deterministic replay for backend teams

Replay last night’s incident on your laptop.

Fenwright records the events your services already emit. When something breaks, you open the hour, drag through it event by event, and see exactly what the system held — then bisect to the event that caused it.

npm install @fenwright/recorder

340 backend teams · rated 4.8/5 by 212 engineering leads · 14-day trial, no card

Replay starts in
1.9 s
Recorder overhead
< 0.3 ms
Install to first replay
10 min

Live demo, recorded data

What was the queue doing at 02:20?

Drag the head, step event by event, or jump to a moment. The state on the right is refolded from the recording every time.

How the replay works
checkout-api · Tue 02:00–03:00 UTC INC-2291 · 26 events recorded

Head at t+20:15

Event log

  1. t+00:00 deploy release 4.19.0 rolled to 8% of checkout-api
  2. t+01:35 queue orders.enqueue 41/s, within the hourly average
  3. t+03:30 db connection pool resized 40 → 64 by the autoscaler
  4. t+05:30 deploy release 4.19.0 rolled to 50% of checkout-api
  5. t+06:42 db slow query orders_by_customer: 1.4 s, no index on tenant_id
  6. t+07:50 queue enqueue outruns drain for the first time
  7. t+09:05 worker worker-3 misses its 2 s deadline and is recycled
  8. t+10:10 queue queue depth crosses the 200 alarm line
  9. t+11:45 human on-call paged: checkout-api queue depth
  10. t+13:20 worker worker-6 recycled on the same deadline
  11. t+15:05 edge edge starts shedding 3% of POST /orders
  12. t+16:50 human on-call opens last Tuesday’s replay beside this one
  13. t+18:00 db orders_by_customer now 2.9 s at p95
  14. t+20:15 queue depth 426: drain 12/s against 47/s in
  15. t+23:20 worker two workers recycled inside one minute
  16. t+27:00 human bisect names the cause: tenant_id index missing on the new path
  17. t+30:00 deploy release 4.19.0 held at 50%, rollback drafted
  18. t+34:00 db index orders_tenant_idx created concurrently
  19. t+38:00 queue drain overtakes enqueue for the first time
  20. t+40:50 worker worker-3 and worker-6 back in rotation
  21. t+44:00 edge card network settlement re-checked (re-fetched, not replayed) · not replayed
  22. t+48:00 queue depth back under the alarm line
  23. t+52:00 db p95 settles at 214 ms, 24 ms above the pre-release figure
  24. t+55:00 deploy release 4.19.1 ships with the index in its migration
  25. t+58:00 human incident closed against the recording, not against memory
  26. t+59:45 queue enqueue 39/s: the hour ends where it began

State at the head

Queue depth
426 +210
Workers up
6
p95 latency
1180 ms
Failed orders
44
Release stage
degraded

Folded from 14 of 26 events. Drag back and the state is refolded from 02:00, so it always matches.

Plans

Start free, pay for what you record

Every plan has the whole product. What changes is how many events you keep and for how long.

Compare plans
A city skyline seen through the tall windows of a dark office

Why we built it

Built by three SREs who lost an argument with a graph

In 2021 an incident review at a London payments company ran for four hours, and the one question nobody could answer was what the queue held at 02:18. The recording existed only in three people’s memories. Fenwright is the tool they wrote so that never happens again.

Founded
2021
Teams
340
Hours replayed
1.2M
About the company

How it works

From npm install to root cause

No agent, no proxy, no change to how traffic flows. The recorder is a library you ship with the service.

Hands typing on a dark laptop keyboard

Install the recorder

One library and one call at start-up. Keys are scoped to a single service.

Fibre patch cables plugged into a rack panel

Record every event

Requests, queue messages and queries are buffered off the request path and shipped in batches.

A hand on a mouse beside a keyboard lit by one screen in a dark room

Replay any hour

Open a window in the browser or pull it to your laptop and step through it event by event.

A hand pressing a sticky note onto a whiteboard grid

Bisect to the cause

Diff a bad hour against a good one and let bisect name the first event where they part.

Usage pricing

Price your own traffic.

Move the slider to your monthly event volume and pick how long to keep it. The cheapest plan that fits is marked.

50M
Retention

A busy API service emits roughly 1–3M events a day. Replays, diffs, bisects and seats are never charged.

Team Best fit

£290 a month

  • Unlimited services
  • 50M events included
  • Up to 90-day retention
  • Diff and bisect
  • Email support, one working day
Team plan details Start a trial

Enterprise Best fit

£1,900 a month

  • 500M events included
  • Up to 365-day retention
  • SSO, audit log, EU or UK region
  • Self-hosted option
  • Phone support, four-hour response
Enterprise plan details Talk to us

Compared

Where logs and traces stop

Keep your log search and your APM. Fenwright answers the question they were not built for: what did the system hold at that moment?

Feature Fenwright Log search APM tracing
State at any moment Yes Folded from every event No Lines, not state Partial Per request only
Reproduce on a laptop Yes Pull any window No Read-only No Read-only
Find the first bad event Yes Bisect two hours Partial By hand, with queries Partial Slow spans only
Cross-service timeline Yes One ordered log Partial If clocks agree Yes Via trace IDs
Cost of looking Yes Replays are free No Billed per query Partial Sampled to save cost
Personal data kept out Yes Dropped at source Partial Masked on arrival Partial Depends on agent

Results

340 teams, fewer 3 a.m. guesses

4.8 out of 5 from 212 engineering leads

MTTR down 63%

“We stopped arguing about what the queue was doing at 02:14 and started replaying it. Median time to resolve went from 3 h 10 to 70 minutes in one quarter.”
Priya Raman, Engineering leadPayments platform, 60 engineers

11 min to root cause

“Bisect pointed at a missing index before the incident channel had finished its first round of guesses. The write-up quotes offsets instead of memories.”
Tomasz Wilk, Staff SRELogistics marketplace

4 flaky bugs closed

“Four race conditions that had lived in our backlog for a year. Each one reproduced on a laptop from a recorded hour, first try.”
Hannah Okafor, Backend engineerB2B SaaS, Series B

£0 per replay

“Our log vendor bills every query, so nobody looks twice. Here replays are free, and people replay the hour before they open a ticket.”
Marc Delorme, Head of platformRetail group, 14 services

FAQ

Questions engineering leads ask first

Type a word to filter. Anything missing goes straight to an engineer.

Every question
  • Product

    What exactly does Fenwright record?

    The events your services already emit — requests, queue messages, database calls, deploy markers — written by a small recorder library as they happen. Nothing is proxied and no traffic changes path.

  • Product

    Is a replay the same as a log search?

    No. A log search finds lines. A replay folds every event in a window into state, so you can stop at any offset and see what the system actually held: queue depth, workers, latency, the value of a field.

  • Product

    Can I replay on my own laptop?

    Yes. `fenwright pull` downloads any window as newline-delimited JSON and `fenwright replay` runs it locally against your code. The export is unlimited on every plan.

  • Product

    What cannot be replayed?

    Anything you did not record, and third-party responses such as a card network’s reply. Those are re-fetched at replay time and marked on screen, so a replayed number is never passed off as historic.

  • Setup

    How long does installation take?

    About ten minutes per service: install the library, add one call at start-up with a service key, deploy. The first hour is replayable as soon as it closes.

Record today. Replay tonight.

Install the recorder on one service. The first hour is replayable the moment it closes, and Free never asks for a card.

npm install @fenwright/recorder