The Friday Deploy

The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.

“We Need to Rebuild From Scratch”. Should You Believe Your Developer?

November 27, 2025

Your developer just told you the application needs to be rebuilt from scratch. They’ve explained that the current code is a mess, it’s holding you back, and starting fresh would be faster than continuing to fix problems.

This is going to cost six months and $50,000-$100,000. Should you believe them?

Why Developers Want to Rebuild

First, understand why developers suggest rewrites. It’s rarely malicious, but the motivations vary:

Legitimate technical reasons: The platform is obsolete, the architecture is fundamentally broken, or continuing with the current system is technically impossible.

They want to work with new technology. Your app is built in older frameworks. They’d prefer to work with modern tools that look better on their CV.

They’re frustrated with messy code. Every codebase looks messy to developers who didn’t write it. The code works, but it’s not how they would have done it.

They genuinely believe they can do better. With hindsight, everyone can see mistakes in past decisions. Rebuilding feels like an opportunity to fix everything.

The first reason is valid. The others are expensive ways to satisfy developer preferences rather than solve business problems.

The Case Against Rebuilding

There’s a famous essay by Joel Spolsky called “Things You Should Never Do” that argues rebuilding from scratch is “the single worst strategic mistake any software company can make.”

His argument:

That messy code contains hard-won knowledge. Every weird workaround, every odd piece of logic, was written to solve a specific problem. Rebuilding means rediscovering all those problems the expensive way.

You stand still while competitors move forward. During the rebuild, you can’t add new features or respond to market changes. You’re investing in getting back to where you already are.

The canonical example is Netscape. In the late 1990s, Netscape decided to rewrite their browser from scratch. It took three years. During those three years, Microsoft’s Internet Explorer took all their market share. By the time Netscape released their rewritten browser, the company was effectively dead.

Three years standing still killed a company worth billions.

When Rebuilding IS Justified

That said, rebuilding is sometimes the right answer. Here’s when:

The Platform or Technology is Obsolete

If your application runs on technology that’s no longer supported, you may have no choice.

Examples:

  • Built on Flash (which browsers no longer support)
  • Runs on Windows XP (which is no longer supported)
  • Uses a framework the vendor has discontinued
  • Written in a language where you literally cannot hire developers anymore

This is a legitimate technical forcing function. You’re not rebuilding because you want to, you’re rebuilding because you must.

The Original Team is Gone and Nobody Understands It

If the people who built the system have left and the current team genuinely cannot figure out how it works, that’s a problem.

Red flags:

  • Every small change breaks unexpected things
  • Nobody can explain why certain features work the way they do
  • There’s no documentation and the code is impenetrable
  • Making any change takes ten times longer than it should

However, be sceptical here. “I don’t understand this code” often means “I haven’t taken time to understand this code.” Good developers can usually figure out unfamiliar codebases given time.

Fundamental Architecture Problems

Sometimes the core architecture makes certain changes impossible or prohibitively expensive.

Legitimate examples:

  • Built as single-user desktop app, needs to be multi-tenant web app
  • Designed for 100 users, breaks down completely at 10,000 users
  • No separation between components, can’t scale horizontally
  • Security model is fundamentally flawed and can’t be patched

These are structural problems that can’t be fixed with incremental improvements. But they’re rare.

You’re Making a Strategic Pivot

If your business model or target market has changed dramatically, your application might need to change just as dramatically.

Examples:

  • Moving from B2C to B2B with completely different requirements
  • Expanding from single-region to multi-region with compliance requirements
  • Shifting from desktop to mobile-first

In these cases, you might genuinely be building a different product, not just improving the existing one.

Questions to Ask Your Developer

When someone proposes a rebuild, ask these specific questions:

“What specifically can’t we do with the current system?”

Don’t accept vague answers about “technical debt” or “outdated architecture.” Get concrete examples.

Good answer: “We can’t add multi-currency support because the entire system assumes single currency in the database schema. Changing this requires modifying 47 different tables and 200+ queries.”

Suspicious answer: “The code is really messy and hard to work with.”

“Can we solve this incrementally instead of all at once?”

Most problems can be fixed gradually. A complete rebuild is rarely the only option.

Good answer: “We could migrate one module at a time over 12 months while keeping the system running. It would take longer but reduce risk.”

Suspicious answer: “No, we have to rebuild everything at once.”

“What happens to the business during the rebuild?”

Rebuilds take months or years. What happens to your competitive position during that time?

Good answer: “We maintain the current system and add critical features there. The rebuild happens in parallel. We migrate customers gradually when the new version reaches parity.”

Suspicious answer: “We stop all feature development and focus on the rebuild.”

