Legacy
modernisering.
Van oude code naar nieuwe mogelijkheden, zonder de tent plat te leggen. Bestaande systemen stap voor stap modern maken, met een werkende rollback op elke release.
Het werkt, en dat mag zo blijven.
Legacy-systemen krijgen een slechte pers, maar onderschat niet wat ze vertegenwoordigen: jaren van business-logic, rand-gevallen die in de code zijn geëvolueerd, en workflows die je team door en door kent. Een rewrite vanaf nul verliest al die onzichtbare kennis, en komt vervolgens met dezelfde edge-cases opnieuw in aanraking, nu zonder historisch geheugen.
Onze aanpak is omgekeerd. We behandelen de bestaande code met respect, documenteren wat er draait, en vervangen hem fase voor fase. Nieuwe componenten komen naast de oude te staan, nemen verantwoordelijkheden over totdat de oude module niet meer hoeft. Pas dan trekken we de stekker, en dat is een bewuste, geplande laatste stap, geen accident waiting to happen.
Wat je van ons krijgt: een draaiboek per migratie, een werkende rollback voor elke wijziging en een realistisch beeld van risico's voordat er code verandert. We zijn niet bang om te zeggen dat een bepaald onderdeel beter gerenoveerd dan vervangen kan worden. De oude PHP-klasse die al tien jaar correct factureert is meer waard dan een nieuwe versie die nog moet bewijzen dat ze het beter doet.
Wat wij bieden
Van eerste assessment tot uitgefaseerd legacy-systeem.
Codebase-assessment
Twee weken met je code, je database en je team. Resultaat: een technisch rapport met afhankelijkheden, risico's, quick wins en een gefaseerd migratieplan met vaste scope per fase.
Strangler-fig migratie
Nieuwe code groeit naast de oude. Een routing-laag stuurt verzoeken per module door, oud of nieuw, afhankelijk van waar we staan. Business gaat door alsof er niets gebeurt.
Database-modernisering
Van MySQL 5 naar modern Postgres, van verweven schema naar modulair. Zero-downtime-migraties via dual-write en shadow-reads.
Feature flags en parallel-run
Per gebruiker, team of module switchbaar tussen oud en nieuw. Test in productie zonder iedereen te exposeren aan nieuwe code.
Blue-green deploys
Elke release heeft een werkende rollback. Fout in productie? Binnen seconden terug naar de vorige versie, zonder dataverlies.
Business-logic behouden
Voordat een module gemigreerd wordt, schrijven we tegen-tests tegen de bestaande flow. De nieuwe code moet dezelfde uitkomst leveren als de oude, bewezen, niet aangenomen. Edge-cases die jaren geleden in de code zijn geslopen, blijven meegaan.
Zo werken we
Assessment
Codeleesuren, database-analyse en gesprekken met je team. Waar zit de pijn, wat moet blijven, wat zou eigenlijk niemand missen?
Strategie
Strangler-fig, parallel-run of gefaseerde rewrite, per onderdeel passen we de aanpak aan. We leveren een fasering met risicoprofiel en vaste scope per blok.
Gefaseerde uitvoering
Eén module tegelijk, met een werkende rollback en contract-tests. Iedere release verkleint de oppervlakte van legacy, nooit andersom.
Sunset
Als niemand meer in de oude code werkt, trekken we gepland de stekker eruit. Code in read-only archief, database gearchiveerd, hosting opgezegd, netjes.
Waarmee we werken
Nieuwe stack én de expertise om bij je oude te duiken.
Van
- PHP 5.6 / 7.x, plain of CodeIgniter
- Symfony 2/3, Zend, CakePHP
- jQuery-heavy frontends
- MySQL 5.x en oudere Postgres
- On-prem VPS en dedicated servers
Naar
- Laravel (PHP 8.4) + Filament
- Livewire, Vue of React per context
- TypeScript, Vite, Tailwind
- PostgreSQL 16+, Redis
- AWS, Hetzner of Forge
Rondom de migratie
- Rector voor PHP-upgrade-automatisering
- Laravel Shift voor framework-bumps
- Feature flags via eigen library
- Terraform voor infra-as-code
- GitHub Actions met staging-gate
Hoe dit er in de praktijk uitziet
PHP 5.6 / CodeIgniter naar Laravel 12
Een bedrijf draaide al twaalf jaar op een CodeIgniter-applicatie op PHP 5.6, end-of-life, maar volop in gebruik. Wij startten met een assessment, classificeerden modules op complexiteit en migratie-prioriteit, en bouwden de nieuwe Laravel-applicatie naast de bestaande op. Een reverse-proxy routeerde per URL oud of nieuw. Na elf maanden stond er een complete Laravel-stack, werd de oude codebase in read-only gezet en konden we end-of-life hosting uitfaseren. Nul dagen business-uitval.
Monolith met jQuery-spaghetti naar modulaire architectuur
Een SaaS-bedrijf had een volgroeide monolith met duizenden regels jQuery-JavaScript die niemand meer durfde aan te raken. Wij knipten de applicatie op in modules met duidelijke grenzen, vervingen de frontend per scherm door Livewire waar interactie genoeg was en Vue waar het intensiever werd. Feature-flags bepaalden per gebruiker welk scherm ze te zien kregen. Na negen maanden draaide de hele applicatie op de nieuwe architectuur, met aantoonbaar minder bugs en aanzienlijk snellere feature-deliveries.
On-premise naar cloud met zero downtime
Een organisatie wilde afscheid van een fysieke server in hun eigen datacenter, maar de applicatie draaide 24/7 productie. Wij zetten parallel de cloudinfrastructuur op (AWS, EU-regio, Terraform-beheerd), kopieerden de database met Postgres logical replication voor continue sync, en deden daarna een gecontroleerde DNS-switch in een onderhoudsvenster van vijftien minuten. Rollback-pad bleef drie weken open, bewezen werkend, voordat de oude server werd uitgeschakeld.
Veelgestelde vragen
Kunnen jullie onze oude PHP-applicatie migreren naar moderne Laravel?
Hoe voorkomen jullie dat er dingen breken tijdens de migratie?
Moet alles in één keer over, of kan dat geleidelijk?
Wat kost een complete modernisering ongeveer?
Gaan onze gebruikers hier iets van merken?
Wat als er nog mensen zijn die in de oude applicatie werken?
// volgende_stap.execute()
Oude code die blokkeert?
Vertel waar je vastloopt, we beginnen met een assessment en geven je een eerlijk beeld van de opties.
Ook interessant
// case_studies