Programowanie w pary z Scrum


10

Należę do zespołu, który obecnie używa Scruma, i rozważamy dodanie programowania parowego, aby poprawić umiejętności interdyscyplinarne zespołu, a także pomóc zmniejszyć wady dzięki filozofii „dwie głowy są lepsze niż jedna”.

W naszym zespole każdy członek zespołu zazwyczaj zapisuje się na pełne obciążenie podczas planowania sprintu (przy czym „pełny” oznacza liczbę krótszą niż 40 godzin tygodniowo, umożliwiającą spotkania, współpracę itp.), Z jednym dedykowanym właścicielem każde zadanie. Uważam, że jest to dość powszechne w zespołach Scrum, ale niekoniecznie musi to wynikać z książki.

W szczególności staram się uniknąć sytuacji, w której członkowie zespołu wahają się sparować, ponieważ mają swoje własne zadania do pracy, co - obawiam się, że prawdopodobnie zdarzy się, jeśli zespół po prostu samoorganizuje się bez poświęcania czasu na parowanie .

Biorąc to pod uwagę, jaki jest najlepszy sposób na uwzględnienie wysiłku / godzin / punktów historii w scenariuszu parowania, aby upewnić się, że mamy odpowiednio przydzielony czas na parowanie?

Niektóre rozważane opcje to:

  1. Pozwól dwóm osobom zapisać się do każdego zadania i (z grubsza) podwoić liczbę szacowanych godzin
  2. Do każdego zadania zapisuje się tylko członek zespołu „z ręki na klawiaturze”, który jest szacowany na podstawie szacunkowych godzin tej osoby. Każdy członek zespołu, który będzie wspierał parowanie, zapisze się na mniej zadań w sprincie, aby dać czas na wsparcie parowania.

Odpowiedzi:


4

Najczęstszą opcją, jaką widziałem, gdy programowanie parami jest stosowane w scrum, jest podwojenie szacunków rozwoju.

Oznacza to, że jeśli szacuje się, że zadanie zajmie jednej osobie 3 godziny, przydzielony czas wyniesie 6 godzin dla pary.

Zastąp godziny punktami, jeśli dzięki temu poczujesz się czystszy;)


Dzięki Oded. Ta odpowiedź najbardziej zwięźle odpowiedziała na moje konkretne pytanie. Jednak wielkie podziękowania dla DXM, który pomógł zidentyfikować pierwotną przyczynę, którą jest więcej ludzi powiązanych niż proces. Chciałbym zaakceptować więcej niż jedną odpowiedź.
Cliff

15

Myślę, że inni już udzielili dobrych odpowiedzi, ale dodam moją tylko dlatego, że myślę, że twoja drużyna właśnie przeniosła się do Scrum, a teraz jesteście w bardzo podobnej sytuacji, kiedy byliśmy na początku.

Po pierwsze, nasze wprowadzenie do Agile, a dokładniej Scrum nie było bardzo płynne. Zasadniczo zarząd upadł i powiedział: od tego dnia będziesz robił Scrum i jest to proces, którego wszyscy będziecie przestrzegać. Tyle o ludziach ponad procesem .

Proces, który pierwotnie przeprowadziliśmy (ślepo, mogę dodać) skończył bardzo podobnie do tego, jak opisałeś. Ludzie otrzymują przydzielone zadania, wszyscy zostają zarezerwowani, wszyscy wracamy do biur i podłączamy się. Codziennie mamy nudne spotkanie stand-up.

Kluczem do zrozumienia jest to, że Agile, w tym Scrum, dotyczy ludzi. Kiedy zespół rozpoczyna planowanie iteracji, nie pozwól swojemu Scrumowi mistrzowi (który prawdopodobnie jest twoim menadżerem) przypisać ci godziny, historie i zadania. To całkowicie zależy od zespołu. Myślę, że dla wielu ludzi jest to bardzo trudna koncepcja, ponieważ przez wiele lat wcześniej przychodzili do pracy i mieliby szefa (kierownika, kierownika technicznego ...), który po prostu zlecałby pracę. Nurkują w Scrumie, ale wszyscy (w tym sam mistrz scrum) nadal działają w tym samym trybie.

