Niedawno zainteresowałem się zwinnymi praktykami w tworzeniu oprogramowania i od tego czasu widziałem wiele artykułów wskazujących, że praktyki te pozwalają obniżyć ogólne koszty.
Logika tego zazwyczaj wygląda następująco: jeśli zmienią się twoje wymagania, możesz odzwierciedlić tę zmianę w kolejnym zaległym sprincie, co doprowadzi do obniżenia kosztów, ponieważ zaprojektowanie nowej funkcji i wdrożenie jej jest zbliżone pod względem czasu, więc koszty spadają, zgodnie ze znaną zasadą, że im później trzeba zmienić swoje wymagania, tym droższe będzie spełnienie tego wymagania.
Ale średnie i duże projekty oprogramowania są złożone. Nagła zmiana wymagań nie oznacza, że nie będziesz musiał dotykać innych części systemu, aby spełnić to wymaganie. W wielu przypadkach architektura będzie musiała zostać znacznie zmodyfikowana, co oznacza również, że będziesz musiał ponownie wdrożyć wszystkie funkcje oparte na starszej architekturze. Cała kwestia obniżenia kosztów trochę tutaj odchodzi. Oczywiście, jeśli nowy wymóg wymaga nowej niezależnej części systemu, to nie jest problem, stara architektura po prostu rośnie, nie trzeba jej ponownie przemyślać i reimplementować.
I odwrotnie. Jeśli używasz wodospadu i nagle zdajesz sobie sprawę, że należy wprowadzić nowy wymóg, możesz zmienić projekt. Jeśli wymaga to zmiany istniejącej architektury, przeprojektuj ją. Jeśli tak naprawdę nie zadziera z tym, ale po prostu wprowadza nową część systemu, to idź i wykonaj całą pracę, nie ma problemu.
Biorąc to pod uwagę, wydaje mi się, że jedyną zaletą zwinnego rozwoju jest działająca funkcja kompletnych kompilacji między sprintami, a dla wielu ludzi i podejrzeń nie jest to krytyczne. Ponadto zwinne wydaje się, że powoduje to ogólną wadliwą architekturę oprogramowania, ponieważ funkcje są jakby klepane jedna na drugiej, zwinne zespoły dbają tylko o to, czy funkcja działa, a nie o to, jak działa. Wydaje się, że gdy systemy z czasem stają się coraz bardziej złożone, zwinne praktyki programistyczne faktycznie zwiększają chaos w ogólnej architekturze produktu, co ostatecznie skutkuje wyższymi kosztami, ponieważ wprowadzanie zmian będzie coraz trudniejsze, a wodospad pozwala na doskonalenie architektury zanim cokolwiek wypuścisz.
Czy ktoś może mi wskazać, gdzie popełniam błąd, ponieważ oczywiście wiele osób używa zwinnych w środowiskach produkcyjnych, więc gdzieś się mylę.