Den dagen jag deployade en bugg till produktion: en historia
Det var en helt vanlig fredagseftermiddag på kontoret i centrala Stockholm. Klockan närmade sig 15:30. De flesta av mina kollegor hade redan stängt ner sina tyngsta utvecklingsmiljöer och börjat samlas i fikarummet för att fira in helgen med kanelbullar och kaffe. Jag satt kvar vid mitt skrivbord och tittade på en kodändring. Det var bara en liten ändring i vår betalningsmodul – en snabb buggfix som skulle optimera hur vi hämtade användardata. "Det här tar två minuter att få ut," tänkte jag. Utan att be om en formell kodgranskning, klickade jag på knappen för att driftsätta (deploya) koden direkt till produktion. Det var mitt livs största, och mest lärorika, misstag som utvecklare.
När skärmen blev vit
Det tog ungefär en minut för vår CI/CD-pipeline att bygga koden och skjuta ut den till våra servrar. Jag lutade mig tillbaka, nöjd med min egen effektivitet. Men sedan började min Slack att blinka rött. Först ett meddelande från kundtjänst. Sedan ett till. Inom loppet av två minuter hade hela #general-kanalen förvandlats till ett panikartat flöde. "Är hemsidan nere?" "Jag får bara en vit skärm när jag försöker checka ut i varukorgen!"
Mitt hjärta sjönk. Jag växlade över till vår live-miljö och tryckte på uppdatera. Vit skärm. Jag öppnade övervakningsverktyget (Datadog) och såg hur CPU-användningen på vår databas-server hade skjutit i höjden från 10 % till 100 %. Min "lilla buggfix" hade råkat skapa en oändlig loop (infinite loop) i databasförfrågningarna. Varje gång en kund försökte betala, låste systemet sig. Vår e-handel, som omsatte hundratusentals kronor i timmen, var helt död. Och det var mitt fel.
Panik och handling
I det ögonblicket kändes det som att min karriär var över. Jag förväntade mig att min chef skulle storma in, skrika på mig och be mig packa mina saker. Istället kom Johan, vår Tech Lead, lugnt gående med sin kaffekopp. Han såg mina uppspärrade ögon och skärmen som lyste rött av felmeddelanden.
"Okej," sa Johan med en obehagligt lugn röst. "Vi har en incident i produktion. Vad är det snabbaste sättet att få upp sidan igen?"
Jag stammade fram att jag just hade pushat kod. Han nickade. "Bra att vi vet var felet ligger. Vi försöker inte fixa buggen nu. Vi gör en 'revert'. Återställ koden till den tidigare versionen som vi vet fungerade." Med darrande fingrar skrev jag git revert i min terminal, skapade en snabb pull request och Johan godkände den direkt. Tre minuter senare var sidan uppe igen. Databasen lugnade ner sig. Kunderna kunde handla. Men den verkliga prövningen var inte över – nu väntade vår 'post-mortem'.
Den skuldfria kulturen (Blameless Post-Mortem)
På måndagen kallades hela tech-teamet till ett möte. Jag hade ont i magen hela helgen. Men när mötet började, förstod jag något fundamentalt om den svenska och moderna tech-kulturen. Mötet handlade inte om att peka finger (finger-pointing) eller att straffa mig. Det var en så kallad blameless post-mortem (skuldfri incidentanalys).
Johan inledde mötet: "Vi hade ett nertid på fredagseftermiddagen. En felaktig kodrad kom ut i produktion. Frågan vi ska ställa oss idag är inte vem som gjorde fel, utan varför våra system tillät det att hända."
Vi började analysera våra processer. Varför krävdes inte en kodgranskning (code review) av minst två seniora utvecklare innan koden kunde nå produktion? Varför hade vi inga automatiserade tester som fångade den oändliga loopen innan den byggdes? Och framförallt: varför tillät vårt system överhuvudtaget att man driftsatte kod en fredagseftermiddag, en tidpunkt då de flesta är trötta och på väg hem (den klassiska regeln: no Friday deploys)?
Vad jag lärde mig
Resultatet av min katastrof blev att teamet byggde starkare skyddsnät. Vi införde en strikt regel om att kod måste passera automatiserade tester och granskas ordentligt. Vi satte upp en 'deployment freeze' på fredagar efter lunch. Jag fick inte sparken – jag fick istället uppdraget att leda arbetet med att förbättra vår testmiljö.
Den dagen lärde mig tre avgörande läxor. För det första: driftsätt aldrig en "liten" ändring utan att testa. För det andra: en bra arbetskultur straffar inte ärliga misstag, utan ser dem som en möjlighet att bygga mer robusta system. Och för det tredje: den svenska tilliten på arbetsplatsen är magisk. Om du är ärlig med dina misstag, kommer ditt team att backa dig. Idag är jag själv senior, och när en junior utvecklare råkar krascha servern, går jag lugnt fram med min kaffekopp och säger: "Okej, vi har en incident. Nu rullar vi tillbaka koden."
Complete this lesson
Track progress locally on this device.