Jak wytłumaczyć zwinność w projekcie?

9 marca 2023
Jakub Rojek Jakub Rojek
Zdjęcie autorstwa Sebastiana Pichlera z Unsplash (https://unsplash.com/photos/sblp4evk2gs)
Kategorie: Dla klientów, Zarządzanie, Metodyki

Na blogu wiele piszemy o zwinności (ang. agile). Czasem robimy to przy okazji, prezentując tematy związane z tworzeniem oprogramowania i różnymi technikami zarządzania projektem. Czasem wprost wyjaśniamy ten obszar, uświadamiając, że nie jest to wyłącznie podejście, ale raczej filozofia tworzenia oprogramowania. A nawet nie tylko oprogramowania, co ogólnie projektów, gdyż wiemy, że zwinne metodyki są obecne także w zespołach, które z IT mają bardzo niewiele wspólnego.

Jednak mimo wielu artykułów, zarówno u nas, jak i w innych miejscach, cały czas idea metodyk agile wielu osobom nie jest znana. Nie ma w tym nic złego, ale czasem próby wprowadzenia podejścia zwinnego kończą się klęską - mimo zapoznania się z materiałami, decyzje dążą do powrotu do podejścia klasycznego, czyli wodospadowego. Oczywiście, nie oznacza to, że zawsze to jest niewłaściwe - metodyki zwinne nie zawsze są remedium na wszystko i niekiedy tracydyjna ścieżka sprawdzi się najlepiej. Choćby sposób wyceniania zadań jest takim przykładem, gdzie realia biznesu po części mogą ścierać się z tą filozofią. Tym niemniej, czasem mam wrażenie, że agile po prostu nie jest rozumiane i przez to stosowane niewłaściwie oraz nie tam, gdzie rzeczywiście by się sprawdziło.

Dlatego takie koncepcje dobrze tłumaczy się nie tylko na przykładach, ale też metaforach, które ukazują najważniejsze cechy i pozwalają przeskoczyć odpowiednim zapadkom w mózgu. Pewnego dnia, idąc z pracy do domu i rozmyślając nad tym zagadnieniem, wpadłem na pomysł przenośni, którą chciałem Wam przedstawić. Być może nie jest ona specjalnie innowacyjna - nie wykluczam, że ktoś już ją wcześniej wprowadził. Tym niemniej, uznałem, że warto ją opublikować, nie tylko z myślą o osobach, które jeszcze nie do końca rozumieją, czym jest ta cała zwinność, ale także szukających sposobu, jak wytłumaczyć ją innym ludziom.

Kontekst

Wyobraźmy sobie, że naszym projektem jest przejście z jednego miasta do drugiego, aby dostarczyć pewien przedmiot. Możemy go przekazać w częściach, gdyż ten obiekt (np. magiczny artefakt) daje efekt także w momencie, kiedy dopiero sklejamy kolejne kawałki. Odległość, która dzieli te miasta, jest dość znaczna (na tyle, aby nie dało się zamknąć tego w jednym dniu, a nawet miesiącu), ale teoretycznie możemy sobie wyobrazić dystans, jaki musimy przebyć, aby zawitać do upragnionego miejsca docelowego. Dodatkowo, w świecie, w którym się poruszamy (nie musi być to nasz rzeczywisty), mamy do dyspozycji różne środki transportu, z których interesować będą nas dwa - machina latająca (samolot) oraz rowery (ew. piesza wędrówka). W teorii zatem sprawa jest prosta - musimy odbyć podróż i przejść z punktu A do punktu B, utrzymując po drodze przedmiot w dobrej kondycji (a on cały czas się rozpada).

Niestety, w wyobrażonym świecie istnieje wiele przeszkód, które mogą napotkać wędrowcy po drodze. Najpoważniejszą z nich są tornada i inne anomalie, które są na tyle silne, że mogą przenosić całe miasta, w tym to docelowe. Oznacza to, że miasto, do którego zmierzamy, niekoniecznie musi zawsze być umiejscowione tam, gdzie zaznaczyliśmy je na początkowej mapie. Wiry powietrzne są tak potężne, że całe lokacje mogą zmienić położenie, a także ulec rozszerzeniu czy skurczeniu. Może się wręcz okazać, że podzielą się na dwie różne miejscowości, które będą równie istotne z puntu widzenia naszego celu. Dodatkowo, po drodze mogą czyhać na nas liczne niebezpieczne stworzenia - bestie czające się w lesie czy gigantyczne pterodaktyle atakujące z powietrza i w locie.

W takim środowisku musimy wypełnić nasze zadanie i dostarczyć przedmiot do miasta w umówionym czasie. Pytanie, jak to zrobimy.

Grupa ludzi stoi na równinie patrząc na ostry zachód słońca

Podejście klasyczne

Korzystając z tej metody, pierwsze, co nas czeka, to szczegółowe rozplanowanie podróży. Wiemy, że odległość jest znaczna, a przedmiot, który niesiemy, jest dość duży i składa się z wielu części, którymi trzeba się opiekować. Potrzebujemy sporej machiny latającej i dużego zespołu. Musimy zatem mieć pewność, że przygotujemy wszystko jak należy zanim wyruszymy w podróż, uwzględniając prowiant, paliwo i plan dwóch międzylądowań. Uwaga - podejście klasyczne nie zawsze oznacza, że pokonujemy całą drogą jednym lotem. Po drodze możemy mieć punkty przystankowe, w których będą dostarczane kolejne części przedmiotu. Zadania dotyczące jego pielęgnacji są przydzielane zawsze przez kapitana.

Po analizie potencjalnej podróży pojawia się informacja od naszego zleceniodawcy, że miasto trochę zmieniło swoje położenie - musimy kierować w ciut innym kierunku niż początkowo sądziliśmy. Na tym etapie jest to jeszcze w porządku - co prawda, sporo już zaplanowaliśmy i przyporządkowaliśmy zadania, ale jeszcze jesteśmy w stanie to zmienić. Po korekcie ruszamy w podróż z lotniska w naszym mieście początkowym.

Będąc w powietrzu, dbamy o przewożony przedmiot i utrzymujemy załogę - co jakiś czas w zespole pojawiają się wzmożone dyskusje, konieczność projektowania sposobu utrzymania ładunku w dobrym stanie, a także zauważalne są kurczące się zapasy prowiantu. Ponieważ jednak dobrze zaplanowaliśmy podróż, to wszystko jest w normie - mamy odpowiednie rezerwy i wytrzymamy do czasu pierwszego międzylądowania, gdzie przekażemy przedstawicielowi zleceniodawcy pierwszą część przedmiotu. Taka pierwsza podróż trwa parę miesięcy.

I tutaj następuje zaskoczenie - od odbiorcy dowiadujemy się, że w wyniku silnych nawałnic docelowe miasto zostało zniesione 200 kilometrów w inną stronę niż pierwotnie zakładaliśmy. Jest to dla nas niemiła informacja. W teorii wystarczy nanieść korekty na plan i zmienić kurs. Jednak dodatkowe kilometry oznaczają, że potrzebne jest więcej zasobów do utrzymania zespołu. Co gorsza, część członków załogi stwierdziło, że opuszcza pokład na dobre, bo trudno im dłużej wytrwać w takiej stagnacji i mając w perspektywie jeszcze wiele dodatkowych miesięcy, zanim zobaczą satysfakcjonujący efekt (im też zależy na uszczęśliwieniu klienta). Na miejscu szybko znajdziemy nowych członków naszej wesołej kompanii, ale minie czas, zanim ich wdrożymy do procedur obsługi przedmiotu, a wszyscy mają pełne ręce roboty.

Wzbijamy się w powietrze i lecimy dalej, kierując się do drugiego miejsca, gdzie ma nastąpić oddanie kolejnej części, a który będzie ostatecznym przystankiem przed docelowym miastem. Będąc w powietrzu, musimy walczyć z wieloma przeciwnościami losu, w tym z wiatrami oraz pterodaktylami, co chwilę robiąc uniki i nadkładając drogi. Niestety, ponieważ nie mamy łączności z osobami na ziemi (machina latająca ma nadajnik i odbiornik o zbyt małym zasięgu), nie możemy się dowiedzieć, że potężne tornado rozrzuciło miasto i powstały dwie miejscowości, oddalone od siebie o kilka tysięcy kilometrów. Każde z nich trafiło do miejsca, w którym musi walczyć z sąsiadami i potrzebuje przedmiotu bardziej niż wcześniej. O tym wszystkim dowiadujemy się podczas drugiego międzylądowania, gdzie dociera do nas, w jak złym położeniu jesteśmy - nie dość, że odległość od celu (a właściwie teraz już celów) znacznie się zwiększyła, to jeszcze sam produkt wymaga dużej renowacji, a jakby tego było mało - zaoszczędzone środki nie pozwolą na pełne uzupełnienie zapasów, w wyniku czego musimy prosić zleceniodawcę o zwiększenie budżetu. Jak można się spodziewać, nie spotyka się to z entuzjazmem, ale po długiej rozmowie udaje się wypracować kompromis. Tylko że to wszystko i tak opóźnia dokończenie prac, a na dodatek morale w zespole słabnie, gdyż do specjalistów dociera, że będą musieli dłużej zajmować się przedmiotem i w dodatku część prac jest do przeprowadzenia od początku, bo klient zmienił plany.

Dwóch ludzi z plecakami zmierza traktem w kierunku gór w słoneczny dzień

Podejście zwinne

Dołączamy do innego zespołu, stojącego przed tym samym zadaniem, ale który podchodzi do tematu inaczej - co prawda, machiną latającą przebylibyśmy jednorazowo większy fragment drogi i być może nawet szybciej, ale za to niestabilność pogody w tej krainie jest zbyt ważnym czynnikiem, aby go pominąć. Lepiej poruszać się małymi kroczkami i częściej kontaktować z klientem kontrolując, gdzie teraz leży ich miasto, aby móc szybciej obrać nowy kurs. W tym przypadku przedmiot dzielimy na znacznie większą liczbę fragmentów. Jako środek transportu wybieramy rowery, które w tym świecie (dzięki dobrym drogom i małemu ruchowi naziemnemu) nie są dużo gorsze od machin latających. Powoduje to jednak, że zespół musi być mniejszy, gdyż nie możemy zabrać ze sobą tak dużych zapasów, nie mając dużej ładowni.

Po krótkim planowaniu (uszczegółowione zostały tylko te kwestie, które są ważne w krótkim terminie), wraz z drużyną wyruszamy w podróż i po drodze przygotowujemy kolejne części do oddania. Po paru tygodniach podróży docieramy na miejsce i przekazujemy przedmiot reprezentantowi zleceniodawcy. Dowiadujemy się, że na razie miasto docelowe stoi tam, gdzie stało, więc można realizować wcześniej założone plany. Przy okazji członkowie zespołu analizą dotychczasową drogę, uzupełniają zapasy i wyznaczają sobie zadania. Nie muszą pytać nas, kierownika o zdanie w każdym elemencie - ponieważ jest to mała grupa, to dobrze się znają i samodzielnie dzielą między sobą obowiązki, także te polegające na zdobyciu prowiantu. Nadzorujemy tylko przebieg każdej operacji, proponując korekty mające naprowadzić zespół na dobrą drogę - w stronę osiągnięcia celu.

Po dotarciu do kolejnej miejscowości w najbliższym czasie, dowiadujemy się, że miasto docelowe zostało zniesione 200 kilometrów w inną stronę. Oczywiście, nie spotyka się to z aplauzem, ale z racji tego, że podróż dopiero się zaczyna, strata nie jest duża - przed wyruszeniem w dalszą drogę możemy od razu poprawić kurs, obrać nową ścieżkę i ruszyć bliżej miejsca docelowego, zostawiając wcześniej obrany szlak, skoro i tak nie ma on teraz sensu. Ta sytuacja może powtarzać się wielokrotnie i za każdym razem z racji tego, że przystanek nastąpi szybciej i jest ich więcej, możemy:

  • poprawić plany, stopniowo uszczegóławiając tylko następną podróż (sprint),
  • częściej skonsultować te plany z kolejnymi przedstawicielami klienta,
  • uzupełnić zapasy realnie potrzebne na najbliższy czas i wziąć ich mniej,
  • uzupełniać na bieżąco stan osobowy.

Poruszając się w ten sposób, będziemy kroczyć nieco wolniej, ale zawsze w kierunku aktualnego położenia miasta docelowego. Dojdziemy w końcu do momentu, w którym okazało się, że wichura była tak potężna, że miasto zostało podzielone na fragmenty, które znajdują się oddalone od siebie o znaczną liczbę kilometrów. Oczywiście, jest to kłopot, który trzeba rozwiązać. Tym niemniej, z racji tego, że organizujemy się w zwinny sposób i nie potrzebujemy dużych zapasów (a z kolejnymi sprintami reperujemy nasz budżet), w tym momencie możemy wcielić w życie plan awaryjny - zwerbować drugi zespół, który również będzie pracował zwinnie. W ten sposób obie drużyny będą podróżowały ku swoim nowym celom i każdy z nich będzie szybciej reagował na kolejne zmiany. Jedyny negatywny odbiór od klienta, jaki dostajemy, to taki, że musi przygotować większą liczbę swoich reprezentantów na poszczególnych przystankach, co zajmuje mu czas.

Mężczyzna opiera nogę o kamień i patrzy na góry i krajobraz górski przed sobą

Morał z opowieści

Oczywiście, ta metafora może wydawać się śmieszna i wielu z Was zapewne znajdzie momenty, w których nijak nie ma się do rzeczywistości ("gdzie niby znalazłeś pterodaktyle atakujące machiny latające? Co to, Kung Fury?!"). Tym niemniej, ukazują pewien sposób myślenia w obu przypadkach. W podejściu klasycznym zespół wyrusza w podróż (a więc zaczyna realizację projektu) dopiero po opracowaniu całego planu. Problem w tym, że życie już wiele razy pokazało, że w przypadku przedsięwzięć trwających miesiącami czy latami, cele rzadko pozostają całkowicie niezmienne. Może to zależeć od wielu czynników, zarówno wewnętrznych (problemy u samego klienta), jak i zewnętrznych (np. zmieniające się prawo). W związku z tym, po dotarciu do jakiegoś etapu realizacji, gdzie wszystko zostało podporządkowane stworzeniu rzeczy według określonego projektu, może się okazać, że pozostała część pracy będzie nie mniejsza, ale większa, gdyż trzeba będzie nadrobić realizację pomysłów, które pojawiły się po drodze. Dodatkowo, klient zobaczy poszczególne efekty pracy później i dłużej nie będzie mógł z nich korzystać. Ten problem rozwiązuje metodyka zwinna, która polega na podchodzeniu do celu małymi kroczkami i analizowaniu po każdym przystanku, jakie powinny być następne kroki.

Dodatkowo, agile porusza temat samoorganizacji członków zespołu - mimo że istnieje osoba na stanowisku kierowniczym, to sami pracownicy dzielą między sobą zadania i dyskutują na temat najlepszego podejścia. Dlatego w tym podejściu promowane są mniejsze zespoły, ale nic nie stoi na przeszkodzie, aby podzielić większą grupę programistów na więcej drużyn, z których każda realizuje pewien aspekt systemu i każdy z nich jest wykonywany zwinnie. Albo wręcz hybrydowo - niektóre zespoły pracują zwinnie, a inne w sposób tradycyjny, wodospadowy.

Oczywiście, nie jest tak, że metodyka zwinna zawsze jest lepszym wyborem. Jeśli projekt jest naprawdę krótki lub zakres dość mały, to czasem podejście, w którym realizujemy wszystko na jeden raz może być efektywniejsze. Dodatkowo, metodyka zwinna nie działa poprawnie, jeżeli nie istnieje walidacja ze strony klienta - to on gra dużą rolę w tym procesie, gdyż musi być cały czas zaangażowany w projekt na poszczególnych etapach. Co z tego, że projekt jest realizowany w etapach (sprintach), jeśli podczas poszczególnych przystanków >nikt od strony zleceniodawcy nie zweryfikuje tego, czy realizacja idzie w dobrym kierunku i czy nie zmieniły się potrzeby. Jeśli klient nie współpracuje lub narzeka na konieczność współpracy, to zwinność jest jedynie mechanizmem pomagającym w częściowych rozliczeniach, ale pod kątem projektu nie różni się to niczym od podejścia klasycznego. Dlatego im szybciej klient uświadomi sobie, że ma dużą rolę do odegrania i może realnie wpływać na kształt projektu, tym lepiej dla niego, wykonawcy oraz całego przedsięwzięcia.

Podsumowanie

Przygotowując ten artykuł, pomysłów na metaforę pojawiło się trochę więcej. Znalazło się w nich miejsce na np. postać Guliwera i pokonywanie ogromnych dystansów jednym krokiem w siedmiomilowych butach (w wyniku czego o położeniu celu dowiadywaliśmy się dopiero w momencie dokończenia kroku, a po drodze, stojąc na jednej nodze, mogliśmy zostać zdmuchnięci), a także wspinaczkę w Himalajach i szukanie szczytu. Tym niemniej, liczę na to, że udało mi się jasno przedstawić formę obu metodyk i cech, którymi się charakteryzują. Mam nadzieję, że jeśli do tej pory ktoś nie rozumiał zwinności, to teraz jest znacznie bliżej jej pojęcia.

Pozdrawiam i dziękuję - Jakub Rojek.

Potrafimy całkiem sporo i co więcej, nasze umiejętności i zasoby są do Twojej dyspozycji. Zerknij na to, co możemy Ci zaoferować.

O autorze

Jakub Rojek

Główny programista i współwłaściciel Wilda Software, z wieloletnim doświadczeniem w tworzeniu i rozwoju oprogramowania, ale także w pisaniu tekstów na różnorakich blogach. Zaprawiony w boju analityk i architekt systemów IT. Jednocześnie absolwent Politechniki Poznańskiej i okazjonalny prowadzący zajęcia na tej uczelni. W wolnych chwilach oddaje się graniu w gry wideo (głównie w karcianki), czytaniu książek, oglądaniu futbolu amerykańskiego i e-sportu, odkrywaniu cięższej muzyki oraz wytykaniu innym błędów językowych.

Jakub Rojek