Slik takla Kolonial.no korona-trykket

- Vi møtte ganske umiddelbart flaskehalser, forteller utviklerne.

Utviklerne i Kolonial.no opplevde en voldsom økning i trafikk da koronaen nådde Norge tidligere denne våren. 📸: Kolonial.no
Utviklerne i Kolonial.no opplevde en voldsom økning i trafikk da koronaen nådde Norge tidligere denne våren. 📸: Kolonial.no Vis mer

Da koronapandemien nådde Norge holdt mange seg unna matbutikken - enten i frykt for å få, eller påføre andre, smitte.

For mange ble løsningen mat levert på døra, for eksempel gjennom Kolonial.no.

- Vi hadde sprengt kapasitet, og fulle leveringslister syv dager framover, forteller utvikler Herman Schistad i Kolonial.no til kode24.

Men selskapet takla trykket - gjennom strategi, bemanning og ikke minst; koding.

Det ble mange medieoppslag av trykket Kolonial.no opplevde da koronaen stod på som verst.
Det ble mange medieoppslag av trykket Kolonial.no opplevde da koronaen stod på som verst. Vis mer

Kolonial.no sin rolle

- Vi forsto at vi hadde en utrolig viktig rolle i samfunnet. Vi var for mange redningen på å sitte i isolasjon, og mange eldre har brukt oss mye, fortsetter Schistad.

Så Kolonial.no var aldri i tvil om at de ville møte etterspørselen - det gir selvfølgelig økonomisk mening, også. Men nøyaktig hvordan de skulle gå fram, var aldri selvsagt.

«Vi ville fortelle om Kolonial.no, uten å virke som vi utnyttet situasjonen.»

- For hvilken “rolle” skulle vi spille? Hvordan skulle vi posisjonere oss som merkevare? Skulle vi møte kundebehovet ved å gjøre det enda enklere å finne hermetikk og dopapir, eller ville det være å oppfordre til hamstring? Vi ville fortelle om Kolonial.no, uten å virke som vi utnyttet situasjonen, forklarer han.

Men veien ble til mens de gikk, og snart hadde de gått fra 500 til 700 ansatte, med blant annet flere sjåfører henta fra koronautsatte bransjer som taxi- og reiselivsnæringa.

Men også utviklerne ble viktige - for også den tekniske biten skulle snart settes på prøve.

Kolonial.no måtte få 200 ekstra personer til å jobbe for seg - blant annet taxisjåfører som ikke hadde stort å gjøre når alle plutselig skulle holde seg hjemme. 📸: Kolonial.no
Kolonial.no måtte få 200 ekstra personer til å jobbe for seg - blant annet taxisjåfører som ikke hadde stort å gjøre når alle plutselig skulle holde seg hjemme. 📸: Kolonial.no Vis mer

Utvikla nytt produkt

- Vi er ikke dogmatiske rundt dette, men generelt sett så er programvare i Kolonial.no skrevet i Python. Web-applikasjonene våre er skrevet i Django, vi bruker PostgreSQL som database, og på frontend, om vi ønsker mer interaktivitet enn det HTML og CSS gir oss, så bruker vi enten plain Javascript eller React og Typescript, forteller Schistad.

Og med denne verktøykassa var noe av det første Kolonial.no gjorde å lansere et nytt produkt; "Ferdigpakket" - en egen nettbutikk som solgte ferdig pakkede esker med mat, for å lettere kunne gjennomføre leveringer.

- Vi fikk en ny nettbutikk, med logistikk og distribusjon separat fra vårt eksisterende produkt, på under 48 timer fra idé til lansering, forteller Schistad, som tipser om et langt Medium-innlegg om prosessen.

Men trafikken inn til Kolonial.no sine tjenester var fortsatt enorm, og bød på sine egne utfordringer.

Omrokkerte ressurser

Kolonial.no kjøres fra flere servere på flere steder rundt om i Oslo, og fra Google Cloud.

