Epigraf:
En gÄng möttes Igelkotten och Nalle i skogen.
â Hej, Igelkott!
â Hej, Nalle!
SÄ, ord för ord, skÀmt för skÀmt, fick Igelkotten en kÀnga av Nalle ...
Under texten följer tankar frĂ„n vĂ„r teamledare och produktutvecklingschef RAS â Igor Marnat om arbetskonflikters specifika natur och möjliga hanteringsmetoder.

De flesta konflikter vi stöter pÄ pÄ jobbet följer ett mönster som liknar det som beskrivs ovan i epigrafen. Det finns flera deltagare, som frÄn början Àr instÀllda pÄ varandra vÀnligt, de försöker lösa en viss frÄga, men i slutÀndan förblir problemet olöst och relationerna mellan diskussionsdeltagarna blir av nÄgon anledning försÀmrade.
Livets mÄngfald innebÀr att det finns variationer i det beskrivna scenariot. Ibland Àr relationerna mellan deltagarna inte sÀrskilt bra frÄn början, ibland finns det inte ens en specifik frÄga som krÀver omedelbar lösning (som i epigrafen), ibland förblir relationerna oförÀndrade Àven efter diskussionen, men frÄgan blir ÀndÄ inte löst.
Vad har dÄ alla situationer som kan definieras som arbetskonflikter gemensamt?

