Application modernization strategies: the 7 Rs, strangler fig and the dates that force your hand
How to choose an application modernization strategy per system: the AWS 7 Rs with when-to-use rules, why rehosting alone isn't modernization, the strangler fig pattern done properly (and when not to use it), modernizing a shared database, and a dated calendar of 2025–2027 end-of-support deadlines.

Key takeaways
- 01The main application modernization strategies are the 7 Rs: retire, retain, rehost, relocate, repurchase, replatform and refactor or re-architect. Choose per application, by business value and risk.
- 02Rehosting moves a system but doesn't modernize it; Microsoft's Cloud Adoption Framework says "A rehost migration alone isn't modernization."
- 03For large systems, the strangler fig pattern replaces functionality in slices behind a façade, so the old system keeps running until the last slice moves.
- 04Microsoft's guidance says not to use strangler fig when requests can't be intercepted, when the system is small enough to replace whole, or when you must decommission quickly.
- 05.NET 8 and .NET 9 reach end of support on 10 November 2026, PHP 8.2 on 31 December 2026, and Windows Server 2016 and .NET Framework 4.6.2 on 12 January 2027.
The main application modernization strategies are the 7 Rs: retire, retain, rehost, relocate, repurchase, replatform and refactor or re-architect. Pick one per application, based on its business value and risk, and modernize large systems in slices with the strangler fig pattern rather than a big-bang rewrite. End-of-support dates often decide the timing.
Most guides on this topic list strategies without telling you when each one fits, and some invent their own "Rs" or promise "zero downtime". This one uses AWS's published 7 Rs with its own use cases, Microsoft's guidance on the strangler fig pattern (including when not to use it), and a calendar of support deadlines checked on 23 October 2026. Several of those dates land in the next three months, so check them again before you plan: .NET dates in particular should be rechecked after 10 November 2026.
What are the 7 Rs of application modernization?
AWS Prescriptive Guidance describes seven migration strategies, "known as the 7 Rs". They were written for cloud migration, but they work as a modernization vocabulary because each one is a different answer to "what do we do with this application?"
| Strategy | What it means | When it fits |
|---|---|---|
| Retire | Decommission or archive the application | No business value left; unsupported OS or components; no inbound connections for 90 days |
| Retain | Keep it where it is for now | High risk needing a detailed plan, dependencies on other apps, recently upgraded, specialised hardware, a SaaS replacement on the way |
| Rehost ("lift and shift") | Move it to new infrastructure without changing the application | Data-centre exit on a deadline; quick wins before deeper work |
| Relocate | Move servers or instances to a cloud version of the same platform, or between accounts and regions | Moving many servers at once without rewriting applications or buying hardware |
| Repurchase ("drop and shop") | Replace it with a different product, usually SaaS | Commodity functions like email, HR or ticketing where a product does the job |
| Replatform ("lift, tinker and shift") | Move it and make targeted changes, such as a managed database or containers | Cutting hosting and licence costs without a rewrite |
| Refactor or re-architect | Redesign it to use cloud-native features | The monolith blocks delivery, the code is hard to test or maintain, scale or speed demands it |
Two AWS details are worth knowing. First, AWS suggests looking at retiring "zombie applications" with average CPU and memory usage below 5%, and "idle applications" between 5% and 20% over 90 days. Utilisation data from a discovery tool shows which applications qualify. Second, AWS states that refactor "is not recommended for large migrations", because it modernizes during the move. Its advice is to rehost, relocate or replatform first, then modernize once the migration is complete.
How to choose per application
Score each application on two axes, then let the scores suggest a strategy:
| Low business value | High business value | |
|---|---|---|
| Low technical risk (supported stack, tests, documentation) | Retire or retain | Replatform; refactor the parts that slow you down |
| High technical risk (unsupported stack, no tests, few people understand it) | Retire, or repurchase if the function is still needed | Refactor or re-architect in slices with the strangler fig pattern |
Add a third question: is there a deadline? An end-of-support date (see the calendar below) can push an application to rehost or replatform now and refactor later.
Is rehosting modernization?
No. Rehosting changes where an application runs, not how it's built. Microsoft's Cloud Adoption Framework Modernize guidance puts it plainly: "A rehost migration alone isn't modernization."
Rehosting still has a place. It can get you out of a data centre, onto supported infrastructure and into an environment where later changes are easier. The mistake is to declare the job done after the move. Plan the next step for each rehosted application before you migrate it: replatform the database, containerise the app, or refactor the parts that change most often. Our cloud migration work covers the move; application modernization covers what comes after. For the move itself, use our cloud migration checklist.
What is the strangler fig pattern?
The strangler fig pattern replaces a legacy system piece by piece. Martin Fowler named it after the strangler fig, a vine that sprouts on a host tree and grows until its roots reach the ground and it can sustain itself; his Strangler Fig Application article (updated 22 Aug 2024) describes building the new system around the edges of the old one until the old one can be removed.
Microsoft's Azure Architecture Center (updated 16 Oct 2026) describes the mechanics in four phases:
- Add a façade. A proxy sits between clients and the legacy system. At first it routes almost everything to the old system.
- Move functionality in slices. You build a feature in the new system and the façade starts routing those requests to it. Each iteration moves more.
- Decommission the legacy system once nothing depends on it.
- Remove the façade and let clients talk to the new system directly.
How to do it well
- Find the seams. Pick slices with clear boundaries: a module, a business capability, a set of screens or an API. Domain boundaries work better than technical layers.
- Start with a slice that matters but won't sink you. High enough value to prove the approach; low enough risk to survive mistakes.
- Keep the façade healthy. Microsoft warns that the façade must keep up with the migration and must not become "a single point of failure or a performance bottleneck". Monitor it like production infrastructure, because it is.
- Use an anti-corruption layer. While both systems coexist, the new system may need to call unmigrated legacy features, and vice versa. Microsoft recommends the anti-corruption layer pattern: an adapter that translates between the two, so legacy conventions don't leak into the new design.
- Write characterisation tests first. Before moving a slice, capture what the legacy system actually does today, including the odd behaviour users depend on. Our software testing team often starts modernization projects this way.
When should you not use the strangler fig pattern?
The pattern isn't always right. Microsoft's guidance lists situations where it might not be suitable:
- Requests to the back end can't be intercepted, so there's nowhere to put a façade.
- You can't access the legacy source code and it has no other integration point you can change, such as its database.
- The system is small and replacing it whole is simple.
- You need to decommission the original quickly, because the pattern assumes both systems run side by side for an extended period.
We'd add one more: when the organisation can't fund two systems in parallel. Strangler fig spreads the cost and the risk, but you pay for the old and new systems at the same time until the end. If that's not possible, a well-tested, phased replacement or a repurchase may be the better route.
How do you modernize a shared legacy database?
The database is usually the hardest part, because many legacy applications share one large database across business domains. Microsoft's strangler fig guidance gives a three-step approach for extracting one domain at a time:
| Step | What happens | Rollback |
|---|---|---|
| 1. New service, old database | A new service handles requests for one domain but still reads and writes the monolithic database | Easy: route traffic back |
| 2. New database, synced | Copy the domain's tables and history to a new database with an extract, transform and load (ETL) job; keep it in sync with change data capture (CDC); validate consistency | Still possible: legacy tables and sync remain |
| 3. Cutover | The new database becomes the system of record; remove the domain's tables and stored procedures from the monolith | Hard: you'd need to restore objects and replay changes |
Microsoft's advice is to treat removing legacy objects as a deliberate final step, only after the new system is validated. Where business logic lives in stored procedures, the database itself can send messages to new services, or CDC can read the transaction log, so you don't have to change legacy application code. For moving the data itself, see our data migration checklist.
Which deadlines force the decision in 2026–2027?
Support dates turn "someday" into a project plan. These were checked on 23 October 2026 on the vendors' own pages.
| Platform | Date | What it means | Source |
|---|---|---|---|
| Windows 10 | Ended 14 Oct 2025 | No free security updates. Commercial Extended Security Updates cost $61 per device in year one, doubling each year, for up to three years; consumer ESU runs to 12 Oct 2027 | Microsoft, ESU |
| SQL Server 2016 | Ended 14 Jul 2026 | Extended support over | Microsoft lifecycle |
| Python 3.10 | Ended 1 Oct 2026 | End of life; no more security fixes | Python devguide |
| .NET 8 and .NET 9 | 10 Nov 2026 | End of support for both; .NET 10 (LTS) is supported to 14 Nov 2028 | .NET support policy |
| PHP 8.2 | 31 Dec 2026 | Security support ends | PHP supported versions |
| Windows Server 2016 | 12 Jan 2027 | Extended support ends | Microsoft lifecycle |
| .NET Framework 4.6.2 | 12 Jan 2027 | Support ends | Microsoft lifecycle |
What to do with each:
- .NET 8 or 9 apps: usually a straightforward upgrade to .NET 10, not a rewrite. Test it, then ship it. Our .NET development team handles these upgrades.
- .NET Framework 4.6.2: move to a later supported .NET Framework version as a short-term fix, or port to modern .NET as part of a replatform.
- SQL Server 2016 and Windows Server 2016: replatform the database to a supported or managed version; rehost the servers if you need time.
- PHP 8.2 and Python 3.10: upgrade the runtime and dependencies; the hard part is usually old libraries, not your code.
- Java estates: check your vendor's support dates for your exact distribution and version; our Java development team can assess the upgrade path.
- Windows 10 desktops running line-of-business apps: if the app ties you to old machines, a modern desktop app or a web app may be cheaper than years of ESU fees.
What did GAO find about legacy systems?
The US Government Accountability Office's report GAO-25-107795 (17 Jul 2025) is a useful reality check for any organisation. It found that federal agencies spend more than $100 billion a year on IT, with about 80% typically reported on operations and maintenance. GAO identified 11 of the most critical legacy systems, ranging from 23 to 60 years old. Agencies had modernization plans for 9 of them, but only 3 of those plans included all the key elements GAO looked for, and 2 systems had no plan at all.
The lessons transfer to private companies: most of the budget goes to keeping old systems running, and modernization stalls without a plan that names milestones, the work needed and the system's disposition. Write that plan before you choose tools.
What does a modernization roadmap look like?
- Inventory. List every application, its stack, owners, users, integrations and support dates.
- Score. Business value, technical risk and deadline for each.
- Assign a strategy per application using the 7 Rs. Expect a mix.
- Retire first. Zombie and idle applications free up budget immediately.
- Hit the deadlines. Upgrade or replatform anything on the support calendar above.
- Strangle the core. For the high-value, high-risk systems, plan slices behind a façade, with characterisation tests and a data plan per slice.
- Measure. Track release frequency, incidents and running costs before and after, so the business sees the return.
How can Elgrith help?
Elgrith has delivered 1,000+ projects for 250+ clients since 2015, from our New Delhi HQ and client-partnership centres in New York, London and Shanghai. Our application modernization team starts with an assessment of your portfolio, assigns a strategy per application, and modernizes the core in slices so the business keeps running. We work across .NET, Java, PHP, Python and front-end stacks, and we pair with our cloud migration team when hosting moves too. You own the code and IP, and you get a fixed written quote after a free call. Book a call or start a project.
FAQ
Frequently asked questions
Sources 13 linked
- 01AWS Prescriptive Guidance — About the migration strategies (7 Rs)docs.aws.amazon.com(opens in a new tab)
- 02Martin Fowler — Strangler Fig Application (updated 22 Aug 2024)martinfowler.com(opens in a new tab)
- 03Microsoft Azure Architecture Center — Strangler Fig pattern (updated 16 Oct 2026)learn.microsoft.com(opens in a new tab)
- 04Microsoft Cloud Adoption Framework — Modernizelearn.microsoft.com(opens in a new tab)
- 05GAO — GAO-25-107795: Agencies need to plan for modernizing critical decades-old legacy systems (17 Jul 2025)gao.gov(opens in a new tab)
- 06Microsoft — .NET and .NET Core support policydotnet.microsoft.com(opens in a new tab)
- 07Microsoft Lifecycle — Windows Server 2016learn.microsoft.com(opens in a new tab)
- 08Microsoft Lifecycle — SQL Server 2016learn.microsoft.com(opens in a new tab)
- 09Microsoft Lifecycle — .NET Frameworklearn.microsoft.com(opens in a new tab)
- 10Microsoft — Windows 10 end of supportmicrosoft.com(opens in a new tab)
- 11Microsoft Learn — Extended Security Updates for Windows 10 (17 Nov 2025)learn.microsoft.com(opens in a new tab)
- 12PHP — Supported versionsphp.net(opens in a new tab)
- 13Python Developer's Guide — Status of Python versionsdevguide.python.org(opens in a new tab)
