Dlaczego dodanie większej liczby osób do późnego projektu powoduje, że później?

25

To dość powszechne powiedzenie, że dodanie większej liczby programistów do późnego projektu pogorszy sprawę. Dlaczego to?

Henz
źródło
14
Terminem tym jest Prawo Brooksa ( en.wikipedia.org/wiki/Brooks's_law ).
Macneil
7
Rada: przeczytaj „The Mythical Man-Month” Brooksa. To pokaże, skąd pochodzi to przysłowie, jest to bardzo czytelna książka, a wszyscy w terenie powinni ją przeczytać.
David Thornley
Ta strona Wikipedii jest bardzo dobrze napisana.
Henry
Aby dowiedzieć się, w jaki sposób wydajność zmniejsza się wraz z rozmiarem zespołu (ponad 7 członków zespołu dostajesz malejące zyski), zobacz qsm.com/process_improvement_01.html
Joeri Sebrechts

Odpowiedzi:

33

Wprowadzenie narzutów

Każdy nowy programista musi zostać wprowadzony do podstawy kodu i procesu programistycznego, który zajmuje nie tylko czas nowej osobie, ale także wymaga pomocy ze strony starszych programistów (prowadząc ich przez proces kompilacji, wyjaśniając proces testowania, pomagając im z pułapkami w bazie kodu, znacznie bardziej szczegółowymi recenzjami kodu itp . ) .

Dlatego im więcej nowych programistów dodajesz do projektu, tym więcej czasu trzeba poświęcić, aby doprowadzić ich do punktu, w którym mogą faktycznie wnieść swój wkład w projekt.

Baelnorn
źródło
Więc jeśli zoptymalizujesz „Wprowadzenie”, to wpływ zostanie zmniejszony?
Henry
9
@Henry: problem polega na tym, że zwykle nie można zoptymalizować tego aspektu w stopniu, w którym nie jest to wąskie gardło. Nowy programista na początku zna dokładnie 0 na temat twojego projektu, twojego kodu i twoich procesów. To ten sam narzut, który zawsze jest wymagany przy dodawaniu nowego członka zespołu. Ale gdy projekt jest już spóźniony, zespół często nie ma czasu na właściwe wprowadzenie, a jeśli tak, to brakuje go w czasie rzeczywistym. Dlatego zazwyczaj jest to sytuacja, w której zespół przegrywa, a nowa osoba zajmuje znacznie więcej czasu, zanim może znacząco przyczynić się do projektu.
Baelnorn,
Jeśli chodzi o koszty wprowadzenia, czy nie można go nagrać raz na raz, a następnie przesłać do wielu osób, aby można było przeszkolić dużą liczbę nowych programistów jednocześnie? (Przykłady: spotkania lub konferencje programistów)
rwong
7
@rwong: To nie jest zły pomysł, ale zwykle nie jest to praktyczne. Nie możesz po prostu przedstawić informacji, musisz upewnić się, że nowi ludzie to rozumieją. Dodatkowo, jeśli są naprawdę nowi (ostatnie stopnie), zwykle jest za dużo informacji, aby przedstawić je wszystkim naraz. Odkryliśmy, że wiki działa dobrze, ponieważ wszystkie informacje są w jednym miejscu, a ludzie mogą zadawać pytania, jeśli są fragmenty, których nie rozumieją.
TMN
Jedną z możliwości jest wyznaczenie nowej, bardzo kompetentnej osoby i zlecenie jej wykonywania określonych zadań bez przeszkadzania innym. Będą flądrować źle i pracować wolno, a niektórzy menedżerowie i / lub zespoły nie mogą tego znieść. Jednak nowy programista może być dodatkowym atutem, jeśli jest zarządzany w ten sposób.
David Thornley
32

Oprócz innych odpowiedzi: Innym czynnikiem, który należy wziąć pod uwagę, jest komunikacja.

Najgorszym przypadkiem ilości kanałów komunikacji w zespole (co nie jest rzadkie) jest pełny wykres . Jak możesz sobie wyobrazić, dodanie tylko 1 programisty może znacznie zwiększyć kanały komunikacji. Dzięki bardziej usprawnionym metodom komunikacji wpływ jest mniejszy ... ale wciąż się sumuje.

Steven Evers
źródło
Mniej więcej w tym samym czasie pisałem! ale nie nowy, to ma nazwę (pełny wykres) i twoje wyjaśnienie jest lepsze, więc idzie mój głos.
Miguel Veloso
+1. Zgadzam się, jest to największy problem przy dodawaniu większej liczby członków zespołu.
Martin Wickman
+1 za bardziej długoterminowy problem z dodawaniem ludzi do projektu.
indyK1ng
23

Problem cytowany w książce pierwotnie ogłoszonej tym prawem, The Mythical Man-Month , dotyczy komunikacji. Zaczyna od powiedzenia:

Mężczyźni i miesiące są towarami wymiennymi tylko wtedy, gdy zadanie można podzielić na wielu pracowników, bez żadnej komunikacji między nimi. Dotyczy to zbierania pszenicy lub zbierania bawełny; nie jest nawet w przybliżeniu prawdą w programowaniu systemów.

W ramach problemu wspomina o szkoleniu:

Dodatkowy ciężar komunikacji składa się z dwóch części: szkolenia i komunikacji wewnętrznej. Każdy pracownik musi być przeszkolony w zakresie technologii, celów wysiłku, ogólnej strategii i planu pracy. Szkolenia tego nie można podzielić, więc ta część pracy zmienia się liniowo w zależności od liczby pracowników.

... ale zauważa, że ​​komunikacja jest zdecydowanie większym czynnikiem:

Ponieważ konstrukcja oprogramowania jest z natury wysiłkiem systemowym - ćwiczeniem w złożonych wzajemnych powiązaniach - wysiłek komunikacyjny jest wielki i szybko dominuje skrócenie czasu wykonywania poszczególnych zadań spowodowane przez partycjonowanie. Dodanie kolejnych mężczyzn wydłuża, a nie skraca harmonogram.

Warto również zauważyć, że Fred Brooks (autor) ma doświadczenie, aby wiedzieć, o czym mówi. Większość książki opiera się na jego doświadczeniu w zarządzaniu projektem IBM OS / 360. Pomimo dziesięcioleci zwolenników głoszących wszelkiego rodzaju „ulepszone” metody zarządzania, a niektórzy nawet wymyślają fajne nazwy (eXtreme, Agile, Scrum itp.), Kiedy do tego dojdzie, wydaje się, że niewiele esencji 1 zmieniło się od tego czasu.

1 Definicja „istoty”, patrz samego autora za „No Silver Bullet: istota i wypadek w Inżynierii Oprogramowania”, zawarte w 20 th Anniversary Edition z mitycznym Man-Month .

Jerry Coffin
źródło
12

To nie tylko przysłowie; jest weryfikowalny. Sprawdź „ The Mythical Man-Month ” Brooksa .

Jan
źródło
1
To jest powiedzenie. Może być weryfikowalny, ale nie oznacza to, że jest to powiedzenie.
Peter Boughton
3
Nie mam tej książki (oczywiście). Czy jest to poparte twardymi liczbami, czy jest to anegdota?
Henry
2
@Henry: Minęło trochę czasu, odkąd go przeczytałem, ale IIRC, oba są obecne w wystarczającej ilości, aby jednoznacznie stwierdzić.
Steven Evers
@Peter: Edytowałem moją odpowiedź.
Jan
@PeterBoughton To powiedzenie. Ponadto nie jest to tylko przysłowie.
SantiBailors
6

Oto kilka przemyśleń na ten temat ...

  • Musisz użyć bieżących zasobów, aby przyspieszyć nowe zasoby na temat tego, co dzieje się w projekcie.
  • Nowy zasób może nie być zaznajomiony z bazą kodu, dlatego wymaga więcej czasu, aby się przyzwyczaić do kodu.

teraz dodanie nowych zasobów do testowania może nie być złym pomysłem ... może przyspieszyć proces testowania (jeśli twoje przypadki testowe są dobrze napisane), i tak, użycie narzędzi testowych również pomoże.

aggietech
źródło
1
+1 za dodanie zasobów do testowania, a nie programowania.
Baelnorn,
4

Ponieważ programowanie nie jest podstawową pracą na linii produkcyjnej. Przyspieszenie projektu oprogramowania wymaga czasu. Nowi ludzie muszą zadawać wiele pytań, które prowadzą do negatywnej produktywności (tj. Uczenie się nowej osoby, nauczanie jej przez starszą osobę -> brak faktycznej pracy).

Aby to uprościć, wyobraź sobie stosunkowo prosty jednoosobowy projekt, który ma trwać 1 tydzień: w czwartek zdajesz sobie sprawę, że nie uda się go wykonać na czas, a zamiast tego zajmie to programistowi więcej niż 6-7 dni z 5. Jeśli w tym momencie dodasz innego programistę, będą oni musieli pracować z programatorem1 przez co najmniej kilka godzin lub dzień, zadaj wiele pytań, aby przyspieszyć itp. Prawdopodobnie nie dostaniesz dodatnia produktywność netto przez resztę tygodnia. Nowy programista prawdopodobnie również wprowadzi kilka dodatkowych błędów (ponieważ nie będzie znał istniejącego kodu tak samo jak programmer1), dzięki czemu cykl wdrażania i testowania zostanie wyparty o kolejny dzień lub dwa. Projekt z łatwością potrwa pełne dwa tygodnie robocze zamiast oryginalnego!

Stoły Bobby'ego
źródło
Cóż, twój przykład jest trochę wymyślony przez nierealistyczny krótki termin pozostały do ​​realizacji projektu. Zmień go na jeden miesiąc, a zobaczysz, że nie jest to konieczne, prawda. Osobiście uważam, że cytat został wykorzystany. Jest to prawdą, jeśli weźmie się pod uwagę zwykły, średni / słaby programista. Jeśli masz dobrego programistę, a termin nie jest czymś nierealistycznym, jak 1 dzień lub 1 tydzień, wtedy cytat jest błędny: można to zrobić (pomóż projektowi).
n1ckp
@ n1ck Jest to uogólnienie - jak „zbyt wielu kucharzy” - kluczową kwestią jest to, że po prostu rzucenie siłą roboczą na projekt niekoniecznie spowoduje, że zostanie on rozwiązany szybciej. 1 osoba na 2? Prawdopodobnie będzie. 2 do 4? Zbyt wiele zmiennych - zależy to od wielkości i struktury projektu. 4 -> 8? Zdecydowanie marginalne (przynajmniej pod względem zwrotu z kosztów).
Murph
@Murph: wydaje się, że myślisz głównie te same rzeczy, co ja, ale zapomniałeś o jednej bardzo ważnej zmiennej w swoim równaniu: poziom umiejętności dodatkowej siły roboczej. To było w moim ostatnim komentarzu, więc dziwię się, że tęskniłeś. Ślepe dodawanie siły roboczej oczywiście nie jest rozwiązaniem. Dodanie bardzo wyspecjalizowanej siły roboczej (nie potrzebujesz wielu) może oczywiście pomóc i tego właśnie brakowało w mitycznym cytacie z miesiąca na miesiąc. To był mój cel. W przeciwnym razie już wiem o tym, co oznacza cytat.
n1ckp
Ok, przykład może być lepszy, ale uogólnienie jest nadal aktualne?
Murph
1
Przeszedłem przez tyle razy, aby wiedzieć, że to jedna z tych rzeczy, które MOGĄ działać w bardzo wyspecjalizowanych przypadkach, ale w 99% przypadków tak się nie stanie. Bez względu na to, jak dobrze wtedy wygląda teoretycznie. To powiedziawszy, tak, to nie jest czarno-biały absolut. To raczej powiedz, jak otwarte relacje nie działają. Teoria jest ładna i kusząca;) .... ale natura bestii jest taka, że ​​w większości przypadków kończy się to niepowodzeniem. Coś w rodzaju „wyjątki potwierdzają zasadę”.
Tabele Bobby
4

