Free guide · For SaaS owners and product leads
Modernize your SaaS without a rebuild
How to decide what to keep, fix or rebuild, and do it while it stays live.
For teams whose live product has become hard to change, slow to ship or costly to run. Sometimes the honest answer is a rebuild, and this guide says when.
Five stages, one live product
- 1AssessA keep, fix or rebuild sheet
- 2StabilizeTests, checks and alerts
- 3Replace, one module at a timeOld and new side by side
- 4Speed and interfaceMeasured against before
- 5AI, if it earns its placeOn a stable base
Your product stays live through all five
Chapter 1
The 10-minute check: rebuild or not?
Most products that feel like they need a rebuild don't. The pain usually sits in a few parts, and those can be replaced while everything else keeps running. Tick every statement that is true of your product today:
0 keep-and-fix · 0 rebuild
Tick the statements above to see where you land.
Reading your result
- A stop sign ticked (no security fixes, or an end-of-life version): deal with that first. Code that can't get security fixes has to be upgraded or replaced before anything else. The module sheet shows whether that means a few modules or the whole product.
- More rebuild signs than keep signs: fill in the module sheet. If the rebuild signs sit in one or two modules, rebuild those, not the product. If they are everywhere, read chapter 9.
- As many keep signs as rebuild signs, or more: keep and fix, in stages. Mark any module with a rebuild sign in the sheet.
If you lean towards a rebuild, one more question: is the product small enough to rebuild in under two quarters? If not, replacing it in stages is usually safer.
Now do it one module at a time
Fill in this sheet with your lead developer. It turns “the whole thing is a mess” into a list you can act on, and it is the most useful thing to bring to any first call with an outside team.
| Module | Keep, fix or rebuild | Why | Pain (1–5) | Changes often? | Risk if it breaks |
|---|---|---|---|---|---|
| Sign-up and login | |||||
| Billing | |||||
First module to work on, and why:
What we will not touch this year:
Copy pastes as a table into a spreadsheet or a doc.
Keep, fix or rebuild: one line per module Product: Filled in by: Date: Module Keep / Fix / Rebuild Why Pain (1-5) Changes often? (Y/N) Risk if it breaks (L/M/H) Sign-up and login Billing First module to work on, and why: What we will not touch this year:
Chapter 2
Map what you run, then pick the first module
You can't plan changes to something nobody has written down. Before deciding anything, list:
- Apps and services: everything that runs, including background jobs and scheduled tasks.
- Data: each database and file store, its size, and what lives in it.
- Integrations: payments, email, CRMs, partner feeds, and what breaks if each one fails.
- Who uses what: customer-facing parts versus internal tools.
- Where it runs: hosting, regions, and what it costs each month.
- Regulated data: health, payment or personal data, and which rules apply to it.
- How releases happen today: who deploys, how often, and how a bad release is undone.
- Recent incidents: the last five things that broke, and why.
Pick the first module
Use the pain, change and risk columns from your sheet. Start where pain is high, the code changes often, and a failure would be noticed but not fatal. Leave the riskiest parts, usually billing and login, until the team has a rhythm.
Don't start with the hardest part. The first module teaches everyone how the work runs: how releases go, how rollback works, who decides. Learn that on something that can't take the business down.
Chapter 3
Five stages, while it stays live
Each stage ends with a working product. You can stop after any of them. The “Done when” line under each one is how you know it is finished.
- 1
Assess
The map from chapter 2, a keep, fix or rebuild sheet, an agreed order of work, and a baseline: page speed, error rate and how often you release, so later stages can be measured.
Done when: Everyone who signs off agrees the order, and the baseline is written down.
- 2
Stabilize
Automated tests on the journeys that make money, automatic checks on every change, error alerts, and a private copy of the app (staging) to try changes first.
Done when: Tests cover the journeys that make money, every change runs them, and errors reach a named person before customers notice.
- 3
Replace, one module at a time
The new version of a module runs beside the old one. Users move across in steps. Then, after an agreed period with no mismatches, the old one is switched off. Engineers call this the strangler pattern.
Done when: The old module is switched off, and nothing that relied on it broke.
- 4
Speed and interface
The slow pages and dated screens your users complain about, fixed and measured against how they were before.
Done when: The baseline numbers from stage 1 have moved.
- 5
AI, if it earns its place
Only once the base is stable: features that save your users or your team real time. If it touches patient data, the AI provider needs a BAA (Business Associate Agreement) too.
Done when: It pays for itself in time or money, measured.
An example: replacing a reports module
Illustrative, not a client project
- Build the new reports alongside the old ones, reading the same data.
- Turn them on for your own team first, behind a feature flag: a switch that turns a feature on for chosen users only.
- Compare old and new totals every day until they match.
- Move customers across in steps: a few, then a quarter, then everyone.
- Once totals have matched for an agreed period, switch the old reports off and delete their code.
What decides how long each stage takes, and what it costs
- The size of the code, and how much of it is covered by tests today. A product with no tests costs more to change safely, because the tests come first.
- The number of integrations, and how fragile they are.
- Regulated data, and the approvals it needs.
- How much your own team can take on alongside their day jobs.
Making the case to your board
Put two things side by side:
- The cost of doing nothing: developer hours spent on fixes and firefighting, features you can't ship, customers lost to slowness or outages, and the security exposure.
- What you will measure: how often you release, how long a change takes to go live, error rate, page speed, hosting cost and hours spent on incidents. Take the baseline in stage 1, and report the same numbers after each stage.
Chapter 4
Keeping it live while it changes
Five things go wrong when live products change. Each has a standard technique:
| Risk | Technique | Without it |
|---|---|---|
| A new version breaks for everyone at once | Feature flags: switch the new version on for a few users, then more. | One bad release reaches every customer. |
| You can't undo a change quickly | A written rollback plan for each stage (see below). | Long outages while people argue about what to do. |
| Old and new give different answers | Run both side by side and compare their results before anyone relies on the new one. | Silent errors in numbers customers depend on. |
| Moving everyone across in one night | Send traffic through one entry point and shift it to the new part in steps: 5%, 25%, then all. | A risky, all-at-once cutover. |
| Releases take the product down | Small releases, rolled out to a share of users first, with automatic health checks that stop a bad one. | Downtime on every release. |
Write the rollback plan before each stage starts
Decide what triggers a rollback, and who calls it, while everyone is calm. Fill this in for every stage:
| Stage | |
|---|---|
| What we are changing | |
| Roll back if | For example: errors above normal for 10 minutes, or failed payments above the normal rate |
| Who decides | One named person |
| How we roll back | For example: switch the flag off, and send traffic back to the old module |
| Data written since the change | How we keep it, or bring it back |
| How long it takes | |
| Who is on call, on each side | |
| How we tell customers, if needed |
Copy pastes into a doc or a spreadsheet.
Rollback plan: one per stage Stage: What we are changing: Roll back if: For example: errors above normal for 10 minutes, or failed payments above the normal rate Who decides: One named person How we roll back: For example: switch the flag off, and send traffic back to the old module Data written since the change: How we keep it, or bring it back How long it takes: Who is on call, on each side: How we tell customers, if needed:
Want a second opinion on your keep, fix or rebuild sheet? Tell us what you run today, and we will say plainly what to keep, fix or rebuild.
Chapter 5
Moving data without downtime
Data is where upgrades go wrong for customers. Code can be rolled back in minutes; lost or mismatched data can't. The safe pattern:
- Change the database in steps, not in one go. Add the new column or table first, move the code across, and only then remove the old one. Old and new code both keep working throughout.
- Keep one system as the source of truth. The old one stays in charge until the switch.
- First, start copying every new change across to the new system, so nothing written during the move is missed.
- Then copy the existing data across in small batches, in the background. The batch copy must never overwrite a record that has changed since, and small batches keep the live product from slowing down.
- Check that the two match: record counts, totals and spot checks of real records. Fix any drift before going further.
- Rehearse the switch on an anonymized, production-sized copy of the data (de-identified, for patient records), in a controlled environment, and time it.
- Switch, and keep the old system in step: copy changes back to it until the new system has run cleanly for an agreed period, so you can switch back without losing data.
- Write a cutover runbook: the steps, a named owner, a time window and a go or no-go check before you start.
Chapter 6
Risk, sign-off and access during the work
Keep one risk register for the whole project. Every risk has an owner and a trigger, so nobody has to improvise. Review it every week, at the status update. The rows below are examples:
| Risk | Likelihood | Impact | Owner | What we do about it | Roll back if |
|---|---|---|---|---|---|
| Payments fail after the billing module moves | Medium | High | Your lead engineer | Run new billing beside the old: only the old system charges; the new one calculates and is compared | Any calculated amount that differs from the old system |
| Reports show different totals | Medium | Medium | Product owner | Reconcile totals daily while both run | A difference customers would notice |
| A slow database change locks tables | Low | High | Outside team lead | Change the database in steps, in the lowest-traffic hour | Page load above an agreed limit |
Who signs off
Each stage starts only when its owner on your side signs off the plan and the rollback plan, and ends only when they sign off the result.
Access while outsiders are in your systems
- Production access only for named people, only for as long as a stage needs it.
- Outside accounts use two-factor login, or your own single sign-on.
- Every action in production logged, and the logs kept for your retention period.
- No one outside your company gets any access to systems holding patient records, even read-only, until a BAA is signed (in the US).
- A written emergency-access procedure: who can use it, and how its use is logged and reviewed.
- No copies of production data on laptops. Test with anonymized data, de-identified for patient records.
- Access removed, and passwords and keys changed, at the end of each stage and whenever someone leaves.
- Changes to security settings reviewed by someone on your side.
Chapter 7
Working alongside your own team
Most modernizations are shared between your developers and an outside team. Agree who does what before the first line of code:
| Area | Your team | Outside team |
|---|---|---|
| The code | Lives in your repository from day one. You own it. | Works in branches in your repository. |
| Reviews | Your lead reviews their pull requests. | Review yours, if you ask, and follow your standards. |
| Priorities | You decide. | Recommend, with reasons. |
| Status | Reads the weekly update, and comes to each demo. | A short written update every week, and a demo at the end of each stage. |
| Each cutover | A named person on call. | A named person on call. |
| End of each stage | Signs off the result. | Hands over runbooks, an updated architecture diagram and the decision log, runs a handover session, and has its access removed. |
No lock-in. If the outside team left tomorrow, your developers should be able to carry on from the code, the notes and the handover sessions alone.
Chapter 8
What a codebase assessment should tell you
Before you commit to any plan, from any team, ask for a written assessment. Use this list to judge it, ours included:
- A keep, fix or rebuild verdict for each module, with the reason.
- The riskiest areas, ranked.
- How releases happen today, and how much is covered by tests.
- Security issues found, by severity.
- Outdated frameworks and libraries, and the upgrade path for each.
- What hosting costs, and the quick savings.
- A staged plan: the order of work and what each stage delivers.
- What they did not look at.
Red flags
- A verdict before anyone has seen the code.
- “Everything needs rebuilding.”
- No written report, only a sales call.
Chapter 9
When to rebuild anyway, and how to do it safely
If chapter 1 pointed to a rebuild, the rules that keep an upgrade safe still apply. Rebuilds fail when they try to replace everything on one launch day.
- Rebuild in stages too. Run the new product beside the old one and move customers across in groups, not on one launch day.
- Freeze new features on the old product, or the rebuild chases a moving target.
- Move the data early and often, not at the end.
- Keep the old product running until the last customer has moved and stayed.
Quick answers
Questions teams ask
Yes. Each stage ends with a working product, so you can stop, ship features for a while, and pick up again later.
Only if hosting is part of the pain. Moving and modernizing at once doubles the risk, so do one, then the other. Moving first often makes sense when the current hosting is what holds you back.
For a first view: what you run, your stack and hosting, and the part that hurts most. Code access comes later, only if you decide to go further.
About Provis
We say plainly what to keep, fix or rebuild.
Yes. Our engineers can join your sprints and rituals as a dedicated team or an extension of yours.
Yes. American Community School of Abu Dhabi and The Vault both keep Provis on to maintain, support and extend platforms that are already live.
- 1We read what you sendOur team in India (IST) reads every request.
- 2Our view, in writingWhat we would keep, fix or rebuild, and in what order.
- 3A call, if you want oneTo talk it through with your lead developer.
Useful to include
- Your keep, fix or rebuild sheet from chapter 1
- Where it runs, and roughly what it costs
- The part that hurts most, and since when
- Any compliance rules that apply
Rather talk first? Book a 30-minute call with Vivek Sharma, CEO & Founder.
Clutch 5.0 · 12 reviews
Google 4.6 · 36 reviews
Top Rated on Upwork
Tell us what you run today
We will say plainly what to keep, fix or rebuild. No code or repository access needed to send this.