Dagens IT-system är ofta stora och komplexa och det är svårt att förutsäga vad som kan gå fel eller hur system beter sig vid oförutsedda händelser. Att försöka förutsäga alla situationer för att bygga robusta system är en återvändsgränd, så vi måste tänka om när vi designar dem.
Vad innebär detta för systemutveckling – ska vi sluta bygga robust mjukvara genom noggrann riskanalys, felhantering och testning?
Nej, robust mjukvara behövs fortfarande, men det saknas en förståelse för vad man egentligen behöver uppnå: dynamiska system, byggda att hantera en föränderlig miljö och oförutsedda problem. Det är inte stabila eller robusta (statiska) system som ska eftersträvas.
En teori inom riskanalys som fått stort genomslag de senaste åren är Nassim Tahlebs anitfragilitet. Fragila system kraschar och försvinner över tid eftersom de inte hanterar förändring eller påfrestning. Antifragila system däremot anpassar sig och livnär sig på förändring. Nassim Taleb hävdar att just förändring är en nyckelegenskap i långlivade system vilket också skiljer antifragilitet från robusthet eller resiliens, vilka båda strävar efter att bibehålla befintlig funktionalitet. Antifragila system är således långt ifrån stabila, de är anpassningsbara och förbättras vid yttre påverkan och påfrestning (givetvis till en viss gräns).
Professor Kjell Jörgen Hole har tagit Nassim Talebs idéer och forskat kring hur antifragilitet kan appliceras i utvecklingen av IT-system. Enligt Jörgen Hole behöver IT-system som skall kunna hantera oförutsägbara händelser och kontinuerligt förbättras vara modulära, svagt länkade, diversifierade och redundanta.
Så vad betyder det?
- Modularitet minimerar spridningseffekter vid problem och gör det är enklare att förstå och förändra avgränsade delar av system.
- Svag länkning underlättar vid förändring och vidareutveckling av system. Detta är ett intressant område som ofta inte förstås och tillämpas i tillräckligt hög grad (och som förtjänar en egen artikel).
- Diversitet har med anpassningsbarhet att göra. Ett diversifierat system har enklare att byta ben. Visar det sig att förändring blir nödvändig finns valmöjligheter redan tillgängligt.
- Redundans behövs för att systemet inte skall haverera vid påfrestning. Viss överkapacitet är viktigt samt reservlösningar så oförutsägbara händelser kan hanteras någorlunda kontrollerat och tid ges för anpassning av systemet till de nya förutsättningarna.
Utöver dessa fyra designprinciper lägger Jörgen Hole till ytterligare en metod: Fail Fast. För att skapa ett anpassningsbart system som kan lära och anpassas utifrån problem och påfrestning behöver systemet utsättas för påfrestning i ett tidigt skede. Systemet behöver fallera tidigt när konsekvenserna är små och man kan lära från incidenterna och anpassa systemet och begränsa konsekvenserna av framtida incidenter.
Jag vill dessutom lägga till ytterligare en viktig egenskap hos IT-system för att bli just antifragila, vilket har med förändringsbarheten att göra. För att kunna ta informerade beslut om hur systemet ska förändras, när nya förutsättningar eller oförutsedda händelser inträffar, behövs bra beslutsunderlag. Därför behöver systemet ha feedbackförmåga, alltså ge användbar återkoppling på hur delar av systemet mår, så fungerande delar av systemet kan fortsätta att förbättras eller utökas. Många tänker här främst på loggning, men att kunna inhämta information live från systemet (software probing) blir allt vanligare och feedbackförmåga kommer vara ett väldigt viktigt verktyg för att uppnå antifragilitet.
Johannes Jansson, konsult och associated partner, Tagore.