Data

How to Run Schema Migrations Without Downtime

Nadia Brennan on zero downtime schema migrations: what actually matters for engineering teams making this call.

Paige Donnelly

Senior Backend Engineer

Published 6 min read
Detailed image of a server rack with glowing lights in a modern data center.
On this page 7 sections

Quick answer: The numbers here matter more than the general advice: zero downtime schema migrations comes down to fewer generic tradeoffs than most posts on this admit. The short version is below, with the reasoning and the exceptions right after it.

How to Run Schema Migrations Without Downtime is one of those topics where the real answer depends on team size, existing infrastructure, and how much risk you can tolerate on a bad day. This guide is for engineering teams evaluating zero downtime schema migrations right now, not for a general audience skimming for buzzwords.

We'll cover what actually changes in day-to-day work, where teams tend to get this wrong, and a concrete way to test the decision before committing to it company-wide. None of this requires a full rewrite or a six-month migration plan to start learning something useful.

By the end of this guide, you should have enough to run a focused two-week pilot and know what to look for, rather than another abstract list of pros and cons.

Why Zero downtime schema migrations Matters Right Now

the official PostgreSQL documentation has documented how quickly this area of engineering practice has shifted over the past two years. At Backtrace Media, in our own testing, teams tend to underestimate this until it's already causing pain in production or slowing down releases.

The stakes are practical, not theoretical. Getting this wrong shows up as slower deploys, more on-call pages, or a migration nobody budgeted time for.

Most teams don't notice the cost of a bad call here right away. It shows up three or four months later, as a slow accumulation of workarounds nobody has time to fix properly. Backtrace Media has sat in on enough of those retros to recognize the pattern early.

There's also a quieter cost that rarely makes it into a postmortem: engineer time spent working around a limitation instead of building the thing they were actually hired to build. That cost is real; see database indexing mistakes.

Step-by-Step Approach

The steps below assume a working knowledge of the basics. They're written for the team that's past the tutorial stage and trying to do this for real.

  1. Audit what you actually have today before changing anything, including the parts nobody documented.
  2. Pick one small, low-risk area to pilot the change rather than rolling it out everywhere at once.
  3. Set a measurable target before you start, not after, so you have something to compare against.
  4. Roll it out gradually, watching for the failure modes that matter most to your specific stack.
  5. Document what changed so the next engineer isn't guessing six months from now.

the CNCF (Cloud Native Computing Foundation) is a useful reference while you're working through this, especially for the edge cases that don't show up in a quick tutorial.

Expect the first attempt to surface at least one assumption that turned out to be wrong. That's normal, and it's exactly why a small pilot matters more than a big-bang rollout.

A laptop screen showing programming code and debugging tools, ideal for tech topics.

Tradeoffs and Risks Worth Naming

In our own testing, the biggest mistake isn't picking the "wrong" option. It's not setting a clear success measure before committing, so nobody can tell if the change actually helped.

Google Cloud’s database architecture guides is worth reading before you lock in a decision here, since it covers failure modes that don't show up until a system is under real load.

Backtrace Media's own coverage of data keeps coming back to the same point: the tooling matters less than having a clear rollback plan before you start.

The teams that recover fastest from a bad call here are the ones who treated the initial decision as reversible. A one-way door on day one removes your best safety net. See reading a Postgres query plan.

A rollback plan doesn't need to be elaborate. It needs to exist, be written down somewhere the whole team can find it, and have actually been tested once before you need it for real.

Hands of a person typing on a laptop with a blue keyboard, taken from above, ideal for technology themes.

Who Should Actually Care About This

Not every team needs to act on this right now. A team under five engineers with a stable, low-traffic system can usually defer this decision without real cost.

Once a team crosses roughly a dozen engineers, or once deploys start happening multiple times a day, the calculus changes. That's when these tradeoffs show up as real friction. See Postgres 19 upgrade plan.

There's also a middle case worth naming: a small team that's growing fast. If headcount is expected to double within a year, it's often worth paying the setup cost now rather than migrating under pressure later.

Backtrace Media has watched teams delay this decision until it became an emergency, and it's almost always harder to fix under pressure than it would have been to plan for calmly.

It's worth naming the actual cost of waiting, too. A decision deferred long enough tends to get made by accident, under a deadline, instead of deliberately with time to test it properly.

Getting This Right on Your Team

Start small. Pick one service, one pipeline, or one team to pilot the change before rolling it out everywhere.

the official Apache Software Foundation documentation is a good sanity check once you've made a decision, to confirm you haven't missed a known failure mode. At Backtrace Media, in our own testing, teams that skip this step are the ones that end up rolling back six months later.

Set a review date two to four weeks out, not an open-ended "we'll revisit if there's a problem." An open-ended timeline is how a temporary decision quietly becomes permanent.

Write down the specific metric you're watching before the pilot starts. "It feels faster" isn't a result; a specific number you can compare before and after is.

Close-up of ethernet cables connected to a network switch panel in a data center.

What Backtrace Media Tells Engineering Teams Asking About This

When teams ask Backtrace Media for a straight answer on zero downtime schema migrations, the response is almost always the same: match the choice to your team's actual constraints, not the loudest opinion on social media.

AWS’s database blog is the reference we point people to most often once they're past the "which one is better" stage and into the "how do we actually do this" stage.

The teams that come back to thank us later aren't the ones who picked the trendiest option. They're the ones who picked the option that matched what their team could actually operate and maintain.

If you're still unsure after reading this, that's a normal place to be. Run the small pilot described above before making a company-wide call either way.

server, room, datacenter, network

Conclusion

There's no universal right answer for zero downtime schema migrations. There's a right answer for your team, your current stack, and how much risk you can absorb this quarter. Start with a small pilot, set a measurable target, and be honest about the results before rolling anything out further.

Revisit the decision on the timeline you set, not whenever it becomes a crisis. That single habit prevents most of the regret teams report months after a rushed call.

Backtrace Media covers data decisions like this one because they're the ones that quietly determine how fast a team can actually ship. Backtrace Media covers the database and data-pipeline decisions that quietly determine how an app performs.

What's the biggest mistake teams make with zero downtime schema migrations?
The most common mistake is deciding based on a feature comparison alone, without piloting the change against a real workload first. A small pilot with a clear success measure catches problems a spec sheet never will.
How long does it typically take to see results?
Most teams see a meaningful signal within two to four weeks of a focused pilot, assuming they set a measurable target before starting. Longer than that usually means the pilot's scope was too broad.
Is this worth doing for a small team?
It depends on where the pain is showing up today. If the current approach is actively slowing down releases or causing on-call pain, it's worth a small pilot even for a small team.
What should teams check before committing to a change here?
Confirm there's a clear rollback plan and that the pilot's results are actually measured against a baseline, not just a gut feeling. Skipping this step is the most common reason teams later regret the decision.

Written by

Paige Donnelly

Senior Backend Engineer

8+ years experience

Paige Donnelly is a senior backend engineer who has spent the last eight years working on distributed systems, first at a mid-size fintech and then leading a payments infrastructure team through a migration from a monolith to event-driven services. She's on the losing end of more 3am pages than she'd like to admit, which is why she writes about observability, deployment safety, and API design with an eye toward what actually breaks in production rather than what looks good in a conference talk. She contributes to a couple of open-source CLI tools in her spare time and still refuses to use a debugger for anything she can solve with well-placed logs.

Credentials

  • 8 years in backend and distributed systems engineering
  • Former tech lead, payments infrastructure at a Series D fintech
  • Contributor to several open-source developer tooling projects