Komplexitet hos moderna IT-system går inte att undvika – men komplexiteten går att hantera. Här går jag igenom teorier och principer för att hantera komplexa system och hur vi måste tänka i framtiden för att inte övermannas av IT-systemens allt mer komplexa strukturer. Detta är del två i serien om komplexitet.
Komplexa system är system med många interagerande komponenter som gör att systemet inte har förutsägbar kausalitet. Antalet möjliga interaktioner mellan komponenter, och att de över tid kan förändras, gör att orsakssamband är omöjliga att förutsäga. Detta visar sig i oförutsedda problem, buggar, säkerhetsbrister eller krascher. Minst lika viktigt är att det också kan resultera i oförutsedda möjligheter. Att komplexa system inte går att till fullo analysera eller modellera får direkta konsekvenser på många av de strukturerade metoder vi normalt använder för att bedriva systemutveckling. Detaljerade systemspecifikationer, riskanalyser och kravspecifikationer blir ofta felaktiga eftersom de görs för ett system där oväntade händelser kommer att uppstå och systemet med stor sannolikhet kommer att utvecklas i oväntad riktning.
Hur fungerar systemet i dag?
Frågan är hur komplexiteten hanteras hos komplexa system om de per definition inte med exakthet går att modellera och det inte går att förutsäga hur systemen kommer att bete sig?
Det enda som vi med säkerhet vet om ett komplext system är hur det fungerar just nu, och det är där fokus behöver ligga för att få kontroll. Hur ser miljön ut för systemet, hur hänger systemet ihop, vad vill man med systemet, hur väl fungerar systemet och hur förändrar vi systemet för att bättre möta behov och önskemål? Genom att fokusera på detta kan systemet styras i rätt riktning och följas upp så att förändringar fungerar. Det gäller att hantera nuläget.
Antifragilitet – utveckling vid påfrestning
Om vi gräver djupare och tittar på de teorier kring komplexa system som finns så har Nicholas Nassim Talebs teori Antifragilitet fått stort genomslag under senare år. Termen Antifragilitet bygger på motsatsen till fragilitet: Ett system som går sönder om det utsätts för påfrestning. En oväntad händelse eller chock av något slag. Motsatsen, antifragilt, är ett system som förbättras när det utsätts för påfrestning.
Tittar man på de komplexa system som klarar sig över tid så är de varken robusta (statiska) eller resilienta (uthålliga, elastiska). Dessa former av system är bra på att motstå påfrestning men utvecklas inte i övrigt. Antifragila system utvecklas i stället vid påfrestning eller chock. Påfrestningen påverkar systemet så det anpassar sig för att klara liknande påfrestningar framöver. Påfrestningen blir viktig information för systemet om hur det skall anpassa sig och härdas. Kom ihåg att oväntade händelser, enkla eller disruptiva (så kallade svarta svan-händelser) är ofrånkomliga hos komplexa system. Genom att lära sig från tidigare påfrestningar blir systemet bättre förberett att hantera kommande oväntade händelser.
Läs mer: Koll på IT-komplexitet – så gör du med svarta svanar och feta svansar
Fyra designprinciper för antifragila system
Vilka är då egenskaperna antifragila system har som gör dem just antifragila ochbehövs för att hantera oväntade händelser? Nyckeln till antifragilitet ligger i att systemet utsätts för påfrestning och oväntade händelser. Det måste kunna hantera påfrestningen så systemet inte fallerar (vilket skulle innebära att systemet är ett fragilt system). Sedan måste systemet dessutom använda sig av påfrestningen som ett verktyg för dess vidareutveckling och förbättring.
Taleb’s Teorier kring antifragilitet beskriver dessa egenskaper ur ett filosofiskt och ekonomiskt perspektiv. Utifrån ett IT-perspektiv finns en professor som heter Kjell Jørgen Hole som skrivit en bok kring vad som kännetecknar Antifragila IT system: ”Anti-fragile ICT systems”.
Hole beskriver fyra designprinciper som antifragila IT-system behöver:
- Modularitet
- Redundans
- Lösa kopplingar
- Diversitet
Samt en metod som är viktig och populärt kallas fail fast.
Diversitet och lösa kopplingar
Dessa fyra designprinciper är inget nytt inom IT-utveckling, speciellt inte modularitet och redundans. Det intressanta är hur de är viktiga tillsammans för att göra systemet antifragilt. Diversitet och lösa kopplingar kan dock vara värt att titta lite närmare på:
Diversitet är inte vedertaget i IT-branschen eftersom det går stick i stäv med effektivisering och rationalisering. Är det vettigt att exempelvis använda sig av två olika databaslösningar för ett system? Det kan kosta mer i underhåll, komplexitet, kunskapsförsörjning och licenser. Vid kraftiga förändringar, allvarliga databasproblem, licens- eller end-of-life problematik kommer det att löna sig avsevärt att inte vara fastlåst vid en teknik eller leverantör. Vid i stort sett all typ av förändring kommer det att löna sig med diversifiering. Och vikten av förändringsbarhet för systemet går inte att understryka nog för komplexa system. Att systemet består av en hälsosam flora tekniker och lösningar kommer att göra det mycket mer anpassningsbart inför den osäkerhet ett komplext system oundvikligen står inför.
Lösa kopplingar betyder att kopplingen mellan komponenter är enkel att förändra eller koppla om och att beroendet mellan komponenterna i övrigt är litet. En förändring av en komponent eller hur den är kopplad till andra komponenter får på så sätt inte spridningseffekter. Exempel på problemområden är till exempel arv inom objektorientering som ofta (oavsiktligt) skapar beroenden mellan systemdelar och gör systemet instabilt och svårt att förändra. Även användandet av en så kallad enterprise service bus, där affärslogik läggs i lagret som knyter samman systemdelarna (kopplingarna), går också stick i stäv med lösa kopplingar och bör alltså undvikas eftersom det leder till statiska system där förändring blir komplicerat och kostsamt.
Designprinciperna har två viktiga funktioner för systemet:
- De är viktiga för att systemen skall kunna överleva oväntade händelser och chocker. Om inte systemet eller delar av systemet kan fortsätta att fungera på ett eller annat sätt vid en oväntad påfrestning finns inte utrymme att hantera, lära och förbättra systemet baserat på de lärdomar som behöver dras från den oväntade händelsen. All kraft behöver annars läggas på att “släcka bränder”.
- Systemet måste vara flexibelt och förändringsbart. Vi vet att oväntade händelser eller beteenden kommer att uppstå hos komplexa system och då måste systemet gå att förändra utifrån detta. Är inte systemet hela tiden anpassningsbart utifrån all den nya information som kommer utifrån hur systemet fungerar och används och hur omgivningen förändras så kommer systemet inte vara relevant eller användbart över tid.
Fel är robust information att agera på
Kjell Jørgen Hole tar även upp metoden fail fast. Utifrån resonemanget ovan är detta naturligt eftersom det är en fundamental del av antifragila system – att påfrestningar på systemet är en del av systemets utveckling. Fel och problem är alltså en viktig tillgång för systemets utveckling. Ett sätt att se på fel är att ett fel innebär robust information att agera på. Ett fel är enkelt att analysera och vidta åtgärder för. Däremot är något man inte vet är fel väldigt svårt, och för komplexa system omöjligt, att med säkerhet veta hur man skall hantera. Det är därför fel eller misslyckanden ofta hyllas av framstående IT-utvecklare, så som Googles VD Sunder Pichai som konstaterat att Googles utvecklare ska: ”Wear your failure as a badge of honour”. Genom fel görs riktiga och sanna lärdomar, inte antaganden, och framför allt kan lärdomarna göras effektivt.
Så uppnår vi rätt teknisk mognad
Sammanfattningsvis behöver vi inse att det inte går att förutsäga hur komplexa system behöver utvecklas eller vilka problem och möjligheter som kommer att uppstå. Därför behöver vi fokusera på det vi kan kontrollera vilket är hur systemet fungerar nu. För att kunna hantera den osäkerhet det innebär med komplexa miljöer behöver vi uppnå en teknisk mognad så problem och påfrestningar på systemet blir ett verktyg för förändring och förbättring. Här är Holes principer en utmärkt teknisk grund för utveckling av IT-system.
På så sätt kan vi bygga komplexa system som håller för kraven som vår moderna värld ställer.
Johannes Jansson, konsult och associerad partner, Tagore
Läs även del ett i serien: Koll på IT-komplexitet – så gör du med svarta svanar och feta svansar