Customer migration is the discipline of moving live users from one version of your app to another without breaking their workflow, losing their data, or breaking their trust. For vibe coded apps the migration challenge is bigger than people expect, because the AI tends to generate breaking changes more aggressively than human-written code, and because solo builders rarely have a real test environment to validate the migration before shipping. The result is migrations that work for most users and silently break for a few, which is exactly the failure mode that erodes trust the fastest.
This piece walks through the four phase migration playbook that works for a team of one, the patterns that make breaking changes survivable, and the communication that keeps customers calm during the transition.
Why Solo Migrations Are Different
Most migration guidance is written for engineering teams with multiple environments, dedicated QA, and customer success teams handling the email outreach. None of that applies to a solo operator. You are simultaneously the architect of the migration, the executor, the support agent, and the cleanup crew, and you cannot hand off any of those roles.
The implication is that solo migrations have to be designed for a single human's attention budget. A migration that requires you to monitor 12 different systems for 24 hours straight is not sustainable. A migration that automates most of the monitoring and lets you sleep is. The first rule of solo migration is that the plan has to fit one brain, not a runbook divided across a team.
A 2024 IndieHackers operational survey found that 41% of solo SaaS migrations resulted in at least one customer issue that took more than 24 hours to detect, and that the median customer-facing impact was 7x longer than the engineering team's perceived impact. The gap was almost entirely communication-driven, customers did not know what was happening or what to do.
The pattern to copy is moving a restaurant from one location to another. You do not close the old kitchen and hope the new one works. You run both for a week, transition customers one shift at a time, monitor the new kitchen carefully, and only close the old one when the new one is genuinely ready. The migration is gradual, observable, and reversible.
The Four Phase Playbook
Almost every solo migration follows the same four phases. The order matters, the time spent in each phase varies based on the complexity of the change, and skipping any phase is the most reliable way to create a customer-facing incident.
Phase 1, dual write. Before you change any read paths, start writing data to both the old and the new schema. Every new piece of data lives in both places. Every update updates both. The old schema continues to serve all reads, so the user experience does not change. The dual write phase typically lasts a week, long enough to confirm the new schema is receiving every event the old schema is.
Phase 2, shadow read. With dual write running, start reading from the new schema in the background, comparing the result to the old schema, and logging discrepancies. Every read serves the old result to users, but you collect data on whether the new schema would have returned the same answer. This phase is the most important debugging tool you have, because it surfaces every edge case the dual write missed.

Phase 3, gradual cutover. Once shadow read shows fewer than a tiny number of discrepancies, start cutting over reads to the new schema, but gradually. Day one, 1% of traffic reads from the new schema. Day three, 5%. Day seven, 25%. Day ten, 100%. At each step, monitor error rates and customer reports. If anything looks off, you roll back to the previous percentage by changing a single config value.
Phase 4, old cleanup. Only after the new schema has served 100% of reads stably for a week or two should you remove the dual write and the old schema. The cleanup is permanent, so the patience here matters. Solo operators frequently rush this phase because the old code feels like clutter, and the rush is exactly when undetected bugs surface.
The Communication Layer
The technical migration is only half the work. The other half is keeping customers informed, calm, and able to find help if something goes wrong.
The communication template I use has three touch points. Two weeks before the migration starts, send a one-paragraph email explaining what is changing and what users should expect. Mention specific dates. Link to a page with more detail. The day the migration begins, post a status page entry and send a follow-up email with any actions users need to take (usually nothing, but say so explicitly). A week after completion, send a recap with what changed, any minor issues encountered, and a thank-you for patience.
Read more guides on operating production apps as a solo builder
Browse the grow categoryThe pattern that works inside each email is short, factual, and respectful of the customer's attention. No marketing language. No "we are excited" framing. Just "here is what is changing, here is when, here is what you need to do, here is who to contact if anything goes wrong." Customers reward this kind of communication with patience.
Reversibility Is the Whole Game
The single most important property of a migration plan is reversibility. At every step before phase 4, you should be able to roll back to the previous state in less than 60 seconds. If reversibility is missing, the migration is not actually safe regardless of how careful the rollout is.
The technical pattern for reversibility is feature flags. Every new schema read goes through a flag that lets you instantly switch the read source. Every dual write goes through a flag that lets you stop writing to one side. Every gradual cutover percentage is a flag value. The flags become the migration's control panel, and the rollback is one flag flip away.

The most expensive migration mistake is the irreversible delete in phase 4. A founder finishes the migration, deletes the old schema to clean up storage, and discovers a bug 48 hours later that requires the old data. The recovery cost is much higher than keeping the old schema around for an extra month. Always wait longer than feels necessary before phase 4.
The corollary is that storage is cheap and reversibility is expensive. Pay the storage cost. Solo operators consistently underestimate how often a "completed" migration reveals a bug a week later, and how grateful they are to have the option of rolling back.
What This Means For You
Customer migration is the kind of operational work that distinguishes a sustainable solo SaaS from one that loses customers to every breaking change. The four phase playbook is not optional, it is what makes solo migration possible at all.
- If you're a founder: Practice the playbook on a small migration first. The first time you do dual write and shadow read, the muscle memory is what carries you through the next, larger migration.
- If you're changing careers: Migration discipline is one of the highest-leverage operational skills. Senior engineers earn their seniority partly through migration scars, and the playbook above is the cheap way to learn the lesson.
- If you're a student: Build a tiny app, ship it to a few users, then migrate it. The exercise teaches more about real software operations than any textbook chapter.
Read more operational guides for vibe coded apps
Browse the grow category