ADR-002: Hybrid Strangler Fig Strategy
Status: Proposed
Date: 2026-01-20
Context: Legacy Migration Approach
Decision
We adopt a Hybrid Strangler Fig strategy: a side-by-side .NET 8 API running alongside the legacy .NET Framework 4.8 monolith.
Context
- The legacy monolith cannot be "big bang" rewritten (high failure rate, business logic loss).
- The Data Layer (
EITWEP.Model) uses Entity Framework 6.4.4 compatible with .NET Standard 2.1. - The organization wants to move to .NET 8 (LTS) for performance and longevity.
Considered Options
Option A: In-Place Upgrade
- Pros: Single codebase.
- Cons: .NET Framework 4.8 → .NET 8 requires removing
System.Web, which is deeply embedded.
Option B: Big Bang Rewrite
- Pros: Clean slate.
- Cons: 75% failure rate for rewrites. Lost domain knowledge. Feature freeze for 12+ months.
Option C: Hybrid Strangler Fig
- Pros:
- New features in .NET 8 immediately.
- Zero feature freeze.
- Shared Data Layer enables coexistence.
- Cons: Temporary complexity of two apps (SSO, Routing).
Rationale
The Strangler Fig pattern allows incremental replacement. By targeting the Data Layer (EF 6.4.4 → .NET Standard), we create a bridge between old and new.
┌─────────────────────────────────────────────────┐
│ Reverse Proxy │
│ (IIS ARR / YARP / nginx) │
└───────────────────┬─────────────────────────────┘
│
┌─────────────┴───────── ────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Legacy App │ │ Modern API │
│ (.NET 4.8) │ │ (.NET 8) │
│ IIS/Windows │ │ Kestrel │
└──────┬──────┘ └──────┬──────┘
│ │
└─────────┬───────────────┘
▼
┌─────────────────┐
│ Shared Data │
│ (EITWEP.Model) │
│ .NET Standard │
└─────────────────┘
Consequences
- Routing Layer: Implement reverse proxy (YARP or ARR) to route traffic.
- Shared Authentication: Use JWT/OIDC for stateless SSO between apps.
- Deployment: Both apps can deploy independently.
- Gradual Migration: New endpoints → Modern API. Legacy endpoints stay until fully replaced.