Jak sprawić, by zwinność była przyjemna dla programistów, którzy lubią osobiście, niezależnie posiadać duże fragmenty od początku do końca

52

Jesteśmy mniej więcej w połowie drogi od przejścia z wodospadu do zwinnego za pomocą scrum; zmieniliśmy z dużych zespołów w silosach technologicznych / dyscyplinowych na mniejsze zespoły wielofunkcyjne.

Zgodnie z oczekiwaniami zmiana na zwinną nie wszystkim odpowiada. Istnieje garstka programistów, którzy mają trudności z przystosowaniem się do zwinności. Naprawdę chcę ich zaangażować i rzucić im wyzwanie, a ostatecznie cieszyć się codziennym przychodzeniem do pracy. Są to inteligentni, szczęśliwi, zmotywowani ludzie, których szanuję zarówno na poziomie osobistym, jak i zawodowym.

Podstawowa kwestia jest taka: 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. Przechodząc do zespołu interdyscyplinarnego, który ceni interakcję i wspólną odpowiedzialność za pracę oraz dostarczanie funkcjonalności roboczej w krótszych odstępach czasu, zespoły ewoluują tak, że cały zespół przewraca ten trudny problem. Wiele osób uważa to za pozytywną zmianę; ktoś, kto uwielbia podejmować problemy i posiadać je niezależnie od początku do końca, traci taką możliwość pracy.

Nie jest to problem, gdy ludzie są otwarci na zmiany. Z pewnością widzieliśmy kilka osób, które nie lubią zmian, ale w przypadkach, które mnie niepokoją, osoby te są dobrymi wykonawcami, naprawdę otwarte na zmiany, podejmują wysiłek, widzą, jak reszta zespołu jest zmieniają się i chcą się dopasować. Nie chodzi o to, że ktoś jest trudny lub przeszkadza, albo chce gromadzić najbardziej soczystą pracę. Po prostu nie znajdują radości w pracy, tak jak kiedyś.

Jestem pewien, że nie możemy być jedynym miejscem, które nie spotkało się z tym. Jak inni podeszli do tego? Jeśli jesteś programistą, który jest motywowany tym, że osobiście posiadasz dużą część pracy od końca do końca, a dostosowałeś się do innego sposobu pracy, co to dla Ciebie zrobiło?

Kris
źródło
7
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.
Nikt
Pokaż im, że przyjemniej jest współpracować, ponieważ wtedy będą pisać lepszy kod, uczyć się więcej i mieć mniej problemów.
Chociaż szczegóły są specyficzne dla programowania, jest to ogólny problem zarządzania zmianami w miejscu pracy i lepiej byłoby zapytać go w miejscu pracy.se.
mattnz
Do Twojej wiadomości, oprócz poniższych odpowiedzi, należy również pamiętać, że zwinność nie oznacza, że ​​nie możesz wysyłać Facebooka ani WhatsApp. Oznacza to, że „sposób” wysyłki jest inny, ale poszczególne osoby mogą posiadać duże elementy. Na przykład w jednym przypadku miałem duży system wdrażania, a kamień milowy naszego statku był co dwa tygodnie. Wysyłka i proces nie powinny mieć wpływu na projekt, rozwój i wydanie funkcji itp. (Z wyjątkiem oczywiście mechaniki).
Omer Iqbal,

Odpowiedzi:

22

Powiem, że jest bardzo niewiele sklepów z oprogramowaniem, które mają tyle szczęścia, że ​​mają rzadkie rozróżnienie, w którym Agile naprawdę nie ma sensu jako metodologia. Jeśli cały zespół składa się z naprawdę wyjątkowych programistów, którzy dogłębnie rozumieją aspekty biznesu i długowieczności w firmie i sobie nawzajem, oraz jeśli wymagania biznesowe i potrzeby klienta są zwykle zawsze podobne i rzadko podlegają zmianom w środku wypuszczenie, wtedy masz szczęście pracować w tak rzadkim środowisku, w którym Agile prawdopodobnie faktycznie HURT.

Został zaprojektowany tak, aby był najbardziej skutecznym podejściem wśród chaotycznych i ciągle zmieniających się wymagań biznesowych i potrzeb klientów, ewoluujących lub zmieniających się zasobów projektu oraz napiętych lub zmieniających się terminów. Takie środowisko oznacza pewną katastrofę dla typowego rozwoju wodospadu, ponieważ jest podatny na zmiany zespołu w trakcie projektu, podatny na zmieniające się wymagania i niezwykle podatny na zmianę daty.

