Hoe ons R&D team een innovatieve aanpak ontwikkelde voor het moderniseren van legacy codebases. Van AST naar AI-Gedreven Herplatformering.
Het Probleem
Bij Blis Digital werken we dagelijks aan complexe software-uitdagingen in ons AI Lab. Een van de meest tijdrovende en kostbare taken waar we als software ontwikkelaars mee te maken hebben, is het moderniseren van legacy codebases. Of het nu gaat om een verouderde Xamarin.Forms app die naar React Native moet, een oude AngularJS applicatie die naar moderne frameworks overgezet moet worden, of een ASP.NET MVC systeem dat naar Blazor gemigreerd moet worden – de uitdaging blijft dezelfde.
Legacy systemen bevatten vaak jaren aan bedrijfslogica, gegroeid zonder duidelijke architectuur, met weinig tot geen tests, en vol met “God classes” die alles doen. Toch draaien deze systemen kritieke bedrijfsprocessen en kunnen ze niet zomaar offline gehaald worden voor een complete herbouw.
De traditionele aanpak? Maanden van handmatig hercoderen, met enorme risico’s op regressies en functionaliteitsverlies. Dit is niet alleen duur, maar ook foutgevoelig en demotiverend voor ontwikkelteams.
Wat is AI-gedreven legacy modernisering? Een innovatieve aanpak waarbij AI de functionaliteit van bestaande code analyseert en helpt bij het genereren van moderne applicaties. In onze praktijk bereiken we hiermee 85-95% automatisering voor standaard features.
AI-Gedreven Modernisering vs Traditionele AST-Methoden
Voordat AI mainstream werd, probeerden we dit probleem op te lossen met Abstract Syntax Trees (AST) en geautomatiseerde code-transformaties. De theorie was simpel:

We bouwden platform-specifieke parsers, schreven complexe transformatie-regels, en hoopten dat de output bruikbaar zou zijn. Parallel hieraan werkten we met:
- Regressie tests: Uitgebreide testsuites om functionaliteit te valideren
- Schaduw projecten: Nieuwe systemen die beetje voor beetje werden herbouwd
- Incrementele migratie: Module voor module overzetten
Waarom Dit Zo Complex en Tijdrovend Was
- Parser Complexiteit: Elke programmeertaal en framework vereiste een eigen parser
- Context Verlies: AST’s bevatten syntaxis, maar niet de bedoeling achter de code
- Framework Verschillen: Een Angular component is fundamenteel anders dan een Flutter widget
- Business Logic Extractie: Bedrijfsregels zaten verstopt in God classes en waren moeilijk te identificeren
- Lage Success Rate: Zelfs met perfecte AST’s bereik je vaak maar 60-70% automatisering
Het resultaat? Projecten die maanden duurden, hoge kosten, en vaak een eindresultaat dat nog steeds handmatig bijgewerkt moest worden.
Een Nieuw Tijdperk met AI Agents
Toen AI code assist tools zoals GPT-4 en Claude mainstream werden, zagen we aanvankelijk een kans om onze traditionele AST-aanpak te verbeteren. We begonnen AI in te zetten om code te “begrijpen” in plaats van dat wij platform-specifieke parsers moesten bouwen.
Maar tijdens onze experimenten kregen we een cruciaal inzicht: we hebben AST eigenlijk helemaal niet nodig.
Onze plannen met AST waren niet realistisch en zouden nooit meer dan de eerder genoemde 60-70% success rate behalen. Het probleem zat in de fundamentele aanpak:
De Paradigma Verschuiving
Traditionele Aanpak:

❌ Te letterlijk, mist de bedoeling.
Onze Nieuwe Aanpak:

✅ Begrijpt intent, genereert moderne code
In plaats van code te “vertalen”, gingen we specificaties reverse-engineeren die een AI agent vervolgens fris kan implementeren.
Abstract Model: De Nieuwe Aanpak
Ons nieuwe systeem extraheert niet alleen code-structuur, maar creëert een Universal Application Model dat de complete essentie van elke applicatie vastlegt:

