Hva prosjektledere bør vite om programmerere

Det­te er en ørlite omar­bei­det ver­sjon av en artik­kel som ble sendt til Com­pu­ter­world hvor en svært for­kor­tet utga­ve ble tryk­ket.

I Com­pu­ter­world 67 2005 dis­ku­te­res det hvor­for IT-pro­sjek­ter går over tid og bud­sjett. Det hev­des at den vik­tigs­te årsa­ken er dår­lig pro­sjekt­le­del­se. Jeg hev­der at en av kom­po­nen­te­ne i dår­lig pro­sjekt­le­del­se som van­lig­vis blir over­sett, er for­stå­el­se av hvor­dan pro­gram­me­re­re sam­hand­ler. I det føl­gen­de vil jeg pre­sen­te­re hva nyere forsk­ning sier om hva pro­sjekt­le­de­re, for å kun­ne utøve god pro­sjekt­le­del­se, bør vite om pro­gram­me­re­re.

Det fin­nes gans­ke mye uten­landsk lit­te­ra­tur som kan kas­te lys over pro­gram­me­re­rens atferd. Man­ge kjen­ner klas­si­ke­re som «The Second Self» (Turk­le, 1984), «The Hacker’s Dic­tio­na­ry» (Ray­mond, 1996), «Hack­ers» (Levy, 1984), «True Names» (Vin­ge, 1981), «Hiring is Obso­le­te» (Gra­ham, 2005) og «Teach Yours­elf Pro­gram­ming in Ten Years» (Nor­vig, 2001). Den­ne lit­te­ra­tu­ren gir til dels svært spen­nen­de situa­sjons­be­skri­vel­ser men sier ikke så mye om hva som kan gjø­res. Norsk forsk­ning på pro­gram­me­re­re ser ut til å glim­re med sitt fra­vær – i den grad det er gjort forsk­ning later den ikke til å være pub­li­sert.

Tom deMar­co og Joel Spol­sky har skre­vet under­hol­den­de og ref­klek­ter­te bøker om pro­sjekt­sty­ring og ymist anna, om enn lite eller bare indi­rek­te om per­son­lig­het. Spol­sky sier at han anset­ter pro­gram­me­re­re bare der­som de er smar­te og kan leve­re, men meto­den han bru­ker er inter­vju. Han had­de anta­ge­lig truf­fet bed­re om han styr­ket inter­vje­ne ved også å tes­te IQ, og sann­syn­lig­vis også den per­son­lig­hets­fak­to­ren som innen moder­ne per­son­lig­hets­psy­ko­log kal­les fak­tor III eller kon­troll (på engelsk: «con­scien­tious­ness»).

En nylig ame­ri­kansk under­sø­kel­se av 1000 fir­ma­er som er repre­sen­tert i For­tu­ne 2000 vis­te at lede­re ikke had­de noen tro på psy­ko­lo­gis­ke fak­to­rer som suk­sess­fak­tor hos IT-ansat­te. Det er kan­skje ikke så rart det fin­nes så lite forsk­ning rundt det­te. Den forsk­nin­gen som fin­nes tyder imid­ler­tid på at psy­ko­lo­gis­ke fak­to­rer kan ha stor betyd­ning.

Den­ne artik­ke­len er basert på en gjen­nom­gå­el­se av den offent­lig til­gjen­ge­li­ge forsk­nings­lit­te­ra­tu­ren som har vært pub­li­sert de sis­te fem­ten år. Den­ne kunn­ska­pen fore­lig­ger stort sett i form av viten­ska­pe­li­ge artik­ler og ikke i form av bøker med glan­set omslag, så den er ikke så godt kjent.

Det er vik­tig å mer­ke seg at det som har vært gjen­nom­gått stort sett er ame­ri­kansk lit­te­ra­tur og at beskri­vel­se­ne først og fremst gjel­der ame­ri­kans­ke pro­gram­me­re­re. Hvor­dan det er i Nor­ge kan vi ennå dess­ver­re bare anta.

I lit­te­ra­tu­ren ser det ut til at det bare skil­les mel­lom to typer soft­ware­ut­vik­le­re: Sys­te­me­re­re og pro­gram­me­re­re.