Współczuję waszym cennym członkom zespołu, którzy nie znajdują już radości w swojej pracy. Mogą to być wyjątkowo utalentowani ludzie, którzy angażują się w swoją pracę, ale ostatecznie szereg czynników pozostających poza ich najlepszą kontrolą wciąż może zabić projekt. Najlepszym sposobem podejścia do rozwoju funkcji jest utrata indywidualnego nastawienia i ekspresji oraz myślenie w kategoriach podejścia zespołowego.

Jeśli okaże się, że to nie zadziała dla nich, możesz znaleźć dla nich specjalne zastosowanie. Jeśli są wyjątkowo utalentowani i doświadczeni, sprawdź, czy byliby zainteresowani rolą architektoniczną, opracowując projekty, podejścia, eksperymentując z nowymi technologiami i rozwijając najlepsze praktyki. Poproś te osoby o kontrolę i przegląd dokumentacji projektowej.

Jeśli to nadal im nie odpowiada, być może będą musieli pracować osobno nad bardzo złożonymi refaktoryzacjami technicznymi w oddzielnej gałęzi, ogromnie zaangażowanymi prototypami i dowodami koncepcji lub innymi nowatorskimi pracami, które czasem trzeba wykonać, ale nie pasują dobrze do zakres pojedynczego projektu lub wydania.

wałek klonowy
źródło
dzięki za odpowiedź. Myślę, że przynajmniej w jednym przypadku dążymy do twojej ostatniej sugestii, kiedy możemy. Musimy zastanowić się, w jaki sposób indywidualny projekt jednej osoby nie wykoleja dużej części wypracowanej przez nas własności społeczności, ale wydaje się, że warto.
Kris
4
Jeśli zamierzasz to zrobić z kilkoma osobami, po prostu zwróć uwagę na to, jak wpływa to na morale innych, którzy faktycznie wykonują prace projektowe. Mogą czuć, że dajesz specjalną przewagę lub preferencyjne traktowanie osobom, które narzekają.
wałek klonowy
Uważaj też, aby wszyscy byli zaangażowani i komunikowali się ze sobą, nawet jeśli kilku członków pracuje nad nowatorskimi rozwiązaniami. Przykłady: wszyscy uczestniczą w codziennych spotkaniach i planują; pionierzy powinni przedstawiać przegląd swojej pracy i regularnie prezentować wyniki (może rzadziej niż zespół Agile, ale nadal co dwa tygodnie lub co miesiąc), informować kierowników zespołów o przeszkodach, jakie napotykają pionierzy (więc ci ostatni nie „ wciąż dążyć do ślepego zaułka). Oświadczenie: Jestem właśnie tego rodzaju osobą i myślę, że to może zadziałać naprawdę dobrze.
rwong
1
Z drugiej strony, jeśli pracownicy firmy zajmujący się programowaniem składają się głównie z pionierów, a ich zgodą jest, że nie dostosują się do stylu programowania Agile, być może ta siła robocza będzie miała duże trudności z przyjęciem praktyki Agile. Należy szukać innych podejść. Ponieważ pionierzy uwielbiają eksperymentować , należy zatrudnić nowych pracowników, aby zaspokoić potrzeby produkcyjne, aby firma mogła zarabiać na swoich badaniach i rozwoju.
rwong
44

Po prostu nie znajdują radości w pracy, tak jak kiedyś.

Poprawny.

To duży objaw, że robisz to źle.

Zwinny nie powinien narzucać ludziom złego nowego porządku.

Zwinny powinien pozwolić zespołowi na samoorganizację w sposób, który czyni go najbardziej efektywnym.

Samoorganizacja oznacza, że ​​zarządzanie nie nakłada dziwnych reguł. Nie narzuca złych harmonogramów i nie narzuca niepotrzebnej interakcji.

Niektórzy programiści są przede wszystkim motywowani radością z podejmowania 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.

Dlaczego nie mogą tego nadal robić?

Po co je zmieniać?

Przeczytaj kilka razy zwinny Manifest.

„Zwinny Manifest” mówi

Osoby i interakcje dotyczące procesów i narzędzi

Nie oznacza to zmuszania ludzi do pracy w sposób niewygodny i nieproduktywny.

Jeśli zmuszasz ludzi do zbyt małej „interakcji” o niskiej wartości, to zaszedłeś za daleko.

Działające oprogramowanie w obszernej dokumentacji.

Czy oni to robią? Więc zostaw ich w spokoju.

