Teamwork is a major challenge for a programmer - especially in the era of remote work. Click and read how to meet this challenge.
Bardzo popularny stereotyp programisty opisuje go jako osobę nieśmiałą, introwertyka, który boi się ludzi i siedzi gdzieś w swoim ciemnym pokoju z dala od zgiełku i Jak taka osoba ma pracować z innymi ludźmi? Czy ter stereotyp jest prawdziwy, czy jest to typowy ścieg?
Przez ostatnie 10 lat pracowałem z wieloma różnymi osobami w różnych firmach i modelach. Począwszy od pracy biurowej, poprzez pracę hybrydową, aż po 100% pracę zdalną w zespołach rozproszonych. Wiele już widziałem i zastanawiam się, czy te wszystkie zmiany w pracy programistów, które mają miejsce obecnie, zmieniają coś w sposobie ich pracy? Czy są to zmiany na lepsze czy na gorsze?
Współpraca między deweloperami
Prawdopodobnie pracujesz już w jakimś zespole, a jeśli nie to zaczniesz. Nawet jeśli jesteś freelancerem, to właśnie w ten sposób będziesz pracował i komunikował się z innymi programistami. Ta współpraca nie jest tak oczywista jak w innych zawodach. Programiści pracują razem, ale każdy ma własne słowo (i patrzy na swój komputer). Teoretycznie pracują w tym samym czasie nad tą samą rzeczą, ale w rzeczywistości fizycznie nie robią tego samego.
Murarze, gdy murują ścianę, zwykle widzą, co murują wszyscy jako zespół, pomagając sobie nawzajem w pracy. W jednym czasie fizycznie wykonują wspólnie jakąś czynność.
Programiści robią różne rzeczy. Gdyby programowanie było murarskie, każdy programista marnowałby swoją część, a na koniec przynosiłby swoją piękną budowlę murarską i chciałby ją połączyć z innymi częściami zbudowanymi przez innych murarzy-programistów.
Najgorsze jest to, że może to działać lepiej niż wiele prób scalania kodu od deweloperów. Zwłaszcza ci, którzy mają ze sobą tyle wspólnego, co drużyny José Mourinho z ofensywnym futbolem - czyli nic, a to znaczy, że się nie znają (ci programiści) często są z innych miast, krajów, mają problemy z komunikacją, właściwie nie rozmawiają ze sobą prawie wcale. Witamy w rozproszonych zespołach.
W modelu, gdy wszyscy programiści są w jednym biurze mogą w międzyczasie podejść do innych i zapytać, porozmawiać, wspólnie rozwiązać problem. W zespołach rozproszonych i pracy zdalnej nie jest to już takie proste. Szczególnie, gdy kolega śpi, bo jest z innej strefy czasowej. Jak w ogóle miałaby wyglądać ta współpraca?
Potrzebny jest proces
Proces równa się korpo, korporacja, ale czy na pewno? Czy można dostarczyć kod spełniający pewne standardy (niekoniecznie unijne) i jednocześnie zaspokajający potrzeby biznesowe, nie mając żadnego procesu? Pewnie może, ale na bardzo małą skalę. Kiedy zespół się rozrasta i w tym czasie w organizacji powstają inne zespoły, które w jakiś sposób muszą ze sobą współpracować, a to, co budują, ma w końcu tworzyć większą całość, okazuje się, że tzw. YOLO rozwój i pchanie się do flagi mainwith force niekoniecznie się sprawdza.
Przyjemne z pożytecznym
To możliwe? Programowanie jest fajne, trochę mniej fajne bo oprócz programowania trzeba jeszcze pisać testy, dokumentację, dzielić się wiedzą i (omg) wyjść z garażu i rozmawiać z ludźmi. Nie wiem, ile mojego czasu zajmuje komunikacja i współpraca z innymi ludźmi, mimo że jest to na pewno ważne (dlatego piszę ten artykuł). Naprawdę. Panie i panowie, porozmawiajmy o skutecznych technikach współpracy!
Techniki współpracy
Skupię się tutaj na technikach współpracy, które istnieją od wielu lat i pewnie nie odkryję Ameryki. Z drugiej strony nie każdy z nich korzysta, a moim zdaniem są one szczególnie ważne w pracy zdalnej lub hybrydowej.
Programowanie w parach
Istnieje kilka rodzajów programowania w parach, gdyż technika ta wciąż się rozwija, natomiast ogólnie można ją opisać jako technikę, w której dwóch programistów siedzi przy tym samym komputerze i pracuje nad rozwiązaniem danego programu programistycznego. Jeden programista fizycznie pisze kod, a drugi jest obserwatorem, jednocześnie wpływając na to, co pisze ten pierwszy.
Programowanie w parach w pracy zdalnej
Przyznam szczerze, że gdy pracowałem w biurze, nie stosowaliśmy tej techniki bezpośrednio natomiast gdy był większy problem do rozwiązania, siadaliśmy przy jednym komputerze i próbowaliśmy rozwiązać problem.
Analogia dotyczy pracy zdalnej. Kiedy pojawia się coś trudnego, deweloperzy “zbierają się” i próbują wspólnie rozwiązać problem. Jest tu jedna trudność, bo w pracy biurowej w podbramkowej sytuacji obserwator mógłby przejąć klawiaturę, natomiast w pracy zdalnej zwykle patrzy na udostępniony ekran. Na szczęście istnieją odpowiednie narzędzia, które pomagają realizować programowanie parami w formie zdalnej.
Programowanie mobilne
Koncepcja Mob programming jest podobna do pair programming, tylko w tym przypadku pracuje ze sobą więcej niż dwie osoby. Programowanie w ten sposób wydaje się chaotyczne, ale pomimo tego jest to bardzo dobre podejście, które pozwala na wykorzystanie wielu “mózgów” do stworzenia bardziej wydajnego rozwiązania. W takim modelu osoba, która jest nawigatorem i facylitatorem ma za zadanie prowadzić spotkanie i moderować współpracę tak, aby deweloperzy angażowali się we współpracę i oczywiście, aby się nie pozabijali. Chociaż… pracując zdalnie nie można nikogo zabić.
Komunikacja
Gdy programista wyjdzie ze swojego garażu i zechce porozmawiać z innymi, ma kilka sposobów, aby to zrobić. Może pisać na Slacku, wysłać maila, umówić się na spotkanie lub pójść na spotkanie zorganizowane przez kogoś innego. W czasach, gdy kropka postawiona na końcu zdania nazywana jest hate periodem, a brak emotikonu znakiem, że ktoś jest obrażony, komunikacja jest utrudniona.
Na spotkaniach wideo trudno jest odczuwać emocje, czasem trudno jest kogoś zobaczyć, gdy ma wyłączoną kamerę. Spotkania same w sobie są nudne, a spotkania zdalne, gdzie są więcej niż dwie osoby, mogą być czasem okropne.
Skuteczna komunikacja
Myślę, że są pewne ogólne sposoby komunikacji, które działają zarówno dla pracy zdalnej, jak i biurowej.
Szacunek
Pierwszą rzeczą jest szacunek. Każdy z nas jest inny, ma inne poglądy (nawet na temat programowania), a podstawą jest z szacunkiem słuchać innych i z szacunkiem do nich mówić.
Otwartość
Za szacunkiem idzie otwartość, czyli gotowość do zrozumienia innego punktu widzenia. Coraz częściej słucham ludzi, którzy mają zupełnie inny punkt widzenia na daną sprawę, bo dzięki temu mogę lepiej zrozumieć dane zagadnienie i nauczyć się często czegoś nowego.
Elastyczność
Gdybyśmy mieli porównać naszą pracę do filmu, to jesteśmy głównymi aktorami w naszym filmie. Ludzie, którzy z nami pracują - to osoby, które mają role drugoplanowe, ale jednocześnie mają swój własny film, w którym grają główne role.
Zmierzam do tego, że w momencie, gdy potrzebujemy czegoś od kogoś innego, nie możemy oczekiwać, że zostawi on wszystko i nagle rzuci się nam na ratunek. Powinniśmy być elastyczni i zdawać sobie sprawę, że nie jesteśmy pępkiem świata, a problemy i zadania innych - są co najmniej tak samo ważne jak nasze w szerszej perspektywie.
Dla mnie elastyczność w kontekście komunikacji oznacza zrozumienie innych i nie zmuszanie kogoś do natychmiastowej reakcji na nasze komunikaty i żądania.
Betony
To co możesz powiedzieć w dwóch zdaniach, powiedz w jednym, a to co możesz napisać jako 1000 znaków - skróć do jednego akapitu. Krótko, zwięźle i na temat. Mów wprost, czego potrzebujesz i jakie masz oczekiwania.
Praca zespołowa w dobie pracy zdalnej
Czy praca zdalna jest dla każdego? To bardzo ciekawe pytanie, bo zazwyczaj praca zdalna jest wychwalana pod niebiosa, bo daje elastyczne godziny pracy i zabiera stanie w korkach (oczywiście). Niestety, praca zdalna, jak wszystko, ma też ciemną stronę. Elastyczne godziny pracy mogą stać się horrorem, gdy stracisz granicę między życiem a pracą, a siedzenie cały dzień w domu (bo nie musisz iść do biura) sprawi, że zatęsknisz za kontaktem twarzą w twarz z ludźmi.
Możesz poradzić sobie z tymi bolączkami i wymyślić “system” pracy, który będzie dla Ciebie optymalny. Warto zauważyć, że są osoby, które otwarcie mówią, że praca zdalna nie jest dla nich i to jest w porządku. Każdy ma swój sposób na pracę i życie.
Praca w zespole - podsumowanie
Praca zespołowa to spore wyzwanie dla programistów, a tym bardziej w dobie pracy zdalnej i zespołów rozproszonych globalnie. Pojawiają się problemy z komunikacją, zrozumieniem innych i niepotrzebny stres. Szacunek, otwartość i elastyczność w komunikacji z innymi dadzą Ci podstawy do dobrej współpracy. Jest też coś, o czym nie wspomniałem wcześniej - należy zacząć od siebie, aby efektywnie pracować w zespole i komunikować się z innymi. Zadbaj o swoje zdrowie, samopoczucie i kondycję. Kiedy czujesz się dobrze ze sobą - inni również będą się dobrze czuć z Tobą, a praca będzie przyjemniejsza.