• Uncategorized

    Kryzys Agile

    W lutym 2021 Agile ukończy oficjalnie 20 lat – wtedy miną dwie dekady od spotkania, którego efektem był Manifest Agile. Niestety, w swoje dwudziestolecie Agile przeżywa kryzys, którego – co gorsza – większość zaangażowanych „agilistów” jeszcze nie zauważyła. Kryzys ten polega, ogólnie rzecz ujmując, na „rozwodnieniu” Agile, oderwaniu go od koncentracji na tworzeniu działającego, wartościowego oprogramowania i przesunięciu punktu ciężkości na dbałość o dobre samopoczucie, miłą atmosferę, a czasem także elementy politycznej poprawności w zespołach. 

    Istotnym objawem tego kryzysu jest to, że programiści i testerzy coraz częściej odrzucają Agile, a w szczególności Scrum. Kiedy się porozmawia z nimi, poczyta fora programistyczne itp., coraz częściej widać niechęć i wyśmiewanie się z Agile Coachów i Scrum Masterów. Kiedyś było inaczej: dziesięć a nawet jeszcze sześć lat temu o Scrum i Agile mówiło się na konferencjach dla programistów, stanowili oni też dużą część uczestników szkoleń dla Scrum Masterów. Teraz trafiają się pojedynczo, a na blogach i konferencjach developerskich już się o Agile pozytywnie nie mówi. Coś się ewidentnie zmieniło w tym jak programiści i testerzy postrzegają Agile i Scrum – i z czegoś ta zmiana wynika.

    Ja uważam, że powodem tej zmiany postrzegania jest to, że coraz częściej Scrum jest czymś, co inni robią developerom, a nie czymś, co developerzy robią, żeby lepiej działać.

    Dzieje się zatem fatalna rzecz – Scrum w szczególności, a Agile w ogólności, odrywa się od swoich korzeni. Bo przecież te metody – które w swoich zrębach tworzono pod koniec ostatniej dekady ubiegłego wieku – powstały w zespołach budujących oprogramowanie, zmagających się z trudnymi projektami. I to nie byle jakich zespołach, ale wysoce zmotywowanych, niewielkich i zgranych, złożonych z ludzi, którym zależało i na powodzeniu produktu i na dobrym rzemiośle. Agile – „zwinne sposoby pracy” – to zatem efekt organicznych wysiłków tych ludzi: programistów, testerów i pracujących z nimi bezpośrednio menedżerów. To tacy ludzie – zaangażowani i rozumiejący istotę pracy nad rozwojem oprogramowania – wypracowywali „w boju” praktyki i schematy, które później zostały „skodyfikowane” w metodach takich jak Scrum. Podobnie, to dyskusja nad tymi podejściami doprowadziła uczestników pamiętnego spotkania w lutym 2001 roku do zapisania pewnych wspólnych ich cech w „Agile Manifesto”.

    Wiem to nie tylko z ich relacji, ale i z własnego doświadczenia. Wraz z moim zespołem dokładnie w taki właśnie sposób odkryłem Agile – to znaczy najpierw pracowaliśmy w krótkich sprintach i tak dalej, bo to było rozsądne rozwiązanie w naszych warunkach, a dopiero potem dowiedzieliśmy się z książek, że to ma już nawet nazwę (tutaj o tym opowiadam a tu piszę).

    Dziś niestety coraz częściej Scrum jest narzucaną odgórnie metodyką, „wciskaną” często bez sensu i pomyślunku. „Bez sensu” z poprzedniego zdania jest bardzo szerokie – od braku przemyślenia podziału na produkty i co za tym idzie odpowiedniej struktury zespołów, poprzez próby pogodzenia Scruma i zwinności z silosową organizacją, stosowanie go jako „best practice” (przymusowego sposobu pracy nawet tam, gdzie akurat nie ma on sensu) , po kompletne ignorowanie faktu, że żadnego Scruma nie da się zrobić, jeśli zespoły nie mają podstawowych narzędzi do pracy (sprawne i szybkie komputery, repozytoria kodu, systemy testowe itp. itd.) oraz – co najważniejsze – jakiejkolwiek motywacji do tego, by faktycznie pracować lepiej.

    Co gorsza, Scrum Master i Agile Coach stały się osobnymi zawodami. To już nie są członkowie zespołu, którzy mają dodatkową rolę dbania o jego rozwój i usprawnianie jego pracy. Obecnie to są już osobni specjaliści, których umiejętności to facylitacja, otwarte pytania, „uwalniające struktury”, flipowanie, dawanie feedbacku (dowiedziałem się ostatnio, że istnieją konkursy w dawaniu feedbacku!) – i którzy najczęściej nigdy w życiu nie programowali, w związku z czym kompletnie nie rozumieją co tak naprawdę robią ludzie, z którymi pracują.

    Ta sytuacja ma zresztą inne wymiary. Scrum Master, który nie umie czytać kodu, nie wie czym różni się funkcja od metody, nie wie co to repozytorium, branche itp., nie tylko nie rozumie wyzwań jakie stoją przed zespołem – nie jest także w stanie efektywnie pomóc we wdrożeniu dobrych praktyk technicznych, bo najpewniej nie wie o ich istnieniu. Często także nie rozumie, jak istotne jest częste integrowanie i testowanie działającego oprogramowania, w efekcie zamiast na tym, żeby produkt działał a kod był dobry, koncentruje się na „dobrej atmosferze”, albo na zwalczaniu wyimaginowanych problemów (np. „nierówność w zespole”).

    Tu warto podkreślić, że nie chodzi o to by „skreślić” każdą osobę, która nie mając żadnej wiedzy technicznej ani doświadczenia, została Scrum Masterem. Zdarzają się i tacy, którzy pomimo to dobrze pracują ze swoimi zespołami (choć najczęściej, kiedy się przyjrzeć tym przypadkom, to wykonali jednak jakiś wysiłek, by lepiej zrozumieć, co zespół robi). Niestety, kiedy stało się powszechne, odkąd nie mający pojęcia o programowaniu Scrum Masterzy nie są wyjątkowymi przypadkami tylko regułą, to zaczynamy mieć problem. Właśnie ten problem, że Scrum staje się czymś, co inni robią developerom; w dodatku inni, którzy nie mają pojęcia o tym, na czym w istocie polega praca developerów.

    Połączenie tych dwóch elementów – „wciskania” na siłę, bez pomyślunku Scruma oraz Scrum Masterów czy Agile Coachów, którzy nie rozumieją meritum pracy zespołów – to główne przyczyny, dla których tenże Scrum w wielu miejscach nie działa. Inną ważną przyczyną jest ogólnie niski poziom zaangażowania ludzi w ich pracę. Jak już pisałem, Scrum (i Agile w ogóle) powstał wśród ludzi zaangażowanych w to co robili – zarówno na poziomie rzemiosła jak i zaangażowania w los produktu, który tworzyli. Przełożenie ich doświadczeń i wypracowanych przez nich metod na ludzi, których z produktem wiąże wyłącznie wypłata, a którzy rzemiosło (czyli jakość kodu i architektury) mają w głębokim poważaniu, okazuje się trudne (delikatnie rzecz nazywając). 

    Zatem zamiast zaangażowanych (a więc chcących!) programistów i testerów, którzy empirycznie wypracowują lepsze sposoby pracy nad produktem, na którym im zależy, mamy teraz coraz częściej zdemotywowanych programistów i testerów, którzy są zmuszani do udziału w „ceremoniach” – i to do tego przez „szamanów” nie mających pojęcia o tym, co taki programista czy tester robią. Nie dziwota, że im się to nie podoba, i że nie daje obiecywanych efektów (a więc często wydawanego, działającego i wartościowego oprogramowania).

    Duch czasów – obowiązkowy optymizm – nakazuje zakończyć ten tekst jakimiś pozytywnymi wskazówkami lub propozycją wyjścia z problemu. Na tę chwilę jednak nie widzę tu żadnego „rozwiązania”, a więc czegoś co mogłoby szybko i radykalnie poprawić sytuację.

    Pozostaje zatem robić swoje, a więc przede wszystkim szerzyć dobrą, solidną widzę o Scrumie i Agile wśród tych, z którymi mam okazję pracować – dbać o to, by Scrum Masterzy dobrze rozumieli swoją rolę i dbali o to, by Scrum był tym, co robi ich zespół, a nie czymś co oni robią temu zespołowi. Ważne by mieli też zdrowy, a więc pragmatyczny stosunek do samej metody.

    Trzeba także zmienić sposób kształcenia Scrum Masterów, dostosowując go do faktu, że coraz więcej z nich nie ma pojęcia o programowaniu. Trzeba im zatem dostarczyć namiastki tego doświadczenia oraz przekazać wiedzę niezbędną, by mogli dobrze rozumieć zespoły i nawiązać z nimi merytoryczną komunikację. Innymi słowy Scrum Masterzy powinni poznać podstawy programowania – i to najlepiej nie ucząc się ich od swojego zespołu, już w pracy. Jeśli nie mają nawet podstaw to będzie to dla tego zespołu frustrujące i spowalniające, o ile w ogóle zespół zechce podjąć się tłumaczenia tychże podstaw swojemu Scrum Masterowi. Lepiej zrobią to profesjonaliści mający doświadczenie w nauczaniu.

    Dlatego w Code Sprinters – korzystając z naszych programistycznych „korzeni” – zamierzamy przygotować specjalny program edukacyjny umożliwiający Scrum Masterom, którzy nie mają żadnej wiedzy o programowaniu uzyskanie niezbędnych podstaw w bezpiecznym, wspierającym środowisku.

  • Agile,  Zarządzanie

    Jak wprowadzić Agile poprzez projekt pilotażowy?

    Duża popularność metod zwinnych powoduje, że obecnie niemal każda organizacja, która jeszcze w taki sposób nie pracowała, chce przynajmniej spróbować jak sprawdzałby się taki sposób pracy. Typowym pierwszym krokiem wejścia w Agile jest przeprowadzenie pilotażu, a więc możliwie zgodnego z zasadami wdrożenia jednej lub więcej metod zwinnych w pewnym relatywnie niewielkim przedsięwzięciu (obszarze, produkcie, projekcie).

    Zalety takiego podejścia to:

    • ograniczenie ryzyka i skali trudności,
    • zebranie doświadczeń i wytworzenie wewnętrznej wiedzy w organizacji na temat stosowania metod i praktyk Agile w konkretnym środowisku, co przyda się przy ich dalszym wprowadzaniu,
    • uzyskanie pozytywnych efektów, co ułatwi utrzymanie lub nawet dopiero uzyskanie wsparcia kierownictwa organizacji dla Agile.

    [W dalszej części artykułu używam określenia „produkt” tak, jak jest on rozumiany w metodykach zwinnych np. Scrum. W tym rozumieniu „Produkt” to konkretny system lub aplikacja, dostarczająca konkretnych funkcji użytkownikom lub innym systemom, technologicznie i pojęciowo wyodrębniona od innych. W tym artykule słowo „produkt” nie oznacza zatem rezultatu jakiegoś działania, lecz istniejący w czasie byt, który w efekcie działań zespołu podlega zmianom. Słowo „produkt” nie oznacza także warstwy technologicznej albo dokumentu, ale zawsze działające oprogramowanie dostarczające wartościowych funkcji ludzkim użytkownikom lub innym systemom.]

    Wybór przedsięwzięcia

    Obszar dla pilotażu można wybrać na dwa sposoby:

    • najbardziej zmienny obszar – wybranie produktu (systemu, aplikacji), gdzie jest największa zmienność wymagań i co za tym idzie przed wprowadzeniem metod zwinnych największe obciążenie zespołu niestabilnością wynikającą ze sprzecznych żądań i oczekiwań interesariuszów. W takim systemie można pokazać szybko istotną poprawę przewidywalności i przepustowości pracy, często także podniesienie jej jakości.
    • bezpieczny produkt – wybranie relatywnie wydzielonego (zarówno produktowo jak i systemowo) produktu. Dla takiego produktu będzie łatwo wykonać „czyste” wdrożenie podlegających pilotażowi praktyk, a przede wszystkim uzyskać odpowiednie działanie Product Ownera, umożliwiające reakcję na zmienne oczekiwania użytkowników / klientów poprzez ciągłą zmianę i dopasowywanie wymagań kierowanych do realizacji. To powinno umożliwić zademonstrowanie realnych korzyści wynikających z podejścia Agile. Odrębność technologiczna ułatwia doprowadzenie praktyk technicznych i jakości do wymaganego poziomu.

    Wybór jednej z powyższych opcji możno zależy od sytuacji. Wskazana jest dyskusja przed jego dokonaniem, pomocny może tu być konsultant (Agile Coach), który może służąc swoim doświadczeniem doradzić przy wyborze.

    W każdym przypadku jest wskazane, aby produkt (oprogramowanie) był „produkcyjny”, a więc dostępny dla użytkowników. Najlepiej aby był taki od samego początku względnie stał się takim relatywnie szybko podczas trwania pilotażu. Dzięki temu:

    • możliwe jest osiągnięcie realnych korzyści ze zwinności poprzez dostarczanie użytkownikom (klientom) działającego oprogramowania, którego mogą od razu używać oraz możliwość szybkiego reagowania na rzeczywiste potrzeby zgłaszane przez użytkowników (klientów) już w trakcie prac,
    • realne sprawdzenie poziomu technologicznego, w tym zastosowanych rozwiązań i praktyk z zakresu automatyzacji testów i procesu wydań,
    • dyscyplina i zaangażowanie zespołu pilotażowego są większe, gdy mają oni świadomość, że wytwarzają realnie działający produkt, a nie tworzą coś „do szuflady”.

    Przy wyborze obszaru pewne znaczenie ma dostępność oraz osobowość związanych z nim interesariuszy. Zaleca się prowadzenie pilotażu na produktach, których interesariusze są dostępni, otwarci na sposób pracy wymagający częstej interakcji przynajmniej z Product Ownerem, a zarazem borykają się z dużą zmiennością i nieprzewidywalnością, co powoduje trudność w stworzeniu stabilnych wymagań. Interesariusze o omówionych cechach dają największe szanse nie tylko na powodzenie pilota, ale także na osiągnięcie realnych korzyści w wyniku zastosowania metod i praktyk Agile.

    Po wyborze obszaru do pilotażu jest zalecane określenie celów oraz ustalenie metryk, które zostaną użyte do upewnienia się, że owe cele są osiągane. Mowa tu o celach wykraczających poza same metodyki i praktyki Agile. Cele i metryki powinni ustalić zarządzający, którzy podejmują decyzję o pilotażu. Ponownie użyteczne może być wsparcie doświadczonego doradcy (Agile Coacha).

    ​Role i ich przygotowanie

    Poniżej wymieniam role, które wystąpią w pilotażu, krótko je opisując i wskazując kogo optymalnie wybrać do ich pełnienia. Wskazane jest przygotowanie osób mających wziąć udział w pilotażu, stąd podaję także zalecane szkolenia i warsztaty z oferty Code Sprinters.

    Role:

    • Product Owner – osoba decydująca o tym, jakie funkcjonalności będą budowane przez zespół i dostępne w kolejnych wersjach produktu (po kolejnych sprintach). Osoba ta powinna mieć wiedzę biznesową z obszaru produktu (np. przy tworzeniu systemu do sprzedaży internetowej polis ubezpieczenia podróżnego idealnie PO byłby osobą z biznesu, która zajmowała się sprzedażą takich polis względnie ich formułowaniem jako produktów ubezpieczeniowych). Osoba ta powinna mieć odpowiednie umocowanie – nadaną pełnię władzy do decydowania o kształcie produktu.

    Zalecane szkolenia to: Professional Scrum Product Owner, a następnie Product Owner Toolbox.

    • Scrum Master – osoba dbająca o proces, a także o zespół developerski, pilnująca trzymania się zobowiązań i standardów, wspomagająca wszystkich w rozumieniu i stosowaniu Scrum. Wskazane jest, by rolę tą pełniła osoba, która nie ma osobowości dominującej i dyrektywnej (z tego względu może to być rola trudna dla osób mających doświadczenie jako menedżerowie projektów – PM). Nie jest wskazane, by w roli tej występowała osoba, która była – lub co gorsza nadal jest – menedżerem liniowym innych osób biorących udział w pilotażu, zwłaszcza zaś zespołu developerskiego i PO. Wskazane jest zapewnienie nowemu Scrum Masterowi regularnego wsparcia Agile Coacha. W niektórych przypadkach może być wskazane pełnienie tej roli przez kilka pierwszych sprintów przez zewnętrznego Scrum Mastera o większym doświadczeniu.

    Zalecane szkolenia dla osoby mającej być Scrum Masterem: Professional Scum Master, a następnie Scrum Master Toolbox.

    • Zespół Developerski – osoby, które będą wykonywać pracę implementacji wymagań i wydawać regularnie kolejne wersje produktu. Zespół powinien nie przekraczać 10 osób. Powinien być „wskrośfunkcjonalny”, a więc składać się z osób posiadających ogółem, w sumie wszystkie kompetencje niezbędne dla zbudowania co sprint w pełni działającego, używalnego produktu. Jest wskazane, acz niekonieczne, aby zespół skompletować z ochotników. Jest niezbędne aby na czas przedsięwzięcia osoby wchodzące w skład zespołu developerskiego były przypisane do niego w 100%, a więc nie brały udziału w żadnych innych przedsięwzięciach, projektach itp. Jest wysoce wskazane dobranie osób do zespołu z jednej lokalizacji, idealnie umieszczenie członków zespołu w jednym pokoju. Pozwoli to na szybkie zawiązanie więzi różniących zespół od grupy oraz użycie prostych a zarazem najbardziej skutecznych sposobów wizualizacji (tablica, karteczki itp.).

    Zalecane szkolenia: Scrum w Pigułce lub Professional Scrum Foundations, zależnie od posiadanej wiedzy warsztaty Test Driven Development dla odpowiedniej technologii.

    • Menedżerowie liniowi – menedżerowie liniowi to w tym przypadku albo przełożeni osób delegowanych do pilotażu, albo menedżer liniowy formalnie nad całym zespołem pilotażowym. Wskazane jest, by była to osoba otwarta, której doświadczenie i osobowość ułatwią jej wejście w postawę wspierającego lidera (ang. servant leadership).

    Wskazane szkolenia: Scrum w Pigułce, warsztaty Management 3.0.

    • Interesariusze – osoby (najczęściej z tzw. biznesu), które mają możliwość zgłaszania funkcjonalności do produktu. Dobór interesariuszy jest związany z wyborem produktu, dlatego wskazane cechy omówiłem już powyżej.

    Wskazane szkolenia: Scrum w Pigułce, przy większych lub bardziej złożonych produktach może być wskazany udział interesariuszów w prowadzonych przez konsultanta warsztatach Story Mappingu, które pozwolą nie tylko lepiej zdefiniować produkt ale także umożliwią interesariuszom uzyskanie jego szerszej perspektywy, co ułatwia ich współpracę z Product Ownerem.

    W niektórych przypadkach (nowy zespół, małe doświadczenie w organizacji) może być wskazany udział całego zespołu pilotażowego w przygotowanym dla niego „na miarę” programie „Agile Kickstart”. Może on wtedy zastąpić niektóre ze szkoleń polecanych powyżej.

    Powyższy opis zakłada zastosowanie najpopularniejszej metody Agile: Scrum. Dla zastosowania metody Kanban przygotowanie będzie podobne jeśli idzie o Product Ownera, różni się jeśli idzie o pozostałe role (np. rola Scrum Mastera nie występuje, zasady organizacji zespołu są inne itp.).

    Przeprowadzenie pilotażu

    Podczas prowadzenia pilotażu należy dbać o zachowanie zasad metody Scrum, a także przejrzystości (czemu służy m.in. przygotowanie i bezwzględne przestrzeganie Definition of Done, dbanie o dostępność i czytelność Backlogu Produktu itp.). Niezwykle istotne jest wykonywanie nie tylko zakładanych w procesie retrospekcji zespołu, ale także retrospekcji z udziałem interesariuszów i menedżerów – pierwsza taka retrospekcja powinna odbyć się już po trzecim sprincie. Istotne jest również śledzenie założonych uprzednio metryk sukcesu, zwłaszcza biznesowego, oraz dbanie o zachowanie standardów technicznych – dobrej jakości kodu, testowania, niskiej stopy błędów itp.

    Jest wskazane aby podczas pilotażu zespół korzystał z tradycyjnych, papierowych technik wizualizacji sprintu (tablica, karteczki itp.) nawet jeśli docelowo planowane jest wdrożenie elektronicznego narzędzia wspierającego. Takie podejście ma na celu lepsze zrozumienia roli tego rodzaju artefaktów, co może być trudniejsze jeśli od razu zastosowane one zostaną w wersji elektronicznej. Jeśli sytuacja tego wymaga (rozproszeni interesariusze) to wyjątkiem może być sam Backlog Produktu, który może być prowadzony elektronicznie. Najlepiej prowadzić go wówczas w jak najprostszym narzędziu – np. Google Sheets.

    Podczas prowadzenia pilotażu może być przydatne wsparcie zewnętrznego Agile Coacha. Podczas regularnych wizyt będzie on:

    • prowadzić obserwację stanu procesu i zespołu, by następnie przekazać zalecenia i sugestie Scrum Masterowi i zespołowi,
    • poprowadzić niektóre wydarzenia np. wspomnianą wyżej dodatkową retrospekcję,
    • wspierać coachingowo i mentorsko Scrum Mastera i Product Ownera.

    Zespoły mające deficyty umiejętności w zakresie nowoczesnych narzędzi i technik programowania i zapewnienia jakości mogą skorzystać ze wsparcia konsultanta technicznego – doświadczonego praktyka, który pracując z zespołem pomoże mu szybciej takowe techniki opanować, a narzędzia wdrożyć.

    Ocena i dalsze działania

    Po jakimś czasie (może to być ustalony z góry czas lub też moment osiągnięcia założonych wcześniej celów lub stanu produktu), wskazane jest dokonanie podsumowania pilotażu i oceny jego skutków. Pomocne w tym będą ustalone wcześniej metryki sukcesu i prowadzona podczas pilotażu ich systematyczne zbieranie. Wskazane jest dokonanie także badania satysfakcji interesariuszy oraz ew. użytkowników będącego przedmiotem pilotażu produktu. Na tej podstawie kierownictwo podejmuje decyzję co dalej – czy nastąpi szersze zastosowanie metod zwinnych, a jeśli tak to w jakim scenariuszu.

    Jeśli zostanie podjęta decyzja pozytywna, to – zależnie od wybranego produktu – prace nad nim mogą być kontynuowane dalej przez ten sam zespół. Będzie to już jednak „normalna” praca, nie pilotaż. Inne podejście to rozproszenie członków zespołu pilotażowego po nowo utworzonych kolejnych zespołach.