Categories
Metod

Effektiv parprogrammering i utvecklingsorganisationer

Parprogrammering är ett effektivt verktyg för team att bli mer samspelta, dela kunskap och effektivt hantera problem som skulle ta enstaka individer betydligt längre tid att lösa var för sig än i aktivt samarbete med andra. Artikeln beskriver dynamiken i parprogrammering, varför det är så effektivt och avslutar med ett par tips som hjälper er komma igång.

Parprogrammering är ett effektivt verktyg för team att bli mer samspelta, dela kunskap och effektivt hantera problem som skulle ta enstaka individer betydligt längre tid att lösa var för sig än i aktivt samarbete med andra. Artikeln beskriver dynamiken i parprogrammering, varför det är så effektivt och avslutar med ett par tips som hjälper er komma igång.  

Ibland får man chansen att vara med om spektakulära teambuildingövningar, kanske i något varmt land där man gör spännande och kul saker tillsammans. Allför ofta ger dessa aktiviteter inte någon som helst effekt när vi åter är tillbaka i projektvardagen. Kanske tycker vi lite bättre om varandra som personer, men i verksamheten har oftast väldigt lite hänt. Någon markant skillnad märks sällan, vare sig på kort eller på längre sikt.

Denna artikel beskriver min bild av parprogrammering som ett verktyg för att bygga teamkänsla och hur parprogrammering kan hjälpa till att sprida kunskap, få saker gjorda och på sikt bygga upp en enastående förmåga till samarbete.

Positiva effekter av parprogrammering

De positiva effekterna av parprogrammering ger värde på både kort och lång sikt.

På kort sikt:

  • Ökad kodkvalitet – koden som skrivs är av högre kvalitet och innehåller ofta färre buggar eftersom individerna i paren kompletterar varandra på ett bra sätt.
  • Reducerad risk i sprinten – när flera personer hjälps åt att lösa problem som enskilda individer annars skulle riskerat att fastna i.
  • Nya idéer – medlemmarna i utvecklingsparet får snabbt nya idéer som de vill prova och driver ofta på varandra av nyfikenhet.
  • Minskat kodintegrationsproblem – koden skrivs i färre parallella spår.
  • Ökad tillfredsställelse – den högre utvecklingstakten gör att de flesta känner att mer blir gjort, de får se mer teknik och upplever en känsla av mer tillfredsställande arbete.

På lång sikt:

  • Ökad systemförståelse – förståelsen ökar snabbt för samtliga teammedlemmar, tex blir större refaktoriseringar lättare att prata om och genomföra, vilket i sin tur leder till ett mer lättunderhållet system.
  • Ökad individuell utveckling – varje individ i teamet utvecklas mycket snabbare än på egen hand och utvecklingstakten ökar drastiskt.
  • Reducerad risk – genom att minimera single points of failure, istället finns stora delar av systemkunskapen utspridd på hela teamet.
  • Utvecklar domänkunskapen – parprogrammering ökar förutsättningarna för att utveckla ett gemensamt domänspråk, något som i sin tur är en viktig byggsten i domändriven utveckling.
  • Ökat ansvarstagande – teamet lär sig att ta ett mycket större gemensamt ansvar


Parprogrammering – kortversionen

Två personer, vanligen kallade förare och navigatör, från utvecklingsteamet sätter sig ned vid samma dator för att lösa en specifik uppgift. Föraren sitter vid tangentbordet och skriver kod samt syr ihop detaljarbetet. Navigatören som inte är lika upptagen med detaljerna får en bättre överblick och jobbar i ett lite större perspektiv, dock alltid tillsammans med föraren eftersom navigatören fungerar som förarens högre medvetande och extra par ögon. Det är därför viktigt att personerna kommunicerar mycket och byter roller ofta så att de hela tiden förstår varandra. När uppgiften är klar väljer de antingen en ny uppgift tillsammans, skapar nya par eller fortsätter själva om det känns bättre.

Parprogrammering – på djupet

För att få ut det mesta av parprogrammeringen är det bra att förstå hur den fungerar vid kunskapsdelning och problemlösning. Låt oss ta en titt på dynamiken i parprogrammeringen.

Två tankeprocesser – ett programmeringsparParing quadrant