Współpraca z klientami w zakresie negocjacji umów.

Już to robisz? Więc nie zmieniaj się.

Reagowanie na zmianę po wykonaniu planu.

Gdzie ci ludzie są już w stanie zareagować na zmianę? Jeśli tak, to byli już zwinni. Nie musieli się zmieniać.

S.Lott
źródło
Jestem absolutnie pewien, że robimy coś źle. Uważamy, że zwinny nie jest zbiorem zasad, które musisz stosować w określony sposób, aby mieć rację. Podjęliśmy decyzje o zniesieniu pewnych ograniczeń, które kiedyś mieliśmy, i zrobiliśmy wszystko, co w naszej mocy, aby połączyć zespoły, dać im zadanie do wykonania, dać im pewne granice do pracy wewnątrz i zostawić im samych. Oczywiście istnieją ograniczenia, z którymi musimy sobie poradzić; na przykład zespoły produkujące materiały, od których zależą inne zespoły. Na tyle, na ile to możliwe, sprawiamy, że tego rodzaju problemy są rozwiązaniem dla zespołów. ...
Kris
Nie oczekujemy, że któregoś dnia odłożymy długopisy i powiemy „tak, nasza transformacja jest zakończona, pracujemy w ten sposób teraz”, ponieważ oczekujemy, że będzie ewoluować na zawsze. W każdym przypadku, gdy programista stara się czerpać przyjemność z pracy, otaczają go inni, którzy teraz bardziej lubią pracę. Zespoły są upoważnione do samodzielnego rozwiązywania problemów, organizowania się w celu rozwiązania problemów w sposób, który uważają za najlepszy. Zadziwiające było obserwowanie, jak ludzie reagują na to. „Nie możemy zwinnie! Oznaczałoby to, że musielibyśmy zainwestować cały ten czas w bla i załatwić bla, a to będzie kosztować!” „Jest? Ok, idź po to”. ...
Kris
1
@Kris: „Czasami członkowie zespołu nie czują się już nagradzani tak, jak kiedyś”. Poprawny. To dlatego, że wszystko się zmieniło. Możesz rozważyć, że długie wyjaśnienie (zupełnie obcy) może nie być tak pomocne, jak długa, dogłębna dyskusja z rzeczywistymi ludźmi mającymi faktyczny problem. „Osoby i interakcje dotyczące procesów i narzędzi”. Porozmawiaj z nimi. Czego oni nie lubią? Napraw to, co chcą naprawić. Jeśli chcą zrezygnować z „Agile”, zlikwiduj Agile i zmuś ich do opracowania ścisłych harmonogramów. Nadal zezwalaj na zmiany w harmonogramie.
S.Lott,
1
@Kris: „nie widzą, że trzeba to naprawić. Mogą po prostu nie widzieć już swojego miejsca”. To jest sprzeczne. To z pewnością brzmi jak dwa równoległe monologi: mają poważne problemy, a kierownictwo mówi im, że ich skargi nie odpowiadają ogólnym celom organizacyjnym. Brzmi to tak, jakby żadna część manifestu Agile nie została przeczytana ani zrozumiana przez żadną ze stron. Nie są tak naprawdę „w interakcji”. Niezadowoleni nie mogą proponować naprawy. Więc nie widzą, że można to naprawić.
S.Lott,
1
Duża +1 dla „Nie oznacza to, że ludzie zmuszają do pracy w sposób niewygodny i nieproduktywny”. Jednym z powodów, dla których nie boję się wszystkich metodologii - zwłaszcza gdy stają się popularne i stają się modne - jest właśnie mentalność obcinania ciastek, którą niemal zawsze wydają się angażować w tych, którzy je wdrażają.
PO PROSTU MOJA poprawna OPINIA,
23

moja firma próbowała (i wciąż próbuje po latach prób) dokonać tego samego przejścia i jak dotąd osobiście nie widziałem z tym wiele sukcesów. Podczas tego przejścia dużo czytałem o zwinnym rozwoju i różnych sposobach / aspektach / obawach / technikach, a jedną rzeczą, z którą zdecydowanie się zgadzam, jest to, że czysty zwinny rozwój najlepiej nadaje się, gdy cały zespół składa się ze starszych, wysokiej jakości ludzi (lub przynajmniej wszyscy ludzie na tym samym poziomie).

