Techniek
Tools & Technology

De derde app was de snelste

Bij dezelfde aannemer ging vorige week de derde app live. Ze kostte het minste tijd, en niet omdat ze de eenvoudigste was.

Drie appschermen, de derde het snelst gebouwd

Eerder schreef ik hier dat we bij een aannemer eerst de bron hebben moeten bouwen. Er was geen data, dus hebben we drie kleine dingen gemaakt: een app om voorraad te tellen, een app voor werfopname, en een planbord.

Vorige week ging dat planbord live. Van de drie heeft het het minste tijd gekost. Dat is opmerkelijk, want het is niet het eenvoudigste. Er wordt in gesleept, balken lopen over weken heen, en vier ploegen moeten er tegelijk in kunnen werken.

De reden is banaal. We hebben er bijna niets nieuws in gestopt.

Wat we niet opnieuw gemaakt hebben

Het planbord moest achter een code. Kantoor heeft geen accounts en wil die ook niet. Dat slot bestond al in de werfopname-app: een gedeelde code, een ondertekend cookie dat een jaar meegaat, en een portier die voor elke pagina staat. Overgenomen in een halfuur.

Er moest materiaal besteld kunnen worden per werf, met een bestelbon als PDF. Die bestelbon bestond al in de voorraad-app, met de leveranciers en de opmaak erbij. Overgenomen.

En de offerte van een werf moest zichtbaar zijn. De koppeling met het facturatiepakket bestond al, inclusief één pijnlijk detail: dat pakket wil bij het ophalen van een bestand wél een sleutel maar géén partijnummer, terwijl datzelfde partijnummer elders juist verplicht is. Stuur je het toch mee, dan krijg je een weigering die niets uitlegt. De eerste keer kostte dat een halve dag. De tweede keer nul minuten, omdat het opgeschreven stond.

Alle drie draaien op hetzelfde platform, Vercel, met dezelfde database erachter. Een nieuwe app online zetten is daar geen project meer, maar een kwestie van minuten.

Waarom dat kon

Niet omdat code kopiëren makkelijk is. Code kopiëren is altijd makkelijk. Het probleem is dat je een half jaar later niet meer weet waaróm iets stond zoals het stond, en dan neem je de vorm over zonder de reden.

In elk van die drie projecten zit een bestand waarin dat staat. Niet wat de code doet, want dat lees je in de code. Wel waarom het cookie een jaar geldig blijft, namelijk omdat een verkoper op een dak zonder bereik anders vastzit. Waarom er geen prijzen op de bestelbon staan, namelijk omdat prijzen verouderen en de leverancier ze zelf invult. En waarom een datum als tekst uit de database komt.

Dat laatste is het beste voorbeeld.

De fouten zaten nooit in het moeilijke stuk

Een datum in een database is een dag op de kalender, geen moment in de tijd. Maar veel systemen maken er middernacht van, en middernacht in België is tien uur 's avonds de dag ervóór in wereldtijd. Wie dat verkeerd uitleest, ziet 28 september staan terwijl er 29 september bedoeld is.

Die fout dook in dit project twee keer op. Eerst bij de planning zelf, later bij de datum van een offerte. De tweede keer was ze in vijf minuten gevonden, precies omdat de eerste keer opgeschreven was.

Zo ging het met bijna alles wat misliep. Nooit het slepen, nooit het rekenen met werkdagen. Wel een technisch controlepunt dat de naam van de database prijsgaf aan iedereen die het adres kende. Dat is gevonden door het op te vragen vanaf een browser zonder enige aanmelding, in plaats van aan te nemen dat het afgeschermd was.

En de offerte uit het facturatiepakket bleek geen artikellijst te zijn maar één blok lopende tekst. Het plan om daar automatisch een materiaallijst uit te halen kon dus meteen de prullenmand in. Dat is beter dan het bouwen en het daarna ontdekken.

Update oktober 2026: wat met een vaste regel niet lukte, lukte later wel met AI. Een assistent in het planbord leest de lopende tekst en stelt een materiaallijst voor, die kantoor nakijkt en bevestigt. Meer daarover in heb je Fabric nodig?

Wat we bewust niet ingevuld hebben

Op de bestelbon die de app vandaag maakt, staat nog letterlijk dit:

BTW [nummer invullen]
[straat en nummer invullen]
Klantnr. [klantnummer invullen]

Dat is geen slordigheid. Niemand kende die nummers op het moment dat de bon gebouwd werd, en een verzonnen klantnummer op een bestelling naar een leverancier is erger dan een zichtbaar gat. Een gat vraagt erom ingevuld te worden. Een plausibele verzinning wordt nooit meer opgemerkt.

Die regel houden we in alle drie de apps aan: wat onbekend is, blijft zichtbaar onbekend.

Waar het op neerkomt

Voor een kmo is dit het verschil tussen "dat doen we ooit eens" en het gewoon doen. De eerste app is duur, want je bouwt alles eromheen mee. De tweede is goedkoper. De derde kostte een fractie.

Dat werkt alleen als je bij elke beslissing één zin opschrijft over het waarom. Dat is geen documentatie in de zware zin. Geen handleiding, geen schema's. Eén bestand per project waarin staat wat je de volgende keer niet opnieuw wil uitzoeken.

Wat het oplevert is geen netheid. Het is snelheid.

Gregory Moureau