# Making the migration affordable

> Source: <https://www.poppastring.com/blog/making-the-migration-affordable>
> Published: 2026-11-02 17:29:30+00:00

[Migrating the GitHub Copilot runtime to Rust, using Copilot](https://github.blog/ai-and-ml/generative-ai/migrating-the-github-copilot-runtime-to-rust-using-copilot/) by Stephen Toub:

A project that would have taken a whole team of developers a year or two before agents was now completed primarily by a single developer, in only a few months, all while the rest of the team continued to greatly expand the runtime's capabilities and reach.

I would have loved this when I ported DasBlog from Web Forms to ASP.NET Core. My [first Core commit](https://github.com/poppastring/dasblog-core/commit/d1e592849f1387e4f4dbe7d1c90535ef936d53e0) was in October 2017. The July 2017 legacy snapshot had roughly 40,000 lines of C#, or 49,000 including Web Forms markup and blog templates, excluding blanks, comments, tests, identified generated code, and bundled libraries. That is the size of the old codebase, not a count of lines ported.

Moving DasBlog to ASP.NET Core meant keeping [existing configuration, themes and RSS feeds](https://github.com/poppastring/dasblog-core/pull/14) working. [Old .aspx URLs](https://www.poppastring.com/blog/addiisurlrewrite-from-web-forms-to-web-core) still needed to resolve, and users needed to log in with their [existing passwords](https://github.com/poppastring/dasblog-core/pull/43).

The Copilot runtime migration landed through 128 pull requests, replacing pieces of the TypeScript runtime with Rust rather than waiting for a single cutover. Existing end-to-end tests ran against the replacement code throughout. The work cost approximately $120,000 in tokens, with engineers contributing to interop, builds and review.

The part I keep coming back to is how Toub divided the work between agent sessions:

Each session, parent or child, gets its own worktree, its own branch, and its own agent loop; it's separate from the session that spawned it rather than something running inside it.

For the session orchestration port, that meant 15 child sessions working on separate branches.

I can imagine dividing the DasBlog migration along similar boundaries, one session investigating URL compatibility, another working through publishing, another handling authentication. I would still have needed to reconcile the changes and verify the old behavior, but several pieces of the migration could have moved forward at once. I am honestly not sure that is how my brain is built, but I can see how it could have helped.

When I [upgraded DasBlog Core to .NET 10](https://www.poppastring.com/blog/upgrading-old-code-with-copilot), Copilot helped me add lots of tests and make the repetitive changes needed to upgrade the UI framework confidently.

Toub puts the real opportunity plainly:

Instead, agents made an entire category of project feasible.

I want [development tools](https://visualstudio.microsoft.com/vs/) that help us understand an existing codebase, coordinate changes across it, and validate and review the result. Not just produce code faster, but make [improvements to existing software practical to take on](https://www.poppastring.com/blog/ai-splits-the-market).

Toub also discusses the migration in this interview:
