Spis treści

Spis treści

Redakcja

Wstęp

1. Metody zwinne – wprowadzenie

1.1. Metoda prób i błędów – lekarstwo na niepewność

1.2. Najważniejsze fakty z historii metod iteracyjnych i przyrostowych

1.3. Dalszy rozwój metod zwinnych – post-agilism

1.4. Przegląd metod zwinnych

1.5. Metametoda – wybór procesu

Pozostałe tematy publikacji w pełnej wersji

Redakcja

Autor: Bogdan Bereza

Kierownik grupy wydawniczej: Ewa Ziętek-Maciejczyk Wydawca:

Monika Kijok

Redaktor prowadzący: Rafał Janus

Korekta:

Zespół

Skład i łamanie: Raster studio, Norbert Bogajczyk Projekt okładki: Piotr Fedorczyk Druk: Miller

ISBN: 978-83-269-3449-0

Copyright by Wydawnictwo Wiedza i Praktyka sp. z o.o.

Warszawa 2014

Wydawnictwo Wiedza i Praktyka sp. z o.o.

03-918 Warszawa, ul. Łotewska 9a tel. 22 518 29 29, faks 22 617 60 10

NIP: 526-19-92-256

Numer KRS: 0000098264 – Sąd Rejonowy dla m.st. Warszawy, Sąd Gospodarczy XIII Wydział Gospodarczy Rejestrowy. Wysokość kapitału zakładowego: 200.000 zł

„Agile: szansa na skokowy wzrost produktywności” wraz z przysługującymi Czytelnikom innymi elementami dostępnymi w subskrypcji (e-letter, strona www i inne) chronione są prawem autorskim. Przedruk materiałów opublikowanych w publikacji „Agile: szansa na skokowy wzrost produktywności” oraz w innych dostępnych elementach subskrypcji – bez zgody wydawcy – jest zabroniony. Zakaz nie dotyczy cytowania publikacji z powołaniem się na źródło.

Publikacja „Agile: szansa na skokowy wzrost produktywności” została przygotowana z zachowaniem najwyższej staranności i wykorzystaniem wysokich kwalifikacji, wiedzy i doświadczenia autorów oraz konsultantów. Zaproponowane w publikacji „Agile: szansa na skokowy wzrost produktywności” oraz w innych dostępnych elementach subskrypcji wskazówki, porady i interpretacje nie mają charakteru porady prawnej. Ich zastosowanie w konkretnym przypadku może wymagać dodatkowych, pogłębionych konsultacji. Publikowane rozwiązania nie mogą być traktowane jako oficjalne stanowisko organów i urzędów państwowych. W związku z powyższym redakcja nie może ponosić odpowiedzialności prawnej za zastosowanie zawartych w publikacji „Agile: szansa na skokowy wzrost produktywności” lub w innych dostępnych elementach subskrypcji wskazówek, przykładów, informacji itp. do konkretnych przypadków.

Wstęp

Moda na Agile trwa, a wręcz się nasila. Z jednej strony to wspaniale, gdyż Agile jest rodziną bardzo skutecznych sposobów tworzenia oprogramowania. Z drugiej strony – wielka szkoda, że Agile stało się modą. Przez to bowiem bywa propagowane i stosowane bezmyślnie, a nawet gloryfikowane jako niemal uniwersalne rozwiązanie, jako cel sam w sobie. Tymczasem celem powinna być wyłącznie skuteczność i sprawność przedsięwzięć IT, a jednym z narzędzi pomagających w jego osiągnięciu może być Agile.

Aby dobrze zrozumieć i skutecznie stosować Agile, nie wystarczy szczegółowa znajomość instrukcji praktykowania jednej ze zwinnych metodyk (najczęściej Scrum). Tym bardziej że zwykle wybór metodyki jest przypadkowy. Zamiast analizy organizacje kierują się modą i obiegowymi opiniami.

W wielu publikacjach na temat Agile jako coś oczywistego przyjmuje się wyższość omawianych metodyk nad alternatywnymi. Wyraża się to nawet w terminologii, w której metody inne niż Agile określa się zwykle pobłażliwą nazwą „tradycyjnych”. Taki sposób prezentacji, pozornie skuteczny i pragmatyczny, nie pozwala naprawdę dogłębnie zrozumieć omawianego tematu. Cierpi na tym efektywność i elastyczność osób mających tylko taką wąską wiedzę. Nie chodzi bowiem o to, żeby być zwinnym, choć nazwa brzmi kusząco, lecz żeby być skutecznym. Dlatego nie spisujmy lekkomyślnie na straty projektów sekwencyjnych i hierarchicznych. Dobry menedżer dopasowuje taktykę do potrzeb, a nie na siłę stosuje rzekomo uniwersalne rozwiązanie niezależnie od sytuacji.

Nie krytykuję opracowań, które koncentrują się na opisie szczegółów i taktyki zwinnego działania. Są one jak najbardziej potrzebne, a liczne takie książki są już na naszym rynku dostępne. Brakuje natomiast opracowania syntetycznego, pozwalającego znaleźć odpowiedź na pytanie, kiedy i po co wybrać strategię Agile. Wprawdzie od autorów książek trzeba wymagać szerszej wiedzy niż tylko wziętej z praktycznego doświadczenia. Z drugiej strony nie ma raczej sensu, aby od każdego uczestnika projektu Agile, nawet na kierowniczym stanowisku, wymagać zarówno wielkiego doświadczenia, jak i przygotowania teoretycznego. Byłoby to marnotrawstwem czasu. Optymalnym rozwiązaniem jest książka, która z jednej strony zawiera szczegółowe przepisy i praktyczne przykłady, a jednocześnie oferuje szersze spojrzenie. Taka pozycja to dla Czytelników dobra namiastka wieloletniego doświadczenia i streszczenie pogłębionej, niedostępnej gdzie indziej wiedzy z dziedziny IT, organizacji, inżynierii oprogramowania. A nawet psychologii, która jest potrzebna, aby umiejętnie stosować Agile.