Fred Brooks napisał całą książkę „The Mythical Man-Month”, odpowiadając na to pytanie.

Oto szybka i brudna wersja:

1) Istnieje limit tego, ile możesz podzielić projekt na odrębne części, aby przypisać je większej liczbie programistów.

2) Podział projektu na większą liczbę osób zwiększa ilość komunikacji wymaganej do koordynowania wszystkich części aplikacji. Więcej komunikacji = więcej pracy.

3) Do każdej osoby dodawanej do projektu dodajesz więcej niż jeden kanał komunikacji, który musi być nawigowany do zespołu. Liczba ta rośnie geometrycznie i zwiększa ilość komunikacji, która musi nastąpić. Więcej komunikacji = więcej pracy.

4) Po dodaniu każdego członka zespołu pojawia się „Krzywa J”. Oznacza to, że istniejące zasoby produkcyjne muszą poświęcić czas na przyspieszenie nowych ludzi, których w innym przypadku mogliby spędzić pracując nad projektem. Ostatecznie możesz zwiększyć pojemność, ale tymczasowo spowalnia projekt. Im później w projekcie, tym więcej trzeba się nauczyć, tym bardziej wyraźny efekt.

JohnFx
źródło
4

Innym czynnikiem, o którym nie wspomniałem, jest to, że niektóre zadania muszą być wykonane w określonej kolejności. Nie można wykonać zadania 4, dopóki zadanie 3 nie zostanie wykonane, ponieważ jest ono zależne od 3. Nie ma sensu zatrudniać kogoś do wykonania zadania 4 w tym samym czasie, gdy ktoś wykonuje zadanie 3. Często na końcu projektu , te zadania, które wymagają wykonania innych czynności w pierwszej kolejności, to pozostałe zadania.

