Mój zespół i ja przebudowujemy witrynę, którą opracowaliśmy około 10 lat temu, i chcemy to zrobić w Agile.
Więc po spędzeniu dużo czasu na czytaniu (prawdopodobnie za mało) mam problem z pytaniem, jak podzielić pracę między programistami.
Będę bardziej konkretny i powiem, że strona jest podzielona na osobne moduły, które nie mają ze sobą dużej integracji.
Jaki jest najlepszy / najczęściej akceptowany sposób podziału pracy między programistami?
- Dając każdej osobie inny moduł do pracy.
- Przypisz wszystkich programistów do tego samego modułu i podziel pracę na różne części modułu (UnitTesting, DAL and Mapping, Logics, UI)
- Przypisz wszystkich programistów do tego samego modułu i podziel pracę według różnych logik (na przykład każdy programista odpowiada za konkretną logikę (prawdopodobnie metodę w BL) i jego testy jednostkowe, DAL i mapowanie oraz interfejs użytkownika ...
A może coś zupełnie innego?
web-development
agile
Amir
źródło
źródło
Odpowiedzi:
Mój zespół starał się „zwinnie” od kilku wydań, ale bycie częścią dużej korporacji nie ułatwiło tego. Nie będę udawał, że mam odpowiedź, ale mogę podzielić się moimi spostrzeżeniami.
Podział programistów na moduł:
Wszyscy pracują na tym samym module w tym samym czasie
Robiliśmy tę ostatnią rzecz i chociaż jest mnóstwo miejsca na ulepszenia, ogólnie cały nasz zespół był bardzo szczęśliwy i to wiele mówi, kiedy jesteśmy częścią gigantycznej korporacji.
Jedną ważną rzeczą, którą popełniliśmy źle za pierwszym razem, gdy „zwiniliśmy się”, jest to, że ludzie mówili, jak pracować, i powiedziano im, nad czym pracować. To najlepszy sposób, aby Twój zespół całkowicie stracił zainteresowanie projektem i wtedy masz poważne kłopoty.
Zamiast tego spróbuj odwrotnie. Powiedz zespołowi, że mogą robić, co chcą, a jako kierownik / lider (jeśli jesteś jednym z nich, jeśli nie, spraw, aby kierownik powtórzył te słowa), Twoim zadaniem jest upewnienie się, że są tak produktywni i szczęśliwi, jak to możliwe. Proces nie jest złą rzeczą, ale proces powinien być po to, aby pomóc zespołowi, gdy zdaje sobie sprawę, że potrzebuje jednego, a nie na odwrót.
Jeśli niektórzy członkowie twojego zespołu wolą pracować w izolacji, pozwól im (do pewnego stopnia). Jeśli wolą pracować w parach, pozwól im to zrobić. Upewnij się, że Twoi ludzie wybierają swoją pracę tak często, jak to możliwe.
Wreszcie jest to bardzo ważne i zawsze jest pomijane. NIE OTRZYMASZ TEGO PRAWA (chyba że jesteś supermanem, a przynajmniej batmanem). Regularne spotkania retrospektywne są niezwykle ważne. Kiedy wprowadziliśmy retrospektywy, zrobili to zgodnie z książką i wydawało się, że to kolejny proces, przez który musicie usiąść. Nie po to jest retrospektywa. Służy do słuchania zespołu, identyfikowania obszarów, które powodują najwięcej bólu i ich naprawiania, aby każdy mógł kontynuować pracę. Najwyraźniej inżynierowie oprogramowania, którzy lubią dostarczać produkty i funkcje, a najważniejsze przesłanie retrospektywne, które musi się komunikować, polega na tym, że służy to wyłącznie ich korzyściom. Chcesz identyfikować i pokonywać przeszkody, zaczynając od największych (lub najłatwiejszych tam)
źródło
Spotkaj się z zespołem, pokaż listę rzeczy do zrobienia i zapytaj, kto chce co robić.
źródło
Nie myśl w modułach. Pomyśl o elementach funkcjonalnych. Opisz te elementy funkcjonalności według historii użytkowników (lub w inny sposób) i nie zapomnij opisać kryteriów akceptacji (prawdopodobnie określonych przez twoją obecną aplikację i zmiany, których oczekuje firma). Umieść swoje elementy funkcjonalne w zaległościach. Następnie pozwól, aby firma ustaliła, które funkcje należy dostarczyć w pierwszej kolejności (będziesz pracował przyrostowo i iteracyjnie, a priorytet powie Ci, co należy najpierw wdrożyć).
Gdy masz to przynajmniej część oryginalnej aplikacji, jesteś gotowy do rozwoju. To, co będzie dalej, zależy od wybranej metodyki zwinnej. Ważną częścią jest to, że każdą funkcjonalność można zwykle podzielić na wiele zadań, a członkowie zespołu wybiorą zadania, które chcą wykonać - nazywa się to samoorganizacją. Kiedy zaczynasz od zwinnego, samoorganizacja może potrzebować pomocy, gdy ktoś upewni się, że niepopularne i popularne zadania są równo dzielone przez zespół. Gdy zespół stanie się bardziej dojrzały, programiści nie zawahają się wyrazić sprzeciwu wobec obecnej samoorganizacji, co zostanie automatycznie rozwiązane w zespole.
Myślenie w modułach od samego początku nie musi być dobrym sposobem. Z jakiegoś powodu przepisujesz aplikację i być może obecna architektura aplikacji oparta na nieprawidłowym rozdzieleniu modułów jest jedną z ukrytych przyczyn widocznych problemów. Ponadto można zauważyć, że niektóre funkcje istniejących modułów zostaną całkowicie przedefiniowane i przeniesione w inne miejsce.
źródło
Chociaż zgadzam się z odpowiedzią Davida, czułem, że przydałoby się to trochę rozwinięcia:
Zasadniczo, podstawową kwestią jest: nikt tutaj w SE nie może odpowiedzieć na to pytanie, ani nie ma na to większego sensu, ponieważ znacznie lepiej jest, jeśli wymyślisz odpowiedź jako zespół.
źródło
Najprostsze podejście jest często najlepsze.
Unikałbym dzielenia zadań na grupy, takie jak testowanie / log / UI / etc, chyba że można zdefiniować bardzo dobre i jasne powody tego. Moje rozumowanie jest takie, że jeśli pozwalasz programistom pracować poza zwykłymi obszarami specjalizacji, może to uczynić je bardziej interesującymi i stanowiącymi dla nich wyzwanie oraz pozwolić im się rozwijać i rozwijać w swojej dziedzinie. Jeśli uważasz, że ograniczenia czasowe wymagają podziału pracy opartej na wiedzy specjalistycznej, przynajmniej upewnij się, że każdy programista jest nadal zobowiązany do przeprowadzenia własnych testów jednostkowych, a także przejrzyj kod i testy akceptacyjne, aby wykryć problemy. Pisanie własnych testów jest bardzo zwinne, a czekanie na dostępność testerów może być bardzo marnotrawstwem.
W obliczu tego samego rodzaju dylematu zastosowałem następujące podejście:
Zakres projektu. Pomyśl o tym, w co się pakujesz i opracuj listę funkcji, dzieląc projekt na szereg zadań.
Określ priorytety funkcji. Zdecyduj, które funkcje muszą zostać ukończone wcześniej, a które zapewnią natychmiastową wartość Twoim klientom. Nie martw się, jeśli twoi programiści będą pracować na tych samych modułach, ale upewnij się, że masz dobry proces i narzędzia do zarządzania scalaniem kodu.
Zaangażuj swój zespół i poproś programistów o pomoc w podzieleniu funkcji na listę łatwiejszych zadań. Przejrzyj jako grupę i dostosuj zadania zgodnie z potrzebami, aby można je było łatwiej oszacować.
Poproś każdego programistę, aby wybrał zadanie do wdrożenia - lub grupę zadań w zależności od tego, jak będą przebiegać Twoje iteracje - z góry kolejki priorytetowej, nad którą programista chciałby pracować.
Niech każdy programista będzie pracował tylko nad jedną rzeczą, dopóki nie zostanie ukończony, zanim przejdzie do wybierania następnego elementu z góry kolejki priorytetowej. Możesz mieć ochotę od czasu do czasu zmieniać zadania, ale doprowadzi to do marnowania czasu dewelopera. Jeśli natrafisz na wąskie gardła w zależnościach, musisz dostosować priorytety zadań i zminimalizować straty.
Nie obawiaj się, że programiści będą działać z nakładającymi się iteracjami i odpowiednio zarządzaj swoimi wydaniami. Pomoże to zminimalizować straty czasu między wydaniami, czekając na zakończenie zadań.
Ostatecznie bycie zwinnym polega na znalezieniu rozwiązania, które dobrze sprawdza się w zespole, firmie i klientach. Do ciebie należy dostrojenie procesu poprzez znalezienie równowagi praktyk, które będą dla ciebie najlepsze. Sposób podziału zadań będzie bardzo ważną częścią znacznie większego procesu, ale powinien być tak prosty, jak to tylko możliwe, aby zachęcić do dobrowolnego udziału i uniknąć trudnych do rozwiązania problemów związanych z procesem, które rozwijają się później.
źródło
Żadna dyskusja organizacyjna zespołu programistów nie byłaby kompletna bez wspomnienia zespołu chirurgicznego dr Freda Brooksa .
Podstawowa formuła to: jeden zespół chirurgiczny na jednostkę pracy
Definiowanie zespołu chirurgicznego
Koncepcja zespołu chirurgicznego opiera się na dwóch podstawowych ideach:
Zespół chirurgiczny składa się z 3-10 programistów:
Definiowanie jednostki pracy
Więc teraz, kiedy możemy stworzyć zespół, co im przypisujemy?
Powinieneś zobaczyć trzy podstawowe, akceptowalne wzorce:
źródło
W zależności od liczby programistów i modułów (i harmonogramów) generalnie wybieram moich programistów do wyboru jednego interesującego modułu (dla nich) i jednego trudnego modułu (najlepiej czegoś, czego nie zrobili), a następnie resztę dzielę według poziomu umiejętności i ograniczenia czasowe. Uważam, że daje to moim programistom coś, nad czym chcą popracować, i coś, co ich popycha.
Oczywiście to nie zawsze działa ...
źródło
Oto co bym zrobił:
Jeśli wszystkie moduły są małe, możesz dać każdemu modułowi do pracy. W przeciwnym razie wykonaj następujące czynności:
Powyższe nie zadziała, jeśli osoby, które nie lubią pracować z innymi, są najbardziej sprawne i jest to częsty przypadek, więc zrób wyjątek odpowiednio do 4 i 5
źródło