- Nettbutikken hostes på tvers av en håndfull Ubuntu-servere rett på jernet, forteller utvikler Torvald Lekvam i Kolonial.no, og ramser opp en stack beståend av HAproxy, Nginx, Gunicorn og PostgresSQL.

- Vi taket ganske umiddelbart i flaskehalser knyttet til master-databasen vår, avslører han videre.

Tjenesten skal aldri ha gått ned, men brukerne kunne oppleve at spørringer til databasen tok opp mot 10 sekunder på det verste. Den umiddelbare løsningen ble å stokke om på spørringene, til slave-databaser som ikke ble like mye brukt.

- Med bedre utnyttelse på databasenivå, møtte vi også på flere mindre flaskehalser i hvordan våre grupper av Gunicorn-workere var balanserte, forteller Lekvam videre.

Men også her lot problemene seg løse ved å omrokkere ressursene til de ulike worker-gruppene i den monolittiske Django-applikasjonen.

- På lageret er det en del krav til ekspertsystemer og robotikk, så her brukes teknologier som asyncio og GraphQL, forteller utviklingssjef Herman Schistad. 📸: Kolonial.no
- På lageret er det en del krav til ekspertsystemer og robotikk, så her brukes teknologier som asyncio og GraphQL, forteller utviklingssjef Herman Schistad. 📸: Kolonial.no Vis mer

Cache og lasttester

- Parallelt jobbet vi også med å slå av unødvendige features knyttet til A/B-testing, fortsetter Lekvam, da disse eksperimentene ikke nødvendigvis prioriterte ytelse.

- Hordene av nye brukere gjorde også resultatene til flere av eksperimentene våre mindre signifikante, legger Lekvam til.

Kolonial.no-utviklerne jobba dessuten med bedre utnyttelse av cachen, og bygde etterhvert også en lasttester for å forutse eventuelle problemer videre i koronatida.

- Man klarer aldri helt å simulere tusenvis av unike brukere, men vi fant lastprofiler som kom ganske nære. På denne måten fant vi vår neste flaskehals med PgBouncer, og endte opp med å endre på noen strategier.

Utviklerne til Kolonial.no ble tidlig satt på hjemmekontor, men dette skal ikke ha skapt noen større problemer for selskapet. 📸: Kolonial.no
Utviklerne til Kolonial.no ble tidlig satt på hjemmekontor, men dette skal ikke ha skapt noen større problemer for selskapet. 📸: Kolonial.no Vis mer

Hjemmekontor i tilegg

Det har med andre ord vært en historisk travel tid for Kolonial.no. Og samtidig med dette, har de fleste utviklerne sittet på hjemmekontor fra onsdag 11. mars.

- Flere ansatte hadde vanskelige situasjoner på hjemmefronten. Flere var naturlig nok redde for seg selv, familien sin og nære venner, forteller Schistad.

«Vi opplevde at det var best å se på de ansatte som at vi levde i ulike tidssoner.»

- Vi har også mange ansatte med små barn, som måtte finne en balanse mellom barnepass og det å levere i en av våre mest krevende tider som selskap. Vi opplevde at det var best å se på de ansatte som at vi levde i ulike tidssoner, og respektere dette: De uten barn jobba typisk på morgenen og dagen, og de med barn brukte mer tid på kvelden.

Kolonial.no skal ha lært fra selskaper som Basecamp, GitLab og Doist, som har langt erfaring med jobbing fra hjemmekontor. Blant annet bestemte de seg for å ikke "emulere et fysisk kontor i en digital verden", som Schistad sier.

Det betydde blant annet mindre møter, mer skriftlig kommunikasjon og fortsatt fokus på å la folk kunne konsentrere seg om arbeidet - uten sosiale distraksjoner.

- Samtidig har det vært viktig med det sosiale elementet, avslutter Schistad.

- Vi har hatt oppdateringer fra ledelsen tre ganger i uken, fredagspils, demoer på tvers av hele avdelingen, spist lunsjer sammen, også bruker vi en Slack-bot for å parre sammen ansatte for å drikke kaffe sammen.