Taką optykę przyjmuję w tej książce. Po pierwsze, staram się zachować bezstronność, opisywać równie dokładnie zalety i możliwości, jak i wady lub zagrożenia stosowania metodyk zwinnych. Nie zaczynam od wyjaśniania niezrozumiałych dla niewtajemniczonych nazw artefaktów i rytuałów Agile. Jako punkt wyjścia przyjmuję konkretną potrzebę biznesową lub technologiczną, którą będzie się przy ich pomocy realizować. Słowem, traktuję Agile tak, jak narzędzie – jedno z wielu – do osiągnięcia konkretnych celów, a nie jako wartość, która nie podlega dyskusji. Skorzystają na tym i Czytelnicy, i sama Agile, ponieważ taka formuła chroni nas przed karkołomnymi próbami stosowania tej metodyki tam, gdzie nie daje ona korzyści.

Książka pozwoli Czytelnikom w pełni zrozumieć, oswoić i wykorzystać Agile w najlepszy możliwy sposób. Tłumaczy i pokazuje na przykładach, jak można Agile zastosować do rozwiązywania prawdziwych problemów i realizowania konkretnych potrzeb projektów IT. Zalecamy ją zarówno menedżerom, jak i informatykom, którzy dopiero planują wejść w świat Agile, aby mogli szybko zrozumieć, o co w tym wszystkim chodzi i dlaczego ta metoda ma naprawdę szansę być bardzo skutecznym sposobem współpracy.

Jest to pozycja interesująca również dla tych, którzy poznali już Agile w praktyce i chcą podnieść swoje kwalifikacje, pracować skuteczniej, ze zrozumieniem. Zrozumienie jest kluczowe do tego, aby umieć wyjść poza wąskie przykłady, przepisy książki kucharskiej i umieć na sposób Agile stawiać czoło coraz to nowym wyzwaniom, realizować coraz to nowe cele biznesowe.

1. Metody zwinne – wprowadzenie

Agile to podejście (ang. framework) do projektów IT, łączące wiele różnorodnych elementów. W praktyce Agile staje się często także swego rodzaju postawą, filozofią działania, mającą zastosowanie również poza światem informatyki.

Najważniejszą cechą Agile jest iteracyjność. Zakłada się, że próba precyzyjnego określenia z góry wszystkich wymagań dla systemu IT jest zwykle nieskuteczna, stwarza ryzyko stawiania błędnych celów projektom i może powodować nieprawidłową realizację oraz opóźnienia. Dlatego Agile zaleca podejście iteracyjne (prototypowanie, model spiralny). Praca z wymaganiami trwa przez cały czas projektu i zakłada możliwość nawet znacznych zmian tych wymagań podczas trwania prac deweloperskich.

Rysunek 1.1. Iteracyjny model wytwarzania oprogramowania Agile zakłada, że szczegółowe planowanie, wobec braku na początku precyzyjnych i w pełni uzgodnionych wymagań, jest tworzeniem fikcji. Dlatego w projektach realizowanych metodami Agile dokonuje się szczegółowego planowania i nadzoru tylko niewielkich części pracy (w Agile Scrum są tzw. przebiegi, ang. Sprint), natomiast planowanie na wyższym poziomie pozostawia się innym.

Rysunek 1.2. Metody Agile ograniczają próby planowania o zbyt dużej niepewności Drugą kluczową cechą Agile jest przyrostowość. Wychodzi się z założenia, że dla klienta korzystniejsze jest dostarczanie oprogramowania kawałkami, jak najwcześniej, zamiast jednej wielkiej dostawy na zakończenie. Twierdzi się, że metody przyrostowe są też korzystne dla samego procesu wytwarzania oprogramowania, umożliwiając lepszy nadzór i skuteczniejsze kontrolowanie jakości.

Rysunek 1.3. Przyrostowy model wytwarzania oprogramowania Trzeci ważny aspekt Agile to preferowanie bezpośredniej współpracy oraz interakcji. Przyjmuje się tezę, że nadmierna formalizacja współpracy przy użyciu obszernej dokumentacji projektowej oraz drobiazgowych procedur definiujących role bywa nieskuteczna i pracochłonna. Czasem staje się wręcz przyczyną nieporozumień i pomyłek. Agile zakłada, że najlepszą formą współpracy i komunikacji są intensywne, bezpośrednie kontakty między ludźmi.

UWAGA

Często wynika z tego fałszywe mniemanie, jakoby Agile nie mogło dostarczać obszernej dokumentacji. Dokumentacja produktowa, jeśli jest wymagana przez klienta, staje się po prostu częścią produktu IT. Metody Agile mogą ją produkować tak samo jak kod oprogramowania. Jeśli zaś chodzi o dokumentację projektową, Agile zakłada jedynie, że nie należy jej tworzyć bez powodu. Nie wyklucza natomiast, by wymagania wynikające z jakichś standardów czy praw albo oczekiwań innych części organizacji były właśnie takim powodem.

Metodyki Agile zakładają realizację projektów przez niewielkie, samoorganizujące się zespoły współpracujące ze sobą. Nie ma w nich miejsca na tradycyjną rolę kierownika projektu czy zespołu, jako nadzorcy, mówiącego pracownikom co, kiedy i w jaki sposób mają robić. Również tzw. Scrum Master nie jest w pełni kierownikiem. Jest primusinterpares, koordynującym, ułatwiającym i w pewnych sytuacjach nadzorującym, ale nie narzucającym rozwiązania.

