BusiRocket

Service

Integrations and data migration

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

  • 40 million comments migrated across four schema versions with no data loss, on a high-traffic news platform.

  • Database index size cut by more than half during the same reimport, as a side effect worth keeping.

  • One preview environment per pull request, so a migration could be reviewed on a real URL before it reached production.

Projects built this way

Stripe

DameTicket: ticketing with real payments

A SaaS ticketing platform built end to end, with Stripe payments and seat allocation that holds under concurrency.

DameTicket, our own product

  • mysql
  • nextjs
  • typescript
  • react
  • stripe

How we work

Four steps, no surprises

The same process on a three-week engagement and on a two-year platform.

  1. 01

    Scope

    One session to understand the business process, not to show templates. We leave with priorities and a phased price.

  2. 02

    Architecture

    Data model, integrations and a performance budget before the first screen is written.

  3. 03

    Build

    Weekly releases to an environment you can visit. What gets approved gets deployed, it does not pile up.

  4. 04

    Operation

    Monitoring, verified backups and deployments anyone on the team can run.

Frequently asked questions

How do you prove nothing was lost?

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.

Does the site have to go down?

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.

What happens when the other system is down?

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

Tell us what the system has to do

We reply within one business day with a phased scope proposal, or with the reason we are not the right studio for it.