Waarom Dit Veel Effectiever Is
Success Rate: ~85-95% voor de meeste features, omdat:
- AI agents begrijpen “bouw een login pagina” beter dan “vertaal deze JSX naar Flutter”
- Natural language is universeel – geen complexe AST transformaties nodig
- AI heeft miljoenen voorbeelden gezien en kent best practices (met de juiste sturing)
- Refactoring gebeurt impliciet
- AI maakt geen God classes (met de juiste regels!)

Hybrid Approach: Dual Layer Extraction
Tijdens onze experimenten realiseerden we ons dat we meer data nodig hebben om de nieuwe applicaties compatible te houden met bestaande integraties: semantisch begrip EN exacte technische contracten. Dit leidde tot onze “Dual Layer Extraction”:
Laag 1: Exacte Technische Contracten (1:1 Preservatie)

Laag 2: Semantische Context (Bedoeld voor AI)


Onze “Dual-Layer” aanpak was natuurlijk bijzonder nuttig, maar we wilden het nog completer maken, zonder de boel te “over-engineeren” uiteraard.
Laag 3: Design System
De derde cruciale laag die we ontdekten, is het design systeem. Zonder dit zou de nieuwe app functioneel correct zijn, maar er compleet anders uitzien:

Complete Extractie Workflow

Uitdagingen: Simpliciteit is Key
De grootste uitdaging bij het ontwikkelen van dit systeem was niet te complex te worden. We hadden de neiging om elk edge case te willen ondersteunen, maar realiseerden ons dat:
- 80/20 Regel: 80% van de applicaties volgt standaard patronen
- Perfecte Automatisering is Onrealistisch: 85-95% automatisering is al revolutionair
- Human-in-the-Loop: Complexe gevallen vereisen nog steeds menselijke input
- Incrementele Verbetering: Het systeem wordt beter naarmate het meer codebases ziet
Realistische Verwachtingen
- Simple CRUD features: 90-95% geautomatiseerd
- Complex business logic: 80-85% geautomatiseerd
- UI/UX implementation: 85-90% geautomatiseerd
- System integration: ~70-80% geautomatiseerd
Rebuild: Van Legacy naar Industry Standards
Het mooie van onze aanpak is dat we niet 1:1 kopiëren, maar vanaf de grond af opnieuw opbouwen met moderne standaarden:
Transformatie van Legacy naar Modern

Paradigma Switches Mogelijk
Omdat we werken met semantische specificaties in plaats van letterlijke code-vertaling, kunnen we moeiteloos switchen tussen paradigma’s:
- Object-Oriented naar Functional: React class components naar hooks
- Monolith naar Microservices: Grote applicaties splitsen in services
- Imperative naar Declarative: jQuery naar React/Vue
- Desktop naar Mobile: WPF naar Flutter/React Native
Code Coverage Revolutie
Legacy systemen hebben vaak 0-20% test coverage. Onze AI agents genereren automatisch:
- Unit Tests: Voor elke functie en component
- Integration Tests: Voor API endpoints en data flows
- E2E Tests: Voor complete user journeys
- Property-Based Tests: Voor business rule validation
Het resultaat? Bijna 100% code coverage vanaf dag één.
Conclusie: De Toekomst is Nu
Wat begon als een poging om AST-parsing te verbeteren, evolueerde naar een complete paradigma-verschuiving in hoe we legacy code modernisering benaderen. Door te focussen op intent in plaats van implementatie, kunnen we:
- Sneller werken: Weken in plaats van maanden
- Betere kwaliteit: Modern, geteste code vanaf de start
- Lagere kosten: 85-95% automatisering
- Minder risico: Gevalideerde functionaliteit en design
Bij Blis Digital blijven we deze technologie verder ontwikkelen en verfijnen. Als digitale innovatiepartner begeleiden we organisaties bij hun moderniseringsreis van legacy naar toekomstbestendige systemen. De toekomst van software modernisering is niet het vertalen van oude code, maar het begrijpen van wat het doet en het opnieuw bouwen zoals het hoort.
Geïnteresseerd in hoe deze aanpak jouw legacy systemen kan transformeren? Neem contact op met ons op voor een verkennend gesprek.