Kunden skulle ta ut millioner: "You just ordered one thousand litres of milk!"

Milrab-CTO-en om hvorfor du skal være forsiktig med midlertidige feilmeldinger.

"Høy sigarføring og mye medvind i workshop med ledelsen i New York kort tid før markedsverdien var på sitt høyeste" skriver Ole Morten Faltinsen. Senere gikk alt galt. 📸: Privat
"Høy sigarføring og mye medvind i workshop med ledelsen i New York kort tid før markedsverdien var på sitt høyeste" skriver Ole Morten Faltinsen. Senere gikk alt galt. 📸: Privat Vis mer

Å gjøre feil, trampe i klaveret, sitte med skjegget i postkassen eller bæsje på leggen, er naturlig.

Dog, som utvikler, har en jobbmessig bæsj på leggen potensial til å propagere til relativt store proporsjoner.

Som den gangen jeg var utvikler og prosjektleder for frontend-prosjektet til en P2P-bank, en formidler av mellom-menneskelige lån, for noen år siden. Siden den gang har nevnte P2P-bank både peaket på én milliard kroner i markedsverdi, for å deretter bli slått konkurs.

I hvilken grad denne historien er relatert til akkurat det utfallet er det vanskelig å si noe konkret om.

Men helt ubetydelig er den nok ikke.

«Kildekode-versjoneringen ble håndtert ved å ta vare på hver ZIP-fil som ble lastet opp.»

Versjonering før Git

Frontend-teamet bestod av hele to stykk unge, lovende og overarbeidede utviklere, meg inkludert.

Jobben bestod av å konvertere frontend fra en WordPress-basert monolitt (ja, du leste riktig, WordPress som frontend for en bank), til et custom PHP-CMS som snakket med backend via et REST-API.

Som en digresjon kan jeg nevnte at Git på det tidspunktet var gresk for mange, oss inkludert, så vi så oss nødt til å bygge en egen versjonering og deployment pipeline som i korte trekk bestod av av å zippe kodebasen, laste opp via et web GUI, hvor serveren pakket ut og erstattet PHP-filene som kjørte på Apache.

Kildekode-versjoneringen ble håndtert ved å ta vare på hver ZIP-fil som ble lastet opp.

Selvfølgelig. Skuddsikkert.

Dashboardet vi lagde for långivere med den skjebnesvangre boksen for uttak nederst til venstre.
Dashboardet vi lagde for långivere med den skjebnesvangre boksen for uttak nederst til venstre. Vis mer

"You just ordered one thousand litres of milk"

Fra ledelsen i denne P2P-banken var det over snitt mye armer og bein. Og denne frontenden skulle selvsagt ha vært klar dagen før den ble bestilt, selv om backenden fortsatt var delvis på tegnebrettet.

Vi lot oss presse, og så oss nødt til å dra en all-nighter med kaffe, koding og korpsleir-aktig stemning flere ganger enn hva som antageligvis er sunt.

I sønvdeprivasjonens navn, måtte vi finne underholdning i jobben i seg selv. Når koffein og kodevitser ikke lenger gjorde nytten, var det én ting som alltid økte moralen i leiren: «kamelåså»-sketsjen fra «Uti vår hage».

Du vet; den hvor melkemannen er den eneste som kommer godt ut av det, fordi alle de danske gutterale lydene i hans ører, med tydelig overlegg, tolkes som en bestilling av melk. Og på spørsmål med tanke på det moralske rundt dette, responderer med: «You just ordered one thousand litres of milk».

God stemning.

Så god stemning, at vi i de små timer begynte å bruke nettopp den responsen som en placeholder for alle feilmeldingene som skulle vises til sluttbruker, når frontend fikk en feil fra backend uten feilkode.

Tross alt, den frasen er jo enkel å søke opp på tvers av filer for å senere erstatte med en mer passende feilmelding, sant?

«Ledelsen fikk krøll på trusene, investoren fikk verken penger eller melk.»
Ole Morten Faltinsen er i dag CTO i nettbutikken Milrab.com.
Ole Morten Faltinsen er i dag CTO i nettbutikken Milrab.com. Vis mer

"FIKS! DETTE!! NÅ!!!"

Noen blå poser rundt øynene rikere, fikk vi pusha ut siste hånd på verket, og sporenstreks fikk noen titalls tusen brukere nyte godt av vår sirlig inntastede spaghettikode.

Men så, en ellers deilig fredags ettermiddag, tikket det inn en mail fra ledelsen.

På dette tidspunktet er det verdt å nevne at det allerede hadde etablert seg noe uro i rekkene. En gruppe långivere hadde funnet frem høygaflene og startet opprør. Det tok for lang tid å få ut pengene de en gang hadde satt inn. Mat for ledelsen, ikke oss på gulvet.

Media hadde plukket opp saken, og selskapets rykte stod på spill.

Da hadde det passet dårlig om en av Norges største bjellesau-investorer, med media i ryggen, hadde fått en sånn midt på treet useriøs feilmelding, ved forsøk på uttak av en klekkelig sum kronasjer, eller?

En annerledes måte å ønske god helg fra ledelsen på. Kan se ut som noen har drukket sur melk til frokost.
En annerledes måte å ønske god helg fra ledelsen på. Kan se ut som noen har drukket sur melk til frokost. Vis mer

Joda, Murphy's law gjaldt her også.

Den opprørske investorgruppen fikk vann på mølla, media fikk en sensasjonell overskrift, ledelsen fikk krøll på trusene, investoren fikk verken penger eller melk, men undertegnede fikk den største dosen voksenkjeft så langt i livet.

Uplanlagte påskeegg

Hva kan man lære av slikt?

Siden ovennevnte fadese fant sted, har jo versjonering i Git, pull requests og bedre utviklerverktøy gjort jobben enklere med å kontrollere hva som blir tatt inn produksjonsmiljøet.

Likevel; det eneste som er sikkert er at ting vil gå galt, gjerne på verst tenkelige tidspunkt. Her har undertegnede mange eksempler, men det får bli en annen historie.

Man kan dog redusere sjansene for at det skjer, for eksempel ved å sette tydeligere grenser for seg selv, og ikke la seg selv presse inn i situasjoner hvor man ikke klarer å levere det beste arbeidet man har forutsetninger for å gjøre.

Har jeg sluttet å flette inn useriøse placeholders som kan nå ut til sluttbruker i koden min? Tja. Noen gleder må man jo ha. Og easter-eggs er jo en greie, har jeg forstått.

Men det går kanskje et skille mellom planlagte og uplanlagte påskeegg.