Asana Removed Enzyme in Two Weeks. Re-price Your Rails Upgrade

"Five years of work in two weeks." That line landed in my inbox last week, in a Pragmatic Engineer issue about AI-assisted migrations.
It sounded too clean. So I read the primary posts from Asana, Airbnb, and Uber to see what actually happened.
The results are real. And the interesting part is not the AI.
Three migrations, one pattern
Asana removed Enzyme, a dead testing library, from more than 3,000 files in two calendar weeks. The entire instruction was about five sentences. Up to four Codex agents ran day and overnight, and people reviewed the output every morning and evening. Direct cost: about $12,000. That five-year figure was a completion projection for work parked at the bottom of the backlog, not five years of full time effort.
Airbnb did the same migration a year earlier: roughly 3,500 test files, originally estimated at 1.5 engineering years. Their breakthrough was a retry loop. Once it worked, 75 percent of the files converted in four hours and 97 percent within four days. Engineers finished the last hundred by hand.
Uber is the honest counterweight. They tried pointing generative AI at test files in bulk, and it did not work. Deterministic codemods carried their JUnit migration of 75,000 test classes, with AI limited to debugging failures. Four months, done.
In all three stories the model is the cheap part. What made the speed safe was the loop around it: take one small slice, let the machine rewrite it, run the checks, retry on failure, and keep a human gate before merge.
For a framework upgrade, the checks are concrete: the full test suite, visual regression on your real pages, and performance numbers before and after.
This is what your upgrade looks like
Enzyme is exactly the kind of dependency that pins a codebase. It never got a React 18 adapter, so every test suite built on it quietly locked its app to old React. Our ecosystem carries the same drag: in the last week of August, 93 percent of react-on-rails npm downloads were for pre-17 majors.
The reason to move now is React 19. The new rendering and performance features, server components included, live there. React on Rails 17 and Shakapacker 10 each come with a short, known list of breaking changes. A known break list, repetitive edits, executable checks: that is the same shape of work the three companies above just made cheap.
So we changed how we run these. An upgrade now starts as a small pilot: pick one slice from the break list, build the verification loop around it, run it, and read the numbers. If the slice clears the gates, you get an estimate measured in weeks, not years. If it keeps failing, you stop early and have lost very little.
One honest note on cost. Asana's $12,000 bought model time and infrastructure. Senior engineers still set up the work and reviewed every change, and in every story someone finished the last few percent by hand. The work did not disappear. It moved from typing edits to designing checks.
If an upgrade has been sitting in your backlog priced in years, it is probably priced wrong now. Measure one slice.
Aloha, Justin
Closing Remark


