AWS Application Modernization

Incremental paths from legacy to cloud-native, without the big-bang rewrite

Your monolith is slowing down the team. Releases take weeks. Scaling means scaling everything. You're running .NET Framework on EC2 and wondering whether serverless or containers make sense, or whether the answer is "both, for different things."

Big-bang rewrites rarely succeed. The path that actually works is incremental: extract one service, prove the pattern, then repeat. You deliver value the whole time instead of betting everything on a finish line six months away.

What modernization actually looks like

It's not a six-month project with a big-bang cutover. It's extracting one service, proving the pattern works, and repeating. You ship improvements the whole time. Each subsequent service gets faster as the team builds expertise and reusable infrastructure.

I help you figure out what to extract first, how to run old and new in parallel safely, and when to decommission the legacy pieces.

Does this sound like you?

Uncheck the ones you've already addressed.

Lambda vs. ECS

This is the most common question I get from .NET teams, and the honest answer is "it depends on the workload." Lambda excels for sporadic, event-driven work where you want zero cost at idle. ECS makes more sense for sustained throughput, long-running processes, or workloads that need more than 15 minutes of execution time. Most production systems end up using both for different things. I'll help you sort out which services belong where.

Modernization patterns I use

Incremental migration

Put a routing layer in front of both systems. Shift endpoints from old to new one at a time. The legacy system shrinks until it disappears. No big-bang cutover.

Serverless extraction

Pull event-driven workloads out of the monolith first: scheduled jobs, file processing, notifications. Lambda handles these naturally and they're low-risk to extract.

Containerize, then optimize

For complex services, containerize first (works on ECS without code changes), then modernize the internals once you have CI/CD and observability in place.

Event-driven decoupling

Replace synchronous calls between components with EventBridge, SQS, or SNS. Each piece scales independently and a failure in one doesn't cascade.

.NET modernization specifically

.NET on AWS is in a good place today. Lambda supports .NET 10 with Native AOT, dropping cold starts from 2-3 seconds to 200-400ms. CDK has first-class C# support. The documentation still leans toward Python and TypeScript, but the actual capabilities are solid.

For teams still on .NET Framework, the migration path to modern .NET is well-documented. The .NET Upgrade Assistant identifies compatibility issues. The biggest challenges are usually Windows-specific dependencies (System.Drawing, COM interop) and third-party libraries that haven't been updated. Incremental migration, one service at a time, is always the answer.

How an engagement works

1

Assessment

Map your application portfolio, dependencies, and business priorities. Not everything needs to be modernized. I help you pick the right first target.

2

Pilot service migration

Pick one service, modernize it end-to-end (new runtime, CI/CD, observability, deployment). This proves the patterns and your team sees how it works before committing to the rest.

3

Expand

Apply the proven patterns to the rest of the portfolio. Each subsequent service gets faster as the team builds expertise and reusable infrastructure.

4

Decommission the legacy

Once traffic is fully migrated, turn off the old system. Celebrate the reduced AWS bill and the fact that deploys no longer take a week.

Frequently Asked Questions

Should I use Lambda or ECS for my .NET application?

It depends on your workload pattern. Lambda excels for sporadic, event-driven workloads with variable traffic (you pay nothing when idle). ECS is better for sustained high-throughput workloads, long-running processes, or applications that need more than 15 minutes of execution time. For .NET specifically, Lambda with Native AOT compilation has sharply improved cold starts, making it viable for more use cases.

How do I migrate from .NET Framework to .NET 8+?

Start with the .NET Upgrade Assistant tool to assess compatibility. Most ASP.NET MVC and Web API applications migrate relatively smoothly. The biggest challenges are usually Windows-specific dependencies, COM interop, and third-party libraries that haven't been updated. I recommend an incremental approach: migrate one service at a time.

What's incremental migration?

This pattern gradually replaces a legacy system by routing traffic to new services one feature at a time. You put a routing layer in front of both systems, then incrementally shift endpoints from old to new. This reduces risk compared to big-bang rewrites and you ship improvements the whole time.

How long does a typical modernization project take?

It varies based on complexity, but a realistic timeline for a medium-sized .NET application (10-20 services) is 6-12 months for full modernization. However, you should see value much sooner. The first service migration typically takes 4-8 weeks, and each subsequent service gets faster as the team builds expertise.

Is serverless actually cheaper than EC2?

Not always. Lambda is cost-effective for sporadic workloads. But at sustained high throughput (millions of invocations per day), EC2 or ECS with Reserved Instances can be 50-70% cheaper. The break-even point depends on your specific traffic patterns.

Ready to modernize?

Tell me what you're running today. I'll reply within a business day with where I'd start.