Hjärnan består av många olika delar och vissa av dessa kan inte arbeta samtidigt, till exempel kan vi inte jobba med detaljarbete och intuition/mönstermatchning samtidigt. I de allra flesta fall sysslar vi med detaljarbete som förare eller så jobbar vi med större kognitiva processer som navigatör.

Beroende på kunskapsnivåer hos förare och navigatör kan navigatören få lite olika roller:

 

 

 

Fjärrskådarenfjarrskådaren

Fjärrskådaren kompletterar en redan kunnig förare med ytterligare insikter och ideer. Fjärrskådaren som inte är upptagen med detaljarbete ser istället den stora bilden och har större chans att komma med insikter och nya idéer. Om detta känns luddigt så fundera över de insikter du får när du inte sitter vid tangentbordet; tex när du förklarar något för någon annan , är ute och promenerar eller utför någon trivial hushållssyssla. Det är ingen slump att dessa insikter inträffar away-from-keyboard. Det är snarare så att det undermedvetna redan har luskat ut svaret men att du har varit för fokuserade på att stirra på skärmen för att lyssna. När du försöker förklara för någon annan eller låter hjärnan slappna av ett tag kommer svaret som i ett “ahh ja just det ja… vad dum jag är… tack” eller “eureka”. Med en fjärrskådare får ni tillgång till många fler sådana insikter samtidigt som koden skrivs. För att göra relevanta insikter måste dock fjärrskådaren ha full koll på vad målet är och hur föraren försöker nå dit. Navigatören behöver dessutom ha minst lika stor eller större insikt som den redan kunniga föraren för att meningsfulla insikter skall äga rum.

Guiden

 

Guiden / Specialisten
Guiden / Specialisten är en navigatör som väl känner till den kod eller teknik som en novis förare arbetar i och kan guida föraren rätt. Med en navigatör kan jobbet göras på en bråkdel av tiden och samtidigt sprida viktig kunskap och samsyn kring koden. För att föraren skall få möjlighet att lära sig i sin takt är det viktigt att just föraren gör det mesta av jobbet så att kunskapen överförs på ett bra sätt.

 

Pionjären

När både navigatör och förare är noviser och ute på ny mark fungerar navigatören som medpionjär. Pionjären är mycket lik fjärrskådaren men jobbar närmre koden och bidrar oftast med mer energi och upptäckargläde istället för större insikter. Paret skapar dessutom tillsammans ett gemensamt språk och ägandeskap samt lär av varandras kodstilar.

 

 

ifrankördIfrånkörd navigatör
Par med en för uppgiften kunnig förare och novis navigatör sätter föraren i en mycket utmanande sits där denne både skall arbeta med koden, undervisa navigatören och vara lyhörd för hurvida navigatören hänger med. Det finns en mycket stor risk för att föraren kör ifrån navigatören och lämnar denne efter sig. Paret har då hamnat i en situation där navigatören varken kan bidra eller förstå vad de sysslar med. I detta läget är det bättre att försöka vända på steken och låta föraren bli navigatör/guide, alternativt avbryta och fortsätta var och en för sig.

Komplexitetsreducering

Parprogrammering är ett utmärkt sätt att hantera komplexa problem som är för stora för enskilda individer. Inom lättrörlig utveckling pratar man ofta om tvärfunktionella team som har T-formade medlemmar där T-et symboliserar en individ som har en specialkompetens men som är tillräckligt mycket generalist för att kunna förstå och vilja samverka med andra T-formade individer som har en annan specialitet. I tvärfunktionella team hjälper de olika kompetensernComplexity pair programminga varandra att tillsammans slutföra uppgifter på så kort tid som möjligt.

Ofta tar det onödigt lång tid för att enskilda personer som försöker hantera komplexa problem, med många okända faktorer eller områden, på egen hand. Genom att para ihop sig med rätt person som kan plocka bort ett par okända faktorer kan komplexitetsnivån sänkas så att det går mycket snabbare att lösa uppgiften då paret tillsammans har rätt kompetens för uppgiften.

I bilden ser vi två individer som är bra på var sin sak. Var och en skulle ensam behövt lång tid på sig att lösa ett problem som kräver både färdighet a och b men genom att samarbeta kan de enkelt lösa problemet tillsammans.

Ingen magisk universallösning