W ostatnim wydaniu pracowałem w „zwinnym” zespole, w którym IMHO posiadało zbyt wielu programistów z poziomami umiejętności w każdym miejscu i próbowaliśmy zaangażować wszystkich w ten sam projekt. To była katastrofa. Zrobiliśmy więcej rozmów / kłótni niż pracy, a ostatecznie to, co zespół wyprodukował, było przeciętną pracą (przeczytaj Peopleware lub Mythical Man Month o przyjmowaniu średniej). Zapomnij o wzorcach projektowych, zapomnij o niskim sprzężeniu lub dzieleniu kodu na małe klasy i metody. Zapomnij o próbowaniu uczynienia czegokolwiek interesującym, ponieważ a) czego nie moglibyśmy wyjaśnić i zrozumieć wszyscy członkowie zespołu (przynajmniej nie we właściwym czasie) ib) ponieważ byliśmy zwinni, cokolwiek zacząłem od tej iteracji, ktoś inny absolutnie nie rozumiejący będzie kontynuowane w następnej iteracji. Osobiście,

Absolutnie nienawidziłem faktu, że nie mogłem nic zrobić z szablonami C ++ ani pisać fajnych (ale nieco skomplikowanych) bibliotek frameworkowych niskiego poziomu, które znacznie ułatwiłyby nam życie. Jak można coś takiego zrobić, skoro nikt w zespole nie jest w stanie nawet czytać plików nagłówkowych STL, ale wszyscy powinniśmy pracować nad jedną rzeczą naraz. Cały projekt okazał się brutalnie wymuszony funkcja po funkcji, ponieważ to właśnie zwinność wydaje się podkreślać.

Jednocześnie w mojej firmie jest niewielu (bardzo niewielu) osób, z którymi absolutnie chciałbym współpracować i dzielić się całym moim kodem.

Ale teraz stajesz przed wyborem. A) Weź wszystkich dobrych, starszych programistów, którzy produkują wysokiej jakości kod, i umieść je w swoim własnym zespole, a resztę w oddzielnym zespole. Lub B) spróbuj wyrównać drużyny i umieścić dobre z niezbyt dobrymi. W (A) problemem jest to, że jedna z twoich drużyn będzie znacznie gorsza i nie odbierze dobrych umiejętności / nawyków od dobrych facetów. W (B) twoi dobrzy faceci (w czystym zwinnym środowisku) poczują się sfrustrowani i zaczną pracować nad swoimi CV. Mój jest aktualny.

Co masz zrobić?

Nie wiem, czy to właściwe rozwiązanie. Zapytaj mnie ponownie za około rok. Ale co jeśli zamiast „czystego zwinnego” utworzyłeś zespół, ale wyraźnie określiłeś, która osoba (osoby) ma większy wpływ (projekt, recenzje kodu ...) i upewnij się, że osoba ta rozumie to i jest nagradzana za dodatkową odpowiedzialność. Gdy członkowie zespołu zaczną współpracować, zidentyfikuj tych, którzy wychwytują dobre nawyki / praktyki i wyniesiesz ich na ten sam poziom, co twoi dobrzy ludzie. Mamy nadzieję, że gdy ludzie wspólnie spędzą wydanie lub dwa, dowiedzą się, co druga osoba myśli i jak działają, dzięki czemu będą bardziej kompatybilni do pracy w tym samym kodzie w tym samym czasie. Ale dopóki tak się nie stanie, jeśli wrzucisz ludzi do projektu, będzie to tylko frustracja (znowu, tylko moja opinia).

Niektóre z moich myśli opierają się na tym, jak zacząłem profesjonalnie w oprogramowaniu. Kiedy byłem spółdzielnią, pracowałem z facetem, który był moim mentorem. Nauczył mnie wszystkiego, od etyki kodowania, przez dobry projekt, po czytanie tysięcy wierszy kodu, których nie napisałeś. Na początku nie byliśmy nigdzie na tym samym poziomie i byłoby śmiesznie, gdybyśmy zostali umieszczeni w zwinnym zespole i powiedzieli nam, że możemy pracować nad innym kodem. Ale z czasem (kilka lat) zaczęliśmy myśleć podobnie. Zrozumiałem jego kod jednym spojrzeniem, a on powiedział mi wiele razy, że absolutnie nie ma problemów (i był zaskoczony tym) poruszając się po moim kodzie, którego nigdy wcześniej nie widział. Zajęło to lata, a nie coś, co wydarzyło się w nocy. Po klęsce po katastrofie w środowisku zwinnym w ciągu ostatnich kilku lat,

