Dienst · Software-ontwikkeling

Technische schuld oplossen zonder de winkel te sluiten.

Legacy-codebases, verouderde frameworks, broze integraties — de optelsom van keuzes die ooit logisch waren. Wij ruimen technische schuld op in een gecontroleerd traject, parallel aan de business. Geen big-bang herbouw, geen platgelegde feature-roadmap, wel een meetbaar gezondere codebase, een team dat weer kan leveren, en architectuur-keuzes die u zelf kunt uitleggen.

Tech-debt auditStrangler figTest-vangnetDependency-hygiëne

Technische schuld is geen luiheid, het is een keuze die niet meer past.

Elke regel code die u vandaag schrijft, gaat morgen verouderen. Frameworks krijgen nieuwe major-versies, dependencies worden niet meer onderhouden, architectuur-keuzes blijken niet schaalbaar, en de mensen die het ooit bouwden zijn al twee teams verder. Technische schuld is het verschil tussen waar uw software nu staat en waar die zou staan als u opnieuw zou beginnen met de kennis van vandaag. Een klein verschil is normaal, soms zelfs gezond — het wordt pas een probleem als de rente harder oploopt dan u kunt aflossen.

We helpen organisaties die het punt voorbij zijn waar interne teams het er nog naast kunnen doen. Codebases van meer dan tien jaar oud, post-acquisitie IT-consolidaties met meerdere stacks naast elkaar, software-vendors met een framework-graveyard van vier generaties JavaScript-frameworks, of teams waar de feature-velocity langzaam is gestopt omdat elke wijziging ergens anders iets breekt. Wij ruimen op — methodisch, gedocumenteerd, zonder de operatie plat te leggen en zonder de schuld te verplaatsen naar een ander deel van het systeem.

Onze ervaring met legacy-modernisering zit in alles van Java-monolieten en .NET Framework-applicaties tot Node-microservices die nooit echt microservices werden. Naast pure refactoring koppelen we dit traject regelmatig aan een platform-migratie of een fundamentele heroverweging via platform-modernisering-consultancy, afhankelijk van waar de pijn echt zit.

De acht vormen van technische schuld.

Schuld zit niet alleen in de code. We brengen elk type in kaart, prioriteren op risico en kosten, en pakken aan in een volgorde die past bij uw business — niet bij de pijn-volgorde van het ontwikkelteam.

Code- & dependency-schuld

De codebase zelf

Outdated frameworks, copy-paste-patronen, monolitische functies van honderden regels, dode code die niemand durft te verwijderen. Daarbovenop dependency-schuld: libraries die niet meer onderhouden worden, security-vulnerabilities die zich opstapelen, breaking-changes die jaren zijn doorgeschoven. We brengen het in beeld en bouwen een opruim-plan dat naast de feature-roadmap loopt.

Outdated frameworksDead codeSecurity-vulnerabilitiesBreaking-changes
Architectuur- & data-schuld

De keuzes onder de oppervlakte

Een monoliet die microservices had moeten worden. Of erger: microservices die nooit een monoliet hadden mogen verlaten en nu een gedistribueerde monoliet vormen. Tight coupling tussen modules die los hadden moeten staan. Daarbij data-schuld: gedenormaliseerde schema's zonder foreign keys, dezelfde klantgegevens in vier systemen, geen single source of truth. We brengen de architectuur terug naar iets uitlegbaars.

Distributed monolithTight couplingSchema-driftDatasilo's
Test-, ops- & documentatie-schuld

Alles wat naast de code mist

Geen unit-tests, brittele integration-tests, feedback-loops van uren in plaats van seconden. Handmatige deploys, geen Infrastructure-as-Code, geen monitoring, geen runbooks. Tribal knowledge in de hoofden van twee mensen, geen architecture decision records, geen onboarding-documentatie. Dit is de schuld die je niet ziet tot iemand met vakantie gaat — en die ons traject expliciet meeneemt.

Geen unit-testsHandmatige deploysTribal knowledgeGeen runbooks

Wat u krijgt aan het einde.

Geen herbouwde codebase die er weer hetzelfde uitziet maar onder de motorkap modern is — dat is het einddoel. Onderweg lopen er een aantal concrete deliverables mee die u ook zelfstandig kunt blijven gebruiken.

  • Tech-debt audit-rapportInventaris per type schuld, met risico-, kosten- en impact-scoring. Prioritering die past bij security-urgentie, niet alleen ontwikkelaars-irritatie.
  • Roadmap met fasesWat eerst, wat parallel met features, wat later. Inclusief budget-impact per fase en de zichtbare effecten op feature-velocity.
  • Test-vangnetCharacterization tests en snapshot tests die het huidige gedrag vastleggen voor we refactoren. Pas dan kan een refactor veilig.
  • Migratie-laagStrangler fig of branch-by-abstraction, met feature-toggles zodat we incrementeel en omkeerbaar werken. Geen big-bang.
  • CI/CD en observabilityGeautomatiseerde deploys, monitoring, alerting en logging — vanaf dag één van het traject, zodat we de progressie zelf kunnen meten.
  • Architecture decision recordsDocumentatie waarom u welke keuze maakte — voor uw eigen team én voor de volgende partij die ooit op deze code werkt.
  • Kennisoverdracht aan uw teamPairing-sessies, walkthroughs en ADR's zodat het oplossen van schuld ook een leermoment is, niet alleen een uitbestede klus.