För det första involverar det tvĂ„ eller fler parter. Dessa parter kan befinna sig pĂ„ olika nivĂ„er inom organisationen, ha en jĂ€mlik relation (kollegor i ett team), eller vara pĂ„ olika hierarkiska nivĂ„er (chef â anstĂ€lld), vara individuella (anstĂ€lld) eller gruppbaserade (vid konflikter mellan en anstĂ€lld och ett team eller mellan tvĂ„ team), och sĂ„ vidare. NivĂ„n av förtroende mellan deltagarna pĂ„verkar starkt sannolikheten för konflikt och hur lĂ€tt den kan lösas. Ju bĂ€ttre parterna kĂ€nner varandra och ju högre nivĂ„ av förtroende, desto större chans att de kommer överens. Till exempel Ă€r anstĂ€llda i ett distribuerat team som aldrig trĂ€ffats personligen mer benĂ€gna att hamna i konflikt vid lösningen av en enkel arbetsfrĂ„ga Ă€n personer som har trĂ€ffats personligen Ă„tminstone nĂ„gra gĂ„nger. DĂ€rför Ă€r det mycket viktigt att sĂ€kerstĂ€lla regelbundna personliga möten för alla teammedlemmar i distribuerade team.
För det andra, i en konfliktsituation pĂ„ jobbet befinner sig parterna i en situation dĂ€r de mĂ„ste lösa en frĂ„ga som Ă€r viktig för nĂ„gon av parterna, för dem bĂ„da eller för organisationen som helhet. I och med situationens karaktĂ€r har parterna vanligtvis tillrĂ€ckligt med tid och olika metoder för att lösa den (formella, informella, möten, brev, beslutsfattande frĂ„n ledning, teamets mĂ„l och planer, förekomsten av en hierarki, etc.). Detta skiljer sig frĂ„n situationer dĂ€r man löser en arbetsrelaterad (eller icke-arbetsrelaterad) frĂ„ga i organisationen, till exempel att stĂ€lla den viktiga frĂ„gan: âHej, grabben, vilket omrĂ„de kommer du ifrĂ„n?!â pĂ„ gatan, eller konflikten i epigrafen. Vid lösningen av en arbetsfrĂ„ga Ă€r kvaliteten pĂ„ arbetsprocessen och kulturen för hur frĂ„gor löses i teamet av betydelse.
För det tredje Àr en avgörande faktor för konflikten (sett utifrÄn vÄrt diskussion) det faktum att parterna i processen inte kan komma fram till en lösning som Àr acceptabel för alla parter pÄ egen hand. Situationen krÀver ett ingripande frÄn en tredje part, en extern medlare. Denna punkt kan tyckas kontroversiell, men om en konflikt har lösts framgÄngsrikt utan ingripande av en extern medlare, har frÄgan lösts framgÄngsrikt utan att relationerna mellan parterna försÀmrats. Detta Àr en situation vi troligen inte ens fÄr höra talas om, eller fÄr veta om av en slump efter att den har lösts. Ju fler frÄgor ett team kan lösa pÄ egen hand, desto mer effektivt kommer det att arbeta.
En annan karakteristisk egenskap hos konflikten som Àr vÀrt att beröra Àr graden av emotionell intensitet vid lösningen. Konflikten Àr inte nödvÀndigtvis kopplad till hög emotionell temperatur. Deltagarna behöver inte nödvÀndigtvis skrika och vifta med armarna för att situationen faktiskt ska vara konfliktfylld. Om en frÄga inte löses och en viss emotionell spÀnning Àr nÀrvarande (Àven om den kanske inte uttrycks tydligt utÄt), innebÀr det att vi har att göra med en konfliktsituation.
Bör man verkligen ingripa i konfliktiska situationer, eller Àr det bÀttre att lÄta dem lösa sig sjÀlva och vÀnta pÄ att problemet ska försvinna? Ja. Det Àr inte alltid inom din makt eller kompetens att helt lösa en konflikt, men i varje situation, i en konflikt av vilken storlek som helst, kan du inta en vuxen position, vilket i sin tur kan dra in nÄgra fler personer omkring dig, mildra de negativa konsekvenserna av konflikten och bidra till dess lösning.
Innan vi gÄr igenom nÄgra exempel pÄ konfliktiska situationer, lÄt oss stanna vid nÄgra viktiga punkter som Àr gemensamma för alla konflikter.
NÀr man löser en konflikt Àr det viktigt att vara över striden, istÀllet för att vara mitt i den (detta kallas ibland att "inta en metaposition"), det vill sÀga att inte vara en del av beslutsprocessen för nÄgon av sidorna. Annars, frÄn att vara en extern medlare som hjÀlper till med lösningen, kommer du bara att stÀrka en parts position pÄ bekostnad av den andra. Vid beslutsfattande Àr det viktigt att beslutet accepteras moraliskt av alla parter, som det heter, "köpt". SÄ, Àven om parterna inte Àr entusiastiska över det beslut som fattats, bör de Ätminstone vara uppriktigt överens om att följa det. Som man sÀger, vara i stÄnd att vara oense men ÀndÄ förpliktad. Annars kommer konflikten bara att förÀndras; den glödande elden kommer att förbli under torven och vid nÄgot tillfÀlle ofrÄnkomligt blossa upp igen.
Den andra punkten, som delvis Ă€r relaterad till den första, Ă€r att om du har bestĂ€mt dig för att delta i lösningen av konflikten, sĂ„ bör du ta det pĂ„ största allvar nĂ€r det kommer till kommunikation och att förstĂ„ kontexten. Prata personligen med varje part. Separat med varje part, till att börja med. Nöj dig inte med e-post. Vid distribuerade team â prata Ă„tminstone via videokonferens. Nöj dig inte med rykten och Ă„tersagor frĂ„n vittnen. FörstĂ„ historien, vad varje part vill, varför de vill ha det, vad de förvĂ€ntar sig, om de har försökt lösa frĂ„gan tidigare, vad som kommer att hĂ€nda om den inte löses, vilka lösningar de ser, hur de uppfattar den andra partens position, vad de anser Ă€r rĂ€tt eller fel, osv. Ladda ner all möjlig kontext i ditt huvud, opartiskt, med antagandet att alla har sina skĂ€l. Du Ă€r inte inne i konflikten, du Ă€r utanför den, i en meta-position. Om kontexten endast Ă€r tillgĂ€nglig i en e-posttrĂ„d â lĂ€s dĂ„ hela den och relaterade diskussionstrĂ„dar och dokument. Efter att du har lĂ€st â prata Ă€ndĂ„ i telefon. NĂ€stan garanterat kommer du att höra nĂ„got viktigt som inte finns i e-posten.
Den tredje viktiga punkten handlar om det övergripande tillvÀgagÄngssÀttet i kommunikationen. Det Àr vanliga saker, inget utöver det vanliga, men de har stor betydelse. Försök inte spara tid, prata med alla deltagare, kritisera inte personen, utan betrakta konsekvenserna av deras handlingar (inte "du Àr oförskÀmd", utan "kanske kan folk bli sÄrade av det hÀr"). Ge möjlighet till att behÄlla sina ansikten, ha diskussioner personligen och inte framför kören.
Konflikter orsakas vanligtvis av en av tvÄ anledningar. Den första har att göra med huruvida en person i konflikten befinner sig i en vuxens position eller ett barns position (mer om detta nedan). Det handlar om deras emotionella mognad, förmÄga att hantera sina kÀnslor (vilket för övrigt inte alltid Àr kopplat till deras Älder). Den andra vanliga orsaken Àr brister i arbetsprocessen, vilket skapar grÄzoner dÀr ansvaret Àr otydligt mellan deltagarna, och parternas förvÀntningar Àr inte tydliga för varandra, rollerna i processen Àr otydliga.
I konflikthantering (liksom i alla andra frĂ„gor) mĂ„ste chefen ha i Ă„tanke tre perspektiv: det kortsiktiga â att lösa frĂ„gan/konflikten hĂ€r och nu, det medellĂ„nga â att minska risken för att en liknande konflikt uppstĂ„r igen, och det lĂ„ngsiktiga â att odla en vuxen kultur i teamet.
Inom oss alla finns ett inre barn, ungefĂ€r tre till fyra Ă„r gammalt. Det mesta av tiden pĂ„ jobbet sover det, men ibland vaknar det och tar över. Barnet har sina egna prioriteringar. Det Ă€r viktigt för det att hĂ€vda att detta Ă€r dess sandlĂ„da, att mamma Ă€lskar det mer, att dess leksak Ă€r bĂ€st (designen Ă€r överlĂ€gsen, det programmerar bĂ€ttre Ă€n alla andra, âŠ). I konfliktens stund kan barnet krama sina leksaker, stampa med fötterna och slĂ„ med en spade, men det kan inte lösa vuxna frĂ„gor (designarkitektur, metoder för automatisk testning, tidsplaner för release, osv.), det tĂ€nker inte i termer av nytta för teamet. Man kan uppmuntra, trösta och skicka barnet att sova, och be det kalla pĂ„ sin vuxna. Innan en diskussion i konfliktens kontext börjar, se till att du pratar med den vuxna och inte med barnet, och stĂ„ sjĂ€lv pĂ„ den vuxnas sida. Om ditt Ă€kta mĂ„l just nu Ă€r att lösa en allvarlig frĂ„ga, Ă€r du pĂ„ den vuxna mĂ€nniskans position. Om ditt mĂ„l Ă€r att stampa och slĂ„ med en spade â Ă€r det en barnslig position. Skicka ditt inre barn att sova och kalla pĂ„ den vuxna, eller skjuta upp diskussionen. En mĂ€nniska fattar ett kĂ€nslomĂ€ssigt beslut och letar sedan efter en rationell motivering. Ett beslut som fattas av barnet, baserat pĂ„ barnets prioriteringar, kommer inte att vara optimalt.
Förutom beteendet vid en konflikt, karakteriseras en barns eller vuxens position ocksĂ„ av den nivĂ„ av ansvar som personen Ă€r beredd att ta pĂ„ sig. I extrema fall kan en programmerares barnsliga position, som jag har stött pĂ„ flera gĂ„nger, se ut sĂ„ hĂ€r: jag har skrivit koden, skickat den för granskning â mitt arbete Ă€r klart. Granskarna ska se över den och slĂ„ samman den, QA ska kontrollera den, om det finns problem â de meddelar mig. Rent mĂ€rkligt, Ă€ven ganska vuxna och erfarna mĂ€nniskor beter sig ibland pĂ„ detta sĂ€tt. I den andra Ă€nden av skalan anser en person sig ansvarig för att hans kod fungerar, Ă€r tĂ€ckt av tester, har kontrollerats av honom personligen, har framgĂ„ngsrikt klarat granskningen (om det behövs, inget problem att pingla granskarna, diskutera frĂ„gor muntligt, osv.) och har blivit sammanfogad, QA kommer att fĂ„ hjĂ€lp vid behov, testscenarier kommer att dokumenteras, osv. I normala fall befinner sig programmeraren antingen nĂ€rmare den vuxna Ă€nden av skalan frĂ„n början, eller rör sig dit allteftersom hen fĂ„r mer erfarenhet (förutsatt att den rĂ€tta kulturen odlas i teamet). I extrema fall fortsĂ€tter hen att arbeta, oftast med en barnslig position, vilket leder till att hen och teamet periodiskt fĂ„r problem och konflikter.
Att skapa en korrekt och vuxen kultur i teamet Ă€r en viktig uppgift för varje chef. Det krĂ€ver lĂ„ng tid och dagliga anstrĂ€ngningar, men resultatet Ă€r vĂ€rt det. Det finns tvĂ„ sĂ€tt att pĂ„verka teamkulturen â genom personlig exempel (som andra kommer att följa, teamet ser alltid pĂ„ ledaren) och genom att diskutera och uppmuntra korrekt beteende. HĂ€r finns det inget mystiskt eller vĂ€ldigt formellt, bara nĂ€r man diskuterar problem, notera vad man kunde ha gjort pĂ„ ett annat sĂ€tt, understryka nĂ€r nĂ„got har lösts korrekt, beröm, och markera detta vid analyser av releaser, osv.
LÄt oss övervÀga nÄgra typiska konfliktsituationer, frÄn enkla till komplexa:

