Blog

Så ökar du antifragiliteten med DevOps

JUN 17, 2020

Ibland inträffar något oväntat som pressar oss på sätt vi aldrig hade kunnat förbereda oss för eller ens föreställa oss. För oss är den händelsen covid-19-pandemin. Den prövar nationalstater, den globala ekonomin och företag av alla slag och storlekar. Organisationer inom mjukvaruutveckling är inget undantag.

Tuomas Keränen

Tuomas, Eficode's Cloud Product Manager, has a 15 years of work experience in project, program & product management positions. He is a rapid and enthusiastic learner and always ready for new challenges.

När alla för närvarande måste arbeta hemifrån utsätts våra system och processer för en ny typ av belastning. Över en natt har vi behövt gå från att arbeta sida vid sida på kontoret till att arbeta på distans och ensamma. Systematiska felkällor i våra arbetssätt, som tidigare varit dolda mitt framför ögonen på oss, har nu blottats.

På kontoret var allt lättillgängligt. Plötsligt uppstår problem med att få tillgång till kritisk information eller kritiska system, inklusive projektdokumentation, källkod, testfall och testmiljön. Stanna upp och fundera en stund på hur dessa dokumenteras och delas i din organisation. Om du behövde få tillgång till detta just nu – hur skulle du gå tillväga? Och hur är det för resten av teamet? Har de tillgång?

Antifragilitet kontra robusthet

Om du inte har system på plats för att hantera störningar kan en oväntad händelse som covid-19-pandemin få din mjukvaruutveckling att stanna av. Det leder oss till frågan om antifragilitet och robusthet.

Ett system som är dåligt dokumenterat och underhållet är skört på samma sätt som ett vinglas – båda tål bara en liten mängd belastning. Organisationer som kanske hade kunnat hantera belastningen av att en eller två medarbetare var borta måste nu hantera att betydligt fler än så försvinner. Det sköra systemet går sönder.

Detta kan även gälla system som verkar vara ”robusta”, eftersom antifragilitet och robusthet inte är samma sak. Ett robust system kan tåla mer belastning än ett skört system, men båda har en fast övre gräns för hur mycket belastning de klarar. Ett antifragilt system blir däremot starkare när det utsätts för allt större belastning. Det betyder inte att vi inte vill ha ett robust system – det vill vi förstås! – men det vi verkligen vill ha är antifragilitet.

Att bygga antifragilitet

DevOps förbereder din organisation för att hantera påfrestande händelser, vilket är avgörande för att bygga antifragilitet. Varje gång du framgångsrikt tar dig igenom en kris och använder lärdomarna för att förbättra din organisation eller dina system ökar graden av antifragilitet. Genom att arbeta med DevOps kan du bygga ett system som både är robust och blir starkare av att hantera kriser.

Men hur ser detta ut i praktiken? Hur gör vi en befintlig utvecklingsorganisation mer antifragil med DevOps? Det finns tre viktiga aspekter att ta hänsyn till: mjukvarans produktionslina, människorna som arbetar med den och övervakningen av dess prestanda.

1. Produktionslina

En centraliserad plattform där alla i teamet känner till alla viktiga verktyg är en förutsättning för antifragilitet. Om en teammedlem blir otillgänglig kan någon annan enkelt ta över arbetet, eftersom alla känner till verktygen. Det gör det mycket enkelt att omfördela resurser.

Din organisation behöver ha en produktionslina för mjukvara som gör dokumentation till en naturlig biprodukt. Alla krav och arbetsflöden bör finnas i lösningar för dokumentation och ärendehantering. Källkod, miljöer och testfall bör alla versionshanteras, och binärfilerna bör ligga i separata repositorier.

Om varje team använder sina egna verktyg och följer sina egna arbetssätt är det mycket svårt att bygga antifragilitet i hela verksamheten. En konsekvent, välbyggd produktionslina är antifragil redan från grunden, och det är det första du bör bygga. När varje teammedlem kan förändra och förbättra produktionslinan varje gång en störning uppstår gör varje ändring systemet bättre rustat att tåla belastning vid framtida störningar.

2. Människor

När du har en centraliserad produktionslina behöver du säkerställa att alla har tillgång till allt de behöver. Du vill också säkerställa att den är optimerad för att göra utvecklarnas vardag så enkel som möjligt.

