software maintainabilitytechnical debtlow-code developmentFileMaker developmentsystem architectureERP integrationIT management

Hoe business software onderhoudsbaar houden terwijl het groeit

Jeroen·

Waarom bedrijfssoftware vertraagt naarmate deze schaalt, en de concrete keuzes op het gebied van architectuur, processen en personeelsplanning die deze onderhoudbaar houden.

Je herinnert je nog dat een nieuwe feature een week duurde. Nu duurt hetzelfde werk een maand, en niemand wil de invoicemodule aanraken omdat "dat is het gedeelte dat Peter in 2016 heeft gebouwd en hij is vorig jaar vertrokken." Elke integratie voelt één API-update verwijderd van kapotgaan, en je developers besteden meer tijd aan het lezen van oude code dan aan het schrijven van nieuwe code.

Dit is geen teken dat je het verkeerde systeem hebt gebouwd. Het is een teken dat je systeem sneller is gegroeid dan de structuur en het gedeelde begrip van je team ervan. Dit artikel loopt door waarom dat gebeurt en wat concreet software onderhoudsbaar houdt terwijl het schaalt — zowel in hoe je het bouwt als in wie het bouwt.

Waarom wordt software moeilijker om te onderhouden naarmate het groeit?

Elk systeem begint schoon omdat er nog niet veel bij te houden is. Een CRM met 3 tabellen, één integratie en twee developers is gemakkelijk te begrijpen. Problemen versterkken als drie dingen tegelijk groeien:

  • Oppervlakte: meer modules, meer integraties, meer edge cases die toen "snelle fixes" waren.
  • Geschiedenis: de redenatie achter oude beslissingen gaat verloren. Een kortingsregel uit 2019 bestaat omdat van één specifiek klantcontract, maar niemand heeft dat gedocumenteerd, dus niemand durft het te verwijderen.
  • Afhankelijkheden: je ordermodule spreekt nu met je boekhoudpakket, je webshop en een verzend-API. Verander één veldnaam en drie andere systemen breken stilletjes.

Dit is niet uniek voor één platform — het gebeurt in aangepaste ERP-systemen, in FileMaker-oplossingen, in web-apps, in Salesforce-instanties. De pijn is universeel: technische schuld is echt alleen maar beslissingen die ooit logisch waren, nu meer kosten dan besparen.

Wat zijn de echte symptomen van ononderhoudsbare software?

Als je meer dan twee hiervan herkent, kost het je al geld:

  1. Het toevoegen van een eenvoudig veld vereist het aanraken van vijf niet-gerelateerde scripts of modules.
  2. Slechts één of twee mensen kunnen veilig wijzigingen aanbrengen zonder iets anders kapot te maken.
  3. Integraties falen stilletjes — een order synchroniseert naar je ERP, maar een verzendlabel wordt niet gegenereerd, en niemand merkt het op totdat een klant belt.
  4. Elk offerte voor een nieuwe feature komt hoger uit dan verwacht, en niemand kan precies uitleggen waarom.
  5. Het testen van een wijziging betekent handmatig door het hele systeem klikken omdat er geen betrouwbare manier is om te controleren wat het anders raakt.

Dit zijn de praktische vingerafdrukken van een systeem dat zijn eigen structuur is ontgroeid.

Hoe ontwerp je software die onderhoudsbaar blijft terwijl het schaalt?

1. Scheiding van structuur en bedrijfslogica

Een goed gebouwd systeem houdt zijn gegevensmodel, zijn bedrijfsregels en zijn interface los van elkaar. In een FileMaker-context betekent dit niet dat je berekeningslogica in layoutobjecten verbergt waar de volgende developer het niet ziet — het betekent dat je regels centraliseert in scripts en duidelijk benoemde aangepaste functies. In een web-app is het hetzelfde idee: verspreid geen prijslogica over vijf controllers.

2. Documenteer beslissingen, niet alleen code

Code vertelt je wat het systeem doet. Het vertelt je zelden waarom. Een korte opmerking naast die kortingsregel uit 2019 — "behouden voor contract met klant X, controleren na vernieuwing in 2025" — bespaart iemand twee uur onderzoek en een riskante gok later.

3. Bouw integraties om luid te falen

Een order die van je webshop naar je boekhoudingsoftware synchroniseert, moet iemand op het moment dat dit niet gebeurt vertellen — niet drie dagen later wanneer een klant vraagt waar hun factuur is. Retry-logica, foutlogboekregistratie en meldingen zijn niet optioneel; ze zijn wat een integratie onderhoudsbaar maakt in plaats van een black box.

4. Refactor in kleine, geplande passages

Technische schuld wordt zelden per ongeluk afgelost. Teams die onderhoudsbaar blijven behandelen opruiming als een terugkerende, begegrote activiteit — een paar uur per sprint of maand — in plaats van een gigantisch herschrijfproject dat voorgoed wordt uitgesteld omdat het bedrijf er niet voor kan stoppen.

5. Houd het gegevensmodel eerlijk

Naarmate bedrijven groeien, groeit ook de verleiding om een bestaande tabel voor iets anders te hergebruiken waarvoor het niet was ontworpen — "we voegen gewoon een veld toe." Dit is hoe een Klanten-tabel stilletjes ook leveranciersgegevens opslaat. Een onderhoudsbaar systeem krijgt een echte gegevensmodelreview wanneer een nieuw bedrijfsproces wordt toegevoegd, niet alleen maar een nieuw veld aan de dichtstbijzijnde bestaande tabel.

