The shim outlives the migration: ten years of Sentry, read from its own deletions
How Sentry replaced the storage engine behind four unchanged internal interfaces between 2016 and 2026, and what the transition period cost, measured from the commits that added and deleted each backend.
Every team that outgrows its first database plans the new one; almost nobody plans the period when both are running. This guide measures that period across a decade of Sentry, reconstructed from git: five node stores, four issue-search backends and four tag stores, with the add and delete date of each, the three dual-backend shims written to bridge them, and the operational cost of the result in containers and gigabytes. A reader finishes able to cost a storage migration's transition rather than its cutover, and with six git recipes for doing the same archaeology on any company that develops in the open.
The dual-backend shims outlived what they were built to retire: 4 months for one, 66 for another, and 91 and counting for the third, whose dead Redis tables were still being removed seven and a half years after it was added.
What you get out of it
- The architecture that survived the decade is the set of interfaces, not any engine: nodestore, tagstore, search and tsdb all persist while five of the engines behind them were deleted.
- Budget the shim, not the migration. Observed shim lifetimes were 4, 66 and 91 months, and the median is longer than most of the engine retirements they enabled.
- The constraint that forced the queue rewrite was task-duration variance of milliseconds to thirty minutes, named in a 2022 RFC and answered by a 2024 broker that keeps inflight tasks in SQLite for per-task acknowledgement.
- The traceable incidents cluster in the consumer framework and the query service, not in the storage engines the migrations were about; the recurring class is the error path failing harder than the path it protects.
- Specialisation is paid by the operator in one step: the reference deployment went from 7 containers to 23 in a single November 2019 release, and the installer's RAM floor roughly quadrupled between 2021 and 2024.
Scope
Why this, now. Sentry deleted the last of its ten-year-old Celery code in September 2025 and its 2019 dual-read shim was still being pruned in August 2026, which makes the full arc of a storage migration measurable for the first time.
What it does not cover. Sentry's SaaS topology, capacity and costs, its published incident narratives, and any third-party measurement, all of which live on hosts this session's network egress could not reach; the guide is built from repositories and package registries only, and contains no blog, paper or talk sources.
Other field guides
There is no neutral identifier
Reads the repositories of GitLab, Rails, PostgreSQL, Twitter, Mastodon, Nextcloud, CockroachDB and the IETF's UUID revision to reconstruct how identi…
24 sources · 15 organisations · 4 postmortemsEvery backend you add is a six-year promise: ten years of Grafana Labs in git
A decade of Grafana Labs reconstructed entirely from its own git history across ten repositories: the convergence of Mimir, Loki, Tempo and Pyroscope…
26 sources · 4 organisations · 4 postmortemsThe lock is brief. The queue is the outage.
Reconstructs live schema change from the places fourteen organisations wrote their lessons down: GitLab's production incident tracker, gh-ost's desig…
24 sources · 14 organisations · 4 postmortems