Till att börja med innebär det att kraven och arbetsflödet för varje projekt måste använda de verktyg som finns tillgängliga i produktionslinan. Det finns ingen poäng med att skapa en centraliserad plattform och sedan låta enskilda projekt införa nya verktyg som inte är synliga för resten av organisationen. Plötsligt har du raserat mycket av det goda arbetet och minskat din antifragilitet. I vissa fall, till exempel test- och driftsättningsautomatisering, behövs dock flexibilitet i verktygsvalet. Utmaningen är att hitta rätt balans mellan gemensamma lösningar och lösningar som är specifika för vissa team.

Konsekvens i verktygsanvändningen måste upprätthållas, och en hög grad av automatisering behöver tillämpas i hur de används. Du bör sträva efter att all viktig projektdokumentation lagras ”som kod” i versionshantering och är öppet tillgänglig för hela teamet. Lätt skalbara molnmiljöer bör finnas tillgängliga tillsammans med testautomatisering för att underlätta Continuous Delivery. Automatiseringskoden ökar robustheten genom att fungera som sin egen dokumentation, vilket minskar behovet av separat skriftlig dokumentation – en uppgift som ofta försummas.

Hög synlighet bör också vara en funktion – inte bara för din egen utveckling, utan även för alla andras. Statusinformation bör samlas in automatiskt från produktionslinan utan behov av manuell rapportering. Många vanliga verktyg har detta som funktion.

Genom att göra vardagen så enkel som möjligt för varje teammedlem ökar du din antifragilitet. När produktionslinan är lättillgänglig och så många manuella uppgifter som möjligt automatiseras blir det enkelt att anpassa sig när en kris uppstår. När störningar väl inträffar kan organisationen dessutom justera kursen och ytterligare förbättra sin förmåga att tåla belastning.

3. Övervakning

Att bygga antifragilitet kräver ständiga förbättringar av hur du producerar mjukvara. Men var bör du rikta dina förbättringsinsatser? Hur vet du var de potentiella svagheterna finns? Därför behöver du övervakning, och det är den tredje aspekten av DevOps som du bör använda för att göra ditt system mer motståndskraftigt.

Det är viktigt att följa upp hur mjukvaran byggs, men det är också avgörande att övervaka hur den driftsätts och faktiskt används i produktion. Genom att följa upp utvecklingen kan du se vilka projekt och personer som arbetar enligt överenskomna arbetssätt. Du får också insikter om framväxande goda vanor och beprövade metoder som kan tillämpas i andra projekt. När varje projekt tar tillvara styrkorna från alla andra blir de lika starka. Det motverkar många enskilda svagheter i hela organisationen och stärker antifragiliteten.

Övervakning inom Ops fungerar som ett system för tidig varning genom att identifiera problem innan de växer sig okontrollerbara. Det är förstås mycket bättre att upptäcka problem än att få dem påpekade av användarna. Dina driftsättningar bör integreras med övervakningsverktyg och analys av loggar för att ge dig omfattande information om produktens status. Med tillräcklig övervakning kan du ofta identifiera grundorsaken till en rad problem i stället för att bara behandla symtomen på ett enskilt problem. Även detta bidrar starkt till din antifragilitet.

Efter driftsättning bör du följa hur användarna beter sig när de får tillgång till nya funktioner. Ökar den nya funktionen trafiken, konverteringarna och i slutändan intäkterna? Data som samlas in efter driftsättning kan användas tillsammans med designledd utveckling, A/B-testning och beteendepsykologi för att optimera framtida releaser.

Hur antifragil är din organisation?

Den oförutsägbara karaktären hos det pågående covid-19-utbrottet innebär att många organisationer just nu upptäcker hur antifragila de är, i realtid. De som tar sig igenom krisen kommer att vara väl rustade att hantera framtida händelser. På många sätt är detta det ultimata stresstestet och en utmärkt – om än ovälkommen – möjlighet att lära.

Att bygga antifragilitet handlar om hur vi reagerar på kriser. Genom att centralisera de viktigaste verktygen i din mjukvarufabrik och använda en tillgänglig, gemensam verktygsuppsättning är du redan på väg att bli antifragil. Det är dock ett misstag att tro att ett centraliserat system i sig löser alla problem. Utan löpande underhåll kommer ett centraliserat system att påverka antifragiliteten negativt, eftersom hela organisationen blir beroende av ett enda dåligt underhållet system. I vissa fall behöver du också göra undantag vid val av verktyg. Nyckeln är att vara flexibel när situationen kräver det.

Kulturen är också avgörande. När du ger teammedlemmarna rätt förutsättningar och uppmuntrar vanor för kontinuerlig förbättring blir hela systemet lite mer antifragilt varje gång ett problem uppstår, även om det är litet.

  • DevOps
  • Eficode ROOT

Subscribe to our newsletter