Co to jest „rój”?

42

Słyszałem o roju w kontekście programowania zwinnego lub ekstremalnego. Wydaje się być uzupełnieniem parowania.

Co to dokładnie jest Kiedy należy to zastosować? Jak to robisz dobrze?

Jay Bazuzi
źródło
@CodeWorks: Moje wyszukiwania w Google przyniosły niewiele trafnych wyników i nie ma jednoznacznej odpowiedzi na moje pytanie. Jeśli istnieje odpowiedź kanoniczna, to opublikuj ją tutaj.
Jay Bazuzi,
W strategicznej grze wideo „Sword of the Stars” pojawia się głos z lektorem, w którym mrówka / modliszka / istota ludzka mówią po wydaniu komendy badawczej: „Roją laboratorium waszą wysokość”. Zawsze zakładałem, że miał wylądować z poczuciem dramatycznej ironii.
Erik Reppen,

Odpowiedzi:

43

Chodzi o to, że wszyscy w twoim zespole pracują nad tą samą historią w tym samym czasie. Zamiast skupiać się na różnych zadaniach, wszyscy koncentrują się na jednym zadaniu na raz, aż do jego ukończenia. Następnie przechodzą do następnej rzeczy, gdzie wszyscy razem nad tym pracują.

Pomaga to drużynom, które mają problemy z ukończeniem historii przed końcem sprintu. Często drużyny kończą 80% wszystkich opowiadań, ale żadna nie jest kompletna. Jest to mniej przydatne niż całkowite ukończenie 80% historii, ponieważ niedokończone historie (skutecznie) nie mają żadnej wartości dla użytkownika końcowego. Ukończenie historii jest łatwiejsze, gdy wszyscy w zespole skupiają się na jednej historii na raz. Taka jest motywacja roju.

Tutaj są pewne trudności. Na przykład QA nie zawsze może testować rzeczy przed ich zbudowaniem (lub nawet zaprojektowaniem). W takim przypadku powinieneś ustalić projekt razem wcześnie, a następnie QA może napisać (początkowo nieudane) testy w stosunku do projektu, a nie faktycznej implementacji.

Oleksi
źródło
+1. Ciekawy. Czy widziałeś tę pracę w praktyce?
CodeART
2
Innym sposobem powiedzenia jest: „mieć jak najmniej prac w toku”, prawda?
Jay Bazuzi
1
@CodeWorks Tak. Wykorzystaliśmy go tam, gdzie obecnie pracuję, do pewnego sukcesu. Jest to całkiem fajny sposób na rozwój, ponieważ jest zorientowany na funkcje. Wszyscy dążą do tego samego celu w tym samym czasie, więc przekonałem się, że bardzo dobrze wspiera pracę zespołową.
Oleksi
1
@JayBazuzi Tak, właściwie. Ważne jest jednak także wsparcie pełnego zespołu.
Oleksi
9
@CodeWorks, wcale. W rzeczywistości prawdopodobnie to zwiększyło. Ponieważ wszyscy tak ściśle ze sobą współpracowali, pojawiło się mniej blokerów. Kiedy coś się pojawiło, przynajmniej ktoś z zespołu wiedział, jak to rozwiązać, i był w stanie to zrobić od razu, ponieważ miał na to pełną uwagę. Ponadto przełączanie kontekstu jest ogólnie niekorzystne dla wydajności. Zapytaj o procesor. : P
Oleksi
10

Rój odnosi się tylko do faktu, że wiele osób współpracuje ze sobą, aby ukończyć zadanie lub historię. Z mojego doświadczenia nie robisz tego często.

Zazwyczaj każdy członek mojego zespołu pracuje nad innym zadaniem i / lub inną historią. Jeśli ktoś pozostaje w tyle lub istnieje chęć wcześniejszego ukończenia zadania lub historii, inni przestaną pracować nad innymi zadaniami i „roją się”, aby je wykonać, co oznacza, że ​​wszyscy pracują razem nad jednym zadaniem lub historią, dopóki jest zakończony.

Niedawno mieliśmy niewielką liczbę opowiadań, które były dość nudną, nieciekawą pracą. Dałem zespołowi niewielką zachętę (pizza) i termin (koniec dnia) na zakończenie pracy, więc zajęli się tą historią i znokautowali co najmniej kilka dni pracy w ciągu jednego popołudnia. Wykonali pracę wcześnie, a następnie każdy członek zespołu powrócił do tego, nad czym pracowali. Dostali bezpłatny lunch, wcześnie wykonałem pracę, która mogła ciągnąć się z powodu nudnej natury, a zespół wyprzedził ich sprint. Win-win-win.