Często są to jedne z najbardziej skomplikowanych zadań, które należy wykonać, te, które wymagają najlepszego zrozumienia całego projektu, aby uniknąć zniszczenia tego, co już zostało ukończone. Zazwyczaj wymagają one również najszerszej wiedzy na temat domen biznesowych. Może po miesiącach pracy nad projektem będę w stanie wykonać zadanie za tydzień lub krócej. Ktoś nowy poświęciłby więcej niż tydzień na przyśpieszenie (i odciągnięcie mnie od moich zadań, aby ochronić ten czas, aby odpowiedzieć na pytania) i prawdopodobnie nawet gdyby niezwykle wykwalifikowani zajęli się tym zadaniem dłużej. Nie dlatego, że nie jest on kompetentny, ale z powodu nieznajomości faktycznej struktury projektu lub zaplecza bazy danych.

HLGEM
źródło
+1. To był główny problem w mojej ostatniej pracy. Zarząd był w wielkim „męskim miesiącu”, dodając do szaleństwa duży projekt bez zastanawiania się. W pewnym momencie nasz zespół wyszkolił się za powolność - ponieważ nasze rzeczy musiały zostać zintegrowane z tym dużym projektem. Ale potem, że nowych pracowników na duży projekt nie mógł dostać się do prędkości na tyle szybko, więc MY się zbyt daleko (na rzeczy, które wymagają ich backendy zakończone). W pewnym momencie opracowywaliśmy interfejsy dla częściowo wypieczonych backendów i uprzęży testowych. Niezły przepływ.
Tabele Bobby
2

