40M
Migrating 40 million comments without losing one
A full migration of the comment platform behind a high-traffic publisher, with instant rollback.
- typescript
- nextjs
- kubernetes
- stripe
A migration is not a script. It is a plan with a rehearsal, a verification step and a way back. The script is the smallest part of it, and the part most likely to be rewritten twice before the real run.
The rehearsal happens on a full copy of production, timed end to end, because the duration decides the shape of the cutover: a job that takes twenty minutes allows a maintenance window, one that takes eleven hours does not, and the difference has to be known before a date is promised rather than discovered on the night. Verification is per row, not per table count: totals match easily while individual records are silently truncated, re-encoded or reassigned to the wrong parent.
The rollback plan is what makes the cutover a decision instead of a leap. It means the old system stays readable, the new one can be abandoned without losing what was written to it, and someone has agreed in advance which symptom triggers that call.
The largest migration behind this practice moved 40 million records with no data loss. Integrations follow the same logic at a smaller scale: idempotent operations so a retry cannot create a duplicate, explicit handling of the partial failure, and a queue that survives the other side being down for an afternoon. Systems that talk to each other fail in ways neither of them fails alone, and that is the part worth designing.
The order of operations is where most integrations quietly go wrong. Two systems that each behave correctly on their own can still produce a state neither of them would produce alone, because the message arrived twice, or arrived out of order, or arrived while the record it referred to was still being written. Designing for that is not pessimism, it is the normal case at any real volume.
The specifics
40M
A full migration of the comment platform behind a high-traffic publisher, with instant rollback.
30,000
A production training game preparing an entire workforce on a new product, 13 days before it went public.
30,000
Search, communications and peer recognition inside a large employer internal platform.
24M
Frontend, performance and production reliability on a real-time pricing platform.
Stripe
A SaaS ticketing platform built end to end, with Stripe payments and seat allocation that holds under concurrency.
How we work
The same process on a three-week engagement and on a two-year platform.
One session to understand the business process, not to show templates. We leave with priorities and a phased price.
Data model, integrations and a performance budget before the first screen is written.
Weekly releases to an environment you can visit. What gets approved gets deployed, it does not pile up.
Monitoring, verified backups and deployments anyone on the team can run.
By counting rows on both sides and reconciling the difference before anything is switched over, not after. The migration runs against a copy first, the output is compared against the source, and the rollback is rehearsed rather than assumed. A migration you cannot undo is not finished.
Usually not. The bulk of the data is moved while the old system is still serving, and only the final delta is applied during a short switchover. How short depends on write volume, which is one of the first things measured.
That is designed for rather than hoped against. Operations are idempotent so a retry cannot create a duplicate, partial failures are handled explicitly instead of being logged and forgotten, and a queue holds the work so the other side being unavailable for an afternoon does not lose anything.
Next step
We reply within one business day with a phased scope proposal, or with the reason we are not the right studio for it.
We use one analytics cookie to see which pages get read. No advertising, no profiling, and nothing is set without your permission. Read the cookie policy