Konflikter som inte rör arbetsfrÄgor
Det hÀnder ganska ofta att det uppstÄr konflikter pÄ jobbet som inte rör arbetsfrÄgor. Deras uppkomst och lÀtthet att lösa Àr vanligtvis direkt kopplad till nivÄn av emotionell intelligens hos deltagarna, deras nivÄ av vuxenhet, och har ingen koppling till arbetsprocessens felfrihet eller ofullkomlighet.
Typiska exempel Ă€r att nĂ„gon inte anvĂ€nder tvĂ€ttmaskinen eller duschen tillrĂ€ckligt ofta, vilket irriterar andra, nĂ„gon tycker att det Ă€r kvavt medan en annan vill ha fönstret öppet för luft, nĂ„gon Ă€r för högljudd medan andra behöver tystnad för att arbeta, och sĂ„ vidare. Det Ă€r bĂ€st att inte dra ut pĂ„ konflikter av denna sort och inte lĂ„ta dem utvecklas fritt. De kommer inte att lösa sig sjĂ€lva och kommer dagligen att distrahera frĂ„n arbetet och förstöra stĂ€mningen i teamet. Lyckligtvis brukar det inte vara stora problem att lösa dem â det rĂ€cker ofta med att lugnt prata (sĂ„klart en och en) med en kollega som försummar hygien, sĂ€kerstĂ€lla bekvĂ€m placering av personer som föredrar tystnad/kylighet, köpa ljuddĂ€mpande hörlurar eller sĂ€tta upp skĂ€rmar, etc.
Ett annat exempel som jag stött pÄ flera gÄnger under min karriÀr Àr psykisk inkompatibilitet bland teammedlemmar. Av nÄgon anledning kan vissa personer helt enkelt inte arbeta tillsammans, varje kommunikation slutar i brÄk. Ibland beror detta pÄ att mÀnniskor har helt olika Äsikter om en brÀnnande frÄga (vanligtvis politisk) och inte kan lÀmna dessa bakom sig pÄ jobbet. Att försöka övertyga dem att tolerera varandra eller Àndra sitt beteende Àr oftast en meningslös sysselsÀttning. Det enda undantaget jag har stött pÄ Àr unga kollegor med en öppen instÀllning, deras beteende kan fortfarande gradvis Àndras genom periodiska samtal. Vanligtvis löses frÄgan framgÄngsrikt genom att dela upp dem i olika team, eller Ätminstone ge möjlighet att sÀllan korsa varandras vÀgar pÄ jobbet.
I alla ovan nÀmnda situationer Àr det viktigt att prata med alla deltagare individuellt, diskutera situationen, frÄga om de överhuvudtaget ser ett problem i detta fall, och frÄga vilka lösningar de anser Àr möjliga, samt sÀkerstÀlla deras delaktighet i beslutsprocessen.
Ur ett arbetsprocessoptimeringsperspektiv (medeldistans som jag nÀmnde), finns det inte mycket som kan göras pÄ denna punkt, den enda möjligheten till optimering Àr att ta hÀnsyn till kompatibilitetsfaktorn vid team's bildande och i förvÀg undvika att sÀtta ihop personer som kommer att skapa konflikter.
Ur ett teamkultursperspektiv uppstÄr sÄdana situationer mycket sÀllan i team med en mogen kultur, dÀr folk respekterar teamet och kollegorna och kan lösa frÄgor pÄ egen hand. Dessutom löses sÄdana konflikter mycket enklare (ofta automatiskt) i team dÀr tilliten Àr hög, folk har arbetat tillsammans lÀnge och/eller ofta kommunicerar utanför arbetet.
Konflikter relaterade till arbetsfrÄgor:
SÄdana konflikter orsakas vanligtvis av bÄda anledningarna samtidigt, bÄde emotionell (det faktum att nÄgon av deltagarna inte Àr i en vuxen roll) och ofullkomligheten i sjÀlva arbetsprocessen. Den vanligaste typen av konflikter som jag har stött pÄ Àr konflikter i processen av kodgranskning eller arkitekturdiskussioner mellan utvecklarna.
Jag skulle hÀr lyfta fram tvÄ typiska fall:
1) I det första fallet kan utvecklaren inte fÄ kodgranskning av en kollega. Patchen har skickats för granskning, och ingenting hÀnder. Vid första anblick verkar det inte finnas nÄgot uppenbart konflikt mellan de tvÄ sidorna, men om man tÀnker efter Àr detta helt klart en konflikt. ArbetsfrÄgan löses inte, en av sidorna (den som vÀntar pÄ granskning) upplever tydlig obehag. En extrem underkategori av detta fall Àr utveckling i communityn eller i olika team, dÀr granskaren kan vara ointresserad av just den specifika koden, och pÄ grund av arbetsbelastning eller andra omstÀndigheter kan helt enkelt ignorera begÀran om granskning, och en extern domare (gemensam för bÄda parter, en manager) kanske överhuvudtaget inte finns.
TillvĂ€gagĂ„ngssĂ€ttet för att lösa sĂ„dana situationer relaterar till lĂ„ngsiktig perspektiv och en vuxen mĂ€nniskas kultur. För det första fungerar rimlig aktivitet. Man bör inte förvĂ€nta sig att kod som hĂ€nger i granskning automatiskt fĂ„r uppmĂ€rksamhet frĂ„n granskaren. Det Ă€r nödvĂ€ndigt att hjĂ€lpa granskare att se den. Ping-a nĂ„gra personer, stĂ€ll en frĂ„ga pĂ„ svaret, delta i diskussioner. Det Ă€r uppenbart att att vara pĂ„trĂ€ngande snarare skadar Ă€n hjĂ€lper, sĂ„ sunt förnuft mĂ„ste anvĂ€ndas. För det andra fungerar förberedelser mycket bra. Om teamet förstĂ„r vad som hĂ€nder och varför, varför denna kod överhuvudtaget behövs, designen har diskuterats och godkĂ€nts i förvĂ€g av alla, kommer mĂ€nniskor att vara mer benĂ€gna att uppmĂ€rksamma sĂ„dan kod och ta den i bruk. För det tredje fungerar auktoritet. Om du vill att andra ska granska din kod â granska mycket sjĂ€lv. Gör kvalitetsgranskningar, med verkliga verifieringar, verkliga tester, anvĂ€ndbara kommentarer. Om ditt nick Ă€r kĂ€nt i teamet pĂ„ ett bra sĂ€tt, ökar chansen att din kod fĂ„r uppmĂ€rksamhet.
Ur ett arbetsprocessperspektiv kan möjliga förbÀttringar hÀr vara att sÀtta rÀtt prioriteringar, inriktade pÄ att hjÀlpa utvecklaren att nÄ sina och teamets mÄl (granska andras kod, skriva inlÀgg i communityn, stödja koden med arkitekturbeskrivningar, dokumentation, tester, delta i diskussioner med communityn, etc.), förhindra att patchar fastnar för lÀnge i kön, och sÄ vidare.
2) Det andra vanliga fallet av konflikter vid kod- eller designgranskning Àr olika uppfattningar om tekniska frÄgor, kodningsstil, val av verktyg. Den nivÄ av förtroende som finns mellan deltagarna, tillhörigheten till samma team och erfarenheten av att arbeta tillsammans har stor betydelse i detta avseende. En ÄtervÀndsgrÀnd uppstÄr nÀr nÄgon av deltagarna intar en barnslig position och inte försöker höra vad den andra vill förmedla. Ofta kan den föreslagna ansatsen frÄn den andra sidan och den ansats som ursprungligen föreslogs, bÄda fungera framgÄngsrikt och det har ingen avgörande betydelse vilken som vÀljs.
En gÄng förberedde en programmerare i mitt team (lÄt oss kalla honom Pasha) en patch med Àndringar i systemet för paketdistribution som utvecklades och underhölls av kollegor frÄn en annan avdelning. En av dem (Igor) hade en stark Äsikt om hur Linux-tjÀnster skulle konfigureras vid distributionen av paket. Denna Äsikt skilde sig frÄn den metod som föreslogs i patchen, och de kunde inte komma överens. Som vanligt var tidsfristen knapp, och vi behövde nÄ ett beslut; nÄgon av dem behövde ta en vuxen roll. Pasha erkÀnde att bÄda metoderna hade sin plats, men han ville att hans alternativ skulle gÄ igenom eftersom det inte fanns nÄgra tydliga tekniska fördelar med nÄgot av alternativen.
VÄr diskussion sÄg ungefÀr ut sÄ hÀr (mycket schematiskt, sjÀlvklart, samtalet varade i en halv timme):
â Pasha, vi har feature freeze om nĂ„gra dagar. Det Ă€r viktigt att vi fĂ„r allt klart och pĂ„börjar testningen sĂ„ snabbt som möjligt. Hur ska vi ta oss förbi Igor?
â Han vill konfigurera tjĂ€nsterna pĂ„ ett annat sĂ€tt, han har klistrat in kommentarer till mig ...
â Och vadĂ„, stora förĂ€ndringar, mycket arbete?
â Nej, det tar bara ett par timmar, men slutresultatet blir ju detsamma, det kommer att fungera Ă€ndĂ„, varför göra detta? Jag har gjort nĂ„got som fungerar, lĂ„t oss godkĂ€nna det.
â Hör du, hur lĂ€nge har ni diskuterat detta?
â Vi har stĂ„tt still i nĂ€stan en och en halv vecka.
â Eh ... kan vi lösa frĂ„gan som redan tagit en och en halv vecka pĂ„ bara ett par timmar, och gör inte det?
â Ja, men jag vill inte att Igor ska tro att jag vikit mig ...
â Hör du, vad Ă€r viktigast för dig, att fĂ„ ut releasen med din lösning inuti, eller att slĂ„ ner Igor? Vi kan slĂ„ ner honom, men dĂ„ finns det en bra chans att vi missar releasen.
â Tja ... det skulle ju vara kul att fĂ„ Igor pĂ„ fall, men visst, releasen Ă€r viktigare, jag gĂ„r med pĂ„ det.
â Ăr det verkligen sĂ„ viktigt för dig vad Igor tycker? Ărligt talat, han bryr sig överhuvudtaget inte, han vill bara ha en enhetlig metod i olika delar av den grej han ansvarar för.
â Okej, lĂ„t mig göra som han ber i kommentarerna, sĂ„ börjar vi testningen.
â Tack, Pasha! Jag var sĂ€ker pĂ„ att av er tvĂ„ skulle du visa dig vara den mer mogna, Ă€ven om Igor Ă€r Ă€ldre Ă€n du :)
FrÄgan löstes, releasen slÀpptes i tid, Pasha kÀnde inget sÀrskilt missnöje eftersom han sjÀlv föreslog lösningen och genomförde den. Igor var överlag nöjd, eftersom hans Äsikter beaktades och de gjorde det som han föreslog.
En annan typ av samma konflikt handlar om valet mellan tekniska lösningar/bibliotek/metoder i ett projekt, sÀrskilt i ett distribuerat team. I ett projekt som positionerades som ett som anvÀnde C/C++, visade det sig till slut att den tekniska ledningen var kategoriskt emot anvÀndningen av STL (Standard Template Library). Detta Àr ett standardbibliotek för sprÄket som förenklar utvecklingen, och vÄrt team var mycket vana vid det. Det visade sig att projektet var mycket nÀrmare C Àn C++, vilket inte inspirerade teamet, eftersom ledningen gjorde en insats och anstÀllde riktigt duktiga C++-utvecklare. Samtidigt hade den amerikanska delen av teamet, bÄde ingenjörer och chefer, arbetat i företaget lÀnge och var vana vid den nuvarande situationen; de var nöjda med det. Den ryska delen av teamet samlades dÀremot pÄ kort tid, inom nÄgra veckor (inklusive mig). Den ryska delen av teamet ville kategoriskt inte ge upp det vanliga tillvÀgagÄngssÀttet för utveckling.
OÀndliga skriftliga diskussioner började mellan tvÄ kontinenter, med meddelanden pÄ tre till fyra skÀrmar som flög fram och tillbaka, i grupputskick och personligt, frÄn programmerare till programmerare och chefer. Som det ofta Àr, lÀste ingen, förutom författarna och deras entusiastiska supportrar, meddelanden av den storleken. Chattarna knakade av spÀnning och skickade fram och tillbaka mÄnga skÀrmstora övervÀganden kring tekniska fördelar med STL, hur vÀl testad och sÀker den Àr, och hur underbart livet Àr med den och hur hemskt det Àr utan.
Det hÀr pÄgick ganska lÀnge, tills jag till slut insÄg att vi diskuterade de tekniska aspekterna av frÄgan, men problemet var i realiteten inte tekniskt. Problemet handlar inte om fördelarna eller nackdelarna med STL eller svÄrigheten att arbeta utan den. Problemen var snarare organisatoriska. Vi behövde bara förstÄ hur företaget som vi arbetade pÄ var organiserat. Ingen av oss hade tidigare erfarenhet av att jobba i ett sÄdant företag. Problemet var att efter att ha utvecklat koden och slÀppt den i produktion, var det helt andra personer frÄn andra team, frÄn andra lÀnder, som skötte underhÄllet. Detta enorma ingenjörsteam med flera tiotusentals ingenjörer (totalt) hade bara rÄd med det mest grundlÀggande tekniska minimum, sÄ att sÀga, minimum minimorum. Allt som gick utöver det ingenjörsstandard som fanns i företaget kunde fysiskt sett inte stödjas i framtiden. NivÄn pÄ teamet definieras av nivÄerna hos de svagaste medlemmarna. Efter att vi insÄg den verkliga motivationen för den amerikanska delen av teamet, togs denna frÄga bort frÄn agendan och vi utvecklade och slÀppte framgÄngsrikt produkten tillsammans, dÀr vi anvÀnde de standarder som antagits i företaget. I detta fall fungerade e-post och chattar dÄligt, och för att nÄ en gemensam grund krÀvdes flera resor och mycket personlig kommunikation.
Ur arbetsprocessens perspektiv skulle det i det hĂ€r specifika fallet ha varit till hjĂ€lp att ha en beskrivning av de verktyg som anvĂ€ndes, kraven pĂ„ dem, begrĂ€nsningar för att lĂ€gga till nya och en motivering för dessa begrĂ€nsningar. SĂ„dana dokument motsvarar ungefĂ€r de som beskrivs i punkterna Reuse Strategy och Development Environment i handboken âManagerâs Handbook for Software Developmentâ, som utvecklades i . Trots sin Ă„lder beskriver den utmĂ€rkt alla huvudsakliga aktiviteter och steg i planeringen av programvaruutveckling av denna typ. TillĂ€gget av sĂ„dana dokument förenklar diskussionen om vilka komponenter och metoder som kan anvĂ€ndas i produkten och varför.
NÀr det gÀller kulturen Àr det uppenbart att med en mer mogen instÀllning, dÀr parterna försöker höra och förstÄ den verkliga motivationen bakom kollegornas agerande och agera utifrÄn projektets och teamets prioriteringar snarare Àn personligt ego, skulle konflikten ha lösts enklare och snabbare.
I ett annat fall dÀr valet av teknisk lösning orsakade en konflikt tog det mig ocksÄ lÄng tid att förstÄ motivationen hos en av parterna (fallet var verkligen ovanligt), men nÀr motivationen vÀl var klar blev beslutet uppenbart.
Situationer Ă€r som följer: I ett team med ungefĂ€r 20 personer dyker en ny utvecklare upp, lĂ„t oss kalla honom Stas. VĂ„rt standardkommunikationsverktyg i teamet var dĂ„ Skype. Som visade sig senare var Stas en stor fan av öppna standarder och öppen kĂ€llkod, och han anvĂ€nde endast verktyg och operativsystem vars kĂ€llkod fanns tillgĂ€nglig offentligt och som anvĂ€nde offentligt beskriva protokoll. Skype tillhörde inte dessa verktyg. Vi spenderade en stor mĂ€ngd tid pĂ„ att diskutera för- och nackdelar med detta tillvĂ€gagĂ„ngssĂ€tt, försöka starta alternativ till Skype pĂ„ olika operativsystem, försöka övertyga Stas att teamet skulle byta till andra standarder, skriva till honom personligen via e-post, ringa honom personligen via telefon, köpa honom en andra dator speciellt för Skype, etc. Till slut insĂ„g jag att detta problem i grunden inte var tekniskt eller organisatoriskt, det var mer av en ideologisk frĂ„ga, man kan till och med sĂ€ga en religiös frĂ„ga (för Stas). Ăven om vi slutligen kopplade ihop Stas med Skype (vilket stod oss dyrt flera mĂ„nader), skulle problemet uppstĂ„ igen med vilket annat verktyg som helst. Jag hade ingen verklig möjlighet att Ă€ndra Stas vĂ€rdegrund, och det fanns ingen grund för att försöka förĂ€ndra teamets vĂ€rdegrund, som fungerade utmĂ€rkt i denna miljö. MĂ€nniskor och företag var helt enkelt orthogonala i sina vĂ€rderingar. I sĂ„dana situationer Ă€r en bra lösning oftast organisatorisk. Vi flyttade Stas till ett annat team dĂ€r han var mer i sitt rĂ€tta element.
Anledningen till denna konflikt, enligt min mening, ligger i diskrepansen mellan den personliga kulturen hos en specifik person (som har en stark Äsikt som hindrar honom frÄn att kompromissa) och företagets kultur. I detta fall Àr det givetvis ett misstag frÄn ledarens sida. Det var fel frÄn början att anstÀlla honom för ett projekt av denna typ. Stas övergick till ett projekt inom öppen kÀllkod och trivs utmÀrkt dÀr.
Ett bra exempel pĂ„ en konflikt som orsakats av bĂ„de utvecklarens barnsliga instĂ€llning och brister i arbetsprocessen Ă€r en situation dĂ€r utvecklaren och QA-teamet har olika förvĂ€ntningar om fĂ€rdigstĂ€llandet av en funktion som skickats till QA, i avsaknad av en definition av klart. Utvecklaren trodde att det var tillrĂ€ckligt att skriva koden och slĂ€ppa över funktionen till QA â dĂ€r skulle de fixa det. Han var för övrigt en ganska vuxen och erfaren programmerare, men han hade en lĂ„g inre kvalitetsstandard. QA var inte nöjda med detta och krĂ€vde att han skulle visa och beskriva för dem vad han sjĂ€lv hade kontrollerat, samt de ville ha ett testscenario. De hade tidigare haft problem med funktionalitet frĂ„n denna utvecklare och ville inte slösa sin tid igen. För övrigt hade de rĂ€tt â funktionen fungerade faktiskt inte, koden hade han inte kontrollerat innan den skickades till QA.
För att lösa situationen bad jag honom visa mig att allt verkligen fungerade (det gjorde det inte, och han fick ÄtgÀrda det), vi diskuterade definitionen av klart med teamet och QA (vi gjorde den inte skriftlig eftersom vi inte ville byrÄkratisera processen för mycket), och snart skildes vi frÄn denna specialist (till allas lÀttnad).
NÀr det gÀller arbetsprocessen Àr möjliga förbÀttringar i detta fall att ha en definition av klart, krav pÄ att varje funktion ska ha enhetliga och integrerade tester, samt en beskrivning av testerna som genomförts av utvecklaren. I ett av projekten mÀtte vi testtÀckningen av koden under CI och om tÀckningsgraden sjönk efter att en patch lades till, mÀrktes testerna som misslyckade, det vill sÀga, endast ny kod kunde lÀggas till om det fanns nya tester för den.
Ănnu ett typiskt exempel pĂ„ en konflikt som Ă€r nĂ€ra kopplad till organisationen av arbetsprocessen. Vi har en produkt, ett utvecklingsteam för denna produkt, en supportteam och en kund. Kunden fĂ„r problem med produkten och vĂ€nder sig till supporten. Supporten analyserar problemet och inser att problemet ligger i produkten, de överlĂ€mnar problemet till produktteamet. Produktteamet har en hektisk period, utgivningen nĂ€rmar sig, sĂ„ Ă€rendet med kundens problem, som hamnat bland de andra Ă€rendena hos utvecklaren, som det Ă€r tilldelat, hĂ€nger utan uppmĂ€rksamhet i flera veckor. Supporten tror att utvecklaren arbetar med kundens problem. Kunden vĂ€ntar och hoppas att deras problem hanteras. I verkligheten hĂ€nder det ingenting. NĂ„gra veckor senare bestĂ€mmer sig kunden Ă€ntligen för att kolla upp framstegen och frĂ„gar supporten hur det gĂ„r. Supporten frĂ„gar utvecklingen. Utvecklaren rycker till, gĂ„r igenom listan med Ă€renden och upptĂ€cker Ă€rendet frĂ„n kunden. Genom att lĂ€sa kundens Ă€rende förstĂ„r han att informationen som behövs för att lösa problemet Ă€r otillrĂ€cklig och att han behöver fler loggar och dumpningar. Supporten begĂ€r ytterligare information frĂ„n kunden. Och hĂ€r inser kunden att ingen har arbetat med deras problem under hela denna tid. Och Ă„skan kommer att slĂ„ ...
I denna situation Ă€r lösningen av sjĂ€lva konflikten ganska uppenbar och linjĂ€r (att fixa produkten, uppdatera dokumentationen och testerna, lugna kunden, slĂ€ppa en hotfix, etc.). Det Ă€r viktigt att analysera arbetsprocessen och förstĂ„ vem som ansvarar för att organisera samarbetet mellan de tvĂ„ teamen, varför en sĂ„dan situation ens blev möjlig. Det Ă€r uppenbart att nĂ„got mĂ„ste Ă„tgĂ€rdas i processen â nĂ„gon mĂ„ste övervaka den övergripande bilden utan pĂ„minnelser frĂ„n kunderna, proaktivt. Ărenden frĂ„n kunden bör sĂ€rskiljas bland de andra Ă€rendena hos utvecklarna. Supporten bör se om utvecklingen arbetar med deras Ă€renden just nu, och om inte â nĂ€r de kan börja arbeta, nĂ€r ett resultat kan förvĂ€ntas. Supporten och utvecklingen bör regelbundet kommunicera och diskutera statusen för Ă€rendena, insamlingen av den information som behövs för felsökning bör automatiseras sĂ„ mycket som möjligt, osv.
Precis som hur en fiende pÄ krig försöker slÄ mot skarven mellan tvÄ enheter, visar det sig ocksÄ att den mest kÀnsliga och sÄrbara punkten i arbetet ofta Àr interaktionen mellan teamen. Om support- och utvecklingscheferna Àr tillrÀckligt erfarna kan de sjÀlva ÄtgÀrda processen; om inte, kommer processen fortsatt att skapa konflikter och problem tills en chef trÀder in för att lösa situationen.
Ett annat karakteristiskt exempel som jag ofta har stött pÄ i olika företag Àr en situation dÀr produkten utvecklas av ett team, de automatiska integrations testerna av ett annat team, och den infrastruktur dÀr allt detta körs underhÄlls av ett tredje team. Problem under testkörningarna uppstÄr stÀndigt, och orsaken till problemen kan ligga antingen i produkten, testerna eller infrastrukturen. Det Àr ofta problematiskt att enas om vem som ska utföra den initiala problemanalysen, rapportera buggar, bearbeta loggar frÄn produkten, testerna och infrastrukturen, etc. Konflikter hÀr Àr ganska frekventa och samtidigt enhetliga. Vid hög kÀnslomÀssig intensitet faller deltagarna ofta tillbaka i en barnslig position, med diskussioner av typen: 'varför ska jag bry mig om det hÀr?', 'de har oftare problem', osv.
Ur arbetsprocessens perspektiv beror de specifika stegen för att lösa frÄgan pÄ teamens sammansÀttning, typen av tester och produkten, osv. I ett av projekten införde vi periodiska vakter dÀr teamen turades om att övervaka testerna under en vecka. I ett annat projekt utfördes alltid den initiala analysen av testutvecklarna, men denna analys var ganska grundlÀggande och produkten var tillrÀckligt stabil, sÄ det fungerade ganska bra. Det viktiga Àr att sÀkerstÀlla processens transparens, tydlighet i förvÀntningarna för alla parter och en kÀnsla av rÀttvisa i situationen för alla.
Ăr konflikter inom organisationen ett problem, eller Ă€r det ett dĂ„ligt tecken att det ofta (eller till och med periodiskt) uppstĂ„r konflikter i ditt team? I stort sett nej, eftersom nĂ€r det sker tillvĂ€xt, utveckling och dynamik, uppstĂ„r frĂ„gor som tidigare aldrig har lösts, vilket kan leda till konflikter. Det Ă€r en indikator pĂ„ att vissa omrĂ„den behöver uppmĂ€rksammas och att det finns utrymme för förbĂ€ttringar. Det Ă€r dĂ„ligt om konflikter uppstĂ„r för ofta, Ă€r svĂ„ra eller tar lĂ„ng tid att lösa. Detta Ă€r sannolikt ett tecken pĂ„ otillrĂ€ckligt utvecklade arbetsprocesser och en bristande mognad i teamet.
KĂ€lla: habr.com