Trots att parprogrammering är ett fantastiskt verktyg för att sprida kunskap, lösa komplexa problem och bygga team så är inte parprogrammering lämpligt i alla situationer. Det är mentalt påfrestande och kräver att teamet faktiskt vill samarbeta. Parprogrammering är ofta inte heller kostnadseffektivt för enkla problem med känd teknik. Jag skulle inte rekommendera team att köra parprogrammering hela tiden utan snarare ett par timmar då och då, beroende på person och uppgift.

Teambuilding

Parprogrammering är lika mycket ett verktyg för att bygga team som för att bygga en kvalitativ kodbas. Min erfarenhet är att vi utvecklare vill lära oss det senaste och bli bättre på att få saker gjort snabbt, men att vi också tycker att det är jobbigt när vårt hantverk riskerar att kritiseras. Koden känns privat och vi är sällan så nöjda med resultatet som vi skulle vilja vara.

Att lösa koduppgifter tillsammans är ett sätt att lösa saker snabbare och accelerera lärandet och skapa bättre kod än vad vi gjort själva. Teambuildingen handlar om att med hjälp av parprogrammering bryta ned barriärer som brist på tillit, osäkerhet och oenighet. Och istället bygga upp förtroende, förmågan att lösa konflikter och en vilja att ta ett gemensamt ansvar för att leveransen.

Några tips för effektiv parprogrammering

  • Ett tydligt mål är en förutsättning för ett effektivt samarbete. Om målet känns oklart eller luddigt, avbryt och formulera ett nytt mål.
  • Dubbel uppsättning tangentbord och möss och en (helst två) stor skärm gör att det går det fort att byta roller och navigatören kan på ett naturligt sätt sätt avbryta och kommunicera med föraren.
  • Nyttja rollbyten till att granska och städa upp det som redan gjorts. Ofta kan man sammanfatta det man åstadkommit samt städa upp och checka in koden vid rollbyten. Små snabba incheckningar reducerar dessutom risken att förlora tid vid mergning.
  • Byt roller ofta så att båda hela tiden har en fräsch bild av koden och vad ni försöker åstadkomma. 7, 15 och 25 minuter fungerar bra beroende på hur man vill jobba och vad man gör. Var inte rädda att i samsyn byta oftare vid behov.
  • Lagom är bäst och det gäller också parprogrammering som är jobbigt. Man skall ta hänsyn, vara fokuserad och social under lång tid vilket är påfrestande. Hellre ett par korta givande sessioner än att dogmatiskt köra många långa pass som känns konstgjorda och leder till att man slutar parprogrammera.
  • Rätt par för uppgiften löser ofta problemet på ett tidseffektivt och kunskapsdelande sätt. Alla kommunicerar inte på ett bra sätt, punkt! Låt paren bildas där det känns naturligt och ge vid behov individuellt stöd så att fler och fler olika kombinationer kan bildas. Med tvärfunktionella parkombinationer undviker ni minivattenfall och kan slutföra uppgifter tillsammans istället för att flytta lappar till nästa kolumn på tavlan.
  • Det går visst att samarbeta med X, men kanske inte på förmiddagen och inte på ditt sätt. Med lyhördhet för andra och lite anpassning från sin egen sida kan man lära sig jobba med fantastiska individer som varit något av ett mysterium innan.

Parprogrammering är inte en effektivitetsmyt

Enstaka individer kan inte göra hur mycket som helst och många problem löses inte genom att kasta oändligt mycket folk på dom. Däremot har historien gång på gång vittnat om att små team av som gjort fantastiska saker genom att arbeta tillsammans, till exempel med par-programmering.

Ytterligare läsning

Lärande samarbete i utvecklingsorganisationer

Del ett av artikelserien handlar om de organisatoriska fördelarna med parprogrammering och korrelationen mellan exceptionella samarbeten och effektivitet.

Utveckla samarbetet med parprogrammering

Den tredje delen i artikelserien beskriver hur ett konkret genomförande kan gå till med praktiska övningar och vad som är viktigt att tänka på. Artikeln går igenom flera olika övningar som hjälper teamet bygga upp tillit, bryta ned samarbetströskeln och koppla parprogrammeringen till det dagliga arbetet.

 

Leave a Reply

Your email address will not be published.