Scrum Master to rola szczególna. Najlepiej wyjaśnia ją określenie „kierownik służebny” (servant-leader). Ta osoba nie wykonuje tradycyjnych zadań kierowniczych, jak oszacowanie pracochłonności, planowanie, podział pracy, nadzorowanie i wydawanie poleceń. Te zadania wykonuje wspólnie cały zespół scrumowy podczas planowania przebiegu oraz podczas codziennych scrumów. Zadaniem Scrum Mastera jest chronić zespół przed przeszkodami i trudnościami, pomagać je rozwiązywać. Trudności mogą być zewnętrzne. Typowe przykłady to próby zmiany zakresu przebiegu już w trakcie jego trwania. Mogą pochodzić również z wewnątrz, np. powstające opóźnienia lub niewywiązywanie się przez pojedynczych członków zespołu scrumowego ze swoich zadań. Rola Scrum Mastera polega w dużym stopniu na facylitacji (rozwiązywaniu konfliktów), a w mniejszym na nadzorze administracyjnym.

Podejście Agile można zaklasyfikować do tak zwanych metod zarządzania przez cele. W wyniku planowania przebiegu właściciel produktu negocjuje kontrakt z uczestnikami zespołu i zawiera go po zaakceptowaniu warunków przez obie strony. Zespół, w Agile Scrum zwany zespołem scrumowym, obejmuje wszystkie role potrzebne do realizacji zadań: programistów, testerów, specjalistów wymagań. Kontrakt ten określa cel, który należy osiągnąć w danym przebiegu, i zespół sam organizuje swoje działania w celu jego realizacji.

1.1. Metoda prób i błędów – lekarstwo na niepewność

Pierwotne grupy łowieckie składały się z kilku, najwyżej kilkunastu osób. Łowy miały znany z góry, ogólny cel, ale szczegóły ustalano każdorazowo dopiero w trakcie polowania. Cel był często zmienny, dostosowywany do nadrzędnego zamysłu realizacji potrzeby. Kiedy jednak budowano piramidy, taka organizacja nie wystarczała. Korzystniejszy był inny tryb działania: planowanie zawczasu, budowa trwająca długie lata i realizowana przez złożoną, hierarchiczną organizację. Zarządzanie procesem wymagało obszernej biurokracji, o czym świadczą dobitnie archeologiczne dane także ze starożytnego Egiptu.

Mała, samoorganizująca się grupa mająca elastyczny cel sprawdza się lepiej w niewielkich przedsięwzięciach, zaś planowana działalność i hierarchiczna organizacja są niezbędne, aby realizować cele wielkie i złożone. Ta zasada pozostaje do pewnego stopnia prawdziwa również dzisiaj. Przejście wielu dziedzin działalności gospodarczej z formuły rzemieślniczej i manufakturowej do formuły taśmy produkcyjnej w XIX–XX wieku nawet pogłębiło ten stan rzeczy. Wytwarzanie wielu urządzeń i przedmiotów, wprawdzie możliwe metodami rzemieślniczymi, okazało się znacznie tańsze przy zastosowaniu szczegółowego planowania, hierarchicznej struktury zarządzania i technologii produkcji masowej. Ponadto taśma produkcyjna pozwoliła, aby w procesie produkcji brali udział pracownicy słabo wykwalifikowani, umiejący wykonać tylko małą część pracy i często nierozumiejący ani jej celu, ani ogólnych zasad.

W latach 40. i 50. ubiegłego stulecia IT rozwijało się metodami rzemieślniczymi i „łowieckimi”. Wraz z dramatycznym wzrostem złożoności i biznesowego znaczenia systemów IT nastąpił okres dominacji metod planowych i hierarchicznych. Szereg czynników spowodował, że rozpoczęto próby odejścia od zarządzania nadmiernie biurokratycznego, dokładnego planowania i hierarchii, a mające na celu powrót do elastyczności grup łowieckich, czego przykładem jest właśnie Agile.

Skąd biorą się te różnice? Wiele gałęzi przemysłu, jak konstruowanie okrętów, budownictwo, metalurgia czy mechanika istnieją od setek, a nawet tysięcy lat. IT jest o wiele młodszą branżą i zupełnie do innych przemysłów niepodobną. Ponadto swój złoty wiek – okres szczególnie burzliwego rozwoju – przeżywała w czasach hippisowskiej kontrkultury, więc łatwiej w niej, przynajmniej psychologicznie, o niestandardowe rozwiązania.

Technologia IT, zbudowana według założeń architektury von Neumanna (w tej architekturze zarówno instrukcje, jak i dane komputera mogą być modyfikowane), pozwala na dużą elastyczność procesu wytwarzania, a koszt wprowadzania modyfikacji jest stosunkowo niski. Dlatego odkładanie jak najdłużej nieodwracalnych, krytycznych decyzji jest możliwe znacznie dłużej przy wytwarzaniu oprogramowania niż przy wytwarzaniu, przykładowo, produktów z kamienia.

Poza tym IT nigdy nie dorobiło się odpowiednika efektywnej produkcji taśmowej. Ma to pewne uzasadnienie, ponieważ większość przedsięwzięć informatycznych ma charakter pionierski, tworzy odmienne od poprzednich prototypy. Dlatego proces produkcyjny, taki jak przy tworzeniu długich serii jednakowych egzemplarzy, nie ma racji bytu w IT.

Z drugiej strony, swoista hackerska kultura branży, idealizująca twórczy aspekt budowania oprogramowania oraz debugowanie, a wybitnie niechętna procedurom i nieznacznie choćby sformalizowanym dobrym praktykom, powoduje, że nawet w bardzo hierarchicznych i planowanych działaniach poprawianie dominuje (debugowanie) nad zapobieganiem błędom. Mówiąc inaczej, kontrola jakości jest powszechniejsza od zapewnienia jakości.

Byś może nie dla każdego jest jasne, czym różnią się od siebie kontrola i zapewnienie jakości. Te nazwy rzeczywiście nie są najszczęśliwiej dobrane, ale niestety przyjęte. Kontrola jakości oprogramowania to test: sprawdzamy, czy nie ma w nim powodujących awarie błędów. Zapewnienie jakości to wszystko, co się robi, aby uniknąć powstania błędów. Do tych działań zalicza się analiza i dobry opis wymagań, pilnowanie konfiguracji, dobra organizacja pracy, wiedza, motywacja i umiejętności uczestników projektu.

