Ostatnio spacerowałem razem z synem, aby nacieszyć się zimową pogodą. W pewnym momencie dostrzegliśmy jak jacyś panowie sadzą drzewa wzdłuż naszej ulicy z użyciem koparki. Nie było przebacz, musieliśmy się zatrzymać (syn ma 2 lata). Przyglądaliśmy się jak robotnicy wiercą otwór w ziemi, wsadzają tam drzewko i je zakopują. Następnie przechodzą do następnego i tak dalej. Zastanawiałem się dlaczego robią to w ten sposób. Czy nie łatwiej byłoby najpierw wywiercić wszystkie otwory, a dopiero później zabierać się za drzewka? Jednak po chwili namysłu uznałem, że mają oni rację. Co jeśli nagle spadłaby ulewa, a oni byliby na końcu wiercenia otworów? Żadne drzewko nie byłoby posadzone. Robiąc ich sposobem tymczasowy efekt byłby taki, że kilka drzewek znalazłoby się na swoim miejscu. Wtedy do mnie dotarło czym tak naprawdę różni się tworzenie czegoś w sposób przyrostowy od tworzenia iteracyjnego.

Podejście przyrostowe

Podejmując się przedsięwzięcia w sposobie przyrostowym musimy mieć jasną wizję projektu. Jeszcze nie do końca wiemy jak będą dokładnie wyglądały jego poszczególne części, ale całokształt jest już wyklarowany. Następnie siadamy do każdej części projektu i robimy ją kompleksowo. Analizujemy, projektujemy, implementujemy i testujemy - oczywiście są to kroki w kontekście wytwarzania oprogramowania. Kiedy skończymy dany fragment to z założenia już do niego nie wracamy. Zostaje on w swojej ostatecznej wersji (oczywiście wyjątkiem są jakieś mocno palące zmiany).

Podejście przyrostowe na przykładzie sadzenia drzewek

Przekładając to na panów od drzewek. Właśnie w taki sposób oni podchodzili do sadzenia. Mieli wizję i się jej trzymali. Sadzili kompleksowo drzewko za drzewkiem i nie wracali do żadnego z nich, aby je trochę przesunąć w lewo czy prawo. I to jest jak najbardziej sensowe podejście do tego zagadnienia.

Podejście iteracyjne

Decydując się na podejście iteracyjne również musimy mieć całokształt projektu, ale nie musi być ona tak jasna jak w przypadku podejścia przyrostowego. Zaczynamy tworzyć ogół nie skupiając się na detalach. Na nie przyjdzie jeszcze czas. Chcemy mieć jako tako działający produkt, ale żeby był on całościowy. W podejściu przyrostowym jeśli przyszłoby nam skończyć wcześniej przedsięwzięcie to mielibyśmy np. tylko działający panel logowania i obsługę rejestrowania zamówień. Dla podejścia iteracyjnego cały proces byłby dostarczony. Co prawda sklejony na przysłowiową taśmę, ale istniałby.

Podejście iteracyjne na przykładzie sadzenia drzewek

Czujecie już różnicę? Nie na darmo piszę tutaj też o tworzeniu oprogramowania. Jak widać w większości przypadków tworzenie iteracyjne ma więcej sensu. Po co komu dopieszony proces rejestracji użytkowników jak po jej dokonaniu nie mają co oni robić w naszym systemie. To samo tyczy się kursów online. Po co komu pierwsze 3 lekcje w wersji HD z turbo animacjami jak to tylko 10% całości dostępnej dla potencjalnych klientów. Zakładam, że im zależy na wartości jaką z tego kursu wyciągną. Nawet jeśli miałaby być w wersji SD (dobra moze przesadziłem…).

Podsumowanie

Jak widać na powyższych przykładach, nie wszystko da się odrysować od jednej linijki. Niektóre podejścia wymagają tworzenia czegoś iteracyjnie, a inne przyrostowo. Ja, spaczony podejściem popularnym w świecie IT, zdziwiłem się jak ktoś inny robi coś w odmienny sposób. Jednak nie można ciągle zapominać o pewnej sentencji - dobieraj odpowiednie narzędzie do rozwiązywanego problemu. Bez tego możemy zrobić sobie wiecej krzywdy niż pożytku.