Caesars' booking platform was a business-critical .NET 4.x estate stuck on IIS. It could only realistically be run by a couple of engineers on ageing Windows machines, which made onboarding painful, changes risky, and the whole thing a single point of failure. A full rewrite had been discussed for years and consistently sized in years. I took a different route: use coding agents to do the migration safely, and spend the real time on productionising it.
What shipped
- Legacy .NET 4.x services migrated to .NET 10
- Containerised, portable services runnable by any engineer on any machine
- Meaningful test coverage introduced as part of the migration, not after it
- Security and dependency posture brought up to current standards
- Modern observability with Dynatrace across the estate
Impact
- Time to modernise: 1-2 weeks for the migration itself, against a multi-year estimate.
- Contributor access: from ~2 engineers able to run it to every engineer in Caesars able to contribute.
- Risk reduction: off end-of-life runtimes and off bespoke local Windows setups entirely.
- Operability: observability in place before cutover, so issues are seen rather than reported.
My role & scope
- Proposed and led the modernisation approach, including making the case for an agent-led migration.
- Drove the migration hands-on using the GitHub Copilot Modernization agent, with frontier models in Claude Code for the parts needing deeper reasoning, review and test authoring.
- Owned containerisation, CI, and the path to production over the following 3-4 months.
- Trained the team on the new stack and ways of working so ownership didn't stay with me.
Key decisions & trade-offs
- Agent-led migration vs manual rewrite: agents did the mechanical bulk safely and fast; I kept humans on architecture, security and verification. This is what turned years into weeks.
- Migrate then productionise: deliberately separated the two. The code move was quick; observability, training and rollout were the honest 3-4 months.
- Containers over IIS: portability and reproducibility mattered more than staying on familiar hosting.
- Tests as part of migration: slowed the initial pass slightly, but made the cutover defensible.
Tech stack
.NET 10, C#, Docker, Dynatrace, GitHub Copilot Modernization agent, Claude Code