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.
- .NET Framework and .NET 8 to .NET 10modernization · delivered
- Legacy web apps to containers on Kubernetes or OpenShiftmodernization · delivered
- Mainframe COBOL and CICS to APIs, then cloud in slicesmodernization · delivered
- Mobile apps for Android 16 KB pages, passkeys and store deadlinesupgrade · delivered
.NET Framework and .NET 8 to .NET 10
Told without the client's name or anything that could identify them.
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.
All 4 in applications
Read any of them and you get the story, the before-and-after architecture, the plan phase by phase and the results.
.NET Framework and .NET 8 to .NET 10
Both .NET 8 and .NET 9 hit end of support on 10 November 2026. Moving them, and older .NET Framework apps, to .NET 10 LTS one project at a time.
read the case studyLegacy web apps to containers on Kubernetes or OpenShift
Moving Java, .NET and PHP web apps off hand-patched VMs and into containers on Kubernetes or OpenShift, with config, secrets, sessions and logs sorted out.
read the case studyMainframe COBOL and CICS to APIs, then cloud in slices
Putting REST APIs in front of CICS and IMS transactions first, then moving bounded COBOL functions to cloud services one slice at a time with parallel runs.
read the case studyMobile apps for Android 16 KB pages, passkeys and store deadlines
We keep Android and iOS apps shippable as Google Play's target API and 16 KB page rules and Apple's SDK minimums change, and add passkey sign-in.
read the case studyRisks that keep coming up
One risk from each of these moves, and the case study that shows how we handled it when it hit.
-
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.
-
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.
-
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.
-
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.
Platforms and services across these moves
Ordered by how often they appear in this area's case studies.
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.
More case studies by area
The same approach, applied to other parts of the estate.
23a31efa - 01Microsoft: .NET and .NET Core support policydotnet.microsoft.com ↗
- 02Microsoft Lifecycle: .NET Frameworklearn.microsoft.com ↗
- 03Microsoft Learn: .NET Upgrade Assistant overview (Copilot modernization agent)learn.microsoft.com ↗
- 04AWS Transformaws.amazon.com ↗
- 05Microsoft Lifecycle: Windows Server 2016 (containers follow the same dates)learn.microsoft.com ↗
- 06AWS: Kubernetes version lifecycle on EKSdocs.aws.amazon.com ↗
- 07Red Hat: OpenShift 4.22 release notesdocs.redhat.com ↗
- 08IBM: z/OS service extension table (June 2026)ibm.com ↗
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.
- 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