Things You Should Never Do, Part II: The Rewrite Question in the Age of AI
Should you ever throw away your codebase and start over, or is a rewrite always a doomed trap?
In 2000, Joel Spolsky called throwing away a working codebase "the single worst strategic mistake that any software company can make." A quarter century later, the answer turns out to depend on which crime scene you are standing in. Tanguy Crusson is standing in the wreckage of HipChat and Stride, the product Atlassian spent three years rewriting while Slack and Microsoft Teams lapped the field. Will Larson is standing next to a table of untouched sushi and champagne flutes, served at the Digg v4 launch party while the production site refused to come back up. Jay Baxter is inside the post-layoff X offices, where a forced audit of Community Notes discovered that deletion, not rebuilding, was the highest-leverage move the team had ever made. And Dhanji Prasanna, CTO at Block, is typing prompts to an AI agent, deleting the output, and calling this the new baseline.
Four rooms, four answers. What sounds like a simple engineering question — rewrite or evolve? — is really a debate about how much of your product's value is trapped in undocumented code, how fast competitors are moving, and whether the cost of rebuilding from scratch is still a universal constant or has just collapsed overnight.
You are staring at an aging system. It is hard to support, nobody wants to work on it, the business is asking for capabilities the architecture cannot gracefully absorb, and a competitor is moving faster. Do you take the engineers who want to go greenfield seriously and authorize a rewrite — or do you treat that impulse as the warning sign of a project that will eat your company? And in an AI-native world, does that calculus still hold?
The 3 Positions
Evidence from the Archive
Atlassian's HipChat rewrite became Stride — by the time it shipped, Slack was miles ahead and Atlassian ultimately sold both to Slack
Tanguy Crusson lived through the failed rewrite that cost Atlassian the enterprise chat market; his advice now is absolutist: never do a rewrite
Digg v4 launch day: caterers, sushi, and champagne flutes around a table of engineers — because the site was not up. It took a month to come back
Will Larson lived through one of the most famous rewrite failures in startup history, driven by a genuine capability gap (social features) — and it still killed the company
After Twitter's layoffs, the Community Notes team audited the system and deleted parts whose maintenance cost exceeded their contribution — a partial, deletion-driven re-architecture that worked
Jay Baxter argues the right unit isn't 'the system' but the components that no longer pull their weight — small teams are forced into this discipline that large teams rarely do
Dhanji Prasanna is pushing Block to live inside the assumption that every release should rm -rf the app and rebuild from scratch — using AI
His argument: the old anti-rewrite rule was downstream of human labor cost, and in an AI-native world specifications become the durable artifact while code becomes ephemeral
Camille Fournier's diagnostic question that kills most rewrites: 'If I could leave this system alone for a long period without it harming my business, is it worth changing at all?'
Her argument is evolutionary: take pieces of the old system, uplift them, clean up tech debt in place — migration cost is almost always underestimated
The Synthesis
None of these five voices is actually arguing the simple question Spolsky posed. The real disagreement is about the right unit of change. Fournier says it is a subsystem. Crusson says it is your entire competitive position, and the answer is to not touch it. Larson says it is the engineering team's belief, which collapses within thirty days if the new thing does not work. Baxter says it is the individual component, and the move is deletion, not replacement. Prasanna says it is the release, and the code itself is the wrong thing to protect — the specification is.
Fournier says the unit is a subsystem. Baxter says it's a component (mostly deletion). Larson says it's team belief — which collapses within thirty days if the new thing doesn't work. Prasanna says it's the release and code itself is the wrong thing to protect. The real disagreement isn't rewrite-or-evolve; it's what the right unit of change even is.
Camille Fournier's question kills most rewrite impulses before they form. If the honest answer is no, the rewrite is an aesthetic project and you should stop. Most rewrites are disguised attempts to solve a non-technical problem with a technical solution — HipChat's real problem was Slack's PMF, not its platform.
Crusson's HipChat lesson isn't that rewrites are impossible — it's that a rewrite, a platformization, and a competitive war were each hard individually, and stacking all three at once was fatal. The rewrite was the one Atlassian had the most control over and should have refused. Ask which dependencies are real and which you chose.
Jay Baxter's post-layoff X audit found that deletion — not rebuilding — was the highest-leverage move. A/B-test wins are measured in one-month windows, but maintenance costs compound for years. The interesting move is rarely rewrite or evolve; it's honest component-level cruft removal that normal orgs never get around to without external pressure.
Prasanna's contrarian move: 'never rewrite' was never a law, it was a consequence of economics. Generation and re-derivation used to be expensive. If AI collapses that cost, the rule protects you from something that no longer exists. The test is whether specifications can reliably capture tacit knowledge — nobody has shipped this at scale yet.
Which Approach Fits You?
Answer 3 questions about your situation. We'll match you to the right approach.
What is the honest answer to Fournier's diagnostic: if you left this system alone for a year, would your business actually suffer?
What is the competitive context?
How confident are you in your team's understanding of the old system?
Evolve in pieces -- refuse the greenfield rewrite
Camille Fournier's hard-won rule: take a well-contained subsystem, uplift it behind a stable interface, clean up its debt, and leave the rest alone. Tanguy Crusson's HipChat-to-Stride rewrite burned three years and ended with Atlassian exiting enterprise chat entirely; Will Larson watched Digg v4 launch to champagne, sushi, and a dark production site. The migration cost — not the build cost — is what teams systematically underprice.
Delete the cruft, keep the core
Jay Baxter's Community Notes audit after the Twitter layoffs found that the highest-leverage move was not rebuilding but deleting parts whose maintenance cost exceeded their contribution. You don't have to rewrite everything from scratch — the interesting move is aggressive deletion combined with selective rewrites of components whose core abstractions are genuinely wrong, while leaving load-bearing parts intact. External pressure (layoffs, new leadership) is often what makes this possible.
Experiment with AI-native rebuild on greenfield work
Dhanji Prasanna at Block is pushing teams toward a world where every release could 'rm -rf' and rebuild from scratch, with the specification — not the code — as the durable artifact. This is directional rather than currently possible, but the honest place to test it is greenfield surfaces where you can run the rebuild in parallel. If the cost of re-derivation has actually collapsed, the anti-rewrite rule becomes a rule against a cost that no longer exists.
Notable Absences
The Bottom Line
The insight underneath all of this: the rewrite question is really a question about trust. Fournier is protecting engineering managers from their own teams' ambition. Crusson is lending you his pattern-matching so you do not have to lose a product to get it. Larson is offering a specific image — sushi, champagne, a dark production site — to cache against a decision your team will otherwise rationalize into existence. Baxter is quietly admitting that most engineering orgs will not make these trade-offs without external pressure. The debate is not really about code. It is about which failure mode you find easier to recover from: the rewrite that never ships, or the legacy system that slowly becomes unshippable.
The newsletter archive suggests a quieter path most successful companies actually take. "How Miro builds product" documents a 60/20/20 split that treats tech debt reduction as a continuous line item, dynamically reweighted when legacy burden grows — so pressure for one giant catastrophic rewrite never builds up. "How Perplexity builds product" sharpens it: tech debt work is only prioritized when it unlocks a user-visible capability, which is exactly Fournier's staged-evolution alternative. "Introducing Core 4" offers the measurement discipline the anti-rewrite camp is implicitly demanding — tech debt repayment as a business metric rather than an engineering aesthetic, so teams can distinguish a healthy piecewise evolution from a vanity rewrite before committing the capital.
Sources
- Camille Fournier — "The things engineers are desperate for PMs to understand | Camille Fournier (author of “The Manager’s Path,” ex-CTO at Rent the Runway)" — Lenny's Podcast, September 15, 2024
- Tanguy Crusson — "Hard-won lessons building 0 to 1 inside Atlassian | Tanguy Crusson (Head of Jira Product Discovery)" — Lenny's Podcast, June 16, 2024
- Will Larson — "The engineering mindset | Will Larson (Carta, Stripe, Uber, Calm, Digg)" — Lenny's Podcast, January 7, 2024
- Dhanji R. Prasanna — "How Block is becoming the most AI-native enterprise in the world | Dhanji R. Prasanna" — Lenny's Podcast, October 26, 2025