Still Rewriting: How the Framework Carousel Is Costing You the Race
Photo: developer frustrated at computer multiple browser tabs open coding, via thunderdungeon.com
Somewhere right now, a dev team is three months into a Next.js migration they started because their lead engineer read a blog post in December. The old app worked. Users were fine. But the codebase felt stale, and feeling stale is apparently enough to blow a quarter.
This is the framework treadmill — and it's one of the most expensive habits in software development that nobody talks about honestly.
The Story We Tell Ourselves
Rewrites have great PR. They come dressed in the language of progress: modernization, developer experience, technical debt reduction. It's easy to get a room full of engineers nodding along to a migration proposal because it checks every box that sounds smart.
But here's what that proposal usually leaves off the slide deck: the hidden cost column.
Switching frameworks isn't just swapping syntax. You're retiring institutional knowledge. The engineer who knows exactly why that one API route has a 200ms sleep in it — that context doesn't migrate. The quirky workaround for the third-party auth library your team figured out in 2021? Gone. You're starting a new relationship with a codebase that has no memory, while your users expect the same product they logged into yesterday.
The real math on a rewrite almost never pencils out the way the pitch deck suggests.
Who's Actually Winning
Look at the teams consistently shipping features, not the ones with the most impressive tech stack blog posts. You'll find a pattern: they're boring. Deliberately, stubbornly boring.
Shopify ran on Rails for years while everyone predicted they'd collapse under scale. They didn't. Basecamp has been telling the same story about their stack for over a decade, and they're still here, still profitable, still shipping. GitHub ran on a monolithic Rails app long after the architecture community had declared monoliths dead.
These aren't flukes. These are teams that made a calculated decision: the cost of the known problem is lower than the cost of the unknown migration.
That calculus is uncomfortable because it doesn't make for a good conference talk. But it makes for a healthy product.
The Psychology Behind the Carousel
So why do smart engineers keep doing this?
Part of it is genuine enthusiasm — and that's not entirely bad. Early adopters are wired to explore. That's the whole premise of this community. Trying new tools, pushing boundaries, shipping experiments — that's the fuel.
But there's a difference between adopting a new tool for a new project and nuking a working system to rebuild it on something you read about last month.
A lot of framework migrations are also status moves dressed up as technical decisions. There's social capital in being on the cutting edge. Saying "we're migrating to [hot new thing]" at a meetup gets a different reaction than "we're still on Express and it's great." The incentives push toward novelty even when the evidence points toward stability.
Organizationally, rewrites can also be a way to defer harder conversations. Is your team slow because of your framework, or because of unclear ownership, poor specs, and six layers of approval? A migration gives everyone something to point at. It feels like action.
When a Rewrite Actually Makes Sense
None of this means rewrites are never justified. Sometimes they genuinely are. But the bar should be higher than "this feels old."
Here's a rough decision filter worth running before you greenlight a migration:
Is the framework actively blocking a business requirement? Not a hypothetical future requirement — a real, present one. If you literally cannot build what your users need because of a platform constraint, that's a real signal.
Is the performance ceiling causing measurable user or revenue impact? "It could be faster" is not a business case. "We're losing 18% of checkout completions because of load time and we've exhausted optimization options" is.
Is the talent problem real or imagined? "Nobody wants to work in this stack" is often overstated. Good engineers adapt. If you're struggling to hire, the framework is rarely the actual blocker.
What's the opportunity cost? Every engineer-month on a rewrite is an engineer-month not shipping features. Price it honestly. If the rewrite takes six months, what would six months of feature work have produced?
If you can answer those questions clearly and the migration still wins — do it. But most teams that go through this exercise discover the rewrite was a want, not a need.
The Competitive Gap Nobody Talks About
Here's the thing about the framework treadmill that stings the most: while you're rebuilding what you had, your competitors are building what you don't.
Feature velocity compounds. Every sprint a competitor ships something real is a sprint they're pulling ahead. And when you're mid-migration, your feature velocity doesn't just slow — it often goes negative. You're shipping bugs introduced by the rewrite, handling regressions, managing the emotional weight of a team that's been living in a half-broken codebase for months.
The teams that win in competitive markets aren't usually the ones with the cleanest architecture. They're the ones with the most reps. They've shipped more, learned more, iterated more. That experience advantage is real and it's hard to buy back.
Ship First, Refactor Incrementally
The alternative to the framework carousel isn't stagnation. It's discipline.
Incremental improvement — extracting a messy service, upgrading a dependency, modernizing one module at a time — delivers value without the all-or-nothing risk of a full rewrite. It's less dramatic. It won't get you on a podcast. But it keeps the product moving and the team productive.
The best engineers aren't the ones who know the most frameworks. They're the ones who know when to reach for a new tool and when to sharpen the one they've already got.
The next time someone proposes a rewrite, ask the one question that cuts through all the architecture theater: what does this let us ship that we can't ship today?
If the answer is vague, you already have your answer.