hardcoded valuessoftware maintainabilityFileMaker developmentERP configurationtechnical debtcustom software
Waarom hardcoded instellingen toekomstige problemen creëren

Waarom hardcoded instellingen toekomstige problemen creëren

Jeroen·

Hardcoded VAT-tarieven, magazijncodes en prijsregels voelen vandaag efficiënt aan, maar breken je zakelijke software stilletjes later. Hier lees je hoe je ze opsporen en herstelt.

U moet een nieuw magazijn, een nieuw btw-tarief of een nieuw prijsniveau toevoegen — en plotseling moet een ontwikkelaar zich door code worstelen om erachter te komen waar die logica zich bevindt. Niet omdat de bedrijfslogica ingewikkeld is, maar omdat iemand, jaren geleden, een vaste waarde rechtstreeks in een script, berekening of layout heeft getypt in plaats van deze ergens veilig te plaatsen waar het kan worden gewijzigd. Deze enkele snelkoppeling kost u nu een support ticket, een vertraging en mogelijk een productiefouten.

Dit is een van de meest voorkomende — en meest onderschatte — oorzaken van software die elk jaar dat het draait moeilijker te onderhouden wordt. Dit artikel legt uit wat hardcoded instellingen eigenlijk zijn, waarom ze onschuldig lijken wanneer ze worden geschreven, waarom ze later duur worden, en hoe u ze kunt vinden en repareren voordat ze echte schade veroorzaken.

Wat is precies een "hardcoded instelling"?

Een hardcoded instelling is een waarde die rechtstreeks in de logica van uw software is ingebakken in plaats van ergens te worden opgeslagen waar deze kan worden opgezocht, gewijzigd of beheerd.

Concrete voorbeelden die we constant zien in FileMaker en ERP-systemen:

  • Een script dat zegt If ( Company = "Acme BV" ) then apply 9% discount in plaats van het kortingspercentage uit een klanten- of prijstabel te lezen.
  • Een btw-percentage van 21 rechtstreeks in een factureringsberekening getypt, in plaats van uit een btw-tarieftabel gehaald die aan een datumrange is gekoppeld.
  • Een magazijncode zoals "WH-NL-01" geschreven in een verzendscript, in plaats van gelezen uit een magazijnentabel die kan groeien.
  • Een API-connector met de productie-URL van een boekhoudpakket rechtstreeks in een scriptstap getypt, zodat overschakelen naar een testomgeving het bewerken van het script zelf betekent.
  • Een layout die alleen velden toont voor klanten uit "NL" en "BE" omdat dit de enige twee landen waren waarnaar het bedrijf verzond toen het werd gebouwd.

Dit zijn geen bugs op dag één. Ze werken perfect — totdat het bedrijf verandert.

Waarom voelt dit op dat moment als de juiste keuze?

Hardcoding is bijna altijd een rationele, goedbedoelde snelkoppeling onder deadlinedruk. Een ontwikkelaar — intern of extern — wordt gevraagd om "de kortingslogica voor het kantoor in België gewoon tegen vrijdag aan de slag te krijgen." Het bouwen van een volledig configureerbare regelengine zou drie extra dagen kosten; de regel rechtstreeks in het script typen kost twintig minuten.

Dit is geen luiheid. Het is een legitiem afwegingsmoment tussen snelheid nu en flexibiliteit later. Het probleem is niet dat de snelkoppeling is genomen — het is dat niemand deze als snelkoppeling heeft gemarkeerd, gedocumenteerd of is teruggekomen om het eenmaal op te lossen als de deadlinedruk voorbij was.

Waarom worden hardcoded instellingen later duur?

De kosten van een hardcoded waarde verschijnen niet wanneer deze wordt geschreven. Deze verschijnen maanden of jaren later, op een van deze voorspelbare manieren:

  1. Het bedrijf groeit voorbij de aanname. Het systeem werd gebouwd voor één rechtspersoon, één land, één valuta of één magazijn. Nu zijn er drie. Elke plaats die "één" aannam, moet worden gevonden en herschreven.
  2. Een regel verandert die iedereen aannam vast te zijn. Btw-tarieven veranderen. Verzendmaatschappijen wijzigen hun API-eindpunten. Een klant die altijd een handmatige korting van 5% kreeg, wordt overgenomen en heeft andere voorwaarden nodig. Als die regel in tien scripts leeft in plaats van één tabel, moet iemand alle tien vinden en bijwerken — en mist bijna altijd één.
  3. Niemand die de code heeft geschreven werkt nog bij het bedrijf. De persoon die "Acme BV" zes jaar geleden in dat script typte, is het bedrijf verlaten. De huidige ontwikkelaar moet reverse-engineeren waarom die voorwaarde bestaat voordat deze het durft aan te raken.
  4. Testen wordt riskant. Als een testomgeving en een productieomgeving een hardcoded API-URL, connector of bestandspad delen, kan het testen van een nieuwe integratie per ongeluk echte gegevens naar een live systeem pushen.
  5. Kleine verzoeken nemen onevenredig lang. "Voeg eenvoudig een nieuw kortingniveau toe" zou een vijf minuten durende configuratiewijziging moeten zijn. In plaats daarvan wordt het een halve dag durende zoektocht door scripts, layouts en berekeningen om elke plaats te vinden waar de oude niveaus werden aangenomen.