To nie jest tak naprawdę odpowiedź, ale podsumowuje moje doświadczenie / obserwacje. Chcę zobaczyć, co powiedzieliby o tym inni.

DXM
źródło
3
Komentatorzy: komentarze mają na celu poszukiwanie wyjaśnień, a nie dłuższą dyskusję. Jeśli masz rozwiązanie, zostaw odpowiedź. Jeśli Twoje rozwiązanie jest już opublikowane, głosuj za nim. Jeśli chcesz omówić to pytanie z innymi, skorzystaj z czatu . Aby uzyskać więcej informacji, zobacz często zadawane pytania .
8

Co to jest Agile?

Czy to jest:

  • zestaw zasad, których należy przestrzegać, aby osiągnąć zamierzone cele?

  • najlepsze podejście do robienia rzeczy w ramach twoich konkretnych mocnych stron, wymagań i ograniczeń?

Jeśli uważasz, że Agile jest pierwszym i zawsze przestrzegasz wszystkich zasad Scruma i nieustannie martwisz się, czy robisz to dobrze, czy nie, być może ten link trochę Cię oświeci.

Jeśli myślisz bardziej o drugim, gratulacje - masz „Agile”. Każda metodologia zwinna może być jedynie sugestią, jak zacząć robić rzeczy. Jeśli którykolwiek aspekt wybranej przez Ciebie metody zwinności nie jest dla ciebie odpowiedni, masz obowiązek zaprzestania jej używania, zmiany lub zachowania zwinnościo tym. Co ważne, osiągasz coś, czego nie powstrzymują sztuczne ograniczenia - nie tylko te, które wszyscy znamy i uwielbiamy z naszych dawnych wodospadów, w których premier prosi cię o pełne udokumentowane diagramy, których nikt nigdy nie czytaj tylko dlatego, że „tak właśnie mówi ten proces”, ale także z ograniczeń, z których korzysta. Jeśli codzienne scrum wydaje się być ograniczeniem, nie mrugaj nimi! Ślepe ich posiadanie, bo tak mówią zasady, nie jest bardziej zwinne niż stare sposoby.

Teraz, jeśli masz facetów, którzy załatwiają sprawy, zamykając się w pokoju z galonem coli i włazem do pizzy, wykorzystaj ten fakt. Daj im część systemu, która jest głównie samodzielna i zamknij je. Kiedy skończą, powinieneś zachęcić ich do zintegrowania tej pracy (lub poprosić kogoś innego, aby zrobił to, jeśli wolą) z resztą systemu.

Alistair Cockburn opisał to w swoich metodach. Jeśli masz „praktykujących na poziomie 3”, wówczas doskonale zwinna metoda jest następująca:

„Umieść 4-6 osób w pokoju ze stacjami roboczymi i tablicami i dostępem do użytkowników. Niech dostarczą działające, przetestowane oprogramowanie użytkownikom co miesiąc lub co dwa miesiące, a w przeciwnym razie zostaw je w spokoju. ”

Ponieważ masz mieszankę ludzi, musisz znaleźć sposób, aby zapewnić im konstruktywną współpracę, a to oznacza, że ​​podejście uniwersalne o rozmiarze 1 prawdopodobnie nie będzie bardzo wydajne. Musisz więc podzielić zadania, jednocześnie podkreślając wspólny cel. Można wysłać tych facetów do kodu, ale muszą być świadomi tego, że ich rzeczy będą integralną częścią reszty pracy zespołu, a nieosiągnięcie tego jest porażką tego, co produkują . Kiedy zrozumieją, że (tj. Nie mogą po prostu zrobić tego, na co mają ochotę, i dostarczyć coś bezużytecznego), wtedy twoja praca jest skończona.

gbjbaanb
źródło
4

Powiedzmy, że zwinny nie jest dla wszystkich, a zwinny nie jest dla każdego projektu. Jednocześnie zwinność jest bardzo szerokim terminem, a Scrum jest tylko jedną implementacją zwinnego procesu - mogę w jakiś sposób powiedzieć implementację z prawdopodobnie największymi ograniczeniami, która próbuje skonfigurować ustandaryzowany proces z dobrze znanymi krokami.

Innym obszarem do przemyślenia jest cel zwinności? Czy zwinny jest sposób, w jaki pracują programiści? Być może - niektóre metody rzeczywiście zmierzają w tym kierunku. Ale sama zwinność obejmuje obszary spoza rozwoju. Zwinność polega bardziej na kierowaniu całym procesem, sposobie działania interakcji, sposobie dostarczania działającego produktu z najważniejszymi funkcjami na czas oraz sposobie kontrolowania zasobów, sposobu, w jaki widzisz, gdzie jesteś w projekcie, itp.

