Spróbuję zilustrować niektóre aspekty, na które nie ujęto innych odpowiedzi i które, IMO, są ważne.
Podstawowa kwestia: niektórzy programiści są przede wszystkim zmotywowani radością z podjęcia trudnej pracy, przemyślenia projektu, przemyślenia potencjalnych problemów, a następnie rozwiązania problemu kawałek po kawałku, przy minimalnej interakcji z innymi przez dłuższy czas okres czasu. Zazwyczaj wykonują prace na wysokim poziomie jakości i na czas; ich praca jest łatwa w utrzymaniu i pasuje do ogólnej architektury.
Deweloperzy tego typu mogą mieć trudności z przystosowaniem się do zwinnego środowiska, a ich podejście jest często odrzucane jako „niechęć do zmian”, być może związana z ego lub staromodnością.
Często ignoruje się to, że aby rozwiązać złożone problemy, trzeba poradzić sobie z dużą ilością informacji, i że może to wymagać wielu analiz, myślenia, próbowania, szkicowania rozwiązania, wyrzucania go, próbowania innego. Tak złożony problem może wymagać od kilku godzin do kilku tygodni skoncentrowanej pracy, dopóki nie znajdziesz gotowego rozwiązania.
Jednym z podejść jest to, że deweloper bierze specyfikację problemu, idzie do swojego pokoju i wraca dwa / trzy tygodnie później z rozwiązaniem. W dowolnym momencie (w razie potrzeby) programista może zainicjować interakcję z innymi członkami zespołu lub interesariuszami (zadając pytania dotyczące określonych problemów), ale większość pracy wykonuje programista, któremu przypisano zadanie.
Co dzieje się w zwinnym scenariuszu? Zespół dzieli problem na małe fragmenty (historie użytkowników) po szybkiej analizie (przygotowaniu). Mamy nadzieję, że historie użytkowników są od siebie niezależne, ale często tak nie jest: w celu podzielenia złożonego problemu na naprawdę niezależne fragmenty potrzebujesz wiedzy, którą zwykle zdobywasz po kilku dniach pracy. Innymi słowy, jeśli jesteś w stanie rozbić złożony problem na małe niezależne części, oznacza to, że właściwie już go rozwiązałeś i że pozostało ci tylko tyle pracy. W przypadku problemu, który wymaga, powiedzmy, trzytygodniowej pracy, będzie to prawdopodobnie miało miejsce w drugim tygodniu, a nie po kilku godzinach pielęgnacji wykonanej na samym początku sprintu.
Po zaplanowaniu sprintu zespół pracuje nad różnymi częściami problemu, które prawdopodobnie mają między sobą zależności. To generuje wiele narzutów komunikacyjnych, próbując zintegrować różne rozwiązania, które mogą być równie dobre, ale, cóż, różnią się od siebie. Zasadniczo praca prób i błędów jest rozłożona na wszystkich zaangażowanych członków zespołu, z dodatkowym kosztem komunikacji (rosnącym kwadratowo). Myślę, że niektóre z tych problemów są bardzo dobrze zilustrowane w tym artykule przez Paula Grahama, w szczególności w punkcie 7.
Oczywiście dzielenie pracy między członkami zespołu zmniejsza ryzyko związane z opuszczeniem projektu przez jednego członka zespołu. Z drugiej strony wiedzę o kodzie można przekazywać na inne sposoby, np. Za pomocą recenzji kodu lub prezentacji technicznych kolegom. Pod tym względem nie sądzę, aby istniała srebrna kula, ważna we wszystkich sytuacjach: własność współdzielonego kodu i programowanie w parach nie są jedyną opcją.
Ponadto „dostarczenie funkcjonalności roboczej w krótszych odstępach czasu” powoduje przerwanie przepływu pracy. Może to być OK, jeśli część funkcjonalności to „dodaj przycisk anulowania na stronie logowania”, który można ukończyć przed końcem sprintu, ale gdy pracujesz nad złożonym zadaniem, nie chcesz takich przerw: to jest jak próbując jak najszybciej przejechać samochodem 100 km i zatrzymywać się co 5 minut, aby sprawdzić, jak daleko zajechałeś. Spowolni cię to.
Oczywiście posiadanie częstych punktów kontrolnych ma na celu uczynienie projektu bardziej przewidywalnym, ale w niektórych przypadkach przerwa może być bardzo frustrująca: ledwo można uzyskać szybkość, że już czas się zatrzymać i przedstawić coś.
Nie sądzę więc, aby postawa opisana w pytaniu dotyczyła wyłącznie ego lub oporu wobec zmian. Może się również zdarzyć, że niektórzy programiści uważają wyżej opisane podejście do rozwiązywania problemów za bardziej skuteczne, ponieważ pozwala im lepiej zrozumieć problemy, które rozwiązują, i kod, który piszą. Zmuszenie takich programistów do pracy w inny sposób może spowodować obniżenie ich wydajności.
Nie sądzę też, aby niektórzy członkowie zespołu pracowali w izolacji nad konkretnymi, trudnymi problemami, wbrew zwinnym wartościom. W końcu zespoły powinny się samoorganizować i wykorzystywać proces, który okazał się najskuteczniejszy na przestrzeni lat.
Tylko moje 2 centy.
There’s a great story of a manager of a Coca-Cola plant whose numbers were far better than his peers. When asked what his “secret” was, he said simply that rather than take a best practice and modify it to meet what the plant did, he instead modified the plant to match the best practice.
Nie postępujesz zwinnie, dopóki nie zrozumiesz, dlaczego to robisz.