Pewnego dnia będziesz tego dość, więc zaczniesz czytać książki, blogi i zadawać podobne pytania na temat wymiany stosów. Uświadomisz sobie, że jako programista i członkowie zespołu powinniście być siłą napędową opowiadań i zadań. Jeśli uważasz, że skorzystasz z programowania w parach, z pewnością utwórz 2 zadania dla każdego inżyniera i przydziel im oba godziny. Jedyne, co powinien zrobić mistrz scrum, to zmierzyć prędkość w stosunku do ukończonych historii, które dostarczyłeś JAKO ZESPÓŁ w poprzedniej iteracji.

Kolejną rzeczą, która mnie denerwuje, jest to, że ludzie mówią, że ich pojemność ZAWSZE wynosi 75% całkowitej liczby godzin, więc to oni zobowiązują się, a następnie przez cały czas trwania iteracji skarżą się, że a) nie mogą pomóc lub b) nie mogą zrobić dobrze, ponieważ przydzielono im zbyt wiele godzin. Ludziom nie należy mówić, ile godzin zobowiązać, a na pewno powinni się wycofać, jeśli Scrum Master próbuje wyciągnąć coś takiego! Każdy powinien zobowiązać się do tego, co mu odpowiada. Na przykład jestem liderem zespołu i często kończę przypadkową nieplanowaną dyskusję na temat projektu lub pomagam komuś z kodem lub rozwiązuję dziwne rzeczy, więc moja pojemność nigdy nie przekracza 50%.

Naszemu zespołowi zajęło 4 cykle wydawnicze, aby nauczyć się nie robić rzeczy, o których właśnie wspomniałem, i mimo że zdecydowanie się poprawiliśmy, jeśli zapytasz ekspertów, nie jesteśmy nawet w połowie zwinni. Wciąż dużo się uczy.

Aktualizacja 1: Odpowiedź na komentarz Cliffa Cóż, zaoferowałeś swoje uszy, więc oto ...

Masz rację, zmiana kulturowa jest kluczowa, ale ta zmiana nie musi nastąpić na poziomie wykonawczym. Twój własny menedżer grupy może zmienić kulturę w zespole i odizolować was od korporacyjnych BS, z którymi ma do czynienia. To, co opisujesz, to DOKŁADNIE nas od 2007 do 2010 roku. Nasz zespół (i inne zespoły) po premierze wydał flop. W jednym z wydań wykorzystującym „proces zwinności” kierownictwa udaje nam się, aby 9 osób wykonało pracę, która zwykle byłaby wykonywana przez jedną osobę, co zajęło nam dwa razy więcej czasu. Miałem tyle wolnego czasu, że nawet zaktualizowałem swoje CV.

Następnie rozmawiałem z moim szefem i wyjaśniłem mu wszystkie te rzeczy, jak zwinny jest człowiek i że jeśli chcesz, abyśmy dbali o produkt, pozwól nam podejmować decyzje, które wpływają na sposób, w jaki pracujemy i dostarczamy produkt. Myślę, że postanowił zrobić z tego eksperyment, wprowadził każdą zmianę, którą ... no cóż, głównie ja, ale dużo rozmawiam z resztą zespołu, stąd 50% pojemności :) ... zaproponowałem. Możliwe, że doszedł do wniosku, że jeśli dokona wszystkich zmian, o które prosimy, a my nadal ponosimy porażkę, wróci ze zwycięskim „Tak wam powiedziałem”.