Dit laatste punt is degene die bedrijfseigenaren het meest direct voelen: de software die vroeger goedkoop en snel aan te passen was, begint langzaam en duur aan te voelen om aan te raken, hoewel niets aan de bedrijfslogica eigenlijk ingewikkelder is geworden.

a script with a value hardcoded next to a settings table storing the same value

Hoe kunt u het verschil zien tussen een instelling en een constante?

Niet elke vaste waarde is een probleem. De vaardigheid bestaat erin om te weten welke waarden werkelijk stabiel zijn en welke nu alleen stabiel lijken.

Stel deze vraag voor elke vaste waarde in uw systeem: "Zou een niet-technische persoon deze redelijkerwijs moeten kunnen wijzigen zonder een ontwikkelaar?"

  • Indien ja — het is een instelling en behoort in een tabel, een voorkeurensiconscherm of een configuratierecord. Voorbeelden: btw-tarieven, kortingniveaus, magazijnlijsten, e-mailsjablonen, goedkeuringsdrempels, API-gegevens.
  • Indien nee — het is een echte constante, veilig om in code te laten. Voorbeelden: het aantal dagen in een week, een wiskundige afrondingsregel, een vast intern ID-formaat dat nooit bedrijfsmatig hoeft te worden bewerkt.

Een handige vuistregel uit echte projecten: als een waarde betrekking heeft op geld, belasting, geografie, het adres van een extern systeem of een organisatiestructuur (afdelingen, magazijnen, rechtspersonen, klantniveaus), ga ervan uit dat deze zal veranderen en bouw deze van het begin af aan als een instelling. Deze vijf categorieën verklaren de overgrote meerderheid van de hardcoded-waarde support tickets die we zien.

Hoe ziet een goed gestructureerde instellingenlaag er eigenlijk uit?

In de praktijk betekent dit repareren niet dat alles als een generieke regelengine moet worden herbouwd — dat is overdreven en creëert zijn eigen onderhoudsbelasting. Het betekent dat u elke categorie variabele gegevens een passend thuis geeft:

  • Een instellingen-/voorkeurentabel voor enkele globale waarden (bedrijfsnaam, standaardvaluta, fiscaal jaar start).
  • Opzoektabellen met effectieve datums voor alles wat in de loop van de tijd verandert maar een geschiedenis nodig heeft — btw-tarieven zijn het klassieke voorbeeld, omdat u nog steeds vorig jaar tarief nodig hebt om een oude factuur correct opnieuw af te drukken.
  • Een speciale tabel per bedrijfsdimensie — magazijnen, prijsniveaus, kortingsregels, verzendmaatschappijen — in plaats van alles in één gigantische "instellingen"-tabel te proppen die niemand kan navigeren.
  • Omgevingsconfiguratie buiten de logicalaag — API-eindpunten, gegevens en connector-URL's opgeslagen in een configuratietabel of omgevingsvariabele, nooit getypt in een scriptstap, zodat overschakelen tussen test en productie niet vereist dat code wordt bewerkt.

Hoe vindt u hardcoded instellingen die al in uw systeem bestaan?

Als uw FileMaker of ERP-systeem al een paar jaar draait, hebt u er bijna zeker enkele. Een praktische audit vereist niet dat alles tegelijk wordt herschreven — het vereist het vinden en prioriteren van:

  1. Zoek alle scripts en berekeningen naar letterlijke waarden. In FileMaker, zoek scripts naar aanhalingstekens en getallen die lijken op bedrijfsregels — percentages, valutatariffs, landcodes, specifieke klanten- of productnamen.
  2. Grep voor bekende "veranderbare" categorieën eerst. Zoek specifiek naar btw/belastingpercentages, valutasymbolen en land-/taalcodes — dit zijn de meest voorkomende daders.
  3. Markeer elke If ( CompanyName = ... ) of If ( CustomerID = ... ) stijl voorwaarde. Dit zijn bijna altijd tekens dat een regel in een tabelrij leeft, niet in een scripttak.
  4. Controleer integratiekscripts op ingesloten URL's of gegevens. Dit veroorzaakt de meeste schade wanneer deze lekt in versiebeheer of tussen omgevingen worden gekopieerd.
  5. Rank bevindingen op veranderingsfrequentie, niet op hoe gemakkelijk het is om op te lossen. Een zelden aangeraakte hardcoded constante is lage prioriteit. Een btw-tarief of kortingsregel waar financi twee keer per jaar om vraagt aan te passen, is urgent, zelfs als het herstellen ervan langer duurt.