Powiedzenie, które zawsze się dla mnie sprawdza, mówi, że nie można zmusić dziewięciu kobiet do zrobienia dziecka w ciągu jednego miesiąca.

ponownie odtwarzać
źródło
Jeśli uważasz, że projekt oprogramowania jest jak dziecko, nie żyjesz w prawdziwym świecie. Cytat zawiera pewną prawdę, ale jest to doskonały przykład wyciągania rzeczy z kontekstu: -1
n1ckp
1
Oczywiście, że nie. Ale ludzie, których sprzedajesz, również nie rozumieją rozwoju oprogramowania. Analogie służą właśnie do tego celu, łącząc nieznaną koncepcję ze znanym bytem.
powtórki
2
Inną analogią Brooksa jest jedzenie w restauracji. Dobrze zarządzana kuchnia może przygotowywać wiele posiłków równolegle, ale istnieją ograniczenia co do tego, jak szybko może zrobić pojedynczy posiłek bez niedogotowania lub przypalenia.
David Thornley,
@rerun: problem z twoją analogią polega na tym, że nie ma analogii pracowniczej dla kobiet w ciąży. Kobiety w twoim przypadku mogłyby być łatwiejsze w porównaniu do firmy , a nie pracowników. Dlatego moim zdaniem tak bardzo zawodzi. Najbliższe, o czym myślę, to jedzenie, ale byłoby to bardziej jak linia kodów, więc nie, nie pracownicy.
n1ckp
1
@ n1ck: Mam wrażenie, że się nie zgadzasz, bo nie rozumiesz tego, szczerze mówiąc. Brooks nie mówił o zamianie bezużytecznych ludzi na kompetentnych, ponieważ był w sytuacji, w której wszyscy nadal zatrudnieni byli uważani za kompetentnych.
David Thornley,
2