W ciągu ostatnich 12 miesięcy wyeliminowaliśmy tak wiele „głupich”, że nawet nie jest to śmieszne. Nasze spotkania stand-up mają teraz sens, ponieważ pracujemy razem, a nie w izolacji. Nadal mamy (przynajmniej na razie) własność określonych części produktu, ale bardzo często przenosimy się do kodu innych użytkowników. Stale przeprowadzamy przeglądy kodu, aby nie tylko członkowie zespołu uczyli się innego kodu, ale także uczyli się lepszych technik kodowania i projektowania. Podzieliliśmy monolityczny, gigantyczny „zwinny” zespół na 3 różne zespoły, więc planowanie i inne spotkania są znacznie krótsze, a ludzie faktycznie się nimi przejmują, ponieważ nie siedzą i nie słuchają o rzeczach, na których im nie zależy. JA' widzieliśmy noce, kiedy 4 na 5 naszych facetów (jeden z zespołów) będzie online o 23:00 wieczorem i nikt tak naprawdę nie powiedział nam, że musimy ciężko pracować ani nigdy nie wywierali na nas presji, abyśmy pracowali ponad 40 godzin. Ludzie, którym pół roku temu to nie obchodziło, nagle są zaręczeni i podekscytowani pracą, którą wykonują. Wystarczyło, że nasz menedżer powiedział: „Wy decydujecie, co jest słuszne i robicie to, co musicie zrobić, a ja będę trzymać korporację BS z dala od zespołu, jak tylko mogę”.

Zaczęło się jako eksperyment (moje podejrzenie, nigdy mi tego nie powiedział), ale teraz nasza grupa kopie tyłek w porównaniu z innymi grupami programistycznymi w dziale, a nawet mamy innych programistów, którzy teraz próbują przyjść i dołączyć do nas.

Największą przeszkodą dla nas od czasu tej zmiany (i nadal stanowi problem) jest fakt, że inżynierowie w normalnym środowisku korporacyjnym są jak myszy eksperymentalne w klatce. Nawet jeśli Twój menedżer zdecyduje się naprawdę „zwinnie” i usunie klatkę, wszyscy są w niej od tak dawna, nawet nie zdają sobie sprawy, że są wolni. Więc nawet z całą swobodą nadal zachowują się, jakby nadal byli ograniczeni. Myślę, że pomogłoby to mieć w zespole co najmniej kilka osób (takich jak ty), którzy wychodzą poza granice grupy i szukają lepszych sposobów działania. Następnie wróć do tej grupy i trochę ją zamieszaj.

W twoim przypadku być może programowanie w parach nie jest rozwiązaniem, jeśli szukasz innej siły zewnętrznej, która zstąpiłaby na zespół i powiedziała mu, jak pracować. Zamiast tego wyrzuć zasady, usiądź z nimi bez zarządzania i zapytaj ich, co chcą zrobić? Co sprawi, że będą szczęśliwi? Produktywny? Zidentyfikuj największe problemy, a następnie zapytaj ZESPÓŁ, jakie według nich powinno być rozwiązanie.


W pełni się zgadzam. Częściowym problemem jest to, że filozofia Agile nie jest dobrze zakorzeniona w kulturze rozwoju, a my staramy się to naprawić za pomocą procesu, w którym najlepiej byłoby to naprawić poprzez zmianę kulturową. Bez rejestracji zadań członkowie zespołu albo przyjmowali postawę „nie moja praca” w stosunku do zadań (z jednej strony zespół nie jest tak naprawdę funkcjonalny, co jest jednym z powodów, dla których chcemy wdrożyć parowanie), albo stali się łatwo rozpraszający się. Rezultatem była nierównowaga obciążenia pracą w zespole. Zależy mi na sugestiach, jak rozwiązać te problemy przy mniejszym nakładzie pracy.
Klif

Dziękujemy za aktualizację. Kierownictwo faktycznie bardzo wspiera i pozwala zespołowi na swobodne określanie „jak”. Myślę jednak, że część podstawowego problemu polega na tym, że zespołowi brakuje mentalności międzyfunkcyjnej. Na przykład zespół stworzył wyimaginowane ściany braku odpowiedzialności w oparciu o indywidualne zestawy umiejętności. Z jednej strony członkowie zespołu czują się bardzo upoważnieni i przejmują odpowiedzialność za części funkcji, które znajdują się we własnych obszarach funkcjonalnych, ale z drugiej strony nie czują się odpowiedzialni za części funkcji, które nie znajdują się w ich obszarze funkcjonalnym („ nie moja praca ”).
Klif