“How do we know the rebuilt version will be better?”

Starting fresh doesn’t guarantee better results. The same team that created the “mess” will create the new version.

Good answer: “We’ve identified specific problems and have concrete plans to avoid them. We’re implementing automated testing and code review processes we didn’t have before.”

Suspicious answer: “We’ll just do it right this time.”

“What’s plan B if this takes longer than expected?”

Software projects almost always take longer than estimated. What if the six-month rebuild becomes eighteen months?

Good answer: “We have checkpoints every six weeks where we reassess. If we’re falling behind, we can pause and reevaluate.”

Suspicious answer: “It definitely won’t take longer, we’ve estimated carefully.”

The Strangler Fig Pattern

There’s a middle ground between “keep fixing the old system” and “rebuild everything at once.” It’s called the Strangler Fig pattern.

How it works:

  1. Build new functionality in a new system
  2. Gradually migrate old functionality piece by piece
  3. Eventually, the new system has replaced the old one entirely

This approach:

  • Delivers value continuously instead of waiting for the big reveal
  • Reduces risk by proving the new approach works incrementally
  • Lets you change course if the rebuild isn’t working
  • Keeps the business running throughout the transition

Example: Your e-commerce system is old and problematic. Instead of rebuilding everything:

  1. Build new checkout process (most critical, highest ROI)
  2. Migrate product catalogue once checkout proves stable
  3. Move customer accounts after that
  4. Gradually replace remaining pieces

This takes longer overall but delivers value faster and reduces risk dramatically.

Red Flags That This is a Bad Idea

Be immediately sceptical if:

Your current team all agrees rebuilding is necessary. This could be legitimate, but it could also be groupthink. When an entire team agrees on something this significant, it’s worth getting an outside opinion to confirm they’re right.

However: If you’ve had multiple developers over several years independently reach the same conclusion, that’s different. If your third developer in five years looks at the code and says “this needs rebuilding,” and the previous two said the same thing, you probably have a genuine problem.

The developer suggesting the rebuild is new to your team. They haven’t lived with the system long enough to understand why things are the way they are. Give them six months before taking rebuild suggestions seriously.

There’s no written comparison of rebuild vs. incremental improvement. If they haven’t seriously considered alternatives, they’re attached to the rebuild emotionally rather than rationally.

The rebuild uses completely different technology. If the plan involves switching languages/frameworks, ask whether that’s necessary or just desirable from the developer’s perspective.

The timeline seems aggressive. If they’re confident about how long it will take, they haven’t thought through all the complexity. Good estimates come with ranges and contingencies.

Why You’re Really Resistant to Rebuilding

Let’s be honest about why you might be pushing back on rebuild recommendations, even when they’re legitimate.

It’s not really about the cost. If you’ve been maintaining problematic code for two years, you’ve likely already spent more on endless fixes than rebuilding would cost.

It’s about admitting you made a mistake. You hired those developers. You approved that budget. You told stakeholders this would work. If you admit the code is fundamentally broken, you’re admitting you made a bad decision.

The internal dialogue goes something like:

  • “I should have known better”
  • “The board will think I’m incompetent”
  • “If I rebuild now, I’m admitting the original $50K was wasted”
  • “What if the new version is also terrible? Then I’ve made the mistake twice”
  • “Everyone will know I chose badly”

This is completely understandable. Nobody wants to admit they made an expensive mistake, especially not to people whose opinion matters to them.

But here’s what actually happens when you don’t rebuild:

You keep paying to maintain unmaintainable code. Every feature request takes three times longer than it should. Your developers are frustrated. Your competitors move faster because they’re not dragging technical debt behind them.

Eventually, you’ll be forced to rebuild anyway. But by then, you’ll have spent another $100K maintaining the bad code. The mistake doesn’t get smaller by ignoring it. It gets bigger.

The uncomfortable truth about the original mistake:

The mistake was hiring developers who produced bad code, or not having the expertise to evaluate quality, or moving too fast without proper oversight. That mistake is already made. The money is already spent. That’s a sunk cost.

Continuing to maintain bad code isn’t undoing that mistake. It’s compounding it. You’re choosing to spend more money on the consequences of the original bad decision rather than cutting your losses.

And yes, you might make the mistake again:

This is a legitimate fear. What if you spend $50K rebuilding and the new code is also terrible? Then you’re out $100K total with nothing to show for it.

This is why you:

  • Get multiple independent technical opinions before starting (not just your current team)
  • Hire experienced developers with verifiable track records
  • Implement proper oversight (code review, automated testing, regular technical audits)
  • Do it incrementally so you can verify quality as you go
  • Establish clear quality gates and checkpoints

