Warum schafft es das Hinzufügen weiterer Personen zu einem späten Projekt später?


25

Es ist ein weit verbreitetes Sprichwort, dass das Hinzufügen von mehr Programmierern zu einem späten Projekt die Sache verschlimmern wird. Warum ist das?


14
Der Begriff dafür ist Brooks 'Gesetz ( en.wikipedia.org/wiki/Brooks's_law ).
Macneil

7
Tipp: Lesen Sie Brooks '"The Mythical Man-Month". Dies wird zeigen, woher das Sprichwort kommt, es ist ein sehr lesbares Buch und jeder auf dem Gebiet sollte es trotzdem lesen.
David Thornley

Diese Wikipedia-Seite ist sehr gut geschrieben.
Henry

Hinweise dazu, wie die Produktivität mit der Teamgröße
Joeri Sebrechts,

Antworten:


33

Einführungsaufwand

Jeder neue Entwickler muss in die Codebasis und den Entwicklungsprozess eingeführt werden, was nicht nur die Zeit der neuen Person in Anspruch nimmt, sondern auch die Unterstützung von [einem] leitenden Entwickler (der sie durch den Erstellungsprozess führt, den Testprozess erklärt und ihnen hilft) benötigt mit Fallstricken in der Codebasis, viel detaillierteren Codereviews usw.) .

Je mehr neue Entwickler Sie dem Projekt hinzufügen, desto mehr Zeit muss aufgewendet werden, um sie an einen Punkt zu bringen, an dem sie tatsächlich zum Projekt beitragen können.


Wenn Sie also "Einführung" optimieren, wird die Auswirkung verringert?
Henry

9
@ Henry: Das Problem ist, dass Sie diesen Aspekt normalerweise nicht in einem Maße optimieren können, in dem es nicht der Engpass ist. Ein neuer Programmierer kennt zunächst 0 genau Ihr Projekt, Ihren Code und Ihre Prozesse. Es ist derselbe Aufwand, der immer erforderlich ist, wenn Sie ein neues Teammitglied hinzufügen. Wenn ein Projekt jedoch bereits zu spät ausgeführt wird, hat das Team häufig nicht die Zeit, eine ordnungsgemäße Einführung vorzunehmen, und wenn dies der Fall ist, fehlt die Zeit in der tatsächlichen Entwicklung. Daher ist es für das Team in der Regel eine Loss-Loss-Situation, und die neue Person benötigt viel mehr Zeit, bis sie einen sinnvollen Beitrag zum Projekt leisten kann.
Baelnorn

Kann eine Einführung nicht einmal auf Video aufgezeichnet und dann an viele gesendet werden, damit eine große Anzahl neuer Programmierer gleichzeitig geschult werden kann? (Beispiele: Entwicklertreffen oder Konferenzen.)
rwong

7
@rwong: Es ist keine schlechte Idee, aber das ist normalerweise nicht praktisch. Man kann die Informationen nicht nur präsentieren, man muss sicherstellen, dass die neuen Leute sie verstehen. Wenn sie wirklich neu sind (neue Absolventen), gibt es normalerweise zu viele Informationen, um sie allen auf einmal zu präsentieren. Wir haben herausgefunden, dass ein Wiki gut funktioniert, da sich alle Informationen an einer Stelle befinden und die Leute Fragen stellen können, wenn es Teile gibt, die sie nicht verstehen.
TMN

Eine Möglichkeit besteht darin, eine sehr kompetente neue Person zu beauftragen, bestimmte Aufgaben zu erledigen, ohne die anderen zu belästigen. Sie werden schlecht flundern und langsam arbeiten, und einige Manager und / oder Teams können es nicht ertragen, dies zu sehen. Der neue Entwickler kann jedoch ein Plus sein, wenn er auf diese Weise verwaltet wird.
David Thornley

32

Zusätzlich zu den anderen Antworten: Ein weiterer zu berücksichtigender Faktor ist die Kommunikation.

Der schlimmste Fall für die Anzahl der Kommunikationskanäle in einem Team (was nicht ungewöhnlich ist) ist eine vollständige Grafik . Wie Sie sich vorstellen können, kann das Hinzufügen von nur einem Entwickler die Kommunikationskanäle erheblich erweitern. Mit optimierten Kommunikationsmethoden sind die Auswirkungen geringer ... aber es summiert sich immer noch.


