The Lunduke Journal
The Lunduke Journal5d ago
Tech

The Worst Software Engineering Mistake: Deciding to Rewrite the Code from Scratch

22 min video4 key momentsWatch original
TL;DR

Rewriting software from scratch is a catastrophic mistake that kills 99 percent of companies; modern developers have forgotten this lesson Joel Spolsky taught in 2000.

Key Insights

1

Harder to read than writeIt's harder to read code than write it — which is why programmers constantly misjudge existing codebases as messy when they're actually dense with years of accumulated bug fixes and edge-case handling.

2

Discarding years of fixesWhen you rewrite from scratch, you're not just rebuilding features — you're discarding thousands of hours of real-world testing, production bug fixes, and optimizations that took weeks or months to discover and fix.

3

Each line solves a bugA two-page function that looks bloated typically contains dozens of one or two-character fixes for bugs found in production — Nancy's Internet Explorer install issue, low-memory crashes, floppy disc failures, Windows 95 compatibility.

4

Shipping broken code dailyUbuntu is actively shipping new rewritten code every six months plus daily repository updates, meaning users get untested, broken code instead of battle-tested systems — creating a reputation for shipping garbage, not shipping slowly.

5

Learned the hard wayExperienced managers and engineers learned this lesson the hard way in the 80s and 90s through disasters like Netscape 6.0, Borland's Quattro Pro, and Microsoft's Pyramid project — all killed by the rewrite impulse.

Deep Dive

The Forgotten Law: Why Rewrites Were Always a Disaster

Lunduke opens with a sharp observation: experienced programmers from the 80s, 90s, and early 2000s learned a painful lesson — rewriting working code from scratch is a near-guaranteed disaster. He quotes Joel Spolsky's foundational 2000 essay Things You Should Never Do Part One, which used Netscape's failed rewrite of version 6.0 as the canonical example of this mistake. Netscape had a three-year gap between version 4.0 and the failed 6.0 rewrite, during which they bled market share while competitors moved forward. Spolsky also cited Borland's attempt to turn Arago into dBase for Windows and their rewrite of Quattro Pro — both killed the company while Microsoft Access and Excel ate their lunch. Even Microsoft nearly made this error with Project Pyramid, a complete Word rewrite that was shelved and forgotten. The through-line: companies that made this choice lost years of development time and handed competitors a gift of two or three years to capture market share.

The Psychology of Programmer Impatience

Spolsky nailed the psychological root of rewrites: programmers are architects at heart and want to bulldoze and rebuild rather than incrementally improve. But his deeper insight is the reason they think the old code is a mess — it's because reading code is fundamentally harder than writing it. This asymmetry means every programmer thinks they could write it better and cleaner. They see a two-page function and think it's bloated garbage, not recognizing that each seemingly random line is a bug fix earned through production disaster. One line fixes Nancy's Internet Explorer crash. Another handles low-memory conditions. A third deals with floppy disc eject failures mid-load. Another ensures Windows 95 compatibility. Each took weeks of real-world usage to discover and days to debug and fix. When you throw out that function and rewrite it, you're not simplifying — you're starting a debt clock where those bugs will be rediscovered one by one in production.

Ubuntu's Active Disaster in Real Time

Lunduke uses Ubuntu as a live case study of this exact mistake playing out in 2024. Ubuntu held market dominance in Linux for years with stable, working code carrying decades of optimization and edge-case fixes. Yet Ubuntu's engineering leadership decided to rewrite massive chunks in Rust, a language still incomplete, using predominantly part-time developers new to the project. The catastrophe is compounded by Ubuntu's release cadence: they ship every six months and push daily repository updates. Unlike the 1990s when software shipped as a monolith on CD, Ubuntu is shipping brand-new, untested rewritten code into production continuously. Users aren't waiting for a polished release — they're getting raw, broken, not-yet-tested code and told to deal with it. This creates a reputation not for slow shipping but for shipping garbage. Lunduke argues this is monumentally worse than the Netscape scenario because there's no grace period to stabilize; the broken code hits users immediately.

Management's Role: Stopping the Impulse

Lunduke shifts into personal experience as an engineering manager. He notes that even talented developers had an irrepressible urge to throw out working code and start fresh — it was his job to stop them. He'd tell teams no, work on the existing code, find ways to optimize and improve it incrementally, but rewrites weren't happening. He quotes Steven Sonowski, former head of Windows at Microsoft, who said project managers exist to prevent developers from happily spending years retyping all code using new tools and proper indentation. The current problem is that today's engineers and engineering managers lack the gray-haired authority figure to say no. Either they don't have the experience to know these lessons or they've forgotten them. There's no one above them saying we're not throwing out the core utilities, we're not throwing out pseudo and ls — heavens no. The industry has collectively forgotten the hard lessons of the 80s and 90s, and those lessons desperately need to be relearned.

Takeaways

  • Resist the urge to rewrite; incremental improvements to battle-tested code outperform ground-up rewrites by orders of magnitude.
  • When engineers propose a rewrite, your job as a manager is to stop them and redirect that energy toward new features or optimizations on the existing codebase.
  • Shipping new broken code faster is worse than shipping old stable code slowly—Ubuntu's six-month release cycle turns rewrites into a reputation problem, not a speed advantage.

Key moments

0:11The cardinal rule

The single worst strategy mistake that any software company could make is deciding to rewrite the code from scratch. Not just nine times out of ten, 99 times out of a hundred. That is a profound mistake.

3:33Joel's warning about Netscape

They didn't do it on purpose, now did they? Well, yes, they did. They did it by making the single worst strategic mistake that any software company can make. They decided to rewrite the code from scratch.

8:06Bug fixes buried in old code

Those are bug fixes. One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn't have Internet Explorer. Another one fixes that bug that occurs in low memory conditions.

12:11Ubuntu's bigger mistake

Abuntu ships a brand new version of Abuntu every six months and regularly updates the software in the repository on a daily basis. They're shipping the brand new rewritten from scratch code instead of waiting for that code to be ready to ship.

Get AI-powered video digests

Follow your favorite creators and get concise summaries delivered to your dashboard. Save hours every week.

Start for free