Toen TST Terschelling ons vroeg het papieren werkproces van hun chauffeurs te vervangen, was de opdracht helder: sneller, digitaal en betrouwbaar. Het werd een van de technisch meest veeleisende projecten die we hebben opgeleverd.
De randvoorwaarde die alles bepaalde
Op de Waddeneilanden is de mobiele dekking wisselend. Veerboten maken twee keer per dag de overtocht. Een chauffeur die om zes uur ’s ochtends goederen laadt op de kade, kan niet bij elke barcodescan wachten tot een verzoek naar de server is verstuurd en beantwoord. De app moest volledig offline werken, als normale gebruikswijze en niet alleen als noodoplossing.
Die ene randvoorwaarde bepaalde elke keuze in de architectuur.
Wat Transporter doet
Transporter ondersteunt de chauffeur gedurende de hele werkdag, met:
- Inloggen en toewijzing van routes
- Vrachtwagens laden met barcodescanning en controle van aantallen
- Aflevering per stop, met afhandeling van afwijkingen
- Digitale afleverbewijzen, inclusief het vastleggen van handtekeningen
- Afsluiten van de route aan het einde van de dag en synchronisatie met de backend
Elke handeling wordt eerst lokaal verwerkt. Het apparaat bewaart de actuele toestand, zet gebeurtenissen in een wachtrij en synchroniseert zodra er verbinding is. De essentiële werkzaamheden hoeven nooit op een netwerkverzoek te wachten.
De gebruikte technologie
We bouwden Transporter als een native C#-applicatie voor Android-apparaten van Zebra. Zebra-handhelds zijn de standaard voor scanning in magazijnen en logistiek. Ze zijn bestand tegen vallen, stof, temperatuurwisselingen en onafgebroken gebruik, ploegendienst na ploegendienst. Hun ingebouwde barcodescanners werken een orde van grootte sneller dan scannen met de camera van een gewone smartphone.
De backend bestaat uit een PHP REST-API met MySQL. De gegevens op het apparaat en de server worden op elkaar afgestemd via een synchronisatiemodel op basis van gebeurtenissen: het apparaat houdt een logboek van handelingen bij, de server verwerkt die op volgorde en conflicten worden volgens vaste regels opgelost. De chauffeur krijgt op een cruciaal moment nooit een laadindicator te zien.
Wat we hebben geleerd
Offline werken als uitgangspunt klinkt eenvoudig, totdat het in alle situaties goed moet functioneren. Elk uitzonderingsgeval dat in een permanent verbonden app eenvoudig is, wordt een ontwerpvraagstuk. Wat gebeurt er als een chauffeur hetzelfde artikel twee keer op verschillende apparaten scant? Wat als de routegegevens op de server zijn gewijzigd sinds de laatste synchronisatie? Wat als de klok van het apparaat verkeerd staat?
We besteedden veel tijd aan het synchronisatieprotocol en de terugkoppeling in de interface. De chauffeur moet altijd weten welke routegegevens leidend zijn, ook als die drie uur geleden tijdens een overtocht voor het laatst zijn bijgewerkt.
Het resultaat is een app waarmee sinds de introductie dagelijks routes worden gereden, zonder één probleem met de gegevensintegriteit.
Het resultaat
TST Terschelling verving een werkproces met klembord en papier dat jarenlang in gebruik was. De laadtijd per vrachtwagen nam aanzienlijk af. Discussies over afleverbewijzen verdwenen, omdat iedere levering nu een ondertekend digitaal bewijs met tijdstempel heeft. De medewerkers op kantoor kunnen de voortgang van routes direct volgen en hoeven niet meer te wachten tot chauffeurs bellen.
Dit soort projecten herinnert ons eraan waarom we software bouwen: om onnodige obstakels weg te nemen uit werk dat ertoe doet.