All projects

Migrating an operations application to .NET 10

Moving an operations application on top of an ERP from .NET Framework 4.8 to .NET 10 with golden-master tests — the new version is checked against the recorded behavior of the old one. Writing data is hybrid: ERP entities go through its API, the application’s own data straight into the database.

Year
2025–2026
Client
Under NDA
Stack
.NET 10 · .NET Framework 4.8 · Dapper · MS SQL · xUnit · Playwright

Not a rewrite from scratch. An operations application on top of an ERP is moving from .NET Framework 4.8 to .NET 10 so that the new version does exactly what the old one did, including the behavior people are used to.

The method: golden-master tests. A recording harness runs on top of the old application and captures its actual behavior on real inputs. The new implementation is then replayed against that recording. Apart from deliberate exceptions, the oracle doesn’t get corrected — when a result differs, the bug is looked for in the new version, not in the old recording. Discrepancies in decimal arithmetic aren’t swept under the rug; they’re documented.

Writing data has a hybrid architecture: entities that belong to the ERP are written through the ERP’s API. Data that belongs only to this application goes straight into the database. The border between the two worlds is guarded by a convention test, so that nobody crosses it by accident while refactoring.

Before every sprint, a probe into the production database — not the documentation, but a look at what the data really looks like.

Stack: .NET 10 and .NET Framework 4.8 on the recording side, Dapper, MS SQL, xUnit, Playwright, GitHub Actions. TreatWarningsAsErrors, a NuGet package audit, a list of banned APIs.

The work ran in an agent harness — sprints, with a contract at the start of each one and an evaluation before it was closed.