Fintech / Employee Benefits
Corporate ↗ PlanMyBenefits — legacy monolith to microservices strangler
Problem: EOL netcoreapp2.2 monolith (MVC/jQuery, EF Core 2.x, IdentityServer4, 4 DbContexts) could not scale securely; calculation matrices needed isolation and testability.
Constraints: Live benefits calculations; POPIA/FICA sensitivity; Azure estate; team had to keep shipping while modernizing; no big-bang rewrite risk.
Approach: Split Dataservice.Api (per-schema controllers) + CalculationEngine.Api (actuarial matrices) + ClientAccess.Api (BFF) + standalone Identity microservice; Redis/In-Mem cache, Dapper hot paths, Hangfire, OpenAPI, 4 envs + APITEST; SendGrid/RabbitMQ/ServiceBus eventing; scoped Clients boundary for mentored handover.
Outcomes: Uniform net10 + CPM, streaming HttpClient + SessionStorage Blazor UI (MudBlazor/Radzen/ApexCharts); reproducible strangler curriculum (DEVOPS_MIGRATION_ROADMAP 6–18h modules + 15 parity/gap docs + WebForms→Blazor teaching pair).
Lessons: Parity tables beat promises; scoped solution boundaries let client devs learn without blocking production; APITEST environment pays for itself.
C# .NET 10Blazor ServerEF Core 10RedisDapperAzure DevOps