W tej sytuacji metody zwinne niewiele tracą w porównaniu z hierarchicznymi, planowanymi, jeśli chodzi o jakość i staranność, a zyskują wiele pod względem elastyczności.

Znamienne jest to, że w praktyce dobrze prowadzony projekt Agile często jest znacznie bardziej zdyscyplinowany i uporządkowany niż typowy projekt hierarchiczny, w którym za fasadą solidnej dokumentacji i zdefiniowanych ról ukrywa się niekiedy mnóstwo bałaganu i cynizmu uczestników.

Do wytworzenia wielu produktów IT lepiej pasuje formuła „łowiecka” niż hierarchiczne metody konstruowania piramid. Istnieją wprawdzie systemy IT bardziej złożone niż transatlantyk czy Airbus A380 (np. systemy sygnalizacyjne, systemy kontroli lotów, systemy nadzoru produkcji), ale większość jest stosunkowo prostych i nie wymaga bardzo dokładnego planowania. Przy ich tworzeniu biznesowo więcej korzyści przynosi elastyczność, zdolność do zmian i szybkość dostawy pierwszej wersji niż dokładność, trafność przewidywań i możliwość dokładnego planowania z wyprzedzeniem.

1.2. Najważniejsze fakty z historii metod iteracyjnych i przyrostowych

Dość powszechne jest przekonanie, jakoby metody Agile różniły się na tyle od innych metod wytwarzania oprogramowania, że wymagają zupełnie odmiennych technik i umiejętności. Z jednej strony ten mit powoduje nieuzasadnioną podejrzliwość i sceptycyzm wobec Agile ze strony biznesu oraz praktyków działających innymi metodami. Z drugiej strony, zdarza się wśród niektórych specjalistów Agile brak wiedzy i lekceważący stosunek do innych, rzekomo „tradycyjnych” i „przestarzałych” metod pracy. Dlatego pokazujemy najważniejsze zagadnienia związane z podejściem Agile, które miały miejsce przed ogłoszeniem „manifestu Agile” w lutym 2001 roku. Ta wiedza umożliwia spojrzenie na Agile w kontekście reszty świata IT, a nie w oderwaniu od niego.

EVO Toma Gilba

Tom Gilb propaguje ewolucyjne (EVO – Evolutionary Project Management) podejście do zarządzania projektami IT już od lat 60. ubiegłego stulecia. Pouczający wywiad z Tomem, w języku polskim, znajduje się na stronie http://tinyurl.com/wiplink01. Pod nazwami innymi niż Agile Gilb zaleca m.in. podejście iteracyjne oraz przyrostowe, a także dążenie do tego, aby każda kolejna dostawa kodu realizowała konkretną wartość biznesową.

Rysunek 1.4. Evolutionary Project Management EVO – formuła Agile z lat 70. XX w.

JAD – Joint Application Development

Tę metodę, postulującą, podobnie jak Agile, zaangażowanie klienta i użytkownika w proces tworzenia oprogramowania, stosowano już w latach 70. ubiegłego wieku.

RAD – Rapid Application Development

Podejście stosowane w latach 70. i 80. XX w. (formalnie opisane zostało w 1991 roku). Wprowadziło między innymi do inżynierii oprogramowania metody takie jak model spiralny oraz prototypowanie.

Cleanroom Software Engineering

Ta metodyka, choć w większości odległa od Agile i obszarów, gdzie Agile ma zastosowanie (zaleca między innymi statystyczną kontrolę jakości oraz metody formalne), kładzie jednak nacisk na iteracyjność procesu wytwarzania oprogramowania.

DailyBuild

Codzienne budowanie – DailyBuild – stosowano już w latach 90. ubiegłego stulecia. Jest formą i wcześniejszą wersją stosowanej dziś w wielu projektach ciągłej integracji (Continuous Integration, CI).

Długa historia idei Agile wymownie świadczy, że takie podejście jest w IT potrzebne i że przynosi korzyści. Warto również zdawać sobie sprawę, że nie zawsze konieczne jest stosowanie wszystkich zasad Agile. Można wybierać tylko te, które odpowiadają potrzebom konkretnego projektu.

1.3. Dalszy rozwój metod zwinnych – post-agilism

Do 17 pierwszych sygnatariuszy manifestu Agile (www.agilemanifesto.org) należy Robert Cecil Martin (tinyurl.com/wiplink02). Nie można więc mieć wątpliwości, że „wujek Bob”, jak bywa przezywany przez kolegów, jest gorącym zwolennikiem Agile. Wobec tego zaskoczeniem może być jego artykuł „Aristotle’s Error or Agile Smagile”, opublikowany ledwo dwa lata później na blogu Java.net (tinyurl.com/wiplink03). W tym tekście autor zwraca uwagę na masowe nadużywanie określenia „Agile”, które, bezmyślnie wykorzystywane przez branżowych dziennikarzy i marketingowców, zaczęło być stosowane jako synonim słowa „świetny”, a jego pierwotne, konkretne, fachowe znaczenie gdzieś się w tym wszystkim zagubiło.

Na potrzeby marketingu takie nadużywanie ułatwia sprzedaż wszystkiego, byle wesprzeć ją magicznym słówkiem „agile”. Słowo to ma wydźwięk pozytywny. „Zwinny” brzmi lepiej niż „ociężały” i sugeruje młodość, nowoczesność, energię, siły witalne.

