Programowanie zgodne z zasadami Agile powstało z myślą o zespołach skupionych w klastrach lub fizycznie znajdujących się w tym samym biurze. Zgodnie z ideą, że „najbardziej wydajną i skuteczną metodą przekazywania informacji do zespołu programistów i jego obrębie jest rozmowa twarzą w twarz” wczesne zespoły Agile miały współpracować ze sobą w bliskiej odległości.
Jednak dzisiaj większość firm ma kilka lub kilkanaście rozproszonych zespołów. Nie jest to tylko przejściowy trend, ale sensowne rozwiązanie. Rozproszone zespoły mogą pracować nad projektami przez całą dobę, a do tego możliwe jest znalezienie utalentowanych pracowników na mniej konkurencyjnych rynkach. (Nie wspominając o tym, że można łatwiej zatrzymać zdolnych pracowników w firmie dzięki temu, że nie jest konieczna relokacja). Ale korzystanie z rozproszonych zespołów to nie tylko zalety, ale także pewne niedogodności. W przypadku wielu rozproszonych zespołów trudno jest wdrożyć praktykę Agile zakładającą interakcje twarzą w twarz.
Inne wyzwania dotyczące rozproszonych zespołów programistycznych:
- Koordynacja prac w różnych strefach czasowych
- Budowanie relacji, gdy pracownicy są w innych biurach
- Współpraca w ramach różnych kultur programowania
- Planowanie spotkań lub nieformalnych rozmów, gdy zespoły są online w tym samym czasie tylko przez kilka godzin (lub mniej)
Są to realne problemy, na szczęście można je jednak rozwiązać. Przyjrzyjmy się kilku strategiom, które pomogą zniwelować dystans między biurami lokalnymi i zdalnymi, a także kilku pomysłom na ograniczenie innych potencjalnych problemów.
Jak ustrukturyzować globalne zespoły
Dobra architektura oprogramowania ma strukturę modułową, dlatego warto zorganizować zespoły w podobny sposób. Każde biuro powinno być samowystarczalne, jeśli chodzi o rozwój jednego elementu technologii, co minimalizuje ilość współpracy wymaganej od zespołów w innych strefach czasowych i sprawia, że są one w zasadzie autonomiczne. Jeśli projekt wymaga zaangażowania zespołów w różnych lokalizacjach, mogą one skupić się na punktach integracji i interfejsach API.
Ważną rolę odgrywają również przeglądy kodu. Ponieważ pracownicy są online o różnych porach, dystrybucja wiedzy o kodzie między biurami znacznie ułatwia wsparcie i konserwację. Jeśli wystąpi problem produkcyjny, gdy zespół jest offline, inne biuro może łatwo wkroczyć do akcji, aby udzielić wsparcia i rozwiązać go dzięki wiedzy zdobytej podczas przeglądów kodu obejmujących różne zespoły i lokalizacje.
Budowanie relacji
W każdym programie, zwłaszcza programach Agile, ważne jest, aby mieć dobre relacje w całym zespole. Osobiste więzi budują zaufanie, minimalizują ryzyko niespełnienia oczekiwań, ułatwiają samoorganizację i podnoszą morale. W ramach swojego biura warto poświęcić trochę czasu na poznanie wszystkich członków zespołu. W miarę możliwości poznaj też ludzi, z którymi pracujesz w zdalnych biurach. Osobiste relacje są bardzo ważne. Im są one silniejsze, tym większa szansa, że pracownicy będą postrzegać tych kolegów jak równych sobie, a nie jak odległych współpracowników z nieznanych miejsc.
W Atlassian każdy nowy pracownik publikuje „blog wprowadzający” w naszej wewnętrznej instancji Confluence, narzędziu do współpracy w zakresie treści Atlassian. Blog przedstawia nowego pracownika zarówno od strony zawodowej, jak i osobistej (hobby, zainteresowania, rodzina itp.), co pomaga zacieśnić więzi między oddziałami. Im lepiej znamy się jako ludzie, tym lepiej pracujemy razem jako zespoły.
Nic nie jest w stanie zastąpić spotkania twarzą w twarz. Członkowie zespołu w każdym biurze skorzystają na regularnych kontaktach twarzą w twarz, co obejmuje zarówno wideokonferencje, jak i wizyty w odległych biurach.
Narzędzia do wideokonferencji takie jak Zoom pomagają zacieśnić więzi między zespołami, szczególnie w przypadku rozproszonych zespołów Agile. Jednak zespoły korzystające z Zooma powinny pamiętać, że taka forma kontaktu ma pewne ograniczenia.
- Wideokonferencje często pozwalają na pobieżne kontakty, podczas gdy praca w tym samym biurze daje sposobność wglądu w świat drugiej osoby: jej wyzwania, sukcesy i możliwości.
- Zoom dość dobrze sobie radzi z problemami z łącznością sieciową. Może się jednak zdarzyć, że wystąpią problemy z połączeniem między biurami, przez które obraz i dźwięk staną się niewyraźne.
- Większość ludzi nadal traktuje wideokonferencje na Zoomie jak zaplanowane zadania. Wykreowanie kultury korzystania z czatu wideo do spontanicznej swobodnej rozmowy wymaga czasu. Warto także skorzystać z komunikatorów takich jak Slack do zadawania krótkich pytań.
Aby ograniczyć część problemów z wideokonferencjami, zachęć członków zespołu do cotygodniowych sesji czatu wideo 1:1. Mogą być one mniej formalne i ułatwią swobodną wymianę wiedzy. Członkowie zespołu mogą wykorzystać te okazje do budowania wzajemnych relacji i lepszej współpracy.
Pamiętaj, że ton, głos i postawa ciała odgrywają istotną rolę w komunikacji. Czas przeznaczony na spotkania w cztery oczy pomaga zespołowi lepiej poznać swoich zdalnych współpracowników, co z kolei zwiększa efektywność przyszłych wideokonferencji.
Niezależnie od tego, czy chodzi o dom, czy produkt, trzeba zdefiniować wizję oraz nakreślić tematy strategiczne. Tematy można potraktować jako obszary zainteresowania na poziomie całej organizacji. Na czym chcecie się skoncentrować w kolejnym kwartale, półroczu, roku? Na co chcecie poświęcić czas i zasoby? Wydajność, środowisko użytkownika, bezpieczeństwo, nowe, konkurencyjne funkcje (może wanna z hydromasażem?), a może kombinacja wszystkich tych elementów?
Oddelegowanie to tymczasowe powierzenie pracownikowi nowej roli lub miejsca pracy, trwające od kilku tygodni do roku. Jest to nie tylko skuteczny sposób budowania relacji i upowszechniania kultury w całym zespole, ale także na to, by pracownicy mogli poznać inną kulturę.
Budowanie zunifikowanej kultury programistycznej
Istnieją cztery proste sposoby, aby ułatwić zespołom pracę w różnych regionach geograficznych i stworzyć wspólną kulturę pracy programistów:
- Nadmierna komunikacja decyzji we wszystkich lokalizacjach geograficznych
- Zminimalizowanie trudności w tworzeniu środowiska programistycznego
- Jasne zdefiniowanie ukończenia
- Stworzenie wytycznych dotyczących składania skutecznych raportów o błędach
Przyjrzyjmy się im z osobna.
Po pierwsze, kiedy przechodzi się od biura zlokalizowanego w jednym miejscu do kultury rozproszonej, komunikacja staje się znacznie trudniejsza. Pierwszym wyzwaniem jest przeszkolenie zespołu tak, aby zrozumiał konieczność informowania innych zespołów o podjętych decyzjach. Może to wydawać się oczywiste, ale łatwo o tym zapomnieć! Często ważne decyzje zapadają w rozmowach kuluarowych czy na nieformalnych spotkaniach zespołów lokalnych lub są podejmowane indywidualnie. Łatwo jest też zignorować drobne decyzje jako nieistotne.
Przekazuj informacje nawet o najdrobniejszych szczegółach, dopóki oba biura nie znajdą zdrowej równowagi.
Kiedy zapadają decyzje, wszyscy w każdym biurze muszą je rozumieć, a najlepiej wiedzieć, dlaczego zostały podjęte. Nie używaj poczty elektronicznej. Zbyt łatwo jest wtedy stracić ważne informacje. Skorzystaj z systemu zarządzania treścią, takiego jak wiki, w którym członkowie zespołu mogą łatwo przeglądać aktualności dotyczące całego zespołu (i otrzymywać powiadomienia o aktualnościach za pośrednictwem poczty elektronicznej lub narzędzia czatu grupowego Slack). Możesz także użyć aplikacji Slack do utworzenia kanałów dla poszczególnych osób i zespołów, na których mogą się komunikować i sprawdzać aktualności. Opóźnienia spowodowane przez członków zespołu, którzy pracują nad nieaktualnymi informacjami, natrafiają na przeszkodę, a następnie zadają pytania, kosztują zespół znacznie więcej czasu niż proaktywne udostępnianie informacji.
W Atlassian udostępniamy zespołom komunikaty dotyczące projektów i celów. Powiadomienia o komunikatach otrzymujemy za pośrednictwem cotygodniowego e-maila z podsumowaniem lub w aplikacji Slack. Ułatwia to naszym zespołom prowadzenie otwartej komunikacji i powszechne zrozumienie kontekstu ich pracy, pozwalając odpowiedzieć na następujące pytania:
- Co robimy?
- Dlaczego?
- KTO NAD TYM PRACUJE?
- Postęp prac
Po drugie, spójne środowiska programistyczne w całym zespole ułatwiają współpracę i śledzenie zgłoszeń. Poświęć czas na stworzenie prostego przewodnika „Pierwsze kroki” i opanuj początkowe trudności, automatyzując konfigurację w możliwie największym stopniu.
Po trzecie, w przypadku pracy między biurami, jasne standardy dotyczące definicji „ukończenia zadań” ułatwiają zarządzanie oczekiwaniami i budowanie relacji między zespołami. Solidna definicja ukończenia zadań eliminuje niejasności podczas pracy. Na przykład, podczas wysyłania wydania, w które zaangażowanych jest wiele zespołów, należy wyraźnie określić, co oznacza ukończenie projektu: napisanie kodu, utworzenie pull requestu, przejrzenie kodu, przetestowanie go czy włączenie do odpowiedniej gałęzi.
Wreszcie, rozproszony proces programowania oznacza, że nie wszyscy są online, gdy pojawiają się problemy. Stworzenie jasnych wytycznych dotyczących zgłaszania błędów i sposobów rozwiązywania problemów ułatwia każdemu członkowi zespołu znalezienie rozwiązania problemu. Przegląd kodu i dobre zautomatyzowane testy pozwalają także dzielić się wiedzą o bazie kodu i umożliwiają zespołowi, którego dotyczy zmiana, wprowadzenie poprawek i sprawdzenie, czy zmiana nie ma żadnych nieoczekiwanych efektów ubocznych. Dzięki temu żaden zespół nie blokuje prac.
Zmaksymalizowanie złotych godzin
Każdy fotograf wie, że „złote godziny” — tuż przed i po wschodzie oraz zachodzie słońca — to jeden z najlepszych okresów do robienia pięknych zdjęć krajobrazu W przypadku rozproszonych zespołów programistycznych złote godziny to czas, gdy wszystkie zespoły lokalne i zdalne przebywają w swoich biurach. To doskonały moment na spotkania stand-up.
W przypadku zespołów pracujących w różnych strefach czasowych, standup to dobra okazja na przekazanie pałeczki, tak aby zespół, który dopiero rozpoczyna pracę, mógł kontynuować zadanie w miejscu, w którym zakończył je inny zespół. Organizacja spotkań stand-up za pośrednictwem wideokonferencji ułatwia zadawanie pytań i sprawne rozpoczęcie pracy.
Czasami biura są tak daleko od siebie, że spotkania wiążą się z pewnymi komplikacjami. (Wstać o 5 rano na stand-up z drugim zespołem? Nie, dziękuję). Zmieniaj godziny spotkań, tak aby równomiernie obciążyć wszystkie zespoły, ponieważ regularne zmuszanie zdalnego zespołu do pracy w nietypowych godzinach stanowi niezawodny sposób na podkopanie morale. Dokładnie monitoruj zaangażowanie całego zespołu w stand-up. W przypadku nadmiernego obciążenia lub gdy zespół nie czerpie ze spotkania zbyt wiele, członkowie zaczną się wyłączać i przestaną słuchać lub dzielić się spostrzeżeniami. Ponadto nie ma powodu, by koniecznie organizować stand-up codziennie. Wystarczy spotkanie ze zdalnym zespołem kilka razy w tygodniu, a w pozostałe dni mogą odbywać się lokalne stand-upy. Na podobnej zasadzie stand-upu nie trzeba organizować rano. Najlepsza pora dnia to ta, która jest najwygodniejsza dla wszystkich zainteresowanych.
Każdy zespół jest rozproszony
W organizacji rozproszonej w zasadzie każdy zespół jest zdalny. Wszystkie zespoły muszą się dostosować i nauczyć, jak dzielić pracę między biurami, skutecznie się komunikować i rozwijać spójną kulturę w różnych regionach geograficznych. Najbardziej efektywne zespoły nie ograniczają się do podporządkowania zdalnego biura kulturze centrali, ponieważ rozumieją, że każde biuro może się czegoś nauczyć od innych. Starają się znaleźć i dzielić się udanymi praktykami we wszystkich lokalizacjach. Stosują również kulturę „my”, a nie „my kontra oni”.
Wynika to z faktu, że w praktyce od czasu do czasu stają się one rozproszone. Podróże służbowe sprawiają, że członkowie firmy znajdują się poza biurem, a praca z domu od czasu do czasu może pomóc pracownikom w utrzymaniu równowagi między życiem zawodowym a prywatnym. Zespoły, które stawiają zarówno na strukturę, jak i przejrzystość, efektywnie zwiększają skalę. Gdy projekt przekroczy granice biura, kultura organizacyjna w sposób naturalny będzie sprzyjać właściwym działaniom.