7min

Tags in dit artikel

, ,

De ontwikkeling van de app van Join Program kent een bijzondere tijdlijn, die zich tijdens (gedeeltelijke) sluiting van horeca en kantoren afspeelt. True sprak met digital agency Endeavour en met Vermaat Groep over de ontwikkeling van de app.

Een centraal programma voor gezond bedrijfseten

“Het programma van Join Program levert gezond eten voor bedrijfscatering, op een nieuwe manier. Drie pijlers staan centraal: ecologisch, sociaal en gezond. In een centrale keuken worden eigen recepten klaargemaakt en naar de locaties en restaurants van bedrijven gebracht”, zegt Mark Snel, Head of Product bij Vermaat Groep, het bedrijf achter Join Program. Hij is daar verantwoordelijk voor de technische doorontwikkeling van het hele tech-ecosysteem en is product owner voor Join Program.

De app van Join Program, ontwikkeld door Endeavour in Angular en beschikbaar voor iOS en Android, is een centraal onderdeel. Mark: “Via de app kunnen medewerkers van onze klanten hun lunch, diner of eten vooraf bestellen. Daardoor is het voor onze klanten makkelijker om in te schatten hoeveel medewerkers op kantoor eten. Hoe beter wij de productie van voedsel op de wens en vraag van medewerkers kunnen afstemmen, hoe minder voedselverspilling.”

De app van Join Program is echter meer dan een ‘simpele’ food app waar medewerkers hun eten kunnen bezorgen. De app kent een flinke complexiteit door een verscheidenheid aan functionaliteiten. Producten kunnen meerdere versies hebben, gerechten zijn gekoppeld aan dag- en weekmenu’s. En de app kent een structuur met verschillende klanten en locaties van deze klanten, die soms meerdere eetgelegenheden per locatie hebben.

App-ontwikkeling tijdens een pandemie

De ontwikkeling van de app kent een bijzondere tijdlijn. Vlak voordat de coronapandemie in maart 2020 uitbrak, was de app klaar voor lancering. Door langdurige en opvolgende lockdowns en thuiswerkadviezen, waren bedrijfsrestaurants en cateraars dicht. Dat heeft een grote impact op die business gehad.

“We zijn toen doorgegaan met de doorontwikkeling van de app zonder ‘m te lanceren. De app is in september 2021 gelanceerd. Pas in maart 2022, nadat de laatste grote coronamaatregelen zijn opgeheven, zien we het aantrekken. Daardoor hebben we nu te maken met een enorm snelle groei aan klanten”, zegt Mark.

“Tijdens de doorontwikkeling hebben we technische componenten veranderd en aangepast, zoals de overstap van een JSON API naar een GraphQL API. Dat helpt ons nu bij het opvangen van de groei aan klanten”, zegt Yoeri Moens, medior software engineer bij digital agency Endeavour. Yoeri werkt vooral aan back-end en datasystemen. Daar is hij ook voor Join Program mee bezig en werkt nauw samen met zijn collega’s front-end developers voor de bouw aan het platform en de app. Met een kernteam van ongeveer 7 mensen werkt Endeavour dedicated aan (door)ontwikkeling van Join Program.

Op zoek naar hosting die past bij schaalbaarheid en groei

“Tijdens het prototypen hadden we de app op één simpele server staan, geschikt om te werken naar een minimum viable product. Daar hadden we geen contactpersoon: alles dat op de server stond, moesten we zelf inrichten, onderhouden en beheren. Met het zicht op de ambities, waarbij Join Program zich ook richt op grote bedrijven, ligt er direct een uitdaging voor de schaalbaarheid”, zegt Yoeri. “Op dat moment kwam True in beeld, waar we bij Endeavour veel digitale producten hebben gehost. Zij helpen ons met technische uitdagingen en nemen alle componenten voor hosting uit handen.”

Flexibele back-end voor veeleisende app

De back-end van de app draait op een up-to-date versie van Laravel. Via de GraphQL API communiceert de front-end met back-end. De front-end is opgebouwd in een cross-platform Angular project in TypeScript. Die compilet naar een native app voor zowel iOS als Android, terwijl developers in één omgeving programmeren.

Het back-office-systeem heeft het team van Endeavour zelf gebouwd. “Voor een third party systeem zaten te veel eisen aan de app en specifieke acties van gebruikers”, geeft Yoeri mee. “Er moet een product-catalogus zijn, inclusief versies van een product. Er moeten menu’s worden opgesteld. Er moet configuratie kunnen zijn van locaties van klanten, waarbij één locatie over meerdere restaurants kan beschikken. En uiteraard moet de app gebruikersbeheer bevatten. De back-end is flexibel en kan in de toekomst ook koppelen met financiële systemen.”

