A customer loyalty platform at 25M-customer scale
A B2B2C loyalty and CRM platform holding 25 million unique customers and 800 million invoice records, modernised from .NET Framework to .NET 9 and split into domain services.
Page data loads up to 30x faster, the product running on .NET 9, and about 70% of the architecture migration complete.
The problem
A loyalty and CRM platform that had grown for years on .NET Framework 4.7 and a SQL Server database it had long outgrown. Roughly 25 million unique customers (about 60 million non-unique records), 800 million invoice records and more than a billion SMS records sat behind screens that took long enough to load that people stopped opening them.
The product could not be paused and rewritten. Whatever changed had to change underneath a system that was in daily use by businesses and their customers.
I was the primary developer on the product and owned most of the architectural decisions and the approach to implementing them.
Modernisation. .NET Framework 4.7 to .NET 8, then to .NET 9. A refactor rather than a lift-and-shift: the point was to be able to change the thing afterwards, not only to be on a supported runtime.
Performance. Systematic work across the application rather than a hunt for one hot spot. Page data loads improved by up to 30x in the worst cases — mostly by fixing what the queries and the schema were asking the database to do, not by adding caches on top of them.
Architecture. In the final phase I moved the company's products, the loyalty club first, onto a consolidated architecture: vertical slice over Clean Architecture, split by domain, with RabbitMQ for messaging and gRPC between services. It is a domain-split modular architecture with messaging rather than microservices at scale, and about 70% of the migration was done when I left.
Features. Customer segmentation using several methods including RFM, multi-tenancy, and the event-driven flows underneath both. Tests were written at unit, integration and UI level.
Two other engineers joined the product later; I onboarded and mentored them.