Wat is de juiste manier om er één op te lossen zonder productie stuk te maken?

Zodra u een hardcoded waarde hebt gevonden die het waard is om op te lossen, weersta de neiging om "het overal tegelijk gewoon te vervangen." Een veiliger volgorde:

  1. Maak eerst de instellingentabel of configuratierecord, en vul deze in met de huidige hardcoded waarde — zodat het gedrag nog niet verandert.
  2. Update één script of berekening om in plaats van de letterlijke waarde uit de nieuwe instelling te lezen, en test die specifieke flow in isolatie.
  3. Bevestig dat de uitvoer identiek is aan vóór de wijziging (hetzelfde factuurtotaal, hetzelfde verzendlabel, hetzelfde kortingsbedrag).
  4. Herhaal dit voor elke plaats waar de oude waarde werd gedupliceerd — en noteer hoeveel plaatsen u eigenlijk vindt. Dit aantal is vaak het duidelijkste bewijs van hoeveel verborgen risico daar was.
  5. Alleen nadat elke verwijzing is gemigreerd, verwijder u de oude hardcoded letterlijke waarde zodat niemand deze per ongeluk kan terugdraaien.

Dit is precies het soort incrementele, lage-risico opruiming beschreven in onze bredere gids over hoe bedrijfssoftware onderhoudbaar blijft naarmate het groeit — hardcoded instellingen zijn een van de meest voorkomende specifieke symptomen van het algemene onderhoudbaardheidsprobleem dat daar wordt behandeld.

a checklist next to a table of business rules replacing scattered code values

Checklist: voert uw systeem hardcoded instellingen op?

  • Kan een manager een btw-tarief, kortingniveau of verzendingsregel wijzigen zonder een ontwikkelaar te vragen een script te bewerken?
  • Bevatten scripts If ( CompanyName = ... ) of gelijkaardige benoemde entiteitsvoorwaarden?
  • Zijn API-URL's, gegevens of bestandspaden rechtstreeks in scripts getypt in plaats van opgeslagen in een configuratietabel?
  • Heeft het toevoegen van een nieuw magazijn, land of prijsniveau ooit meer dan één script moeten bewerken?
  • Deelt uw testomgeving hardcoded productie-URL's of gegevens met het live systeem?
  • Berekenen historische documenten (oude facturen, oude orders) nog correct nadat een tarief of regel is gewijzigd?

Als u meer dan een of twee vakken hebt ingevuld, is het de moeite waard om een gerichte audit in te plannen voordat de volgende bedrijfsverandering het probleem forceert.

FAQ

Is hardcoding altijd slechte praktijk? Nee. Echte constanten die geen bedrijfsgebruiker ooit hoeft te wijzigen, zijn prima om in code hard te coderen. De fout is hardcoding van bedrijfsregels — alles wat met geld, belasting, geografie of organisatiestructuur te maken heeft — dat voorspelbaar zal veranderen.

Waarom is dit meer van belang in FileMaker dan op andere platforms? Het maakt technisch niet meer uit, maar FileMaker's lage drempel voor snel scripting maakt het vooral gemakkelijk om een waarde rechtstreeks in een script onder tijdsdruk in te typen, omdat er geen compiler of code review is die een tweede blik afdwingt. De flexibiliteit die FileMaker snel maakt om in te bouwen, is dezelfde flexibiliteit die snelkoppelingen onopgemerkt laat doorglippen.

Hoeveel kost het repareren van dit doorgaans in vergelijking met de originele snelkoppeling? In onze ervaring kost het achteraf een juiste instellingenstructuur typisch drie tot vijf keer zo lang als het correct de eerste keer bouwen, omdat u eerst elke plaats waar de waarde werd gedupliceerd moet vinden voordat u deze veilig kunt centraliseren.

Moet elk nieuw project met een instellingenlaag beginnen, zelfs als dit nu onnodig lijkt? Voor elke waarde die aan geld, belasting, geografie of organisatiestructuur is gekoppeld, ja — de up-front kosten van een kleine instellingentabel zijn minuten, terwijl de kosten voor het later retrofit één maanden meten.

Hardcoded instellingen zijn zelden een teken van slechte ontwikkelaars — ze zijn meestal een teken van redelijke snelkoppelingen die niemand is teruggekomen om op te lossen. Als uw team steeds kleine wijzigingen tegenkomt die langer duren dan ze zouden moeten, of u niet zeker bent hoeveel van deze snelkoppelingen in uw huidige FileMaker of ERP-systeem verborgen zitten, kan Loggix u helpen — of dat nu een gerichte audit, herstructurering van een deel van een aangepaste FileMaker-oplossing, opruiming van een API-integratie of eenvoudig een raadplegingssessie is om prioriteiten te stellen wat het waard is om eerst op te lossen.