Wabi-sabi i mjukvaruutveckling
Inledning
Det japanska begreppet wabi-sabi är svårt att beskriva i ord. Det är något du kan finna i en gammal tekanna med ett sprucket handtag eller ett väderbitet träsnitt i ett tempel. Wabi-sabi hittar skönhet i det ofullkomliga, värderar enkelhet och ser förgänglighet som något att uppskatta snarare än att stå emot. Den här filosofin står i kontrast till mycket av vad vi lär oss att eftersträva inom de flesta områden – och kanske allra mest inom mjukvaruutveckling, där perfektion, effektivitet och fullständighet ofta ses som de högsta idealen.
Men mjukvara, liksom allt annat vi skapar, existerar i en värld som ständigt förändras och som alltid är lite bristfällig. Buggar dyker upp, krav ändras, ny teknik kommer och gör dagens mest moderna lösning föråldrad. Vi ser ofta dessa förändringar som problem, kanske till och med som saker vi borde arbeta mer med för att undvika. Men vad händer om vi istället för att kämpa emot ofullkomlighet och förändring och börjar se dem som naturliga delar av processen?
Illusionen om perfekt kod
Perfektion när det gäller mjukvara är en hägring. På avstånd ser den möjlig ut, men ju närmare du kommer, desto mer avlägsnar den sig. Som ingenjörer tränas vi till att söka de bästa och mest effektiva lösningarna.
I jakten på den ”perfekta” koden optimerar och strukturerar vi om utan ände. Men jakten på perfektion kan snabbt bli en fälla. Ju mer vi finjusterar och polerar, desto längre tid tar det att leverera något som faktiskt fungerar. Wabi-sabi påminner oss om att det inte är avsaknaden av fel som gör något värdefullt – utan hur väl det uppfyller sitt syfte. Vi kanske borde släppa idén om perfekt kod och istället fokusera på vad som är tillräckligt bra för användaren idag, och vad som kan förbättras stegvis imorgon.
Att släppa taget om perfektion
Inom mjukvaruutveckling pratar vi mycket om ”minimal viable product” – den minsta funktionsdugliga versionen av produkten, som är tillräckligt bra för att kunna användas och testas. Men ironiskt nog behandlar vi ofta MVP som bara ett steg mot en slutgiltig, ”färdig” produkt. Det här tankesättet kan leda oss till att bli överdrivet självkritiska. Vi ser varje brist som ett misslyckande och varje bugg som något som aldrig borde ha existerat. Men verkligheten är att mjukvara aldrig blir klar, aldrig blir ”perfekt” – och det är inte ett problem, det är en fördel.
När vi släpper taget om perfektion får vi friheten att se kod som något levande, något som får och ska förändras över tid. Wabi-sabi lär oss att värdesätta utveckling och förändring, snarare än att se dem som hinder. Att acceptera att vi bygger något som alltid kommer att vara lite bristfälligt ger oss möjligheten att skapa mer hållbara lösningar, lösningar som kan anpassas efterhand som världen förändras.
Enkelhet och kärnfunktioner
Ett annat grundläggande värde inom wabi-sabi är enkelhet. Detta kan vara särskilt viktigt inom mjukvaruutveckling, där vi ofta frestas att lägga till fler funktioner, fler knappar, fler rader av kod. Vi kallar det för ”feature creep” när vi ständigt lägger till saker och gör systemen mer komplexa än de behöver vara. Wabi-sabi uppmuntrar oss istället att fråga: Vad är verkligen nödvändigt? Vad behöver användaren egentligen?
Att fokusera på kärnfunktioner och hålla mjukvaran enkel är inte bara ett sätt att minska komplexiteten i koden, utan också ett sätt att skapa produkter som är lättare att använda och förstå. Genom att värdera enkelhet framför överflöd får vi inte bara en produkt som är mer hållbar, utan också en som är lättare att underhålla, justera och växa i.
Att se buggar och teknisk skuld som naturliga steg
I en perfekt värld skulle vi inte ha buggar eller teknisk skuld. Men i en wabi-sabi-värld ser vi dessa som naturliga steg i skapandet. Buggar är ofta ett tecken på att något är nytt och oanvänt, att systemet lär sig. Teknisk skuld är resultatet av beslut vi har behövt fatta för att hålla tempot uppe, och det är något som kan hanteras över tid.
Att ha och acceptera teknisk skuld innebär inte att ignorera den, utan att hantera den pragmatiskt. Genom att dokumentera och prioritera skuld med ett realistiskt synsätt kan vi släppa behovet av att alltid försöka skapa något ”felfritt” från början. Precis som en hantverkare accepterar och förbättrar sitt arbete över tid, kan vi se teknisk skuld som en del av mjukvarans mognadsprocess.
Att uppskatta processen
Wabi-sabi påminner oss också om att uppskatta processen istället för att fokusera på målet. Inom mjukvaruutveckling är det lätt att bli målstyrd – att tänka att värdet av vårt arbete bara ligger i det slutgiltiga resultatet. Men varje rad kod är ett lärande, varje release en del av en större utvecklingsresa. Om vi ser varje projekt som en möjlighet att växa, inte bara något att leverera, kan vi skapa en kultur där vi uppmuntrar innovation, experiment och misstag.
Att acceptera det förgängliga
Mjukvara, som allt annat, är förgängligt. Förr eller senare kommer våra system att bytas ut, ersättas, eller uppdateras till något helt nytt. Istället för att se detta som ett misslyckande kan vi se det som en naturlig del av mjukvarans livscykel. När vi accepterar att inget system är permanent, blir det lättare att fokusera på vad som skapar värde här och nu.
Wabi-sabi som ett sätt att tänka
Att applicera wabi-sabi inom mjukvaruutveckling innebär inte att kompromissa med kvaliteten, utan att ta till sig en annan syn på vad kvalitet innebär. Kvalitet behöver inte vara detsamma som perfektion; det kan vara ett uttryck för enkelhet, funktion och anpassningsbarhet. Genom att värdera dessa egenskaper kan vi skapa mjukvara som inte bara fungerar väl, utan också är hållbar och meningsfull i det sammanhang där den verkar.
Kanske är det den största lärdomen vi kan dra från wabi-sabi i mjukvaruutveckling: att förstå att det vackra, det hållbara, det användbara ofta kommer ur det ofullkomliga. När vi släpper taget om jakten på det perfekta, öppnar vi upp för att skapa något verkligt värdefullt – något som kanske, i slutändan, är mer meningsfullt just för att det aldrig blir helt färdigt.
Till nästa gång vi ses så får du ha det så bra.
/Mats