Ich habe ungefähr zur gleichen Zeit genau das Gleiche geschrieben! aber ich habe nicht neu, es hatte einen Namen (eine vollständige Grafik) und Ihre Erklärung ist besser, so geht meine Abstimmung.
Miguel Veloso

+1. Einverstanden ist dies das größte Problem beim Hinzufügen weiterer Teammitglieder.
Martin Wickman

+1 für das längerfristige Problem beim Hinzufügen von Personen zu einem Projekt.
indyK1ng

23

Das Problem, das in dem ursprünglich verkündeten Buch The Mythical Man-Month genannt wird , ist die Kommunikation. Er beginnt mit den Worten:

Männer und Monate sind nur dann austauschbare Güter, wenn eine Aufgabe auf viele Arbeiter aufgeteilt werden kann, die untereinander keine Kommunikation haben. Dies gilt für die Ernte von Weizen oder die Ernte von Baumwolle. Dies gilt nicht einmal annähernd für die Systemprogrammierung.

Er erwähnt das Training als Teil des Problems:

Die zusätzliche Kommunikationslast besteht aus zwei Teilen: Training und Interkommunikation. Jeder Mitarbeiter muss in der Technologie, den Zielen des Aufwands, der Gesamtstrategie und dem Arbeitsplan geschult sein. Diese Schulung kann nicht aufgeteilt werden, daher variiert dieser Teil der Arbeit linear mit der Anzahl der Beschäftigten.

... merkt aber an, dass die Interkommunikation bei weitem der größere Faktor ist:

Da die Softwareerstellung inhärent ein Systemaufwand ist - eine Übung in komplexen Zusammenhängen - ist der Kommunikationsaufwand groß und dominiert schnell die durch die Partitionierung verursachte Verkürzung der einzelnen Task-Zeit. Das Hinzufügen von mehr Männern verlängert den Zeitplan, nicht verkürzt ihn.

Es ist auch erwähnenswert, dass Fred Brooks (der Autor) den Hintergrund hat, um zu wissen, wovon er spricht. Der größte Teil des Buches basiert auf seiner Erfahrung im Management des OS / 360-Projekts von IBM. Trotz jahrzehntelangen Anhänger alle Arten von „verbessert“ Management - Methoden zu predigen, und einige sogar mit coolen Namen kamen (eXtreme, Agile, Scrum, etc.) , wenn Sie es bekommen nach unten, wenig Essenz 1 scheint da geändert zu haben.

1 Für die Definition von "Essenz" siehe "No Silver Bullet: Essenz und Unfall in der Softwareentwicklung" desselben Autors, enthalten in der 20 - jährigen Jubiläumsausgabe von The Mythical Man-Month .


12

Es ist nicht nur ein Sprichwort; es ist überprüfbar. Schauen Sie sich Brooks ' Mythical Man-Month an .


1
Es ist ein Sprichwort. Es mag nachprüfbar sein oder nicht, aber das hört nicht auf, ein Sprichwort zu sein.
Peter Boughton

3
Ich habe dieses Buch (offensichtlich) nicht. Wird dies durch harte Zahlen gestützt oder ist es anekdotisch?
Henry

2
@Henry: Es ist schon eine Weile her, seit ich es gelesen habe, aber IIRC, beide sind in ausreichender Menge vorhanden, um den Punkt endgültig zu machen.
Steven Evers

@ Peter: Bearbeitet meine Antwort.
John

@ PeterBoughton Es ist ein Sprichwort. Es ist auch nicht nur ein Sprichwort.
SantiBailors

6

Hier sind einige Gedanken zu diesem Thema ...

  • Sie müssen aktuelle Ressourcen verwenden, um die neuen Ressourcen auf den neuesten Stand zu bringen.
  • Neue Ressourcen sind möglicherweise nicht mit der Codebasis vertraut. Daher ist mehr Zeit erforderlich, um sich an den Code zu gewöhnen.

Jetzt ist das Hinzufügen neuer Ressourcen zum Testen möglicherweise keine schlechte Idee. Es kann den Testprozess beschleunigen (wenn Ihre Testfälle gut geschrieben sind), und ja, die Verwendung von Testwerkzeugen hilft ebenfalls.


1
+1 für das Hinzufügen von Ressourcen zum Testen, nicht zur Entwicklung.
Baelnorn

4

Weil das Programmieren keine grundlegende Arbeit in der Produktionslinie ist. Ein Softwareprojekt auf den neuesten Stand zu bringen, braucht Zeit. Neue Menschen müssen viele Fragen stellen, was zu einer negativen Produktivität führt (dh neue Menschen lernen, alte Menschen unterrichten sie -> keine eigentliche Arbeit wird erledigt).

