Why this matters
In March 2018 I built a Snake game - the goal was to learn HTML5 - <canvas>, 2D, 3D - in the JavaScript world. It took about two days. Eight years later I asked Claude Code to migrate the same project onto a modern stack. Total elapsed time, including a wrong-direction first pass and the review work: about twenty minutes. The artifact is live at playsnake.online.
This article is the screenshot-by-screenshot read. I include the bad first attempt because the magic isn't free - the way the conversation went is the actual lesson.
The cost of writing the obvious code dropped near zero. The cost of knowing what to ask for did not.- the practical lesson
What 2018 actually was
The original project was not a vanilla HTML page. It was an ASP.NET Core (.NET 6) web app with the snake game embedded in Razor (.cshtml) pages. The frontend used scattered JavaScript modules - a game engine, a menu, a config layer, sounds, a level loader, primitives - bundled and minified by gulp. Bootstrap for the chrome. The build pipeline looked like this:
None of this was particularly clever. It was just what shipping a small browser game looked like in 2018: a server stack you didn't really need, a bundler that was state-of-the-art at the time, and the actual game logic distributed across a dozen files because that's how you organized things back then.
The first try
My first prompt was deliberately under-specified - just to see what Claude would do:
Claude built exactly what I asked for. A working snake game from scratch, in plain HTML5 + Bootstrap + JavaScript, ready to deploy to Azure SWA. Generic - one big canvas, a start button, score and best tracking, dark blue background. About six minutes.
It played snake, but it had nothing in common with what I had actually built in 2018. The under-specified prompt got an under-specified result. That's on me, not on the model.
The real prompt
The second prompt was a migration brief. Pointed Claude at both repos and described the stack on each side:
Three things changed:
- Source and target paths are explicit. Claude knows which directory holds the 2018 code and which holds the new one. The work is migration, not creation.
- "Was / Now" tech stack laid out as a table. ASP.NET Core → just HTML. gulp → esbuild. .cshtml → .html. TypeScript replaces JavaScript. Each row tells Claude exactly what to swap.
- "Read gulpfile.js to know how to build." The single most important line. It's telling Claude to understand the existing build before rewriting it. Migrations break when the rewriter doesn't read the original.
Claude's plan
Claude read both repos, read the gulpfile, then proposed a plan:
The plan reads like one a senior dev would write: assets first (the easy stuff), then leaf modules (low dependencies), then the engine (where the logic lives), then the entry point (which depends on everything), then docs and verification. Each item became a TypeScript file in the new project.
What's worth noting: Claude inferred this ordering from the gulpfile and the source layout. I did not specify it.
The result
About fourteen more minutes later, the migrated project was building cleanly, type-checking, and deployable to Azure SWA. The visual identity from 2018 - the logo, the dark green jungle background, the menu structure - all came across because Claude had the original assets and could read what the .cshtml pages were doing visually.
Click playsnake.online if you want to see it. The game itself - the snake, the levels, the audio - is the 2018 logic, ported to TypeScript and bundled by Vite instead of gulp. The migration preserved the artifact, replaced the pipeline.
The 144x math
2880 min ÷ 20 min ≈ 144
The headline number is real, with the obvious caveat: I did not work 24 hours straight in 2018. The "two days" was wall-clock - thinking, eating, sleeping, breaks - while the "twenty minutes" was focused work with no breaks. If you compare productive hours to productive hours, the speedup is closer to 30-40x. Still real. Still the right order of magnitude for the lesson.
The honest cost
The 20 minutes flatters the AI a little. Three caveats worth naming:
- The first prompt was wrong, and I wrote it. Six of the twenty minutes went to a result I had to throw away. Knowing how to write the migration brief - paths, was/now, "read the gulpfile" - is what saved the rest. That's craft, and it didn't come for free.
- 20 minutes of Claude, 10 minutes of review, then live. Claude did the work in about twenty minutes. I spent ten more reading the diffs and catching the things I didn't like before they landed. Then deploy - and it was live. Skip the review and that thirty minutes becomes an hour of debugging things that almost-worked.
- Migration is the friendly case. Claude had both repos to read - the original code is the spec. If I'd been writing this from scratch with no reference, the prompt-writing alone would have taken longer than the build.
The fair summary: obvious code got faster by 50-100x; judgement work got faster by 2-3x. The product is the migration of an 8-year-old project in 20 minutes, which would have been unthinkable in 2018 - and that part is real.
The takeaway
- AI compresses the obvious code. Scaffolding, build configs, the boring 80% of a port - written in minutes.
- It does not compress the thinking. The under-specified first prompt cost me time. The migration brief saved it. The skill that pays now is writing the brief, not writing the code.
- The review pass is the new craft. "Can you write the game loop?" became "Can you tell when the game loop is built wrong?" in the space of one career. Get good at that.
Two days to twenty minutes is what changes. The shape of being a developer - knowing what you want, knowing when it's wrong, knowing what to ship - does not.
For more on the tool itself, read What is Claude Code? For where it fits next to Copilot, read Copilot vs Claude Code: engineer vs artist.
References
- playsnake.onlineplaysnake.online - the migrated 2026 build
- Claude Codeanthropic.com/claude-code