Wygląda na to, że zrobił już kilka kroków w pozytywnym kierunku. Czy teraz, kiedy zidentyfikowałeś główny obszar do ulepszenia, przedstawiłeś to zespołowi i poprosiłeś o zaproponowanie rozwiązań? Jeśli tak, to czy wrócili ze sparowanym programowaniem? Jeśli tak, to z całą pewnością przypisz każdemu, kto chce razem pracować nad tą samą historią, stwórz wiele zadań i umieść godziny kodowania obok każdej osoby. Jeśli nie, zapytałeś ich, dlaczego tak bardzo wahają się przekroczyć funkcjonalną granicę? W końcu, jeśli uważają, że byłyby bardziej skuteczne bez przekraczania, być może prawdziwe rozwiązanie jest gdzie indziej.
DXM,

„Nie moja praca” oznacza „nie dbam” i to jest twój największy problem. Zwinny jest dla programistów, którzy dbają i są w stanie wziąć odpowiedzialność. Zespół ponosi odpowiedzialność za produkt. Nie ma „Jestem odpowiedzialny za jedną część” = członek zespołu musi dbać o cały produkt. Dlaczego masz obszary funkcjonalne? Czy to dlatego, że twój produkt jest tak duży?
Ladislav Mrnka

@LadislavMrnka: Chociaż w zespole mogą być ludzie, których to po prostu nie obchodzi, i myślę, że to w porządku. Ci ludzie staną się mułami do pracy dla robaków i bzdur, ponieważ najważniejsze decyzje, kierunek produktu, architektura i design przejdą tuż obok nich. Ale nadal potrzebujesz kogoś do pomocy technicznej :). Myślę, że większość z nas dba o to, co robimy. A jeśli cały zespół ma podejście „nie do mojej pracy”, myślę, że główną przyczyną jest jakiś inny czynnik zewnętrzny, który należy wyróżnić i wyeliminować. Bez tego nie będzie można nakazać zespołowi „musisz się tym przejmować”.
DXM,

2

Scrum nie nakazuje, aby zadania były przypisane do poszczególnych osób - wręcz przeciwnie. Odpowiedzialność za zadania do wykonania spoczywa na Zespole jako całości. Jeśli zespół chce przeprowadzić programowanie w parach, gdzie każda para podejmuje zadanie, z pewnością powinien to zrobić.

Z przewodnika Scrum :

Zespół programistów zwykle zaczyna od zaprojektowania systemu i pracy potrzebnej do przekształcenia Backlogu produktu w działający przyrost produktu. Praca może być różnej wielkości lub szacunkowego wysiłku. Jednak podczas spotkania Planowanie Sprintu zaplanowano wystarczającą ilość pracy, aby zespół programistów mógł przewidzieć, co może zrobić w nadchodzącym Sprincie. Prace zaplanowane na pierwsze dni Sprintu przez zespół programistów rozkładają się na jednostki o długości jednego dnia lub mniej do końca tego spotkania. Zespół programistów samoorganizuje się, aby podjąć pracę w Backlogu Sprintu , zarówno podczas Spotkania Planowania Sprintu, jak i w razie potrzeby w trakcie całego Sprintu.


1
Ciekawy. Mam Przewodnik Scrum z marca 2009 roku, który faktycznie zmienił ten cytat. Kiedyś było to: „ Zespół samoorganizuje się, aby przypisać i podjąć pracę w Backlogu Sprintu, albo podczas spotkania Planowania Sprintu, albo w samą porę podczas Sprintu”.
Cliff

Naszą interpretacją było zawsze tworzenie początkowego zestawu szacunkowych zadań dla każdego elementu zaległości i przydzielanie ich poszczególnym członkom zespołu podczas planowania sprintu. Kilka korzyści polega na tym, że pomaga nam skutecznie zrównoważyć obciążenie pracą członków zespołu podczas planowania, a przypisanie właściciela do każdego zadania ułatwia upewnienie się, że niczego nie umknie. Pomaga również w przechwytywaniu metryk.
Cliff

@Cliff - Jeśli tak chcesz to zrobić, jest w porządku. Mówię tylko, że Scrum nie mówi, że musisz to zrobić w ten sposób. Jeśli wolisz przypisywać przedmioty parami (co zwykle robimy jako ubezpieczenie od autobusu), to też jest w porządku i możesz łatwo opracować metryki na podstawie par.
Matthew Flynn

