De uitdaging
3P steunde op een omvangrijke WinForms-client die doorheen de jaren rond gespecialiseerde kennis van overheidsopdrachten en vertrouwde gebruikersflows was gegroeid. Die historiek maakte de applicatie waardevol, maar ook moeilijk om te moderniseren. Een volledige herschrijving zou bewezen gedrag in gevaar brengen. De organisatie had daarom een traject nodig naar cloudverbonden ontwikkeling dat de bestaande applicatie respecteerde en uitvoerbaar bleef voor een relatief junior ontwikkelteam.
Rol en verantwoordelijkheid
Als tech lead en architect maakte David dat traject concreet. Hij bestudeerde de bestaande oplossing, bracht de architectuur en afhankelijkheden in kaart en bepaalde waar cloudintegratie praktische meerwaarde kon bieden. De opdracht combineerde technische analyse met begeleiding: het resultaat moest begrijpelijk zijn, kunnen worden opgesplitst in haalbaar werk en veilig genoeg zijn voor ontwikkelaars die nog niet elk onderdeel van het legacysysteem kenden.
Een migratiepad uittekenen
De eerste stap was het scheiden van duurzame bedrijfslogica en vervangbare clientonderdelen. De WinForms-codebase werd niet als één ondeelbaar geheel behandeld. In plaats daarvan werden grenzen zichtbaar gemaakt rond authenticatie, datatoegang en nieuwe gebruikersfunctionaliteit. Die grenzen vormden migratiepunten waarmee werkende desktopmogelijkheden behouden konden blijven terwijl nieuwe services en webtechnologie stapsgewijs werden geïntroduceerd.
De voorgestelde volgorde documenteerde welke afhankelijkheden stabiel moesten blijven, welke onderdelen eerst konden bewegen en waar compatibiliteit met de bestaande client noodzakelijk was. Daardoor hoefden junior ontwikkelaars belangrijke architectuurbeslissingen niet telkens opnieuw te ontdekken.
Een moderne cloudbasis
Azure B2C werd geïntroduceerd als identiteitsbasis voor de cloudverbonden ervaring. Nieuwe interfaceontwikkeling gebeurde met Vue en Nuxt 3, terwijl .NET-services een brug vormden naar de bestaande applicatie en haar bedrijfsregels. Zo ontstond ruimte voor moderne browserontwikkeling zonder te doen alsof de mature WinForms-client onmiddellijk kon verdwijnen.
De datalaag gebruikte Azure SQL met een database-per-tenantmodel. Afzonderlijke databases maakten de grens tussen tenants expliciet en ondersteunden data-isolatie in zowel de architectuur als het operationele beheer.
Herhaalbare delivery en datawijzigingen
Entity Framework-migraties maakten database-evolutie herhaalbaar over de tenantdatabases heen. Azure DevOps ondersteunde broncodebeheer, work tracking en geautomatiseerde build- en releaseprocessen. Samen maakten deze praktijken van het moderniseringstraject meer dan een doelarchitectuur: ze beschreven ook hoe wijzigingen consequent ontwikkeld, nagekeken en uitgerold konden worden.
Resultaat
3P kreeg een gefaseerde moderniseringsaanpak die vertrok van de werkelijke structuur van de WinForms-applicatie. Het traject behield waardevolle software, introduceerde een geloofwaardige cloud- en webbasis en gaf het ontwikkelteam duidelijkere grenzen voor toekomstig werk. Zo werd het risico van een totaalherschrijving vermeden en kwamen authenticatie, tenantdata en deliveryautomatisering samen in één coherente richting.
