De pakketautomaten van PostNL bieden gebruikers al ruim acht jaar de mogelijkheid om 24/7 pakketten op te halen, te versturen en te retourneren. Het netwerk van ’Automated Parcel Lockers’ (APL) is de afgelopen jaren flink uitgebreid. Waar eind 2020 ‘slechts’ 125 pakketautomaten in Nederland stonden, zijn het er in 2023 meer dan 700. Naast verdere opschaling heeft PostNL de ambitie om de automaten ook open te stellen voor andere pakketvervoerders. Wat zijn de technologische vraagstukken die bij zo’n groot project komen kijken?
Met Martijn Rentmeester (platform owner APL) en Berry den Hartog (tech lead APL-platform) werpen we een diepgaande blik op alles wat komt kijken bij de realisatie van dit project. Martijn: “De pakketautomaten van PostNL zijn in 2015 gerealiseerd, naar aanleiding van een winnend idee uit de interne ideeënbus.” In 2015 zijn de eerste automaten geplaatst, en het aantal is de jaren erop uitgebreid tot 125 APL’s in 2021. “Het werd gezien als de ‘brievenbus van de toekomst’ en dat is het ook echt. In 2021 hebben we een extern onderzoek uit laten voeren om te zien wat we nog meer konden doen met de bestaande APL’s. Daar is de aanbeveling uit voortgekomen om de pakketautomaat open te stellen voor andere partijen.”
Op basis van deze aanbeveling is PostNL gestart met de ontwikkeling van een ordermanagementsysteem. De livegang staat gepland voor april/mei. Vanaf dan is het dus ook voor andere pakketvervoerders mogelijk om gebruik te maken van de pakketautomaten van PostNL. Ze kunnen orders van klanten in de kluisjes plaatsen, en orders ophalen, bijvoorbeeld bij retouren. Daarnaast mogen klanten van andere vervoerders via de APL’s van PostNL pakketten versturen.
De opstart en uitvoering van het project
Direct na de aanbeveling die uit het externe onderzoek voortvloeide, is het voortraject voor de openstelling gestart. Al vroeg in dit traject is Martijn ingevlogen. “Als platform owner trek ik de kar, vertaal ik wensen in oplossingen en draag ik de verantwoordelijkheid. Het platform wordt momenteel nog door externen gebouwd, maar de ambitie is om in de tweede helft van dit jaar uiteindelijk voor self-engineering te gaan. Wij wilden wel al dat de leiding op technisch vlak door PostNL wordt genomen. Dat is waarom Berry is binnengekomen.”
Berry: “Ik stuur het team van developers aan. Ongeveer de helft van de tijd programmeer ik; de andere helft overleg ik veel met tech leads van andere afdelingen en het devops-team. Op dit moment werken we met vijf mensen aan het refinen van de functie-eisen van klanten. Martijn bepaalt wat er gebouwd gaat worden, en wij kijken hoe we dit kunnen uitvoeren. We focussen ons op serverless oplossingen en ontwikkelen die op de cloudomgeving van AWS, onze cloudprovider.”
“We ontwikkelen onze code samen via GitHub, waarbij we via GitHub-actions onze code deployen naar AWS”, vervolgt Berry. “Alles is volledig geautomatiseerd, wat betekent dat als we een git commit doen, hij wordt gereviewd, door de CI/CD-pijplijnen gaat en automatisch op AWS wordt gedeployed. We voeren code quality checks en security checks uit voordat iets in productie mag. Iedere developer krijgt een eigen ontwikkelomgeving per PullRequest (PR). Dit zorgt ervoor dat we makkelijk onze code kunnen testen in de cloud. Vervolgens gaan we naar de acceptatie-omgeving, waar we testen of we goed integreren met externe partijen. Als de acceptatietest goed gaat, zetten we de change door naar productie.”
“We checken alles wat we maar kunnen checken. We gebruiken Checkov om onze IaC (Infrastructure as Code) te controleren voor misconfiguraties, SonarCube om de codekwaliteit te controleren, Cucumber om flow-tests uit te voeren, en Jest voor onze unit- en broad integration-tests. Daarnaast controleren we natuurlijk de test coverage. We gebruiken Husky en Prettier om precommit-checks te doen op de coding style. Verder is het project ontwikkeld in typescript, waarbij we de striktste instellingen gebruiken. We willen de hoogste standaard en kwaliteit leveren.”
Wat is de huidige stand van zaken?
Berry: “Vrijwel alle functionele features staan op dit moment in de acceptatieomgeving. We zijn nog een paar dingen aan het bouwen, zoals de non-functionals. Denk daarbij aan disaster-recovery en monitoring. We hebben hoge eisen gekregen voor recovery point objective (rpo) en recovery time objective (rto), we moeten hier dus veel voor inregelen en soms zelfs veranderingen in de architectuur doorvoeren. Ook hebben we eisen op responstijden van in de 100ste ms. Dat kan een uitdaging zijn met serverless, omdat de responstijd snel kan oplopen.”
“Monitoring en disaster recovery zijn zaken die we echt goed geregeld willen hebben voordat we naar productie gaan. We willen precies zien wat er gebeurt en waarom; enerzijds omdat ons devops-team grip wil hebben op de applicatie, en anderzijds omdat de klant hoge verwachtingen heeft met betrekking tot de betrouwbaarheid ervan. Een belangrijk onderdeel voor het devops-team is het opzetten van incident management: wat zijn de te nemen stappen als er iets gebeurt wat we niet verwachten? Wie wordt er wakker gebeld? Dat zijn we allemaal aan het uitdenken en inrichten.”
Technische uitdagingen
Het meest uitdagende aspect van het openstellen van APL is het goed uitdenken van het event-model in combinatie met persistent state. Daarnaast zijn de kluisjes een stuk hardware waar klanten mee omgaan; er zijn dus veel interacties. Dit zorgt voor een hoop edge cases, zoals bijvoorbeeld een defecte locker, het verkeerde pakket in een kluis, of het ontbreken van een pakket. Hoe zorg je ervoor dat je hier goed mee omgaat in de applicaties? Dit vraagt om een defensieve manier van programmeren, waarbij vooraf geanticipeerd wordt op mogelijke problemen.
Berry: “We proberen alles zoveel mogelijk event driven te laten werken. We houden een state bij van elke booking. Het lastige is om de events en states zo goed mogelijk gematched te houden. We hebben geprobeerd dit complexe speelveld zo goed mogelijk te simplificeren. Nu is het een kwestie van kijken en ervaren hoe vaak bepaalde events voorkomen in productie, en of we nog onverwachte events krijgen.”
Martijn: “Een andere uitdaging waar we mee te maken hebben, is de rol die PostNL in het hele proces heeft. We zijn enerzijds exploitant van een pakketautomaat, maar anderzijds ook de vervoerder die pakketten in de lockers legt. Het is heel belangrijk om die twee verantwoordelijkheden duidelijk te scheiden.”
“Vanuit de rol van exploitant wil je dat het systeem voor alle klanten efficiënt en eerlijk werkt. Daarom hebben we een 'first-come first-serve'-principe. Dit betekent dat wie het eerste zijn pakket digitaal aanmeldt, een plekje in de kluis krijgt. Ook heb je als exploitant te maken met issues waarbij er iets kapot gaat of verkeerd loopt. In zulke situaties moet je zorgvuldig omgaan met pakketten van je klanten, en daarin maken wij geen onderscheid tussen een PostNL-pakket en het pakket van een andere partij.”
Berry voegt nog twee belangrijke uitdagingen toe aan het lijstje: kosten- en logistieke efficiëntie. “De open situatie biedt een kans om logistieke efficiëntie toe te gaan passen door ritschema’s in kaart te brengen. Zo voorkom je teveel op en neer rijden. Als een automaat bijvoorbeeld maar één pakket bevat van een ander postbedrijf, terwijl andere APL’s meerdere pakketten van dit bedrijf bevatten, dan is het mogelijk dat de PostNL-chauffeur het pakket meeneemt als hij hier toch langs moet. Hij laat het vervolgens achter bij de locker met de meeste pakketten. Dat scheelt weer een extra rit voor een andere pakketvervoerder.”
“Daarnaast zijn er belangrijke afwegingen gemaakt op het gebied van kosten, non-functionele wensen en werkbaarheid voor het devops-team. We maken gebruik van DynamoDB, waarbij we events kunnen streamen vanuit DynamoDB-streams of Kinesis (Kafka). Uiteindelijk moesten we voor Kinesis kiezen omdat we een langere retentie wilden dan wat DynamoDB-streams konden leveren. Deze keuze is gemaakt omdat we als devops-team rustig willen slapen in het weekend, zonder dat we data kwijt zijn. Verder hebben we ook een analyseplatform gebouwd door middel van een Aurora-database in plaats van een RedShift-database, waarbij je kan bevragen wat er gebeurt in onze systemen. De reden om voor Aurora te gaan, was voornamelijk dat het in onze situatie veel goedkoper was. Onze Redshift-database bracht hoge kosten met zich mee, door de vele connecties die onze lambdas maakten.”
Klantervaring en maatschappelijke betrokkenheid
PostNL verwerkt miljoenen poststukken en pakketten per dag. Martijn: “Welke vraag of uitdaging er ook komt vanuit de maatschappij, we vinden altijd een weg om ermee om te gaan. IT is hier een belangrijk onderdeel in. We lopen vaak vooruit op de ontwikkelingen. Zo was PostNL het eerste grote bedrijf in Nederland dat volledig overstapte op de cloud.”
In het APL-project staan klantervaring en maatschappelijke betrokkenheid centraal. Door de PostNL-pakketautomaten open te stellen voor andere pakketvervoerders, wordt het voor klanten nog gemakkelijker om hun pakketten op te halen of te verzenden op een moment dat ze zelf kiezen, 24 uur per dag, 7 dagen in de week. Daar komt bij dat PostNL met het delen van de APL’s een groene bijdrage levert aan de maatschappij. Berry: “Enerzijds doordat er niet overal kluisjes staan van verschillende postbedrijven; dat wil de maatschappij niet en er is ook geen ruimte voor. Anderzijds versterkt het openstellen de samenwerking tussen PostNL en andere postbedrijven, wat zorgt voor logistieke efficiëntie en minder uitstoot.”
Een open en uitdagende bedrijfscultuur
Werken bij PostNL is vooral interessant vanwege de inhoud, vindt Martijn. “Gezellig is het zeker ook, maar mensen werken hier toch vooral vanwege de technische uitdagingen, de snelle en continue ontwikkelingen en de maatschappelijke bijdrage die ze kunnen leveren. Je moet hier wel tegen kunnen: de gestelde eisen zijn hoog en daarom moet je flexibel zijn.”
Berry sluit af: “Ik werk pas sinds augustus 2022 bij PostNL en de organisatie heeft me absoluut verbaasd. Er is veel ruimte voor eigen inbreng en er wordt gebruikgemaakt van de nieuwste technologieën. Er is een cultuur van engineering excellence; hierdoor is er veel motivatie vanuit de engineers om de mooiste oplossingen neer te zetten. Dat is precies wat ik zocht in een baan.”
PostNL werkt voortdurend aan het vergroten van zijn in-house IT-capaciteit. Wil je meer weten over werken bij PostNL en ben je benieuwd of er vacatures openstaan die passen bij jouw profiel? Check het hier. Daarnaast is het bedrijf, vanwege de ambitie van self-engineering voor APL, specifiek op zoek naar twee software-engineers. Bekijk hier de vacature(s).
Dit artikel is geen redactioneel artikel, maar gesponsord en tot stand gekomen dankzij PostNL en Tweakers Partners. Dit is de afdeling binnen Tweakers die verantwoordelijk is voor commerciële samenwerkingen, winacties en Tweakers events zoals meet-ups, Developers Summit, Testfest en meer. Bekijk hier het overzicht van alle acties en events. Mocht je ideeën met ons willen delen over deze vorm van adverteren, dan horen wij dat graag. Hierover kun je met ons in gesprek via [Discussie] Reclame algemeen].