Um es zu vereinfachen, stellen Sie sich ein relativ einfaches Ein-Mann-Projekt vor, das eine Woche dauern soll: Am Donnerstag stellen Sie fest, dass es nicht pünktlich fertig wird, sondern dass ein Programmierer eher 6-7 Tage benötigt von 5. Wenn Sie zu diesem Zeitpunkt einen weiteren Programmierer hinzufügen, muss dieser mindestens ein paar Stunden oder einen Tag mit dem Programmierer1 zusammenarbeiten. Stellen Sie viele Fragen, um auf den neuesten Stand zu kommen, usw. Das wird Ihnen wahrscheinlich nicht gelingen jede positive Nettoproduktivität für den Rest der Woche. Der neue Programmierer führt wahrscheinlich auch einige zusätzliche Fehler ein (da er den vorhandenen Code nicht so gut kennt wie Programmierer1), sodass der Implementierungs- und Testzyklus um ein oder zwei Tage länger ausfällt. Das Projekt wird statt der ursprünglichen zwei volle Arbeitswochen dauern!


Nun, Ihr Beispiel ist ein wenig durch die unrealistische kurze Frist für das Projekt erfunden. Ändern Sie es auf einen Monat und Sie werden sehen, dass es nicht unbedingt wahr ist. Persönlich denke ich, dass das Zitat missbraucht wurde. Es ist wahr, wenn man einen gewöhnlichen, durchschnittlichen / schlechten Programmierer betrachtet. Wenn Sie einen guten Programmierer haben und die Frist nicht so unrealistisch ist wie 1 Tag oder 1 Woche, dann ist das Zitat falsch: es kann getan werden (helfen Sie dem Projekt).
Nr. 1

@n1ck Es ist eine Verallgemeinerung - wie "zu viele Köche" - der entscheidende Punkt ist, dass es nicht zwangsläufig zu einer schnelleren Lösung des Problems kommt, wenn einfach nur Arbeitskräfte in das Projekt gesteckt werden. 1 Person bis 2? Werde wahrscheinlich. 2 bis 4? Zu viele Variablen - das hängt von der Größe und Struktur des Projekts ab. 4 -> 8 & le; Auf jeden Fall marginal (zumindest in Bezug auf die Kostenrendite).
Murph

@Murph: Sie denken anscheinend hauptsächlich an die gleichen Dinge wie ich, aber Sie haben eine sehr wichtige Variable in Ihrer Gleichung vergessen: die Fähigkeitsstufe der zusätzlichen Arbeitskräfte. Es war in meinem letzten Kommentar, also finde ich es seltsam, dass du es verpasst hast. Das blinde Hinzufügen von Arbeitskräften ist natürlich nicht die Lösung. Das Hinzufügen sehr spezialisierter Arbeitskräfte (Sie brauchen nicht viele) kann natürlich helfen und es ist das, was im mythischen Mann-Monat-Zitat gefehlt hat. Das war mein Punkt. Ansonsten weiß ich schon, was das Zitat bedeutet.
Nr. 1

Ok, das Beispiel könnte besser sein, aber die Verallgemeinerung ist noch gültig?
Murph

1
Ich habe dies oft genug durchgemacht, um zu wissen, dass es eines der Dinge ist, die in sehr speziellen Fällen funktionieren KÖNNTEN , aber 99% der Fälle nicht. Egal wie gut es damals theoretisch aussieht. Das heißt, ja, es ist kein Schwarz-Weiß-Absolut. Es ist eher so, als würde man sagen, wie offene Beziehungen nicht funktionieren. Die Theorie ist schön und verlockend;) .... aber die Natur des Tieres ist so, dass es in den meisten Fällen scheitert. Eine Art "die Ausnahmen bestätigen die Regel".
Bobby Tables

4

Fred Brooks hat ein ganzes Buch "The Mythical Man-Month" geschrieben, das diese Frage beantwortet.

Hier ist die Quick-n-Dirty-Version:

1) Es gibt eine Begrenzung, wie viel Sie ein Projekt in verschiedene Teile aufteilen können, um mehr Programmierern zuzuweisen.

2) Durch die Aufteilung eines Projekts auf mehrere Personen wird der Kommunikationsaufwand erhöht, der zum Koordinieren aller Teile der Anwendung erforderlich ist. Mehr Kommunikation = mehr Arbeit.