Dit soort structureel denken is deel van wat we bedoelen met moderne softwareontwikkeling — systemen bouwen die zijn ontworpen om te evolueren, niet alleen om gelanceerd te worden.

Waarom zijn ervaren low-code developers nog belangrijker naarmate de complexiteit groeit?

Hier is het gedeelte dat veel bedrijfseigenaren verrast: low-code-platforms zoals FileMaker worden vaak gekozen omdat ze minder ervaren mensen laten iets snel bouwen. Dat klopt voor een eerste versie. Maar naarmate het systeem groeit, wordt het verschil tussen een junior en een senior low-code developer — snel groter.

Een junior developer lost het probleem voor hen op. Een ervaren FileMaker- of low-code developer lost het op een manier op dat het de vijf andere dingen niet breekt die ze weten dat ermee verbonden zijn, omdat ze die exacte fout eerder hebben gemaakt, op een ander project, jaren geleden.

Concreet verschijnt dit als:

  • Patroonherkenning: ze herkennen "dit ziet eruit alsof het een join-tabel wil, niet nog een veld" voordat het drie jaar workarounds wordt.
  • Weten wat niet te bouwen: een ervaren developer bespaart vaak meer tijd door een klant uit een overgecompliceerde feature te praten dan door de aangevraagde feature sneller te bouwen.
  • Debugging-snelheid: in een complex systeem is de meeste kosten niet het schrijven van nieuwe code — het is het begrijpen van bestaande code voordat je het aanraakt. Iemand die honderden FileMaker-oplossingen heeft gelezen, vindt de hoofdoorzaak in een uur waar een nieuwkomer een dag over doet.
  • Integratiebeoordeling: weten wanneer je een aangepaste API-connector bouwt versus wanneer een lichtere synctool genoeg is — een beslissing die beide kanten echte lange-termijn-onderhoudskosten heeft.

Dit is precies waarom low-code-ontwikkeling stilletjes een senior vaardigheid is geworden in plaats van een instapniveau, hoewel de platforms zelf als "gemakkelijk" worden vermarkeerd. De tooling werd meer toegankelijk; de systemen die erop zijn gebouwd, werden complexer. Ervaring is wat die kloof dichtmaakt.

Hoe voorkom je dat kennis in slechts één of twee hoofden leeft?

Dit is het risico dat bedrijfseigenaren het meest schrikt, en terecht — wat gebeurt er als die ene developer vertrekt?

  • Code review als gewoonte, niet als crisisbeheer. Zelfs een twee-persoons dev team profiteert ervan om elkaar af en toe door recente wijzigingen te lopen.
  • Naamconventies die zichzelf uitleggen. Een script genaamd "Process_Order_v3_FIXED" vertelt de volgende persoon niets; "CalculateShippingCost_IncludesEUVAT" doet dat wel.
  • Een levend architectuuroverzicht. Niet een 40-pagina spec die niemand leest — een enkel diagram dat laat zien wat met wat spreekt, bijgewerkt wanneer een integratie verandert.
  • Externe of fractionale expertise als verzekering. Een ervaren externe developer periodiek binnenhalen — zelfs alleen voor een architectuurreview — vangt het soort structureel risico dat onzichtbaar is voor een team dat te dicht bij het systeem staat.

Checklist: is je systeem nog onderhoudsbaar?

  • Kunnen meer dan één persoon veilig een wijziging implementeren?
  • Waarschuwen integraties iemand automatisch wanneer ze mislukken?
  • Is er een schriftelijke (zelfs informele) reden achter ongebruikelijke bedrijfsregels?
  • Heeft iemand het gegevensmodel in de afgelopen 12 maanden beoordeeld?
  • Is technische schuld opruiming een geplande activiteit, niet een noodgeval?
  • Zou een nieuwe developer de structuur van het systeem in een dag begrijpen, niet een maand?

Als je minder dan vier hokjes hebt aangevinkt, kost onderhoudbaarheid je al stilletjes tijd en geld — zelfs als niets is kapotgegaan.

Veelgestelde vragen

Is dit alleen een risico voor aangepaste of low-code systemen? Nee — dezelfde schuld stapelt zich op in kant-en-klare ERP- en CRM-platforms door overmatige aanpassingen en onbeheerde integraties. Low-code systemen maken de symptomen alleen eerder zichtbaar, omdat wijzigingen sneller kunnen worden aangebracht en daarom gemakkelijker onvoorzichtig kunnen worden aangebracht.

Lost het herschrijven van het systeem van nul af aan het probleem op? Zelden, en het is meestal de duurste optie. De meeste onderhoudsbaarheids-problemen kunnen worden opgelost door specifieke modules te herstructureren en documentatie en monitoring te verbeteren — niet door opnieuw te beginnen.

Hoe vaak moeten we de architectuur van ons systeem beoordelen? Minimaal eenmaal per jaar of na een groot groeigebeurtenis (een nieuwe markt, een nieuwe integratie, verdubbeling van uw gebruikersbasis). Behandel het als een gezondheidscheck, niet als een eenmalig project.

Het onderhoudsbaar houden van software is geen eenmalige oplossing — het is een voortdurende discipline van structuur, documentatie en oordeel, en dat oordeel is precies wat ervaren developers naar tafel brengen. Als je de waarschuwingstekenen hierboven opmerkt, kan Loggix helpen — of dat nu een praktische architectuurreview is, het refactoren van een FileMaker-oplossing die zijn oorspronkelijke ontwerp is ontgroeid, het bouwen van sturdere API-integraties tussen de systemen waarop je al vertrouwt, of gewoon met jou in kaart brengen waar je huidige setup waarschijnlijk volgende spanning zal oplopen.