Kooderien tuottavuuserot ovat valtavia. Hyvä kooderi käyttää tehtävään viidesosan siitä ajasta joka keskiverrolta kuluu, ja lopputulos on silti monin tavoin parempi. Sama pätee moniin muihinkin ohjelmistotuotannon osiin: arkkitehtuurisuunnitteluun, käyttökokemussuunnitteluun ja myös laadunvarmistukseen. Tämä erottaa kaikki nämä ammatit vaikkapa heinän niittämisestä tai T-fordien kokoamisesta liukuhihnalla.
Ohjelmistojen tekeminen on lähes aina tiimityötä. Tyypillisesti ohjelmistokehitystä tehdään 3-10 hengen tiimeissä (*), joissa on yksi projektipäällikkö tai vastaava, osa jäsenistä on spesialisteja, esimerkiksi testaajia, käyttökokemussuunnittelijoita tai arkkitehtejä, ja loput tekevät koodia. Spesialistit saattaa olla hallinnollisesti eroteltu muista, mutta projekti tuo heidät yleensä silti samaan tiimiin kooderien kanssa.
Oikeastaan pitäisikin siis puhua kehitystiimien eroista. Hyvä tiimi tuottaa paremmin tarkoitukseen sopivan ja luotettavammin toimivan ohjelman nopeammin kuin keskiverto tiimi.
Mikä sitten tekee tiimistä hyvän? Sekö, että se koostuu hyvistä tyypeistä?
Ei välttämättä, eikä ainakaan yksinomaan.
Ihan yksilöiden taitotasosta riippumatta, hyvän tiimin pitää toimia yhteen. Se myös tarvitsee kelvolliset tilat ja hyvät työkalut. Joel Spolsky tiivistää tarvittavat työkalut ja työ-olot 12 kohdan check-listiinsä. Ainakin tämän verran ympäristöllä on väliä.
Parikin astetta pidemmälle ajatuksen vie Alan G. Carter luentosarjassaan Programmers’ stone. Jos lukee hyväntahtoisesti ja ohittaa pseudopsykologian suuntaan osoittavat vihjeet (**), Carterin perusidea on, että hyvän tiimin erottaa huonosta se, että jäsenet löytävät oikeanlaisen keskittymisen ja yhteisymmärryksen, ja sitä kautta itse asiassa ymmärtävät mitä ovat tekemässä tavalla, joka on sitä kokemattomalle lähes käsittämätön.
Tälläisen ”Kullatun tiimin” luomiseen tarvitaan tietysti Joelinkin käisttelemät järkevät tavoitteet, hyvät työkalut, rauhalliset työtilat, tiimin pysyvyys, jne, mutta ennen kaikkea mahdollisuus ylläpitää riittävän matalaa stressitasoa.
Carterin mukaan lähes kuka tahansa ohjelmoija voisi olla kymmenen kertaa normaalia tuottavampi, mutta tätä harvoin tapahtuu, koska normaalissa softafirmassa ei ole yksinkertaisesti mahdollista ylläpitää matalaa stressitasoa. Ainakaan kokonaisen tiimin. Lukekaa koko tarina jos haluatte kattavan selityksen.
Itse uskon, että Carter on oikeilla jäljillä, vaikka välillä menee penkan puolelle. Kaikista tuskin voi ikinä tulla super-ohjelmoijia, mutta hyvä ohjelmointikyky ei ole geneettinen ominaisuus, vaan jotakin, mitä voi oppia. Ei helposti, vaan vaikeasti. Eikä yksikseen, vaan oikeassa seurassa.
(*) Vapaissa ohjelmistoissa työn organisointi toimii aivan eri tavalla, enkä puhu siitä tässä.
(**) Myöhemmin Carter on laajentanut repertuaariaan vähän joka suuntaan jonkinlaiseksi teknohippi-suurmestariksi.
Minustakin me kaikki tavalliset ohjelmistoalan ihmiset olemme usein tiimin jäseninä alisuorittajia. Itse kyllä epäilen väitettä, että kyse olisi ensisijaisesti seuraus liiallisesta stressistä tai huonoista työvälineistä. Startupissa keskeisintä on, että kaikki jakavat yhteisen vision siitä mitä ollaan tekemässä. (Näkemys tietysti vähän vaihtelee, mutta se on jatkuvasti kaikilla sama.)
Parhaimmissa projekteissa on samoin. Siksi yritän itse kaikin mahdollisin menetelmin pyrkiä siihen, että kaikki jakavat yhteisen vision. Minusta se on osoittautunut erittäin hyödylliseksi.
Mutta minkä tahansa ohjelmiston voi suunnitella todella monella tavalla, ja luulen että tarvitaan pitkä kokemus (eli paljon tehtyjä virheitä) että osaa ennakoida mitkä tavat ovat hyviä ja mitkä huonoja. Tätä tekemisen ja erityisesti virheiden kautta syntynyttä kokemusta nimitetään ammattitaidoksi.
Tuo dopamiini- ja stressispekulaatio alkoi itsellänikin vähän tökkiä.
Amerikkalaisessa populääritieteellisessä keskustelussa (tarkoitan nyt Carterin tapaisia teoretisointeja, jotka kuitenkin koittavat pohjata tieteeseen eikä new ageen) tuntuu olevan aika yleistä, että vedetään neororologiasta suoraviivaisesti johtopäätksiä sosiaalisiin tai jopa yhteiskunnallisiin kysymyksiin.
Ajatus tuntuisi toimivan jotenkin niin, että ksoka yhteiskumntatieteet ja psykologia ovat epäluotettavaa ja epätieteellistä, voi ne täysin ohittaa, ja ksikaista hatusta oman teoriansa jolla yksi välittäjäaine selittää monimutkaisen sosiaalisen ilmiön. Todistamatta toki mitenkään, mutta silti se on tieteellisempää, koska viitataan neurologiaan eikä epäluotettavaan psykaan.
No, eksyin vähän sivupolulle. Olen samaa mieltä vision jakamisesta. Mutta osaaminen ei ole pelkkää kokemusta, vaan siinä on muitakin eroja. Koen tuon Carterin kuvaaman erottelun kahdenlaiseen keskittymiseen erittäin osuvana ainakin omalta osaltani. Ja myös sen selittämisen vaikeuden.