The .NET Framework app that has served the business for a decade still works — but it is pinned to an old runtime, tied to the server it sits on, and harder to change every release. We move it to modern .NET and the cloud one slice at a time, parity proven before any cutover.
A .NET Framework estate is rarely failing — it is constrained. WebForms ties the UI to a server-side page lifecycle and view state that no current front-end developer wants to maintain. WCF and ASMX services speak protocols the rest of the industry has moved past, and they assume the always-on Windows server they were deployed to. The Framework itself is in long-term support, not active development, so the newest language features, performance work, and cross-platform support land in modern .NET only. The result is an application that runs fine on-premises and quietly resists every attempt to put it in a container, run it on Linux, or scale it horizontally in the cloud.
The target is concrete: modern .NET on a current LTS release, with WCF and ASMX re-expressed as REST and gRPC and the app hosted cloud-native instead of pinned to one Windows server. We keep the platform move separate from the architecture decision — you can land on the supported runtime first and refactor toward services on your own timeline, in any cloud, including regulated and air-gapped environments.
A slice is a single behavior — one page, one service endpoint. Each is analyzed, rebuilt on modern .NET, validated in shadow against the Framework app, and promoted only on parity. A strangler facade shifts traffic gradually; the legacy app retires last.