Sugerowałbym także „Peopleware” autorstwa DeMarco i Lister.

„The Deadline” autorstwa DeMarco przedstawia to oraz szereg innych chorób i błędów zarządzania projektami oprogramowania w beztroski i bardzo czytelny sposób.

Zagłębia się także w dynamikę ludzi wykonujących pracę w projekcie / zespole i szczegółowo opisuje POZYCJE, takie jak komunikacja i wprowadzenie wyczerpują dostępny czas pracy zespołu.

Te książki są dość tanie, sugeruję, aby je zdobyć (mają je Amazon lub The Book Depository) i przeczytać. Krótkie odpowiedzi tutaj nie mogą naprawdę oddać zadanego pytania.

szybko
źródło
2

Ponieważ nikt nie ma czasu na przemyślany, zaplanowany i przetestowany proces: zatrudniania, szkolenia, rozwijania i nadzorowania programistów, nie mówiąc już o przyspieszeniu ich do określonego projektu.

Jeśli zarządzasz zespołem programistów, powinieneś mieć teraz kilka kontaktów z osobami, które chciałbyś zatrudnić, jeśli masz ofertę pracy. Dołącz do grup programistów.

Jak szybko można uzyskać nową konfigurację maszyny programistycznej i gotowe do pracy?

Czy kiedykolwiek testowałeś dokumentację i specyfikacje projektu, pokazując je deweloperowi przy innym projekcie? Czy spojrzeli na to i stwierdzili, że w razie potrzeby mogą rozpocząć pracę nad projektem?

Jak aktualny jest harmonogram każdego projektu?

Zaoszczędź na deszczowy dzień, ponieważ gdy projekt się opóźnia, przypomina bardziej huragan.

JeffO
źródło
1

Oprócz problemu z komunikacją (o którym myślę, że wszystkie pozostałe odpowiedzi mówią), jest również bardzo możliwe, że osoba dodana do projektu tworzy błędy, ponieważ nie zna jeszcze dobrze kodu.

Ilekroć jestem dodawany do projektu, zawsze bardzo staram się nie rozbijać rzeczy. Oznacza to, że na początku znacznie wolniej naprawiam.

Paul D. Waite
źródło
0

Chciałbym wskazać na coś całkowicie ignorowanego do tej pory przez inne odpowiedzi.

Zanim ludzie są dodawani do późnego projektu, zwykle wiele się nie udaje w całej organizacji. Zarząd i klient nie są zadowoleni. Ludzie byli zmuszani do kontynuowania tego. Rzeczy są dość napięte.

Teraz wyobraź sobie, że jesteś w tym zespole. Oczywiście to nie twoja wina. Planowanie (z których żaden nie był twój) było zbyt optymistyczne. Wszystkie złe decyzje zostały podjęte bez konsultacji z tobą. Próbujesz jak najlepiej to wykorzystać i nagle przyjeżdża mnóstwo nowych ludzi. Jakie przesłanie to przekazuje?

Ludzie na górze najwyraźniej stracili wiarę w ciebie. Wezwali dużych chłopców, aby nadrobili zaległości.

Czy nadal będziesz motywowany, aby osiągnąć sukces? A może ... czy będziesz coraz bardziej sfrustrowany i wolałbyś, żeby w końcu wszystko się zawiesiło?

Nie spiesz się :-).

Martin Maat
źródło