„Rój” to nic innego, jak wymyślne określenie „hej, pomóżmy w tym”.

Bryan Oakley
źródło
Wydaje się to zupełnie inne od drugiej odpowiedzi. Mówisz „kiedy jest niezwykła pilna potrzeba, spraw, aby wszyscy się tym zajęli”. @Oleksi powiedział „planując cykl programowania, lepiej postawić wszystkich na jednym zadaniu na raz, niż równolegle pracować nad każdym z nich”. Każda z tych definicji jest prawdopodobna i obie są pożytecznymi praktykami, ale jego liczba ma 4x głosów, więc zakładam, że jego odpowiedź odzwierciedla najbardziej akceptowaną definicję.
Jay Bazuzi
@Jay Bazuzu: Niezależnie od tego, czy każdy jest przydzielony do jednego zadania w ramach planowania sprintu, czy też dzieje się to ekologicznie w miarę potrzeb, definicja jest w zasadzie taka sama - wszyscy pracują razem nad jednym zadaniem.
Bryan Oakley,
Myślę, że twoja odpowiedź jest tutaj bardzo kluczowa. Inną odpowiedzią, która jest „zaakceptowana”, jest „co”. Ale wydaje się, że twoje dotyczy tego.
Ape-inago
2

Rój jest tak naprawdę centralną koncepcją zwinności. Nie robi się tego „w przypadku problemów”. Rój, w najprostszej formie, oznacza, że ​​zespoły pracują wspólnie nad przedmiotami (opowiadaniami) i pracują nad nimi do końca. Podstawową koncepcją jest „rzucić i zacząć kończyć”. Innymi słowy, zamiast każdego dewelopera pracującego niezależnie nad historią, zespół skupia się na bardziej ograniczonym zestawie historii / zadań i każdy z nich wykonuje wcześniej. Potraktuj to jako różnicę między systemem jednowątkowym a wielowątkowym. Jeśli historia użytkownika ma 10 zadań do wykonania, a każde z nich trwa 8 godzin, przy założeniu, że nie było żadnych komplikacji, jeden programista może wykonać każde zadanie sekwencyjnie i ukończyć historię w 80 godzin lub około dwóch tygodni (przy 10-dniowym sprincie 8 godzin programistycznych dziennie). Co się stanie, jeśli dwóch programistów podzieli zadania i wykona je jednocześnie? W ten sam sposób można ukończyć te same 80 godzin pracy w ciągu jednego tygodnia. Dodaj trzeci, a zobaczysz, że można to zrobić za 3 do 4 dni.

Rój można wykonać na kilka sposobów:

  1. Programowanie w parach (dwóch programistów siedzących obok siebie, aby pracować nad kodem, jeden to „sterownik” piszący kod, drugi to nawigator, pamiętający o długoterminowym kierunku i pomagający jednocześnie przeglądać kod.
    1. Praca w parach: programista i tester pracują jednocześnie nad tą samą pracą, jednym kodowaniem, a drugim testowaniem, automatyzacją pisania itp.
    2. Roi się, jak wspomniałem powyżej, co jest bardzo częste. Zwykle członkowie zespołu roją się od Historii, ale każda z nich ma indywidualne zadania w tej metodzie.
    3. Programowanie mobów: cały zespół koncentruje się na jednej historii (lub nawet zadaniu) na raz.

Zespoły, które opowiadają historię każdemu programistowi, zwykle mają zbyt dużo „pracy w toku” lub WIP, a często wiele historii zaczyna się, ale nie kończy. Jest to ANTYPATTERN i NIE jest to najlepsza praktyka.

Zespoły, które roją się, mają zwykle mniej PWT i uzupełniają więcej historii - a przez gotowe mam na myśli Opracowane, Testowane, Zatwierdzone, gotowe do wdrożenia. Jest to więc praktyka, która jest podstawą zwinności.

Curtis Reed
źródło
1

Poniższy artykuł na temat InfoQ opisuje jedno podejście do roju:

  • Zespół używa programowania mob do większości swoich zadań związanych z kodowaniem
  • Część zespołu lub poszczególni członkowie zespołu często dzielą się i dołączają do zespołu w krótkich odstępach czasu
  • Wszyscy robią wszystko (bez ról)
  • Zespół nie używa szacunków, WIP jest zawsze jeden, nie ma potrzeby stójek lub podobnych ceremonii

Przeczytaj artykuł, aby uzyskać szczegółowe wyjaśnienie.

Dan
źródło