Od czasu publikacji tekstu Roberta Martina nic się w tym względzie nie poprawiło, przeciwnie, to negatywne zjawisko jeszcze się nasiliło. Często wejście pod sztandar słówka „agile” staje się drogą na skróty do kariery, z pominięciem wiedzy i doświadczenia. Narzekanie na ten stan rzeczy nic nie pomoże. Branża IT nie jest w żaden sposób magicznie uodporniona na mechanizmy mody i psychologii grupy ani na zjawiska społeczne. Stosując lub próbując stosować Agile, trzeba tylko być tego świadomym i zachować ostrożność. Aby stosować Agile z powodzeniem, a nie na zasadzie owczego pędu, trzeba jego zasady, korzyści i ograniczenia dogłębnie zrozumieć, by móc myśleć samodzielnie, a nie kierować się modą. Lektura książki ułatwi osiągnięcie tego celu.

Polska „Nonsensopedia” publikuje następujący żartobliwy tekst na temat programowania ekstremalnego: Programowanie ekstremalne – doktryna religijna i metodyka programowania mająca na celu wydajne tworzenie małych, średnich i średnio dużych projektów wysokiego ryzyka, czyli takich, w których nie wiadomo do końca, co się tak naprawdę robi i jak to prawidłowo zrobić. Przyświeca temu koncepcja surrealistycznej, prymitywnej rozrywki, wywodząca się z obsesyjnej obserwacji innych programów, które odniosły sukces (albo i nie). Podstawą ekstremalnego programowania są synergia, akomodacja i mahabharata, wynikające ze stosowania rozmaitych praktyk religijno-informatycznych.

Ten absurdalny tekst okazuje się nieznacznie tylko zmodyfikowaną kopią z autentycznej definicji programowania ekstremalnego z „Wikipedii”. Wniosek: uwaga na błąd Arystotelesa, same słowa nie wystarczają. Od samego stosowania nazwy Agile nic nie zmieni się na lepsze. Jeśli ktoś stosuje Agile jako uniwersalne rozwiązanie, zapalmy czerwone światło ostrzegawcze.

1.4. Przegląd metod zwinnych

Metodyki Lean

Metodyki „odchudzone” lub „szczupłe” (lean) w odniesieniu do wytwarzania oprogramowania, znane pod budzącym niecodzienne skojarzenia skrótem LSD (Lean System Development), to próba przeniesienia do inżynierii oprogramowania zasad wchodzących w skład odchudzonego systemu produkcyjnego Toyoty, opisanego po raz pierwszy w 1998 roku. Pionierska w tej dziedzinie IT książka Mary i Toma Poppendiecków „Lean Software Development: An Agile Toolkit” została wydana w 2003 roku.

Lean nie jest innym czy alternatywnym podejściem ani procesem, ani metodyką, lecz zbiorem zasad oraz technik pozwalających realizować te zasady w projektach prowadzonych według wytycznych Agile. Oczywiście zasady Lean można także próbować stosować poza Agile, ale w praktyce Lean oraz Agile najczęściej stosuje się łącznie.

Siedem zasad Lean to:

1. Eliminacja strat (np. zbędna funkcjonalność, niejasne wymagania, niedostateczne testy).

2. Pozyskiwanie wiedzy (dotyczącej potrzeb klienta i produktu w kolejnych iteracjach poprzez pozyskiwanie wymagań, prototypowanie i testy akceptacyjne).

3. Odsuwanie nieodwracalnych decyzji – budowanie pod kątem maksymalnej elastyczności i możliwości zmian.

4. Jak najszybsze wdrażanie w krótkich iteracjach.

5. Pełnomocnictwa dla zespołu – jak najwięcej decyzji i kontroli jest podejmowanych przez zespół, ale nie narzucanych przez proces lub hierarchiczną organizację.

6. Zapewnienie jakości, zamiast kontroli jakości – wbudowanie atrybutów jakości takich jak łatwość utrzymania oraz refaktoryzacja i optymalizacja rozwiązań.

7. Całościowe widzenie produktu, jego właściwości i celu przez wszystkich uczestników projektu.

Swój sukces biznesowy Toyota w dużym stopniu zawdzięcza właśnie praktykom Lean. Natomiast w inżynierii oprogramowania brak jednoznacznych empirycznych dowodów, na ile dość ogólnikowe hasła LSD rzeczywiście przekładają się na sprawność zespołów i korzyści biznesowe. W procesie produkcji zasady Lean oznaczają faktyczne fizyczne zmniejszenie zapasów, krótszy proces produkcyjny i mniejsze potrzeby powierzchni magazynowej, natomiast w odniesieniu do procesu tworzenia oprogramowania zasady te mają raczej symboliczny i hasłowy charakter.

XP – programowanie „ekstremalne”

Programowanie „ekstremalne” to stworzona i spopularyzowana przez Kenta Becka w latach 90. metoda szybkiego tworzenia oprogramowania, mająca na celu maksymalne przyspieszenie tworzenia kodu w sytuacji, gdy wymagania są niejasne i zmienne, a terminy szczególnie pilne.

UWAGA

Narzuca się pytanie, czy w tej sytuacji w ogóle należało tworzyć jakiekolwiek oprogramowanie? To zagadnienie dotyczy jednak obszaru analizy biznesowej i podejmowania decyzji w biznesie, a nie metod realizacji tych decyzji. Można mieć wrażenie, że wymogi błyskawicznego budowania systemów, tak często stawiane wobec IT, wynikają bardziej z mody i swoistej subkultury biznesu niż z rzeczywistej potrzeby.

W dużym stopniu XP było inspirowane potrzebami pierwszego internetowego boomu w tym okresie. Z punktu widzenia biznesowego uzasadnienia potrzeby takiego podejścia warto pamiętać o zjawisku bańki internetowej z lat 1995–2001, zakończonej spektakularnym krachem. Oprogramowanie można próbować tworzyć bardzo szybko, nawet nie znając wymagań.Chwała IT oraz XP, że radzi sobie nawet z takimi wyzwaniami, natomiast niekoniecznie te wyzwania są komukolwiek potrzebne.