En van­lig meto­de for å lete etter den mest pro­duk­ti­ve søke­ren til en stil­ling omfat­ter å bru­ke en per­son­lig­hets­test. Det­te er pro­ble­ma­tisk når det gjel­der pro­gram­me­re­re. Det fin­nes svært lite forsk­ning som kas­ter lys over hvil­ke per­son­li­ge egen­ska­per en dyk­tig pro­gram­me­rer bør ha. Det er ennå ikke enig­het om noen meto­de for å måle pro­duk­ti­vi­tet hos pro­gram­me­re­re, noe som er en for­ut­set­ning for å kun­ne fin­ne sam­men­hen­ger mel­lom per­son­lig­het og pro­duk­ti­vi­tet. Mye av den forsk­nin­gen på pro­gram­me­re­re som fin­nes later til å være utført av inge­ni­ø­rer uten kon­takt med arbeids­psy­ko­lo­gisk forsk­ning. Kon­se­kven­sen av det­te er pus­si­ge valg når det gjel­der både hvil­ken test og hvil­ken forsk­nings­me­to­dikk som bru­kes. Res­ten av forsk­nin­gen later til å være gjort av psy­ko­lo­ger som er mer inter­es­sert i å stu­de­re kul­tur og sam­hand­ling hos pro­gram­me­re, enn pro­duk­ti­vi­tet. Seriø­se rekrut­te­rings­byr­å­rer leg­ger alt­så ikke all­ver­dens vekt på per­son­lig­hets­tes­ten som en del av selek­sjons­me­to­de ved rekrut­te­ring av pro­gram­me­re­re, men til­sva­ren­de stor vekt på den opp­følg­nings­sam­ta­len som skal fin­ne sted en stund etter anset­tel­sen.

Å kode

Det er ikke doku­men­tert noen sam­men­heng mel­lom per­son­lig­het og dyk­tig­het som pro­gram­me­rer. Det­te kan skyl­des at forsk­nin­gen innen områ­det alt­så har vært litt vil­kår­lig: Det bør være sam­men­heng mel­lom leve­rings­dyk­tig­het og tendens til å være sam­vit­tig­hets­full. Gode pro­gram­me­re­re iden­ti­fi­se­rer man ved evne- og fer­dig­hets­tes­ter. Imid­ler­tid er det en sam­men­heng mel­lom per­son­lig­het og øns­ke om å bli pro­gram­me­rer. Den type per­son­lig­het som øns­ker å bli pro­gram­me­rer har høy risi­ko for å dan­ne kul­tu­rer som er vans­ke­li­ge å for­stå, for å utvik­le uhel­di­ge måter å kom­mu­ni­se­re på, og for å utvik­le gruppe­pro­ses­ser med uhel­di­ge trekk.

Dyk­ti­ge pro­gram­me­re­re er vant med å være den flin­kes­te gut­ten i klas­sen. Det­te vil de helst fort­set­te å være. Kon­se­kven­sen er at de begyn­ner seint på pro­sjek­tet, de vil løse alle pro­ble­me­ne selv, de spør ikke etter hjelp. Når det går galt er det for­di de ikke inn­ser at de ikke får det til før det er for seint å ta tak for å hol­de seg til fris­ten. De har masse­vis av gode ide­er og inn­ser ikke nød­ven­dig­vis at de vil slip­pe opp for dem. De kan ten­ke så intenst rundt pro­ble­met at de opp­le­ver en følel­se av at pro­ble­met er løst uten at det er det. Vi sier, igjen, at ikke alle pro­gram­me­re­re er sånn – bare man­ge nok til at man må være opp­merk­som på det.

Pro­gram­me­re­re har gjer­ne en intro­vert arbeids­stil. Det betyr at de kom­mu­ni­se­rer lite, i hvert fall om faget. Det hen­ger del­vis sam­men med at de øns­ker å løse opp­ga­ve­ne selv. Det er vel­dig vans­ke­lig å se hvor mye en pro­gram­me­rer har gjort, mens pro­gram­me­re­ren føler på krop­pen hvor mye han eller hun har gjort. I ver­ste fall ender man – iføl­ge forsk­nin­gen ikke rent sjel­den – opp med team hvor alle pro­gram­me­re­re ser på seg selv som den som drar las­set og alle de and­re som snyl­te­re. Sli­ke hold­nin­ger er vans­ke­li­ge både å iden­ti­fi­se­re og opp­kla­re.

Alan Cooper skri­ver («The Inma­tes Are Run­ning The Asylum», 2004) at før man sky­ter så mye som en meter film i Hol­ly­wood, er drei­e­boka fer­dig skre­vet. Man opp­da­ger bare ikke midt inne i fil­min­gen at plo­tet ikke hen­ger sam­men – å fil­me er så dyrt at slikt tar man ikke sjan­sen på. Til­sva­ren­de er det for and­re vel­ut­vik­le­de pro­fe­sjo­ner, som for eksem­pel innen­for bygg og anlegg: Man har stan­dar­di­ser­te og vel­ut­vik­le­de meto­der for å sør­ge for at alt er klap­pet og klart på papi­ret før førs­te spade­tak tas. Og selv da ryker bud­sjet­tet og tids­pla­nen. Pro­gram­me­re­re der­imot, de kas­ter seg med friskt mot ut i sto­re, kom­pli­ser­te pro­sjek­ter med bare en vag for­me­ning om hvor­dan det skal skrus sam­men – men med rike ind­re bil­der av hvor­dan pro­sjek­tet skal være, og en sterk over­be­vis­ning om at det­te skal man da få til! Det later til at det er noe med per­son­lig­he­ten som gjør at man begyn­ner å kode alt­for tid­lig.

