Government Portal Modernization
The Challenge
Provoke Solutions was engaged by New Zealand government agencies to modernize legacy web applications that served hundreds of thousands of citizens. These systems were built on aging .NET Framework stacks with tightly coupled frontends, running on SQL Server 2012 databases. The mandate was clear: modernize everything without disrupting public access to critical government services.
What I Built
Full-Stack Migration: Rebuilt frontend applications in Angular with .NET Core backend APIs, replacing monolithic server-rendered pages with a clean separation of concerns. Each module was migrated independently, allowing gradual rollout without big-bang deployments.
Azure AD B2C Authentication: Implemented a modern identity layer using Azure AD B2C with MSAL-Angular route guards. Citizens could authenticate securely, and the system supported multiple identity providers — a significant upgrade from the basic forms authentication in the legacy apps.
Anti-Corruption Layer: This was one of the most interesting pieces architecturally. The legacy systems could not be fully replaced overnight, so I built an anti-corruption layer using Azure Functions and Queues to decouple the new Angular frontends from legacy backend dependencies. The new apps talked to clean APIs, and the Functions handled the messy translation to legacy formats behind the scenes.
Database Migration: Upgraded SQL Server 2012 databases to SQL Server 2019, including data integrity validation to ensure nothing was lost or corrupted during the move. This was not just a version bump — it involved rewriting queries that relied on deprecated behavior and optimizing execution plans for the new engine.
Infrastructure as Code: Configured CI/CD pipelines using Azure DevOps with Bicep templates for all infrastructure. Every environment — dev, staging, production — was defined in code and deployed consistently.
Impact
- Modernized critical government portals serving thousands of daily users, with zero downtime during migration
- Azure AD B2C replaced legacy auth, improving security posture and enabling multi-factor authentication
- Anti-corruption layer allowed new development to proceed without waiting for full legacy decommission
- Bicep-based IaC reduced environment provisioning from days to minutes
What I Learned
Government projects have a unique constraint: you cannot break things that citizens depend on. There is no "move fast and break things" when people need these services to interact with their government. This project reinforced the value of incremental migration, thorough testing, and the anti-corruption pattern as a bridge between old and new.