Product Engineering
The Case Against Starting Over
A rebuild can feel like the cleanest solution to a messy website. Often, the better decision is to keep what works and fix what does not.

There is a particular kind of optimism that comes with starting over.
The old website has accumulated years of fixes, plugins, design changes, forgotten decisions, and code nobody really wants to touch.
Then somebody says it:
“What if we just rebuilt the whole thing?”
Suddenly everything feels easier.
We can clean up the code. Rethink the design. Replace the CMS. Remove the weird old dependencies. Start fresh with the tools we would choose today.
Sometimes that is exactly the right decision.
But starting over is not free.
And a clean codebase is not, by itself, a product outcome.
Before rebuilding something that already works, even imperfectly, it is worth asking a much less exciting question:
What actually needs to change?
A rebuild solves more than the problem you have
This is one of the easiest traps to fall into.
Maybe the current site is slow.
Maybe editing content is painful.
Maybe the mobile navigation is broken.
Maybe the visual design looks dated.
Maybe there is one part of the codebase nobody understands anymore.
Those are real problems.
But none of them automatically mean the entire website needs to be replaced.
A full rebuild turns a specific problem into a much larger project.
Now you are not just fixing performance. You are recreating every page.
You are not just improving the content workflow. You are migrating content into a new system.
You are not just fixing the navigation. You are reproducing forms, redirects, analytics, metadata, integrations, accessibility behavior, responsive layouts, and all of the small edge cases the existing site has accumulated over time.
The rebuild might still be worth it.
But the size of the solution should be proportional to the size of the problem.
Existing systems contain knowledge
Old code gets a bad reputation.
Sometimes it deserves it.
But an existing website contains more than code.
It contains years of decisions.
That strange conditional in the checkout flow may exist because of an edge case somebody discovered three years ago.
That awkward redirect may be preserving an old URL that still receives search traffic.
That plugin nobody likes may be connected to a business process the development team does not see.
That ugly CSS rule may be preventing a layout from breaking on a device that caused trouble in the past.
Not all legacy behavior is valuable.
Some of it is absolutely junk.
The problem is that a rebuild often removes the evidence along with the junk.
When you replace a mature system, you need to rediscover which behaviors mattered.
Sometimes you only find out after they are gone.
“We can build it cleaner” is not enough
Developers understandably care about code quality.
We should.
A codebase that is difficult to understand, test, or change creates real costs.
But users never experience your folder structure.
They do not know whether the site uses the newest framework.
They do not care that the team finally got rid of a dependency everyone hated.
They experience whether the website is fast.
Whether they can find what they need.
Whether the form works.
Whether the content is accurate.
Whether the site behaves properly on their phone.
Cleaner implementation matters when it helps us deliver those outcomes more reliably.
It is not an outcome by itself.
If rebuilding the site produces the same experience at significant cost, we should be able to explain what that investment buys.
Rebuilds create migration risk
Starting from a blank repository can feel safer because there is no old code to work around.
But replacing an existing website introduces a different category of risk.
You have to move everything.
Content.
Images.
URLs.
Metadata.
Forms.
Analytics.
Tracking consent.
Search indexing behavior.
Structured data.
Third-party integrations.
Redirects.
Authentication.
Permissions.
Deployment configuration.
DNS.
Sometimes years of content and thousands of URLs.
The old system may be messy, but it is also already carrying all of that.
A rebuild has to prove that it can do the same thing before it can improve anything.
This is why seemingly straightforward redesigns can become surprisingly large engineering projects.
The visible design is only part of the website.
Rewrites can freeze progress
There is another cost that is easy to underestimate.
While the new system is being built, what happens to the old one?
Often, teams end up maintaining both.
The existing website still needs bug fixes and content updates because customers are using it.
The replacement needs development because eventually it is supposed to take over.
Now every meaningful change creates a question.
Do we fix it in the current site?
Do we add it to the new site?
Do we do both?
The longer a rewrite takes, the more the two versions drift apart.
Eventually the replacement is chasing a moving target.
This does not mean large rebuilds should never happen.
It means the migration plan matters just as much as the architecture.
Sometimes the boring fix is the better fix
A lot of website problems can be solved without replacing the website.
A slow site might need image optimization, better caching, or fewer third-party scripts.
A dated interface might need a new design system rather than a new backend.
A painful CMS might need better content models or a better editing workflow.
A fragile frontend might benefit from replacing one section at a time.
A confusing information architecture might be improved without changing the technology underneath it at all.
None of those approaches are as emotionally satisfying as deleting everything and starting fresh.
They can be much better business decisions.
You keep the parts that are already proven.
You reduce migration risk.
You ship improvements sooner.
And you spend the budget on the problems users actually experience.
There are good reasons to start over
None of this is an argument for keeping bad systems forever.
Sometimes the foundation really is the problem.
A rebuild may make sense when the current system fundamentally cannot support what the product needs to become.
The platform may be obsolete or insecure.
The architecture may make ordinary changes disproportionately expensive.
Critical dependencies may no longer be maintained.
The content model may be so restrictive that every new requirement becomes a workaround.
The site may need capabilities that the existing platform simply cannot provide.
Or years of incremental patches may have reached the point where replacing the system is genuinely cheaper than continuing to extend it.
Those are meaningful reasons.
“We would build it differently today” is a much weaker one.
Redesign, replatform, and rebuild are different decisions
These terms often get bundled together, but they do not need to happen at the same time.
You can redesign a website without changing the underlying platform.
You can move to a new CMS while preserving much of the frontend.
You can rebuild the frontend while keeping the content system and URLs intact.
You can replace one application inside a larger website without touching the rest.
Breaking the problem apart gives you more options.
Instead of asking whether the entire website should be rebuilt, ask which layer is actually preventing the product from moving forward.
The answer might still be “all of it.”
But now you know why.
Start with the constraint, not the solution
When we inherit an existing website, our first instinct should not be to defend it.
It should not be to replace it, either.
The first job is to understand it.
What is working?
What is not?
What is expensive to change?
What are users struggling with?
What does the business need next?
Which parts of the system are creating those constraints?
Once those questions are answered, the technical options become much clearer.
Maybe the right answer is a full rebuild.
Maybe it is a targeted redesign.
Maybe it is replacing a fragile subsystem.
Maybe it is five relatively small fixes that remove most of the pain.
Starting over should be one option among many.
Not the default.
The goal is not a new website
A new website can feel like progress because the difference is visible.
There is a launch date.
There are new screenshots.
Everyone gets to point at the before and after.
But the real goal is not to replace the thing you have.
The goal is to make the product better.
Sometimes the fastest, safest, and most effective way to do that is to build something new.
And sometimes it is to resist the temptation to start over, keep the parts that already work, and fix the parts that do not.
How we can help
A website or app someone else built: understood first, then fixed, improved, and moved forward.