Wanneer een schuld-traject zinvol is.

Vier patronen waarin we organisaties vaak zien. Herkent u er één, dan praten we graag over wat een traject voor u zou inhouden.

Feature-velocity

Releases worden trager

Een feature die vroeger in een sprint klaar was, kost nu drie. Elke wijziging breekt ergens iets anders. Het team werkt harder maar levert minder — een klassiek symptoom van architectuur- en testschuld die in de weg zit.

Partner-wisselingen

Na meerdere ontwikkelpartners

Vendor A bouwde het, vendor B onderhield het, en vendor C kreeg het in slechte staat doorgegeven. Iedereen heeft een eigen patroon achtergelaten en de combinatie is nu een patchwork. Wij brengen weer één lijn aan.

Acquisitie

Post-acquisitie IT-consolidatie

U heeft een bedrijf overgenomen en erft hun software. Of u bent overgenomen en moet integreren in de stack van de moeder. De koppeling tussen beide werelden is nu een verzameling rare workarounds. Tijd om die te vervangen.

Compliance

Security- of audit-druk

Een pentest, AVG-audit of klant-due-diligence legt bloot wat u al wist: outdated TLS, hardcoded secrets, geen secret-management, dependencies met bekende CVE's. De deadline van een auditor is een goede aanleiding om grondig aan te pakken.

Technische schuld voorkomen bij externe development.

De vraag die we het vaakst krijgen — en die in Google bovenaan staat — gaat niet over opruimen, maar over voorkómen. Werkt u met een externe partner of overweegt u dat, dan zijn dit de hefbomen die het verschil maken tussen schoon werk en een dure puinhoop over drie jaar.

Tech-radar

Welke tools wel, welke niet

Een serieuze partner heeft een expliciete tech-radar: welke frameworks, libraries en patronen zij wel inzetten en welke niet. Geen frameworks-van-de-week, geen experimenten op uw kosten. Vraag deze radar op voor u tekent.

Dependency-budget

Updates als sprint-werk

Outdated dependencies stapelen op tot een security-risico of een major-upgrade die niemand meer durft. Plan dependency-updates als regulier werk in elke sprint, automatisch waar mogelijk via Dependabot of Renovate, met een vast tijdsbudget.

Team-retentie

Dezelfde mensen, langer

Wisselende ontwikkelaars om de paar maanden is een schuld-fabriek op zich. Elke nieuwe inhuur introduceert eigen patronen, mist context en bouwt workarounds rond wat zij niet snappen. Kies een partij met team-stabiliteit en harde overdracht-protocollen als er toch een wissel komt.

Code-eigenaarschap

Repo bij u, niet bij de vendor

Code in uw eigen Git-organisatie, build-pipelines die u kunt overdragen, geen vendor-lock-in op proprietary frameworks. Vraag bij elke gunning expliciet of u op elk moment de hele stack kunt overdragen aan een andere partij — en test dat ook.

Code-reviews

Met uw mensen erbij

Reviews binnen het externe team alleen zijn niet genoeg. Laat ten minste één technisch betrokken iemand vanuit uw kant meekijken op pull-requests. Niet om micromanagen — wel om patroon-keuzes te begrijpen voordat ze ingebed zitten.

ADR's en docs

Beslissingen op papier

Architecture decision records — korte documenten per significante keuze: wat besloten we, welke alternatieven bestonden, waarom kozen we dit, wanneer is heroverweging zinvol. Plus per project: een onboarding-doc, een runbook, en een README die echt klopt. Tribal knowledge is schuld-in-wording.

Onze aanpak in zes stappen.

1

Tech-debt audit

Codebase-scan met statische analyse en complexiteitsmetingen, dependency-audit op security en onderhoudsstatus, architectuur-review, en interviews met uw dev-team. Resultaat: een geprioriteerde lijst per schuld-type, met risico-, kosten- en impact-scoring.

2

Roadmap opstellen

We bepalen wat eerst aangepakt moet worden (security en risico-gedreven), wat parallel kan met de feature-roadmap, en wat in een later kwartaal beter past. We rekenen door welke schuld het meeste rendement geeft per ingezette engineer-uur.

3

Test-vangnet bouwen

Vóór we refactoren leggen we het huidige gedrag vast. Characterization tests op de buitenkant van modules, snapshot tests op API's en views, een handvol end-to-end happy-paths. Zonder vangnet is een refactor een gok.

4

Incrementele migratie

Strangler fig pattern voor monolieten die opgedeeld worden, branch-by-abstraction voor diepe interne refactors, feature-toggles om wijzigingen omkeerbaar te houden. We bouwen niets nieuws naast het oude tot beide gevalideerd zijn.

5

Moderniseren

