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?
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?
Antworten:
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.
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.
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 .
Es ist nicht nur ein Sprichwort; es ist überprüfbar. Schauen Sie sich Brooks ' Mythical Man-Month an .
Hier sind einige Gedanken zu diesem Thema ...
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.
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!
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.
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.
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.
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.
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.
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.
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 :-).