case studies · applications

Applications, move by move.

Old applications rarely fail on a schedule. Framework end-of-life, a mobile store policy change or a vendor API retiring usually forces the date. These are the rebuilds and upgrades we've done to keep apps shipping.

4 case studies3 modernizations1 upgrade10 platforms
featured case study

.NET Framework and .NET 8 to .NET 10

Told without the client's name or anything that could identify them.

what happened

A product engineering team ran a mix of .NET 8 services and older .NET Framework 4.x apps with WCF services and Web Forms pages, all on Windows Server VMs. With .NET 8 and 9 reaching end of support on 10 November 2026 and Framework 4.6.2 following on 12 January 2027, security scanners were about to flag both. We scanned the portfolio first and retargeted the .NET 8 and 9 apps to .NET 10 ahead of the November date. The Framework apps then moved library by library, with an ASP.NET Core front taking over endpoints one at a time and each WCF service moved to CoreWCF, gRPC or REST based on its callers.

what the client got
  • Every app targets a supported runtime.NET 8 and 9 apps now target net10.0, the LTS release supported to 14 November 2028, with package updates and breaking changes worked through behind tests.
  • Shared libraries serve old and new appsWe moved class libraries to .NET Standard 2.0 or multi-targeted them. Framework apps kept working the whole time the apps calling them were being ported.
  • Web endpoints moved over one at a timeAn ASP.NET Core app in front of the old ASP.NET app takes over routes incrementally, so each move ships with its own rollback.
Read the full case study
after / dotnet-framework-to-modern-dotnet delivered
before.NET Framework 4.x, .NET 8 and .NET 9 apps after.NET 10 LTS
01 · CLIENTS 02 · EDGE 03 · APPLICATIONS ON .NET 10 04 · HOSTING AND CI Browsers: same URLs Browsers same URLs Internal callers: updated clients Internal callers updated clients ASP.NET Core front: routes moved one at a time ASP.NET Core front routes moved one at atime CoreWCF: chosen per caller CoreWCF chosen per caller .NET 10 services: LTS to 14 November 2028 .NET 10 services LTS to 14 November2028 Remaining ASP.NET app: shrinking set of routes Remaining ASP.NETapp shrinking set ofroutes Shared libraries: .NET Standard 2.0 · multi-target Shared libraries .NET Standard 2.0 ·multi-target CI pipeline: builds net10.0 · runtime patches CI pipeline builds net10.0 ·runtime patches Linux containers or App Service: where dependencies allow Linux containers orApp Service where dependenciesallow
what goes wrong

Risks that keep coming up

One risk from each of these moves, and the case study that shows how we handled it when it hit.

  1. System.Web and Web Forms ↗

    ASP.NET Core has nothing that maps straight onto Web Forms. So those pages are either rewritten in Razor Pages or Blazor, or left on Framework with a date for dealing with them.

  2. Apps that write to local disk ↗

    Anything an app writes to the server's disk, logs, uploads, caches, vanishes when a pod restarts. We find those in the assessment, not in production.

  3. Undocumented business rules ↗

    Decades-old COBOL holds rules nobody wrote down. Parallel runs with output comparison are the only reliable way to prove a slice behaves the same.

  4. Abandoned native SDKs ↗

    One analytics or payment SDK with no 16 KB build blocks the whole app. We find these in the audit, so there's time to replace them.

01Why does .NET 8 end support at the same time as .NET 9?

Microsoft's support policy page lists both ending on 10 November 2026, even though .NET 8 is an LTS release. .NET 10 is the LTS release to target, with support to 14 November 2028.

02Can .NET Framework apps run in containers?

Yes, as Windows containers on Windows nodes. A lot of teams do that first and port to modern .NET later, at which point Linux containers become an option.

03Do we need to upgrade z/OS first?

Not for the API work, but you need a supported release either way. z/OS 2.5 is in service extension, so we often plan the 3.x upgrade alongside.

04What happens if we miss the Google Play target API deadline?

Play won't accept new updates until the app meets the target level, apart from any extension you got. People who already have it keep using it. You just can't ship them a fix.

other areas

More case studies by area

The same approach, applied to other parts of the estate.

sources 8 sources linked last checked 2026-10-20 content fingerprint 23a31efa
  1. 01Microsoft: .NET and .NET Core support policydotnet.microsoft.com ↗
  2. 02Microsoft Lifecycle: .NET Frameworklearn.microsoft.com ↗
  3. 03Microsoft Learn: .NET Upgrade Assistant overview (Copilot modernization agent)learn.microsoft.com ↗
  4. 04AWS Transformaws.amazon.com ↗
  5. 05Microsoft Lifecycle: Windows Server 2016 (containers follow the same dates)learn.microsoft.com ↗
  6. 06AWS: Kubernetes version lifecycle on EKSdocs.aws.amazon.com ↗
  7. 07Red Hat: OpenShift 4.22 release notesdocs.redhat.com ↗
  8. 08IBM: z/OS service extension table (June 2026)ibm.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Facing one of these moves?

Tell us what you're on now and where you need to be. We'll come back with how we'd run the move.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it