Inom mjukvaruutveckling så finns ett jätteproblem: en extremt liten del av alla projekt lyckas. Oftast blir mjukvaran en kund beställt klar men väldigt sällan i tid – mjukvaruutveckling är extremt komplicerat och det är i princip omöjligt att förutsäga hur lång tid delar av ett program tar att skriva i förväg. Ett annat problem är att mjukvaran blir klar men faktiskt inte är vad kunden förväntat sig – eftersom mjukvara är så pass komplext är det svårt att få kommunikationen att fungera. En tredje variant är att mjukvaran blir klar i tid men att utvecklingsföretaget gör en stor förlust eftersom så mycket mer resurser gått åt till projektet än man förväntat sig.

Det mest bisarra är att man under hela mjukvaruindustrins existens inte verkar hittat något sätt att komma runt detta. Man kanske saltar sin tidsuppskattning på något sätt för att ta höjd för att man gissat fel, (säg t.ex. att man alltid multiplicerar hur lång tid det tar med 2).
Ett annat problem är att när man håller på med ett stort mjukvaruprojekt så kanske inte det en kund ville ha från början är samma sak som de vill ha ett år senare när det är klart. Ändå gör man först en förstudie och försöker mycket detaljerat dokumentera exakt vad man vill ha – vad man kallar för kravspecifikation. Denna dokumentation skall man sedan kunna använda som “bevis” för att beställningen är färdig. Utöver att världen är föränderlig är det mycket svårt att lyckas fånga varenda detalj man vill ha på papper. Det är möjligt att uppfylla en kravspec exakt men ändå ha skrivit ett system som är helt oanvändbart – ett något raljerande exempel: “det stod att man skulle kunna skicka mail, inte att det skulle gå utan att trycka på tio knappar och sedan snurra ett varv med händerna över huvudet”.
En kravspec kan också göra att man får en situation där kund och utvecklare är som motparter istället för att som det egentligen är de faktiskt har ett gemensamt mål som allt blir bäst om de hjälps åt att nå (en situation jag upplevt själv).
När kunden lagt två månader på att skriva ett jättedokument om exakt vad de vill ha finns en risk att man som utvecklare stänger in sig med dokumentet och kodar på för glatta livet. Ett år senare släpper man sin produkt och det visar sig att man feltolkat hälften av kraven totalt. “Att man skall kunna skicka mail” betyder ju inte att alla skall det, det är ju självklart! “Det kan ju inte ta en halvtimme att visa sitt banksaldo” – “Det stod inget om hur lång tid det fick ta”.
På min arbetsplats (Databyrån) har vi sedan ett och ett halvt år tillbaka (tror jag) arbetat enligt ett “lättrörligt” eller “agilt” arbetssätt som kallas Scrum. Jag är en av initiativtagarna men att vi arbetar på detta sätt är ganska väl förankrat i hela företaget. I framtiden tänker jag skriva och berätta mer om Scrum och hur det löser de problem jag nu beskrivit och fler.