W biznesie ulegamy często wprowadzającym w błąd przykładom osób, firm oraz idei, które odniosły spektakularne sukcesy. Jak dobitnie pokazały badania Daniela Kahnemana i Amosa Tversky’ego (nagroda Nobla z ekonomii w 2002 roku), podejmując decyzje biznesowe, często działają na nas mechanizmy opisane przez teorię perspektywy: pewne wybory wydają się nam lepsze, choć obiektywnie są gorsze. Historia niektórych znakomitych sukcesów w IT pokazuje, że sukces udało się osiągnąć nawet wtedy, gdy cel był niejasny, pośpiech morderczy, a proces wytwórczy chaotyczny. Analizując takie przypadki, dochodzimy do fałszywej tezy, że sukces udało się osiągnąć dzięki tym atrybutom, a nie mimo ich. Arogancki, woluntarystyczny styl zarządzania Steva Jobsa nie przeszkodził mu w osiągnięciu sukcesu, ale dla tysięcy innych szefów okazał się przeszkodą nie do pokonania. Tak samoswoisty manieryzm niektórych gałęzi współczesnego biznesu, gloryfikujący pośpiech, a pomijający przypadki niepowodzeń spowodowanych pośpiechem, bywa stosowany jako uzasadnienie „szybkich” metod tworzenia oprogramowania. Podkreślmy jeszcze raz: są możliwe, ale nie zawsze mają biznesowy sens.

Wspomniany Kent Beck jest jednym z pierwszych sygnatariuszy manifestu Agile. Obecnie wiele praktyk XP bywa stosowanych w projektach Agile, najczęściej TDD, ale nie jest to konieczny warunek żadnej z metod zwinnych.

Uzasadnienie XP zawiera wiele gołosłownej psychologicznej ideologii (o synergii, o zaangażowaniu, o kreatywności), ale możliwe jest wskazanie rzeczywistych korzyści, wynikających ze stosowania konkretnych praktyk. Praktyki XP to: 1. Unikanie podejmowania z góry decyzji dotyczących wymagań i architektury oraz ich minimalistyczna dokumentacja, kiedy w końcu zostaną podjęte. Jest to oczywiście praktyka bardzo kontrowersyjna, ale w sytuacji, gdy brak podstaw do podejmowania takich decyzji, mająca szereg zalet.

2. Iteracyjność – korzyści i koszty tego podejścia omawiamy obszernie w rozdziale „Porównanie kosztów i korzyści Agile oraz metod sekwencyjnych”.

3. TDD (Test Driven Development, wytwarzanie sterowane testami) – więcej w rozdziale „Metodyka TDD”. Tamże opis procedury refaktoryzacji.

4. Programowanie parami – zamiana rolami autorów testów i autorów kodu. Pozwala to na lepsze przestrzeganie zasady, żeby autor kodu nie był jednocześnie jego testerem.

5. Rotacja programistów między parami – możliwość wspólnej własności kodu.

6. Stały kontakt z klientem – TDD stosowane w ramach Agile realizuje tę zasadę różnymi metodami, często wspólnie z metodyką ATDD (więcej w rozdziale „ATDD – wyższa szkoła jazdy automatyzacji testów”).

Agile Kanban

Metoda Kanban pojawiła się w latach 50. do sterowania procesami produkcji w japońskim przemyśle motoryzacyjnym, jako jedna z praktyk towarzyszących metodykom Lean w produkcji. Mówiąc w skrócie, celem tej metody jest płynne wytwarzanie procesu bez żadnych kosztownych zapasów czekających na przetworzenie i bez konieczności oczekiwania przez ludzi i procesy na surowce, które można by przetworzyć. Aby to osiągnąć, przepływ produktu przez system produkcyjny musi odbywać się bez wąskich gardeł i spiętrzeń.

Rysunek 1.5. Tablica Kanban

Tę filozofię – na zasadzie analogii, nie kopiowania – na teren procesów produkcji oprogramowania przeniósł duński informatyk David Anderson („Kanban: Successful Evolutionary Change for Your Technology Business”, 2010). Kanban, stosowany razem z Agile Scrum, bywa nazywany Scrum-ban. Centralnym elementem stosowania Kanban w IT jest tak zwana tablica Kanban. Kolumny tablicy odpowiadają kolejnym etapom procesu IT, zdefiniowanym w danej organizacji czy grupie. Z kolei poszczególne zadania do realizacji przedstawiane są w postaci kart, które umieszcza się we właściwej dla aktualnej fazy kolumnie. Określa się obowiązujące limity dla liczby czynności, które mogą jednocześnie znajdować się w tej samej fazie realizacji.

Kanban, podobnie jak metodyki Lean, jest zalecanym sposobem działania, ale nie jest podejściem równie pełnym jak Agile Scrum. Z tego powodu Kanban można na przykład stosować również do regulowania procesów sekwencyjnych, niekoniecznie iteracyjnych, jak Scrum.

Agile CrystalClear

Jest to jeden z wielu istniejących sposobów realizacji ideałów Agile oraz Lean. Agile Crystal został zaproponowany przez Alistaira Cockburna (alistair.cockburn.us) i opisany przez niego w książce „Crystal Clear: A Human-Powered Methodology for Small Teams: A Human-Powered Methodology for Small Teams” (2004).

Cockburn opisuje Agile Crystal Clear jako metodykę Agile (nic dziwnego – Alistair jest jednym z sygnatariuszy Manifestu Agile), dostosowaną do niewielkich, 5–8-osobowych zespołów. Cockburn nie uległ pokusie popełnienia opisanego wcześniej błędu Arystotelesa i nie głosił modnej tezy, że Agile Crystal jest zbawieniem dla świata. Może dlatego Crystal Clear, merytorycznie ani lepsze, ani gorsze od Agile Scrum, pod względem popularności przegrało ze Scrumem.

UWAGA

