”All you have to do is change a 5 to a 6, how hard can it be?!”
Kunden verkar vara lite irriterad. Han blickar frustrerad runt salen där jag och några andra hackers stirrar missnöjda på våra skärmar. Ingen har kunnat fixa hans program inom den utsatta tiden på 30 minuter. Som kunden ser det är det en enkel förändring. Det är en liten applet som spelar tic-tac-toe. Man behöver 5 i rad för att vinna, men det är för svår att besegra. Kunden vill att datorn ska behöva 6 i rad för att vinna medans han fortfarande behöver 5.
När man tittar på koden är det allt annat än en enkelt förändring. Det ryktas om att koden skrevs ursprungligen på serbiska. Eller C. Eller båda två. I alla fall är det nu en enda stor Java class med massor med global control flags, nested loops och håriga långa metoder. Suck. Jag sjunker ner i stolen och tänker – det här kan ta flera dagar att fixa.
Lyckligtvis är det här scenen inte hela sanningen. I verkligheten heter ”Kunden” Patrick Wilson-Welsh, som är själv en skicklig programmerare, och jag sitter i en ”Clean code clinic” på agile2008. Nu ta Patrick fram en annan kodbas för oss att jobba med. Det är också en applet som spelar tic-tac-toe, och om man bara titta på UI:et ser det precis likadan som det första. Under huven är det helt annorlunda dock. Det finns Java packages som heter ”model”, ”view”, ”controller”. Klasserna är småa med bra namn som ”Board” och ”Move”. Det finns till och med omfattande enhetstester. Inom en halvtimme har de flesta i rummet klarat av att ändra koden efter kundens önskemål.
(Vill du testa själv, tic-tac-toe koden finns att ladda ner här)
Alla programmerare som har jobbat ett tag förmodligen känner igen sig. ”Clean code” är bra för båda kundens tidsplan och programmerarnas mental hälsa. Hur kan det uppnås? En bra början vore att läsa Bob Martins senaste bok. Tänk efter, prata med kunden om ”technical debt”. Be a professional. Vi har inte råd att bygga flera produkt där det tar flera dagar att ändra en 5 till en 6.