0

Przypisywanie zadań do planowania spotkania jest dokładnie tym, co stoi w sprzeczności z decyzjami czasowymi i umacnia zespół. Jest to również sprzeczne ze zwinnością sprintu, ponieważ od pierwszego dnia każdego dewelopera dokładnie ustalono, co powinien zrobić. Oznacza to również, że każde zadanie musi być bardzo poprawnie oszacowane, co prawie nigdy nie ma miejsca.

Imho szacowanie zadań jest zbędne. Zaangażowałeś się w zestaw opowiadań, a planowanie spotkania 2 wystarczy, aby podzielić je na zadania i stworzyć karty do tych zadań (lub wypełnić je w jakimś systemie). Nie ma czasu na oszacowanie każdego zadania, a oszacowanie to nie powinno pochłaniać czasu na prawdziwy rozwój.

Dlaczego? Oszacowanie jest śmieciem. Jak to może być śmieci? Ponieważ dokonanie większej ilości oszacowań nie przyniesie większej wartości biznesowej = jest to śmiecie i powinno zostać zredukowane do niezbędnego minimum. Minimum to szacowanie / zmiana wielkości opowieści, które pomogą ci zaangażować się. Po podjęciu zobowiązania nie potrzebujesz żadnych innych szacunków. Po prostu wiesz, że masz ustaloną datę dostarczenia czegoś, co popełniłeś. Będziesz albo mógł dostarczać zaangażowane historie, albo nie. Szacowanie zadań nie pomoże ci w tej dostawie.

Pominięcie oszacowania zadania w żaden sposób nie wpłynie na widoczność postępu sprintu, ponieważ jedynym prawdziwym pomiarem postępu jest liczba ukończonych historii (punktów opowieści), które można nadal wyświetlić na wykresie spalania sprintu.

Żeby było jasne. Zaangażowanie oznacza = Zrobimy to . Nie spróbujemy tego zrobić ani nic innego. Tak, możesz nie zrealizować tego, co zobowiązałeś się, ale twoje zobowiązanie powinno opierać się na przekonaniu, że przy obecnej wiedzy dostarczysz wybrane historie. Jeśli masz takie przekonanie, nie potrzebujesz innej oceny.

Zawsze korzystałem ze Scruma w taki sposób, w jaki programista wybiera nowe zadanie po zakończeniu ostatniego. Deweloperzy zazwyczaj mówią, który wybiorą na spotkaniu stand-up. Zasadniczo nie ma reguł, które zadanie powinien wybrać. To zależy od samoorganizacji zespołu i dyskusji między członkami zespołu (poza spotkaniem stand-up). Jest to odroczenie decyzji do najnowszego możliwego punktu, w którym możesz zareagować na niektóre zmiany i problemy bez wpływu na swój wymyślony plan. Samo zadanie może nawet zmienić właściciela, jeśli ktoś ma problemy z jego wykonaniem - alternatywnie takie zadanie można opracować w parze.

Jak może być w to zaangażowane programowanie par? Z łatwością. Zespół angażuje się, a zespół musi zrobić to, aby zrobić miejsce dla wszystkich technik programistycznych potrzebnych do zapewnienia przyrostu roboczego produktu. Czy oceniasz zadanie lub opracowanie zadania i testowanie zadania? To drugie podejście jest całkowicie błędne. Testowanie jest częścią rozwoju i w ten sam sposób przegląd kodu lub parowanie jest częścią rozwoju, jeśli to konieczne.

Wykonanie programowania w parach powinno skutkować szybszym wykonaniem zadania z mniejszą liczbą błędów i lepszą jakością kodu. Nie będzie dwa razy szybszy, więc będzie jeszcze trochę narzutów, ale rzeczywisty wpływ na zaangażowanie spowodowane okazjonalnym parowaniem powinien być bardzo niewielki. Nie dotyczy to mentoringu ani nauczania. Jeśli masz takiego programistę, który musi być mentorem lub nauczony, nie powinieneś w ogóle planować jego zdolności do sprintu, w którym uczy on podstawy kodu produktu lub jakiejś technologii.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.