Met een websocket-verbinding beschikt de app over real time data zonder te herladen. “Stel dat er van een product nog één op voorraad is en 5 mensen dit product bekijken. Als het laatste product op voorraad besteld wordt, wil je dat de anderen dat real time in beeld krijgen, zonder te herladen, zodat zij het niet meer in hun mandje kunnen leggen”, zegt Yoeri. Daarvoor hebben we microservices in NodeJS gebouwd, die als API en websocket server fungeert. Deze service zit tussen de back- en front-end van de app en de real time data op telefoons, in.”

Automatisch deployments op Kubernetes dankzij True

Voor schaalbaarheid van app bleek al snel dat containeriseren en deployen op Kubernetes een uitgelezen mogelijkheid was. “In die ontwikkeling hebben we grote stappen gemaakt. Tijdens prototyping was de app nog niet containerised en draaide het op één enkele server. Zoals aangegeven was dat voor de lange termijn niet houdbaar”, zegt Yoeri. “De API hebben we stateless opgezet, om te kunnen schalen met horizontal pod autoscaling. We willen meerdere instances van de API hebben draaien, zodat de app snel blijft als het verkeer enorm toeneemt. Dan red je het niet met één server.”

Yoeri: “Vervolgens hebben we de app eerst op een shared Kubernetes cluster van Endeavour bij True gezet. Al vrij snel kwam het idee voor een apart cluster voor het moederbedrijf van Join Program, Vermaat Groep, waar we de app en alle services voor Vermaat draaien.”

“Endeavour gebruikt al veel van de services en stacks die True aanbiedt. De standaarden waarmee ze gewend zijn te werken, zijn ook in geïmplementeerd in het cluster voor Vermaat”, zegt Daniel Koopmans, Innovation Officer bij True. “Vermaat heeft daarmee meer flexibiliteit om apps te draaien. De uniforme manier van opzetten van het cluster maakt het makkelijker voor zowel Endeavour als voor True om mee te werken.”

Het team heeft de app in fases klaargemaakt voor het nieuwe cluster. De app is in containers gezet met Docker images, vanaf een standaard door Endeavour zelf ontwikkeld. “Daarnaast hebben we met onze DevOps collega’s en engineers van True gekeken hoe de omgeving in Kubernetes eruit moest komen te zien. Deployments gaan nu automatisch met GitLab pipelines, Helm charts en een up-to-date Kubernetes-omgeving dankzij True. We hadden er een beetje ervaring mee en maar hebben dit dankzij True verder kunnen professionaliseren.”

Klaar voor piekverkeer

Voor de app van Join Program is schaalbaarheid en opvangen van piekverkeer extreem belangrijk. “Veel gebruikers bestellen hun eten vooraf; een deel doet dat pas tijdens lunchtijd. Tussen 10 en 13 uur zien we veel meer verkeer en bestellingen, terwijl het verkeer na 20 uur heel erg afneemt en er soms helemaal geen verkeer meer is”, zegt Mark. Yoeri: “Neemt het verkeer toe, dan blijft de app draaien. Ook als er meerdere klanten met honderden gebruikers tegelijk aangesloten worden. De hosting van Kubernetes bij True speelt daar een grote rol in.”

Guido Laout, Head of Customer Success bij True, vult aan: “Dit is een project met een enorme zekerheid op piekverkeer. Over het algemeen zal de app een relatief klein aantal gebruikers hebben, maar op piekmomenten zijn dit duizenden gelijktijdig. Daarom hebben we een opzet gekozen die Vermaat de grootst mogelijke flexibiliteit geeft en waarmee proactief opschalen een kwestie van seconden is.”

“Door gebruik van software voor monitoring en grafische weergave van monitoringsdata, proberen we piekverkeer ook voor te zijn”, geeft Yoeri mee. “Wat is de server responsetijd in zowel de productie- als acceptatie-omgeving, zit daar een verschil in en op welk moment wordt het drukker? Op die manier hebben we beter beeld van en inzicht in knelpunten, om juist daar te optimaliseren.”

Mark: “Door performance flink onder de loep te nemen, knelpunten te identificeren en aan te passen, is de app sneller en de laadtijd korter. Het is voor ons belangrijk dat zo te houden als het aantal gebruikers flink omhooggaat.”

Dit is een ingezonden bijdrage van True. Via deze link vind je meer informatie over de mogelijkheden van het bedrijf.