Frameworks updaten, dependencies opschonen, monoliet opsplitsen waar zinvol én monoliet houden waar dat zinvol is, CI/CD invoeren of versterken, observability toevoegen. Eind van deze fase: een codebase die uw team weer kan onderhouden.

6

Kennisoverdracht

Documentatie, ADR's, pairing met uw team, een runbook voor incidenten. We zorgen dat alle context expliciet wordt, zodat de volgende ontwikkelaar — uw eigen of een externe — niet weer aan tribal knowledge is overgeleverd.

Veelgestelde vragen.

Wat opdrachtgevers ons meestal vragen voor we starten — inclusief de vraag die we het vaakst zien via Google.

Hoe voorkom ik technische schuld bij externe development?
Door een externe partner te kiezen die expliciet over schuld nadenkt, niet alleen over features. Concreet: vraag naar hun tech-radar (welke frameworks, libraries en patronen zij wel en niet inzetten), naar hun beleid voor dependency-updates (dependabot of renovate met een vast sprintbudget), naar hun ADR-praktijk (worden architectuur-keuzes opgeschreven of zit het in iemands hoofd?), en naar code-eigenaarschap (krijgt u de repo of zit u in een vendor lock-in?). Test-coverage als harde gate in CI en code-reviews mét vertegenwoordiging vanuit uw team voorkomt dat de externe partij in stilte schuld opbouwt. Tot slot: kies een partner met team-retentie. Wisselende devs om de paar maanden zijn een schuld-fabriek op zich. Wij werken met vaste mensen, leveren code in uw repo en documenteren keuzes via ADR's — geen lock-in, geen black box. Zie ook onze pagina over IT-modernisering-consultancy waar dit verder uitgewerkt is.
Hoe meet je technische schuld objectief?
Door verschillende signalen te combineren: statische analyse (complexiteit, duplicatie, codereuk), dependency-audits (outdated en onderhoudsstatus), test-coverage en build-tijden, defect-rates per module uit uw issue-tracker, en lead-time voor wijzigingen uit uw versiebeheer. Geen enkel cijfer is op zich genoeg — de combinatie schetst het beeld. Wij brengen dat in onze audit samen tot één geprioriteerde lijst.
Eerst features bouwen of eerst schuld opruimen?
Bijna nooit allebei tegelijk in dezelfde sprint, en bijna nooit een paar maanden alleen schuld. Wat wel werkt: een vast percentage van elke sprint reserveren voor schuld (bijvoorbeeld 15-25%), met daarnaast soms een korte focus-week op een specifiek onderwerp. Welke schuld eerst hangt af van risico — security en blokkades voor features gaan voor cosmetische refactors.
Big-bang herbouw of strangler fig?
Bijna altijd strangler fig of een vergelijkbaar incrementeel patroon. Big-bang herbouwen klinkt verleidelijk maar leidt vaak tot een tweede systeem dat de oude problemen herhaalt plus een paar nieuwe, terwijl het oude systeem doorgaat met aanpassingen en de migratie zich uitstrekt over kwartalen waarin niets meer naar productie gaat. Strangler fig houdt de business draaiend en de risico's klein.
Hoeveel technische schuld is acceptabel?
Schuld is niet per definitie slecht — soms is bewust uitstel een goede zakelijke keuze. Wat onacceptabel is: schuld die u niet kent, schuld waarvan het risico niet geprijsd is, en schuld die het team blokkeert om nog iets te leveren. Een gezond traject werkt naar een situatie waarin u weet welke schuld er ligt, waarom die er ligt, en wat u eraan zou moeten doen — niet noodzakelijk dat alles weg is.
Hoe selecteer ik een extern team dat geen schuld toevoegt?
Vraag bij elk gesprek door op de zachte signalen: hoe lang werken hun engineers gemiddeld bij ze, hoe vaak draaien ze code-reviews en met wie, wat is hun beleid voor dependency-updates, hoe documenteren ze architectuur-beslissingen, en wat krijgt u aan het einde van een project mee (toegang tot repo, build-pipelines, runbooks). Een partij die hier vaag op antwoordt, levert vaak schuld op de koop toe. Lees ook onze pagina over enterprise-software laten ontwikkelen waar we de selectiecriteria voor langlopende trajecten uitleggen.
Wat bepaalt de kosten van een schuld-traject?
De omvang en complexiteit van de codebase, de hoeveelheid en het type schuld, hoeveel test-vangnet er nog ontbreekt, of de migratie parallel met features moet lopen, en hoeveel kennisoverdracht uw team aankan tijdens het traject. We werken nooit met vaste totaalbedragen vooraf voor een meerjaartraject — wel met vaste sprintbudgetten waar u per fase op kunt sturen.

Praat met ons over uw technische schuld.

Een kennismaking van een half uur, vrijblijvend. We luisteren naar uw situatie, stellen kritische vragen, en geven richting waar u iets aan heeft — ook als dat niet een traject met ons hoeft te zijn. Voor wie naast schuld-oplossing ook naar fundamentele heroverweging kijkt, koppelen we dit graag aan platform-migratie of cloud-native platform-development.

Edit Content