Nie jest w IT niczym nowym, że technologie wygrywają lub przegrywają rywalizację ze sobą nie ze względów merytorycznych, lecz mody. Język C przegrał z językiem Pascal, obiektowa Simula przegrała z półobiektowym C++, solidny system operacyjny OS 2 przegrał z „bałaganiarskim” Windows. Nie szkodzi! Zarówno książkę Cockburna, jak i jego samego (prowadzi szkolenia) gorąco polecamy. Na pociechę zwolennikom Crystal Clear można powiedzieć, że uprawiając Agile Scrum, realizujemy 90% postulatów Crystal Clear.

Agile Scrum

Pomysł Scrum pojawił się właśnie pod tą nazwą już w 1986 roku, opisany przez dwóch japońskich autorów jako filozofia zarządzania firmą, niekoniecznie IT.W latach 90. Ken Schwaber oraz Jeff Sutherland doskonalili oraz opisywali metodykę Scrum w praktyce przemysłu IT, jednocześnie prezentując ją na konferencjach. W 2001 roku Schwaber i Mike Beedle opublikowali klasyczną dziś pozycję „Agile Software Development with Scrum”. Na początku XXI wieku powstał Scrum Alliance (scrumalliance.org), oferujący do dziś opisany dalej system certyfikacji. W 2009 roku powstała równolegle organizacja Scrum.org o podobnym profilu (też oferująca certyfikację).

Agile Scrum jest najbardziej rozpowszechnioną i znaną szkołą Agile. Nazwa jest zapożyczeniem z języka rugby. Scrum albo scrummage jest wznowieniem gry, trochę jak rzut wolny w piłce nożnej, tyle że uczestniczą w nim zbiorowo wszyscy zawodnicy obu drużyn, tworząc wyglądające dość humorystycznie koło przepychających się mężczyzn. Dobrym polskim odpowiednikiem byłaby „przepychanka”. Jako symbol skutecznej współpracy ta metafora nie jest zbyt szczęśliwa. Nie wiadomo, czemu nasunęła się dwóm japońskim autorom „New Product Development Game” w 1986 roku. Odpowiednikiem Scruma w projekcie IT ma być bowiem codzienne, 15-minutowe spotkanie scrumowe. W polskiej terminologii rugby scrum nazywany jest „młynem”, stąd to słowo pojawia się czasem w polskiej terminologii, np. „mistrz młyna” (Scrum Master).

Szkicowo założenia Agile Scrum prezentuje rysunek 1.6. Do szczegółów Scruma odwołujemy się w całej książce, w wielu miejscach.

Rysunek 1.6. Schemat działań oraz tworzonych dokumentów i produktów w przebiegu Agile Scrum W Scrumie najważniejsza jest iteracyjność, umożliwiająca realizację innych zasad Agile, takich jak elastyczność, przyrostowe dostawy użytecznych wersji produktu, bezpośrednia współpraca w samoorganizującym się zespole. Każdy pojedynczy przebieg może mieć w pewnym sensie układ sekwencyjny – taka jest natura ludzkich działań, wynikająca z jednokierunkowego przepływu czasu. Natomiast szereg następujących po sobie przebiegów umożliwia iteracyjne realizowanie wymagań (model spiralny), a także stopniowe ulepszanie sposobu pracy zespołu.

Agile nie narzuca, jak inne metodyki, szczegółowych wskazówek, jak należy pracować, jakie stosować procedury, sposoby dokumentacji itp. To pozostawia do decyzji poszczególnym zespołom, organizacjom czy osobom. Platformą do stopniowego uczenia się na własnych błędach oraz iteracyjnego wdrażania ulepszeń do własnego procesu są retrospektywy przebiegu.

Rysunek 1.7. Wzrost trafności oszacowań i szybkości zespołu dzięki retrospektywom

1.5. Metametoda – wybór procesu

Wszelkie inteligentne działania można podejmować i realizować różnymi sposobami. Przyjrzyjmy się, jakie mogą być kryteria ich klasyfikacji.

Na drodze do celów mogą pojawiać się różne, często nieprzewidziane przeszkody, ponieważ przyszłość jest nieznana. Podejmując działanie, takie jak budowa systemu IT, narażamy się na ryzyko niepowodzenia. Temu ryzyku można przeciwstawiać się dwojako. Pierwszym sposobem jest staranne planowanie i precyzyjne określenie celu, umożliwiające wypracowanie najpewniejszej i najkrótszej drogi do celu. Zaliczają się tutaj sekwencyjne metody tworzenia oprogramowania (model kaskadowy, model V, model W). Dla tego podejścia zagrożeniem jest niepoprawne czy niedokładne określenie celu albo wystąpienie nieoczekiwanych zmian i okoliczności w trakcie jego realizacji. Wówczas, mimo wszelkich wysiłków, istnieje ryzyko, że na końcu projektu znajdziemy się bardzo daleko od celu, a straty wynikające z tego niepowodzenia będą znaczne.

Drugi wariant to metoda kolejnych przybliżeń, można ją też nazwać metodą prób i błędów. Do nich zaliczają się iteracyjne metody budowania oprogramowania, wśród nich Agile. Ryzyko, że wyląduje się bardzo daleko od założonego celu, jest niewielkie, ponieważ w trakcie prac wielokrotnie doprecyzowuje się wymagania i koryguje w miarę potrzeb kierunek dalszych działań. Ceną za to jest dłuższa droga, wynikająca m.in. z konieczności wielokrotnego kontrolowania (testy regresji) i większe koszty wykonywania korekt kursu.

Istnieją produkty, dla których nie mają sensu dostawy częściowe. Niekompletny samolot nie przedstawia żadnej wartości użytkowej. Stąd popularny, humorystyczny film na YouTube (tinyurl.com/wiplink04), prezentujący Agile jako budowanie samolotu w powietrzu. Dla takich produktów model przyrostowy nie ma zastosowania.

Istnieją jednak produkty i usługi, których nawet częściowa funkcjonalność jest przydatna.Wówczas częste dostawy częściowe są korzystniejsze w porównaniu z koniecznością długiego oczekiwania, aż wszystko będzie zapięte na ostatni guzik. Dla nich podejście Agile jest bardzo korzystnym biznesowo wyborem.