3) Für jede Person, die Sie zum Projekt hinzufügen, fügen Sie mehr als einen Kommunikationskanal hinzu, der zum Team navigiert werden muss. Diese Zahl wächst geometrisch und erhöht den Kommunikationsaufwand. Mehr Kommunikation = mehr Arbeit.

4) Es gibt eine "J-Kurve", wenn Sie jedes Teammitglied hinzufügen. Das heißt, die vorhandenen produktiven Ressourcen müssen Zeit darauf verwenden, die neuen Mitarbeiter auf den neuesten Stand zu bringen, den sie andernfalls für die Arbeit an dem Projekt hätten verwenden können. Letztendlich können Sie zwar die Kapazität erhöhen, das Projekt wird jedoch vorübergehend verlangsamt. Je später im Projekt, desto mehr muss gelernt werden, desto stärker ist der Effekt.


4

Ein weiterer Faktor, den ich nicht erwähnt habe, ist, dass einige Aufgaben in einer bestimmten Reihenfolge ausgeführt werden müssen. Sie können Aufgabe 4 erst dann erledigen, wenn Aufgabe 3 erledigt ist, weil es von Aufgabe 3 abhängt. Es ist nicht gut, jemanden einzustellen, der Aufgabe 4 gleichzeitig erledigt, wenn jemand Aufgabe 3 erledigt. Oftmals am Ende eines Projekts Die Aufgaben, für die zuerst andere Dinge erledigt werden müssen, sind die verbleibenden Aufgaben.

Dies sind oft auch einige der komplexesten Aufgaben, die erledigt werden müssen. Gerade diese erfordern das beste Verständnis des gesamten Entwurfs, um zu vermeiden, dass bereits erledigte Aufgaben zerstört werden. Sie erfordern in der Regel auch das umfangreichste Fachwissen. Ich könnte nach monatelanger Arbeit an dem Projekt in der Lage sein, die Aufgabe in einer Woche oder weniger zu erledigen. Jemand, der neu ist, würde mehr als eine Woche damit verbringen, sich auf den neuesten Stand zu bringen (und mich von meinen Aufgaben abzubringen, um einen guten Schutz für die Beantwortung von Fragen zu erhalten), und würde wahrscheinlich auch dann länger brauchen, wenn es äußerst kompetent wäre, die Aufgabe zu erledigen. Nicht, weil er oder sie nicht kompetent ist, sondern weil er oder sie mit der tatsächlichen Struktur des Projekts oder des Datenbank-Backends nicht vertraut ist.


+1. Dies war ein großes Problem bei meinem letzten Job. Das Management war im Mega-Mann-Monat, als es die Begeisterung für ein großes Projekt aufbaute, ohne sich Gedanken zu machen. Irgendwann wurde unser Team dafür geschärft, langsam zu sein - weil sich unser Personal in dieses große Projekt integrieren musste. Aber dann konnten die neuen Mitarbeiter des Großprojekts nicht schnell genug auf dem Laufenden sein , sodass WIR zu weit vorangekommen sind (was die Fertigstellung ihrer Backends betraf). Einmal haben wir Frontends für halbgebackene Backends und Testgeschirre entwickelt. Kein guter Fluss.
Bobby Tables

2

Das Sprichwort, das immer für mich funktioniert, ist, dass Sie nicht neun Frauen in einem Monat dazu bringen können, ein Baby zu bekommen.


Wenn Sie ein Softwareprojekt für ein Baby halten, leben Sie nicht in der realen Welt. Das Zitat enthält einige Wahrheiten, aber dies ist das perfekte Beispiel dafür, wie man Dinge aus dem Kontext nimmt: -1
n1ckp

1
Es ist offensichtlich nicht. Aber die Leute, die Sie auch verkaufen, verstehen die Softwareentwicklung nicht. Analogien beziehen genau zu diesem Zweck ein unbekanntes Konzept auf eine bekannte Entität.
Wiederholung

2
Eine andere Analogie, die Brooks macht, ist das Essen in einem Restaurant. In einer gut geführten Küche können viele Mahlzeiten gleichzeitig zubereitet werden. Es gibt jedoch Grenzen für die Geschwindigkeit, mit der eine Mahlzeit zubereitet werden kann, ohne sie zu verkochen oder zu verbrennen.
David Thornley