Pro­sjekt­le­de­re må være klar over at man­ge pro­gram­me­re­re tren­ger tre­ning i å gi dår­li­ge nyhe­ter. De tren­ger tre­ning i å tape. De tren­ger tre­ning i å sam­hand­le med and­re men­nes­ker på jobb. De tren­ger tre­ning i å plan­leg­ge før de koder.

Å få aksept hos brukeren

Pro­gram­me­re­re ser på seg selv om en egen grup­pe – de er «innen­for». De and­re, for eksem­pel bru­ker­ne, er «uten­for». Det­te er typisk i alle sosia­le sam­men­hen­ger – men­nes­ker dan­ner inn- og utgrup­per. Inn- og utgrup­per kari­ke­rer hver­and­re og mis­tror hver­and­re (Se for eksem­pel «Group Proces­ses» (Rupert Brown, 2000)). Det­te er ikke spe­si­elt for pro­gram­me­re­re og bru­ke­re, men det gir vis­se inter­es­san­te utslag.

Hvis en leder skal få med seg en pro­sjekt­grup­pe, er en vel­kjent tek­nikk at lede­ren gir pro­sjekt­grup­pa eier­skap i pro­sjek­tet. Lede­ren gir pro­sjekt­grup­pa mulig­het til å kom­me med for­slag og inn­spill, og gir pro­sjekt­grup­pa til­bake­mel­ding og set­ter opp pro­sjek­tet i lys av pro­sjekt­grup­pas for­slag og inn­spill slik at med­lem­me­ne føler seg sett, møtt og for­stått. Ikke pro­gram­me­re­re. Det er de, og ikke bru­ker­ne, som er inne og som vet. Resul­ta­tet er at bru­ker­ne ikke blir tatt med på råd, de blir ikke hørt, de får ingen mulig­het til eier­skap. Pro­gram­me­rer­ne på sin side sva­rer med at når bru­ker­ne sli­ter len­ge med å for­stå soft­waren er det for­di det er en til­venn­ings­pro­sess, all for­and­ring og inn­læ­ring er vans­ke­lig, og dess­uten er de idio­ter. Når bru­ker­ne så vra­ker pro­duk­tet deres til for­del for soft­ware med en tiende­del av funk­sjo­na­li­te­ten men med et bru­ker­grense­snitt som er mulig å for­stå, skjøn­ner de gjer­ne ingen­ting. Noen soft­ware­fir­ma­er er ene­stå­en­de unn­tak her: Apple, Ama­zon, Palm. Apples legen­da­ris­ke kun­de­lo­ja­li­tet skyl­des at Apple kan noen helt enk­le psy­ko­lo­gis­ke grep som hvem som helst kan lære seg men som for­to­ner seg som magi for den uinn­vid­de.

Å lede erfar­ne soft­ware­u­vik­le­re sies å være av sam­me vans­ke­lig­hets­grad som å gje­te kat­ter. Vår uær­bø­di­ge påstand er at mens kat­ter like­vel har det best når de ikke gje­tes, er det mulig å lære nok om pro­gram­me­re­re til å få dem til å yte atskil­lig bed­re enn det som van­lig­vis er til­fel­le under soft­ware­ut­vik­lings­pro­sjek­ter.

Vi har erfart at opp­føl­gings­sam­ta­len kan utgjø­re for­skjel­len mel­lom suk­sess og fias­ko i en rekrut­te­rings­pro­sess. Seriø­se rekrut­te­rings­by­rå­er leve­rer all­tid en «bruks­an­vis­ning» med kan­di­da­te­ne de leve­rer. Vi har erfa­ring med at å det å kon­trol­le­re at «bruks­an­vis­nin­gen» blir fulgt, og å ha kom­pe­tan­se til å gi råd og veild­ning når den (av og til med god grunn – som f.eks. nød­ven­di­ge end­rin­ger i stil­lings­inn­struk­sen pga. end­rin­ger i mar­ke­det) ikke blir det, kan være for­skjel­len mel­lom suk­sess og fias­ko i en rekrut­te­rings­pro­sess.