Rysunek 1.8. Wielkość przedsięwzięcia a optymalny poziom formalizmu jego organizacji Jak w znanym wojskowym dowcipie, jeśli jeden żołnierz wykopie określonej wielkości dół w godzinę, to nieprawdziwe jest założenie, że 100 żołnierzy wykopie ten sam dół w mniej niż minutę, w czasie 100 razy krótszym. W dużych przedsięwzięciach konieczne jest planowanie, synchronizacja działań, komunikacja i czas przeznaczony na nie powoduje spadek indywidualnej wydajności mierzonej, na przykład liczbą linii kodu źródłowego wyprodukowanych w ciągu jednego dnia przez każdego z uczestników projektu. Dlatego niewielkie przedsięwzięcia nieomal instynktownie podejmuje się w sposób Agile, natomiast duże grawitują w kierunku hierarchii, procedur i formalnej dokumentacji.

Do pewnego stopnia im większe przedsięwzięcie, tym bardziej formalna organizacja jest potrzebna, aby uniknąć kosztownego chaosu komunikacyjnego i organizacyjnego. Gdzieś jednak istnieje górna granica tego rozwiązania, powyżej której koszty działania organizacji stają się tak wielkie, że brakuje jej zasobów, by cokolwiek jeszcze realizować na zewnątrz. W takiej sytuacji trzeba znaleźć inne rozwiązanie: próbować podzielić wielki projekt na kilka mniejszych. Jeśli taki zabieg się uda, metody zwinne można stosować nawet do wielkich przedsięwzięć. Pociąga to jednak za sobą konieczność wyjścia poza podstawowy paradygmat Agile.Omawiamy te zagadnienia w rozdziałach „Integracja wielu zespołów Agile” oraz „Agile w kaskadowym świecie”.

Więcej znajdziesz w wersji pełnej publikacji

Pozostałe tematy publikacji w pełnej wersji

Wstęp

1. Metody zwinne – wprowadzenie

1.1. Metoda prób i błędów – lekarstwo na niepewność

1.2. Najważniejsze fakty z historii metod iteracyjnych i przyrostowych

1.3. Dalszy rozwój metod zwinnych – post-agilism

1.4. Przegląd metod zwinnych

1.5. Metametoda – wybór procesu

1.6. Unikanie szkodliwych nieporozumień na temat Agile

1.7. Agile w kaskadowym świecie

1.8. Integracja wielu zespołów Agile

2. Od potrzeby biznesowej do zaspokojenia – zwinna realizacja

2.1. Etapy życia produktu: projekt, wdrożenie, utrzymanie

2.2. Czy klienci potrzebują dobrych produktów?

2.3. Brak kosztów jakości projektów i jakości produktów

2.3. Modele cyklu życia oprogramowania

2.4. Ciągła integracja i częste dostawy

3. Zwinna inżynieria wymagań

3.1. Cele określania wymagań

3.2. Techniki pozyskiwania wymagań

3.3. Paradoksy wymagań i model Kano

3.4. Współpraca z marketingiem

3.5. Opisywanie wymagań

3.6. Rodzaje wymagań – atrybuty jakości

3.7. Zasady podziału wymagań w Scrumie

3.8. Korzyści i koszty zapisywania

3.9. Opisywanie wymagań w języku naturalnym

3.10. Opowieści użytkowników

3.11. Modelowanie wymagań

3.12. Zatwierdzanie wymagań

3.13. Weryfikacja, walidacja, negocjowanie i konsolidacja wymagań w Agile

3.14. Interesariusze, kontekst, granica kontekstu i negocjacje w metodach zwinnych

3.15. Zwinne przeglądy

3.16. Weryfikacja modeli

3.17. Zarządzanie śliskimi wymaganiami

3.18. Wersjonowanie

3.19. Śledzenie powiązań wymagań

4. Planowanie i nadzorowanie w Agile Scrum

4.1. Zasady dobrego planowania pracy

4.2. Przegląd sposobów szacowania pracochłonności

4.3. Szacowanie algorytmiczne lub na podstawie doświadczenia

4.4. Planowanie w Agile: pracochłonność, wydajność zespołu, ryzyko

4.5. Dług techniczny

4.6. Diagram wypalenia i jego wykorzystanie

5. Testowanie w Agile

5.1. Testowanie jako jedna z form zapewnienia jakości w Agile

5.2. Cele, rodzaje i poziomy testów według kwadrantów testowych Agile

5.3. Testy czarnej skrzynki i testy dogłębne

5.4. Testy właściwości (pozafunkcjonalne) w Agile

5.5. Szkoła kontekstowa i testowanie eksploracyjne w Agile

5.6. Testowanie eksploracyjne w Agile

5.7. Podstawy automatyzacji testów w projektach Agile

5.8. Automatyzacja przygotowania testów w Agile

5.9. Znaczenie automatycznych testów w modelu iteracyjnym

5.10. Wpływ Agile na automatyzację testów

5.11. Testowanie na podstawie modeli

5.12. Projektowanie testów

5.13. Sposoby projektowania testów

5.14. Agile a tradycyjne trudności testowania

5.15. Obsługa wykrytych błędów

5.16. Testy jednostkowe

5.17. Metodyka TDD

5.18. Testy akceptacyjne a kryteria ukończenia – ATDD

6. Jak być Agile i przetrwać w zespole

6.1. Społeczne i psychologiczne aspekty pracy zwinnej

6.2. Znaczenie rytuałów i terminologii Agile

6.3. Zwinny programista i jego rola w zespole Agile

6.4. Metody treningu – jak stać się zwinnym

6.5. Certyfikacje

6.6. Wady i zalety certyfikatów

6.7. Wybór certyfikacji

6.8. Agile po pięćdziesiątce

6.9. Agile a kariera

7. Słownik terminów

8. Źródła