Istnieją metodologie, które nie próbują niczego zmienić w procesie rozwoju - Scrum nie jest tym jedynym. Wszystkie zwinne metodologie kładą nacisk na ciągłe doskonalenie. Wykryjesz nieefektywny krok w swoim procesie i spróbujesz go ulepszyć / zmienić - to jest zwinny sposób. Sprawdź inną popularną metodologię zwinną - Kanban.

Ty / Twoja firma zdecydowałaś się na użycie Scruma i może to doprowadzić do tego, że niektórym ludziom się to nie spodoba i odejdzie. Powinieneś poradzić sobie z każdym z programistów osobno. Powinieneś o tym porozmawiać z każdym z nich i spróbować znaleźć jakieś zainteresowania, które pozwoliłyby im ponownie cieszyć się pracą.

Mogą pełnić rolę mentorów, mogą uczyć innych, pokazywać im, jak przebudować kod do lepszej architektury podczas iteracyjnej pracy. Mogą razem tworzyć pewne globalne plany architektury dla różnych projektów. Mogą również pracować nad potwierdzeniem koncepcji, uczestniczyć w RFI (prośbie o informacje), gdy klienci pytają o możliwość spełnienia wymagań. Mogą pracować w parach z mniej wykwalifikowanymi programistami i wspólnie wykonywać złożone zadania itp. Ich główną wartością powinno być wykorzystanie ich umiejętności i umożliwienie innym uczenia się od nich.

Scrum i zwinność na całym świecie rzeczywiście w jakiś sposób powstrzymują jednostki i nadają priorytet zespołom - zespoły dostarczają aplikacje, a nie jednostki. Pomysł opiera się na fakcie, że nigdy nie będziesz mieć zespołu, w którym wszyscy będą mieli takie same umiejętności i doświadczenie.

Jeśli przejście na Scrum zakończy się powodzeniem, powinni oni zauważyć, że ogólny proces poprawił się, skrócono czas dostawy, poprawiła się jakość i klienci są bardziej zadowoleni. Nadal mogą wierzyć, że same opracowane aplikacje są znacznie gorsze, niż mogłyby być, ale o to chodzi - klient nie chce najlepszego kodu, jaki kiedykolwiek napisano. Klienci chcą minimalnego / najtańszego / najszybciej rozwijanego działającego kodu, który spełnia ich wymagania. Jeśli wystarczy brutalna siła, niech tak będzie. Jest to coś, co może powodować problemy wysoko wykwalifikowanym programistom, ale nie jest to zwinność zwinnego, to miejsce, w którym wymagania biznesowe i perfekcjonizm są ze sobą sprzeczne.

Ladislav Mrnka
źródło
2

Przyniesie to korzyści całemu zespołowi, jeśli rozwiążesz niektóre z głównych problemów i przekażesz je świetnemu programistowi. Każdy może później uzyskać szybkość i nauczyć się czegoś w tym procesie. Po prostu nie buduj w ten sposób całej aplikacji.

Nie rozmywasz kodu do najniższego wspólnego mianownika. Niedoświadczony dogonisz najlepszych programistów.

JeffO
źródło
2

Dyskutowano o tym, co jest „zwinne”, a także o wielu osobistych odczuciach, doświadczeniach i obawach związanych z procesem zwinności, ale tak naprawdę nie widziałem rzeczywistej odpowiedzi na to pytanie. Pierwotne pytanie brzmiało, jak utrzymać motywację najlepszych programistów, kiedy widzą swój kod, który napisali na poziomie czystego artformu, i zainwestowali swój pot i krew, włamani przez kogoś innego i „zepsuci”. Zwróć uwagę, że zwinne lub nie, stanie się to w pewnym momencie, teraz jest po prostu bardziej widoczne, ponieważ nadal pracują nad kodem w tym samym czasie co inne, zamiast typowego przekazywania do obsługi, w którym to momencie po prostu nie widzieli zmian.