@rerun: das Problem mit deiner Analogie ist, dass es keine Arbeiteranalogie für eine schwangere Frau gibt. Die Frauen in Ihrem Fall könnten leichter mit der Firma verglichen werden , nicht mit den Arbeitern. Deshalb scheitert es meiner Meinung nach so sehr. Das nächste, an das ich denken kann, wäre das Essen, aber das wäre eher eine Codezeile, also nein, keine Arbeiter.
n1ckp

1
@n1ck: Mein Eindruck ist, dass Sie nicht einverstanden sind, weil Sie es nicht verstehen, um ehrlich zu sein. Brooks sprach nicht davon, nutzlose Menschen durch kompetente zu ersetzen, weil er sich in einer Situation befand, in der jeder, der noch beschäftigt war, als kompetent galt.
David Thornley

2

Ich würde auch "Peopleware" von DeMarco und Lister vorschlagen.

Und "The Deadline" von DeMarco präsentiert diese und eine Reihe anderer Krankheiten und Irrtümer beim Management von Softwareprojekten auf unbeschwerte und gut lesbare Weise.

Es wird auch auf die Dynamik von Menschen eingegangen, die Projekt- / Teamarbeit leisten, und es wird detailliert darauf eingegangen, wie Dinge wie Kommunikation und Einführung die verfügbare Arbeitszeit eines Teams verringern.

Diese Bücher sind ziemlich billig, ich würde vorschlagen, dass Sie sie kaufen (Amazon oder The Book Depository haben sie) und lesen. Die kurzen Antworten hier können der gestellten Frage nicht wirklich gerecht werden.


2

Weil sich niemand die Zeit nimmt, einen gut durchdachten, geplanten und getesteten Prozess zu haben, um Programmierer einzustellen, zu schulen, zu entwickeln und zu beaufsichtigen, geschweige denn, um sie für ein bestimmtes Projekt auf den neuesten Stand zu bringen.

Wenn Sie ein Entwicklerteam leiten, sollten Sie im Moment mehrere Kontakte zu Personen haben, die Sie einstellen möchten, wenn Sie eine offene Position haben. Treten Sie Entwicklergruppen bei.

Wie schnell können Sie eine brandneue Entwicklungsmaschine einrichten und einsatzbereit machen?

Haben Sie jemals Ihre Projektdokumentation und Spezifikationen getestet, indem Sie sie einem Entwickler in einem anderen Projekt gezeigt haben? Haben sie es sich angesehen und festgestellt, dass sie bei Bedarf mit der Arbeit an dem Projekt beginnen können?

Wie aktuell ist ein Projektplan?

Sparen Sie für einen regnerischen Tag, denn wenn ein Projekt ins Hintertreffen gerät, ist es eher wie ein Huricane.


1

Abgesehen von dem Kommunikationsproblem (von dem ich glaube, dass alle anderen Antworten sprechen) ist es auch sehr gut möglich, dass eine Person, die zu einem Projekt hinzugefügt wurde, Fehler erzeugt, da sie den Code noch nicht sehr gut kennt.

Immer wenn ich zu einem Projekt hinzugefügt werde, bemühe ich mich sehr, die Dinge nicht zu beschädigen. Das heißt, ich bin viel langsamer, wenn es darum geht, Dinge zuerst zu reparieren.


0

Ich möchte auf etwas hinweisen, das von den anderen Antworten bisher völlig ignoriert wurde.

Zu dem Zeitpunkt, zu dem Personen zu einem späten Projekt hinzugefügt werden, ist in der gesamten Organisation in der Regel viel schiefgelaufen. Das Management und der Kunde sind nicht glücklich. Die Leute wurden unter Druck gesetzt, damit weiterzumachen. Die Dinge sind ziemlich angespannt.

Stellen Sie sich vor, Sie gehören zu diesem Team. Offensichtlich ist nichts davon deine Schuld. Die Planung (keine davon war deine) war zu optimistisch. Alle falschen Entscheidungen wurden ohne Rücksprache mit Ihnen getroffen. Sie versuchen, das Beste daraus zu machen, und plötzlich werden ein paar neue Leute hinzugezogen. Welche Botschaft vermittelt das?

Die Leute oben haben offensichtlich das Vertrauen in dich verloren. Sie haben die großen Jungs angerufen, um das wiedergutzumachen, was Sie vermasselt haben.

Werden Sie noch motiviert sein, dies zum Erfolg zu führen? Oder ... wirst du immer frustrierter und möchtest du lieber sehen, wie das Ganze doch abstürzt?

Lass dir Zeit :-).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.