The question isn’t “will this be perfect?” The question is “is continuing to pay $5K-$10K monthly to maintain unmaintainable code more expensive than the risk of rebuilding properly?”

For genuinely bad code, the answer is almost always no. The ongoing cost of bad code exceeds the cost of fixing it properly.

Reframing the decision:

Try thinking about it this way: that code got you to where you are now. It served its purpose. But it won’t get you where you want to go next.

If your business has grown, if your requirements have changed, if you’re targeting different markets or scale, the code that worked for the early stage might not work for the next stage. This isn’t about the original developers failing. It’s about your business outgrowing the original solution.

Some code is legitimately bad and should never have been built that way. But some code was fine for the original scope and became inadequate as the business evolved. Both situations might require rebuilding, but one is a mistake and the other is just growth.

Either way, the decision should be based on future costs and risks, not on protecting your ego about past decisions.

Here’s what you need to hear:

You’re going to be okay. Yes, the original code didn’t work out the way you hoped. Yes, you’ll need to spend money to fix it. But this happens to everyone who builds software. It’s not a reflection of your competence.

Good business leaders make decisions with incomplete information, and sometimes those decisions don’t work out. What separates good leaders from bad ones isn’t avoiding mistakes entirely – it’s recognising mistakes early and correcting course instead of doubling down.

That code got you to here. It proved your concept, won your first customers, generated revenue, validated your market. It served its purpose. Be grateful for that.

But it won’t take you where you want to go. And that’s okay. You’re growing. Your business is evolving. The technical foundation that worked at the beginning isn’t always the foundation you need for the next stage.

This is a normal part of business growth. You’re not the first person to face this, and the ones who handled it well are the ones who made the hard decision to rebuild when rebuilding was necessary.

You can get through this. Get the independent assessments. Make an informed decision. If rebuilding is genuinely necessary, do it properly this time with the right oversight. If it’s not necessary, invest in incremental improvements instead.

But don’t keep paying to maintain bad code just to avoid admitting the original decision didn’t work out. That’s expensive denial, and it won’t serve your business.

Get a Second Opinion

Before committing to a major rebuild, pay for an independent technical assessment. This costs a few thousand dollars but could save you tens or hundreds of thousands.

A good technical consultant will:

  • Review your current system objectively
  • Evaluate whether the proposed rebuild is necessary
  • Identify less expensive alternatives
  • Provide realistic timeline and cost estimates
  • Flag problems with the approach

They have no emotional attachment to either keeping or replacing your current system. Their assessment will be more objective than your current developer’s.

The Honest Assessment

Most rebuild requests aren’t justified by actual technical necessity. They’re justified by developer preference, frustration with messy code, or the appeal of a fresh start.

Rebuilding from scratch is expensive, risky, and often delivers less than promised. The Netscape story isn’t unique; countless companies have spent months or years rebuilding only to end up with a new system that has different problems but isn’t fundamentally better.

However, there are legitimate cases where rebuilding is the right choice:

  • Obsolete technology that’s genuinely unsupported
  • Fundamental architecture that can’t accommodate essential new requirements
  • Strategic business pivots requiring genuinely different products

The key is distinguishing between “this code is messy” (almost always fixable incrementally) and “this architecture fundamentally can’t do what we need” (might justify rebuilding).

What to Do Instead

If you decide against a full rebuild, here’s what to do:

Invest in incremental improvement. Dedicate 20-30% of development time to refactoring and paying down technical debt. The system gets better gradually without stopping feature development.

Fix the root cause. If code quality is problematic, implement better practices going forward: code review, automated testing, documentation standards. Rebuilding doesn’t fix bad practices.

Hire experienced developers. Developers who’ve worked with large, mature codebases are less likely to suggest rebuilding at the first sign of complexity.

Set clear standards. Define what “good enough” means for your codebase. Not every piece needs to be perfect; focus on quality where it matters most.

The Bottom Line

When your developer says “we need to rebuild from scratch,” your default answer should be no.

That’s not because rebuilding is never right. It’s because rebuilding is proposed far more often than it’s actually necessary, and the consequences of unnecessary rebuilds are severe.

Ask hard questions. Demand specific justifications. Require alternatives to be seriously evaluated. Get independent opinions.

And remember: the goal isn’t perfect code. The goal is code that reliably serves your business needs at a reasonable cost. Messy code that works is infinitely more valuable than perfect code that doesn’t exist yet.

Read more Technical Translation

Development Strategy, Legacy Systems, Rebuild, Refactoring, Technical Debt

Previous Next

The Friday Deploy

The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.