To, co uważam za klucz tutaj, to rozszerzenie odpowiedzialności tych programistów i pomoc w zmianie ich ukierunkowania na szerszy obraz. Może to oznacza nowy tytuł, na przykład Software Architect, Team Lead lub Senior Software Engineer. Następnie pokaż im, że jest to okazja, aby mieć większy wpływ, nie tylko na pojedynczy projekt na raz, ale na wiele projektów. Nadal istnieje poczucie własności, ale ich celem nie powinno być już realizowanie jednego wspaniałego projektu, ale pomoc w ustaleniu poprzeczki dla WSZYSTKICHprojektowanie. Pomóż im wyrazić silną chęć zbudowania czegoś wspaniałego, ale skoncentruj się na budowaniu praktyk inżynierii oprogramowania w firmie i innych programistów. Zamiast skulić się na myśl, że ich współpracownicy rąbią swój kod na kawałki, może to być dla nich szansa, aby przejść do następnego poziomu i mentorować kolegów z drużyny i wynieść ich na wyższy poziom.

Joel C.
źródło
Cześć - moje zamiary nie były związane z widzeniem, jak reszta zespołu została zaatakowana przez kod. Widziałem „Co zrobiłeś z moim kodem !! Aargh!” kilka razy, w wodospadzie i zwinnie, ale to inna sprawa. Chodzi o ludzi, którzy uważają, że nie są w stanie podjąć pracy i pracować samodzielnie, aby ją ukończyć.
Kris
1
Ok, moja odpowiedź mogła być nieco złagodzona przez toczącą się tutaj dyskusję, ale jeśli są to zdolni ludzie, którzy obecnie odczuwają brak własności, myślę, że nadal jest to ważne, aby pomóc im zmienić koncentrację na czymś innym i nadal być głównym uczestnikiem zespołu.
Joel C
2

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.

Giorgio
źródło
1
Some developers are primarily motivated by the joy of taking a piece of difficult 
work, thinking through a design, thinking through potential issues, then solving
the problem piece by piece, with only minimal interaction with others, over an 
extended period of time

Wygląda na to, że są „Lone Rangers”. W kanonicznym Scrumie ci ludzie po prostu nie pasują do Drużyny (brakuje im trochę „interakcji”).

Jeśli nie są „Samotnymi Strażnikami”, istnieje nadzieja. Jeśli poprawnie wykonujesz Scrum, muszą one być częścią projektu funkcji, nad którą będą pracować (podczas planowania sprintu). To jedyny raz, kiedy potrzebują interakcji z innymi. Możesz nawet „przypisać” do nich wszystkie historie związane z tą jedną funkcją.

Podczas sprintu będą „przeszkadzali” im codziennie Scrum ... dopóki nie udowodnisz im (działaniami, a nie słowami), że upłynie tylko 15 minut ich czasu i tylko po to, by zagwarantować, że wszystko działa. płynnie. Trzymaj się blisko trzech pytań, a większość ludzi przestanie je stosować.

W naszym zespole mamy specjalną grupę tylko w celu zwiększenia wydajności. Nie widzimy ich zbyt wiele, tylko na początku sprintu, aby porozmawiać o zmianach, które należy wprowadzić, a na końcu w retrospekcji. Mają własnego „lidera Scrum”, który podlega zespołowi Scrum of Scrum. Mogę powiedzieć, że dobrze się bawią.

Soronthar
źródło
3
-1 - za zakładanie, że wyjątkowo produktywni ludzie są samotnymi tropicielami, ponieważ nie dbają o zwinne podejście. Czy słyszałeś kiedyś zwroty „Zaspokojenie własnego potencjału” lub „Cieszyć się wyzwaniem”. Być może tęsknią za tym, ćwicząc zwinne podejście.
Dunk
Nie zakładałem tego. Mój dzwonek został uruchomiony przez „przy minimalnej interakcji z innymi”, co jest definicją Samotnego Łowcy. Czasami Samotny Strażnik jest taki, ponieważ tak mu się podoba. Jest dla nich miejsce, ale nie jest to miejsce w zespole Agile (The Interaction over Process). Czasami Lone Rangers są tacy, ponieważ nie lubią polityki, „praktyk” premiera i burokracji, które po prostu okradają całą zabawę z programowania. W takim przypadku zmiana środowiska w sposób zwinny sprawi, że przestaną być samotnymi strażnikami i będą się dobrze bawić w zespole.
Soronthar
0

Jeśli Joe (twórca Bohaterów) jest nieco elastyczny, nie widzę problemu:

Jak powiedziano powyżej, pozwól zespołowi na samoorganizację: jeśli najlepiej rozwiązać niektóre problemy, pozwalając Joe'emu na samodzielne przeżuwanie go, możesz oczekiwać, że otwarty, samoorganizujący się zespół sam dojdzie do tego wniosku.