Vi antar alt­så at man­ge – ikke alle – pro­gram­me­re­re har sær­egen­he­ter som går igjen men som ikke er så godt for­stått. I opp­følg­nings­sam­ta­len kan det sjek­kes ut om den­ne for­stå­el­sen er nød­ven­dig og om den er til ste­de.

Hva alle softwareutviklingsprosjektledere burde vite

En sys­te­ma­tisk gjen­nom­gå­el­se av nylig lit­te­ra­tur om suk­sess­fak­to­rer i soft­ware­ut­vik­lings­pro­sjek­ter gir fak­tisk gans­ke mye inter­es­sant infor­ma­sjon som på en eller annen måte hen­ger sam­men med sær­egen­he­ter i pro­gram­me­re­res per­son­lig­het.

  • Pro­gram­me­re­re bør bru­ke pro­gram­me­rings­språk de kan. Det tar for lang tid å lære et nytt pro­gram­me­rings­språk etter at pro­sjek­tet har star­tet.
  • Pro­sjekt­spe­si­fi­ka­sjo­ne­ne kom­mer til å end­re seg under­veis, så at det kom­mer til å bli end­rin­ger bør være en del av pro­sjekt­pla­nen. Agi­le meto­der er ei av fle­re løs­nin­ger på det­te.
  • Det er ikke all­tid sant at å føre fle­re men­nes­ker inn i et for­sin­ket pro­sjekt gjør det enda mer for­sin­ket.
  • Pro­sjekt­le­de­ren må til enhver tid vite hvor langt hver enkelt pro­gram­me­rer er kom­met, slik at behov for eks­tra til­tak er kjent i tide.
  • De dyk­tigs­te pro­gram­me­rer­ne kan fle­re for­skjel­lig­ar­te­de pro­gram­me­rings­språk. De bør opp­munt­res til å fort­set­te med dét.
  • De dyk­tigs­te pro­gram­me­rer­ne skå­rer høyt på IQ-tes­ter.
  • Dyk­ti­ge pro­sjekt­le­de­re blir fer­dig i tide for­di de inn­går kom­pro­mis­ser og fjer­ner unød­ven­dig funk­sjo­na­li­tet. Tid­lig i pro­sjek­tet bør det lages en lis­te over funk­sjo­na­li­tet som kan ofres.
  • Det er ikke all­tid opp­drags­gi­ver selv er klar over hva han eller hun vil ha. Det må bru­kes nok tid i inn­le­den­de faser til å bli sik­ker på at opp­drags­gi­ver og kon­trak­tør for­står hver­and­re.
  • Utvik­lin­gen av bru­ker­grense­snit­tet er et eget fag­felt som kre­ver egen kom­pe­tan­se. Hvor vik­tig det­te er blir nes­ten all­tid under­vur­dert.
  • Indi­vi­du­el­le for­skjel­ler i pro­duk­ti­vi­tet er enor­me. De dyk­tigs­te pro­gram­me­rer­ne kan være så mye som ni gan­ger så pro­duk­ti­ve som gjen­nom­snitt­li­ge pro­gram­me­re­re (Det­te med for­be­hold om at det er vans­ke­lig å måle pro­duk­ti­vi­tet hos pro­gram­me­re­re).
  • Jo len­ger opp i lin­ja en leder er, desto mind­re rea­lis­tisk bil­de har ved­kom­men­de av årsa­ker til over­for­bruk at tid og pen­ger, selv om lede­ren selv har ledet soft­ware­ut­vik­lings­pro­sjek­ter. Pro­sjekt­le­de­re glem­mer uhyg­ge­lig fort hva som var pro­ble­me­ne da de ledet pro­sjek­ter.
  • Pro­sjekt­pla­ner er noto­risk urea­lis­tis­ke. Alle som leve­rer inn et til­bud på soft­ware lyver, og det­te vet man på beg­ge sider av bor­det. Kon­trak­ten går til den dyk­tigs­te løg­ne­ren. Når tids­pla­nen og bud­sjet­tet sprek­ker, er det ingen som blir over­ras­ket. Det­te igjen leder til en kul­tur hvor over­skri­del­ser blir sett på som noe man må for­ven­te.

Det trengs fort­satt mye mer forsk­ning som går direk­te på hvil­ke egen­ska­per dyk­ti­ge pro­gram­me­re­re bør ha. Vår påstand er at det dog fin­nes svært mye forsk­ning som kan bidra dras­tisk til å øke effek­ti­vi­te­ten i soft­ware­ut­vik­ling der­som den bru­kes klokt. Rekrut­te­rings­by­rå­ene bør kjen­ne den­ne forsk­nin­gen og bru­ke den i rekrut­te­ring og inn­fø­ring av pro­gram­me­re­re.

nb_NONorwegian