Jedyne wyzwania, które pozostają w obrębie kilku ograniczeń, które nakłada Scrum:

  1. Dostarczanie funkcjonalności w regularnych odstępach czasu: jeśli pozwolisz Joe'emu żuć problem przez wiele miesięcy, bez niczego do pokazania do samego końca, to Joe naprawdę nie jest zwinny: bierze zakładnika właściciela produktu i nie pozwala mu na ponowne sprecyzowanie ta część produktu. Przy tej praktyce istnieje również ryzyko, że spóźni się i nikt tego nie zauważy. (Ale według twojego opisu jest to mało prawdopodobne). Rozwiązanie: Czy byłoby zbyt wiele prosić Joe, siedzieć razem z PO, podzielić historię użytkownika i uzgodnić pośrednie rezultaty, najlepiej (ale niekoniecznie) o wartości dla użytkownika?

  2. Uhonorowanie priorytetów określonych przez właściciela produktu: jeśli fragmenty kodu są własnością ekspertów, ryzykujesz sytuację, w której rozwój produktu zależy od dostępności każdego eksperta, a nie od priorytetów komercyjnych: reszta zespołu może pracować nad mniej ważnymi funkcjami, podczas gdy 3 najważniejsze funkcje są opóźnione, ponieważ „tylko Joe może to zrobić”. To źle. W tym momencie zespół powinien (tymczasowo) zmienić swój nawyk i podzielić pracę Joe na więcej członków zespołu.

Krótko mówiąc: jeśli Joe, twórca bohaterów, zgodzi się z PO, w jaki sposób będzie pokazywał postępy podczas każdego sprintu, wtedy zespół może przypisać mu pewne historie i zostawić go w spokoju. Ale jeśli PO ma za dużo pracy dla Joe, a za mało dla zespołu (lub odwrotnie), to Joe i zespół muszą się przystosować, a nie PO.

Kris Van Bael
źródło
Zespół może również zadać sobie pytanie, czy brakuje mu umiejętności, biorąc pod uwagę, że Joe jest tylko „częściowo dostępny” dla zespołu.
rwong
-1

Reguły dla zwinnego zespołu powinny być dostosowane do zespołu - może to być naprawdę personalizacja; Na przykład pracowałem w zespole, w którym reguła była następująca:

Cały kod musi być napisany przez parę, z wyjątkiem Davida, który może napisać kod sam.

David był starszym programistą / architektem, który pracował przede wszystkim nad narzędziami, których inni używaliby we własnym kodzie. Bardzo posiadał kod, który napisał. Utrzymywano go i testowano, a wszyscy w zespole wiedzieli, że prawdopodobnie jest tam najlepszym programistą, i że zespół będzie najlepiej obsługiwany, pozwalając mu budować pewne elementy frameworka i prezentować je jako kompletne dla zespołu.

Nie mam odpowiedzi na introwertyczne odmiany ogrodowe, ale dla introwertycznych wyjątkowych zespół z przyjemnością zastosuje inne zasady, aby uzyskać korzyści.

Sean McMillan
źródło
Przypomina mi kod ubioru w jednej firmie w czasach przedpotopowych. Pracownicy marketingu nalegali, aby programiści musieli stosować zasady dotyczące ubioru, ponieważ marketroidy czasami chciały pokazać klientom obszar rozwoju. Pomocniczo szefowie wymyślili kodeks ubioru programisty: „Żaden programista nie może przyjść do pracy w sukience. Z wyjątkiem Debbie”. Pomaga, gdy firma jest prowadzona przez hakerów ...
WŁAŚNIE MOJA poprawna OPINIA z
Czy zakładasz, że ktoś, kto potrzebuje trochę czasu i koncentracji, aby pracować nad trudnym problemem, jest introwertą? Czy nie może być tak, że trzeba się skoncentrować na pracy nad trudnymi rzeczami i nie chce się rozpraszać?
Giorgio
Przygotowuję się do napisania własnej odpowiedzi, w której podkreślam kryteria oceny wyników dla takich „specjalistów w zwinnych zespołach”: Zamiast płacić za „gromadzenie niezastąpionej ilości wiedzy”, specjaliści będą wynagradzani na podstawie ich „zdolności do podnieść ogólną (specjalną domenę) wiedzę całego zespołu ”.
rwong
@rwong: Nie sądzę, że musisz być do tego zwinny: każdy zespół korzystający z dowolnego procesu rozwoju może skorzystać z lepszego podziału wiedzy między członków zespołu.
Giorgio