Ich brauche dieses Baby in einem Monat - schick mir neun Frauen!


185

Unter welchen Umständen - wenn überhaupt - beschleunigt das Hinzufügen von Programmierern zu einem Team tatsächlich die Entwicklung eines bereits verspäteten Projekts?


Ich verstehe die Analogie, die Sie machen wollen, aber dennoch kann ein aussagekräftigerer und weniger schockierender Titel eine gute Idee sein ...
Adrian Petrescu

Ersatz "Paare" für "Frauen"
nur Mike

Es spielt keine Rolle, wie viele Männer Sie hinzufügen (solange die Zahl ungleich Null ist), Sie benötigen immer noch 9 Frauen.
Windows-Programmierer

9
Es kann funktionieren, solange eine der Frauen im achten Monat schwanger ist.
Toon Krijthe

Antworten:


87

Die genauen Umstände sind offensichtlich sehr spezifisch für Ihr Projekt (z. B. Entwicklungsteam, Führungsstil, Prozessreife, Schwierigkeit des Themas usw.). Um dies ein wenig besser zu erfassen, damit wir alles andere als pauschal vereinfachen können, werde ich Ihre Frage wiederholen:

Unter welchen Umständen kann das Hinzufügen von Teammitgliedern zu einem Softwareentwicklungsprojekt, das zu spät ausgeführt wird, zu einer Reduzierung des tatsächlichen Versanddatums mit einem Qualitätsniveau führen, das dem entspricht, wenn das vorhandene Team bis zur Fertigstellung arbeiten darf?

Es gibt eine Reihe von Dingen, die ich für notwendig , aber nicht ausreichend halte , damit dies geschieht (in keiner bestimmten Reihenfolge):

  • Die vorgeschlagenen Personen, die dem Projekt hinzugefügt werden sollen, müssen Folgendes haben:
    • Zumindest ein vernünftiges Verständnis der Problemdomäne des Projekts
    • Beherrschen Sie die Sprache des Projekts und die spezifischen Technologien, die sie für die ihnen übertragenen Aufgaben verwenden würden
    • Ihre Fähigkeiten müssen / nicht / viel kleiner oder viel größer sein als die des schwächsten bzw. stärksten bestehenden Mitglieds. Schwache Mitglieder werden Ihre vorhandenen Mitarbeiter mit tertiären Problemen belasten, während eine neue Person, die zu stark ist, das Team dadurch stört, dass alles, was sie getan haben und tun, falsch ist.
    • Gute Kommunikationsfähigkeiten haben
    • Hoch motiviert sein (zB in der Lage sein, selbständig zu arbeiten, ohne zu stupsen)
  • Die vorhandenen Teammitglieder müssen Folgendes haben:
    • Exzellente Kommunikations Fähigkeiten
    • Hervorragende Zeitmanagementfähigkeiten
  • Der Projektleiter / das Projektmanagement muss:
    • Gute Fähigkeiten zur Priorisierung und Ressourcenzuweisung
    • Ein hohes Maß an Respekt von den bestehenden Teammitgliedern
    • Exzellente Kommunikations Fähigkeiten
  • Das Projekt muss haben:
    • Eine gute, vollständige und dokumentierte Software-Design-Spezifikation
    • Gute Dokumentation der bereits implementierten Dinge
    • Ein modularer Aufbau, mit dem klare Verantwortungsbereiche herausgearbeitet werden können
    • Ausreichende automatisierte Prozesse zur Qualitätssicherung für das erforderliche Fehlerniveau Dies können beispielsweise Unit-Tests, Regressionstests, automatisierte Build-Bereitstellungen usw. sein.
    • Ein Bug- / Feature-Tracking-System, das derzeit vom Team eingerichtet und verwendet wird (z. B. trac, SourceForge, FogBugz usw.).

Eines der ersten Dinge, die besprochen werden sollten, ist, ob das Versanddatum verschoben werden kann , ob Features gekürzt werden können und ob einige Kombinationen der beiden es Ihnen ermöglichen, die Freigabe mit Ihrem vorhandenen Personal zu befriedigen. Oft sind es ein paar Features, die die Ressourcen des Teams wirklich belasten und keinen Wert liefern, der der Investition entspricht. Überprüfen Sie daher vor allem die Prioritäten Ihres Projekts.

Wenn das Ergebnis des obigen Absatzes nicht ausreicht, besuchen Sie die obige Liste. Wenn Sie den Zeitplan frühzeitig erkannt haben, kann das Hinzufügen der richtigen Teammitglieder zur richtigen Zeit die Veröffentlichung speichern. Je näher Sie Ihrem erwarteten Versanddatum kommen, desto mehr Dinge können leider beim Hinzufügen von Personen schief gehen. An einem Punkt überqueren Sie den "Punkt ohne Wiederkehr", an dem keine Änderung (außer dem Versand des aktuellen Entwicklungszweigs) Ihre Version speichern kann.

Ich könnte weiter und weiter machen, aber ich denke, ich habe die wichtigsten Punkte getroffen. Außerhalb des Projekts und in Bezug auf Ihre Karriere, den zukünftigen Erfolg des Unternehmens usw. sollten Sie auf jeden Fall herausfinden, warum Sie zu spät gekommen sind, ob Sie früher alarmiert werden konnten und welche Maßnahmen Sie benötigen zu nehmen, um es in der Zukunft zu verhindern. Ein spätes Projekt tritt normalerweise auf, weil Sie entweder:

  • War spät bevor du angefangen hast (mehr Zeug als Zeit) und / oder
  • rutschte 1 Stunde, 1 Tag zu der Zeit.

Hoffentlich hilft das!


3
Gute Liste. Ich befürchte jedoch, dass viele Projekte zu spät kommen, gerade weil sie nicht alles enthalten, was Sie
auflisten

1
Nur unbeschwert zu sein, aber wenn das Team all diese Funktionen hätte, wären sie wahrscheinlich gar nicht erst zurück :)
rtpHarry

29

Es hilft nur, wenn Sie ein ressourcengesteuertes Projekt haben.

Betrachten Sie zum Beispiel Folgendes:

Sie müssen ein großes Poster malen, sagen wir 4 mal 6 Meter. Bei einem so großen Poster können Sie wahrscheinlich zwei oder drei Personen davor stellen und sie parallel malen lassen. Es funktioniert jedoch nicht, 20 Personen davor zu stellen. Außerdem benötigen Sie qualifizierte Mitarbeiter, es sei denn, Sie möchten ein beschissenes Poster.

Wenn Ihr Projekt jedoch darin besteht, Umschläge mit fertig gedruckten Briefen zu füllen (wie Sie vielleicht gewonnen haben! ), Geht es umso schneller, je mehr Personen Sie hinzufügen. Das Verteilen von Arbeitsstapeln ist mit einem gewissen Aufwand verbunden, sodass Sie bis zu dem Punkt, an dem Sie eine Person pr haben, keine Vorteile erhalten können. Umschlag, aber Sie können von viel mehr als nur 2 oder 3 Personen profitieren.

Wenn Ihr Projekt also leicht in kleine Teile unterteilt werden kann und die Teammitglieder schnell (wie ... sofort) auf den neuesten Stand gebracht werden können, wird es durch Hinzufügen weiterer Personen bis zu einem gewissen Punkt schneller.

Leider sind nicht viele Projekte in unserer Welt so, weshalb der Tipp von docgnome zum Buch Mythical Man-Month ein wirklich guter Rat ist.


Ich denke, Software ist von Natur aus kein solches Projekt. Wenn Sie also keine Mitarbeiter hinzufügen, die nicht programmiererisch arbeiten (z. B. Bilder erstellen und Text übersetzen), können Sie mit TMMM als Referenz sicher sagen, dass dies NICHT hilft
Mike Stone,

17

Möglicherweise, wenn die folgenden Bedingungen zutreffen:

  1. Die neuen Programmierer verstehen das Projekt bereits und benötigen keine Hochlaufzeit.
  2. Die neuen Programmierer beherrschen die Entwicklungsumgebung bereits.
  3. Es ist keine Verwaltungszeit erforderlich, um die Entwickler zum Team hinzuzufügen.
  4. Es ist fast keine Kommunikation zwischen den Teammitgliedern erforderlich.

Ich werde Sie wissen lassen, wenn ich all dies zum ersten Mal auf einmal sehe.


1
Im Grunde genommen wird jemand wieder zu einem Projekt hinzugefügt, das er verlassen hat (aktuell genug, damit er auch nichts vergessen hat)
Mike Stone

1
"Ich werde dich wissen lassen, wenn ich all das zum ersten Mal auf einmal sehe." Halte meinen Atem!!!
Stu Thompson

Ich finde es gut, dass Sie versucht haben, die Bedingungen für eine erfolgreiche Hinzufügung von Teammitgliedern zusammenzufassen. Ich denke, (2) und (3) sind keine Denker. (1) ist nur möglich, wenn Sie sie wieder auf ein Projekt umstellen, an dem sie bereits gearbeitet haben. (4) ist nur möglich, wenn es sich um einen vorhandenen Mitarbeiter handelt, der in ein Projekt mit bestehenden Beziehungen zu anderen Programmierern (aus früheren Projekten) gewechselt wird.
Anonymer Typ

11

Laut dem Mythical Man-Month ist der Hauptgrund für das spätere Hinzufügen von Personen zu einem späten Projekt der Kommunikationsaufwand für O (n ^ 2).

Ich habe eine Hauptausnahme davon erlebt: Wenn es nur eine Person in einem Projekt gibt, ist es fast immer zum Scheitern verurteilt. Das Hinzufügen eines zweiten beschleunigt es fast jedes Mal. Das liegt daran, dass die Kommunikation in diesem Fall kein Overhead ist - es ist eine hilfreiche Gelegenheit, Ihre Gedanken zu klären und weniger dumme Fehler zu machen.

Wie Sie offensichtlich wussten, als Sie Ihre Frage gestellt haben, gilt der Rat des Mythical Man-Month nur für späte Projekte. Wenn Ihr Projekt noch nicht zu spät ist, ist es durchaus möglich, dass das Hinzufügen von Personen später nicht erfolgt. Vorausgesetzt, Sie machen es richtig.


10

Wenn die vorhandenen Programmierer völlig inkompetent sind, kann das Hinzufügen kompetenter Programmierer hilfreich sein.

Ich kann mir eine Situation vorstellen, in der Sie ein sehr modulares System hatten und die vorhandenen Programmierer noch nicht einmal auf einem sehr isolierten Modul gestartet waren . In diesem Fall kann es hilfreich sein, nur diesen Teil des Projekts einem neuen Programmierer zuzuweisen.

Grundsätzlich sind die Referenzen des Mythical Man Month korrekt, außer in erfundenen Fällen wie dem, den ich erfunden habe. Herr Brooks hat solide Untersuchungen durchgeführt, um zu zeigen, dass nach einem bestimmten Zeitpunkt die Netzwerk- und Kommunikationskosten für das Hinzufügen neuer Programmierer zu einem Projekt die Vorteile überwiegen, die Sie aus ihrer Produktivität ziehen.


Nicht wirklich ... dennoch entstehen Kosten für das Erlernen der Codebasis allein ... und wenn sie völlig inkompetent sind, wird das Projekt wahrscheinlich sowieso scheitern.
Mike Stone

Ich stimme Mike Stone hier zu. Die Codebasis und die Architektur könnten fehlerhaft sein, 2-4 Monate Hochlaufzeit pro Entwickler für ein ernstes Projekt, alle möglichen Probleme in Bezug auf die technische Führung usw. Ught ... Ich bekomme die Willies dazu, darüber nachzudenken.
Stu Thompson

5
  • Wenn sich die neuen Leute auf das Testen konzentrieren
  • Wenn Sie unabhängige Features isolieren können, die keine neuen Abhängigkeiten erstellen
  • Wenn Sie einige Aspekte des Projekts orthogonalisieren können (insbesondere nicht codierende Aufgaben wie visuelles Design / Layout, Datenbankoptimierung / -indizierung oder Server-Setup / Netzwerkkonfiguration), sodass eine Person daran arbeiten kann, während die anderen mit dem Anwendungscode fortfahren
  • Wenn sich die Leute kennen, die Technologie, die Geschäftsanforderungen und das Design, gut genug, um Dinge zu tun, mit dem Wissen, wann sie sich gegenseitig auf die Zehen treten und wie sie dies vermeiden können (dies, ist natürlich ziemlich schwer zu arrangieren, wenn es nicht schon der Fall ist)

4

Nur wenn Sie zu diesem späten Zeitpunkt einige unabhängige Aufgaben (fast 0% Interaktion mit anderen Teilen des Projekts) haben, die noch von niemandem erledigt wurden, können Sie jemanden ins Team holen, der auf diesem Gebiet spezialisiert ist. Das Hinzufügen eines Teammitglieds muss die Störung für den Rest des Teams minimieren.


4

Anstatt Programmierer hinzuzufügen, kann man darüber nachdenken, administrative Hilfe hinzuzufügen. Alles, was Ablenkungen beseitigt, den Fokus verbessert oder die Motivation verbessert, kann hilfreich sein. Dies umfasst sowohl das System als auch die Verwaltung sowie prosaischere Dinge wie das Mittagessen.


1
Guter Vorschlag, und einer, von dem ich denke, dass er dem Geist der Vorschläge im Mythical Man Month entspricht. ++
Ed Guiness

3

Natürlich ist jedes Projekt anders, aber bei den meisten Entwicklungsjobs kann sichergestellt werden, dass die Entwickler in gewissem Umfang zusammenarbeiten. Wo dies der Fall ist, habe ich die Erfahrung gemacht, dass frische Ressourcen die Menschen, auf die sie sich verlassen, unbeabsichtigt verlangsamen können, um sie auf den neuesten Stand zu bringen, und in einigen Fällen können dies Ihre Schlüsselpersonen sein (im Übrigen sind es normalerweise „Schlüsselpersonen“, die sie benötigen würden die Zeit, einen Neuling zu erziehen). Wenn sie sind zu beschleunigen, gibt es keine Garantien , dass ihre Arbeit in etablierten ‚Regeln‘ passen oder ‚Arbeitskultur‘ mit dem Rest des Teams. Es kann also wieder mehr schaden als nützen. Abgesehen davon sind dies die Umstände, unter denen dies von Vorteil sein könnte:

1) Die neue Ressource hat eine enge Aufgabe, die ein Minimum an Interaktion mit anderen Entwicklern und bereits demonstrierte Fähigkeiten erfordert. (dh Portieren von vorhandenem Code auf eine neue Plattform, externes Refactoring eines toten Moduls, das derzeit in der vorhandenen Codebasis gesperrt ist).

2) Das Projekt wird so verwaltet, dass die Zeit anderer hochrangiger Teammitglieder geteilt werden kann, um den Neuling auf den neuesten Stand zu bringen und ihn auf seinem Weg zu betreuen, um sicherzustellen, dass seine Arbeit mit dem übereinstimmt, was bereits getan wurde.

3) Die anderen Teammitglieder sind sehr geduldig.


3

Ich nehme an, das Hinzufügen von Personen gegen Ende der Arbeit könnte die Dinge beschleunigen, wenn:

  1. Die Arbeit kann parallel durchgeführt werden.

  2. Die Menge, die durch zusätzliche Ressourcen eingespart wird, ist mehr als die Zeit, die verloren geht, wenn die mit dem Projekt erfahrenen Personen den Unerfahrenen die Dinge erklären.

EDIT: Ich habe vergessen zu erwähnen, dass so etwas nicht allzu oft passiert. Normalerweise ist es ziemlich einfach, wie Admin-Bildschirme, die eine einfache CRUD für eine Tabelle ausführen. Heutzutage können diese Arten von Werkzeugen sowieso meistens automatisch generiert werden.

Seien Sie vorsichtig mit Managern, die auf diese Art von Arbeit setzen, um sie abzugeben. Es klingt großartig, aber in Wirklichkeit reicht es normalerweise nicht aus, um eine signifikante Auszeit vom Projekt zu verkürzen.


Und wie oft ist das tatsächlich der Fall?
Stu Thompson

2
  • In sich geschlossene Module, die noch nicht gestartet wurden
  • Ohne Entwicklungswerkzeuge können sie integriert werden (wie ein automatisierter Build-Manager).

In erster Linie denke ich an Dinge, die es ihnen ermöglichen, den sich derzeit entwickelnden Menschen aus dem Weg zu gehen. Ich stimme dem Mythical Man-Month zu, aber ich denke auch, dass es zu allem Ausnahmen gibt.


2

Ich denke, dass das Hinzufügen von Personen zu einem Team ein Projekt mehr beschleunigen kann als das Hinzufügen von Personen zum Projekt selbst.

Ich habe oft das Problem, zu viele Projekte gleichzeitig zu haben. Jedes dieser Projekte könnte schneller abgeschlossen werden, wenn ich mich nur auf dieses Projekt konzentrieren könnte. Durch Hinzufügen von Teammitgliedern konnte ich andere Projekte verlassen.

Dies setzt natürlich voraus, dass Sie fähige, selbst motivierte Entwickler eingestellt haben, die in der Lage sind, große Projekte zu erben und unabhängig zu lernen. :-)


2

Wenn die zusätzliche Ressource ergänzt Ihr bestehendes Team kann es ideal. Wenn Sie beispielsweise Ihre Produktionshardware einrichten und überprüfen möchten, ob die Datenbank tatsächlich optimiert ist, anstatt nur gute Ergebnisse (die Ihr Team als Domain-Experten kennt) zurückzugeben, leihen Sie sich Zeit von einer guten Datenbank, die als Nächstes am Projekt arbeitet zu Ihnen kann das Team ohne große Schulungskosten beschleunigen


Dies ist eigentlich eine ziemlich gute Antwort. Wenn ein Projekt von ABC- und D-Kenntnissen abhängt und Programmierer im Team A und B kennen, kann das Hinzufügen von Programmierern, die C und D verstehen, die Fertigstellung beschleunigen. Die Leute müssen gut miteinander auskommen und es gibt immer noch Größenbeschränkungen im Team
Windows-Programmierer

1

Einfach gesagt. Es kommt darauf an, die verbleibende Zeit und die Produktivität zu vergleichen, die Sie von jemandem erhalten, ohne die Zeit, die die zusätzlichen Ressourcen benötigen, um auf den neuesten Stand zu kommen, produktiv zu sein und die Zeit, die für das Unterrichten dieser Ressourcen aufgewendet wird, von den vorhandenen Ressourcen abzuziehen. Die Schlüsselfaktoren (in der Reihenfolge ihrer Bedeutung):

  1. Wie gut die Ressource darin ist, sie aufzunehmen. Die besten Entwickler können eine neue Site aufrufen und Fehler mit nur wenig Unterstützung fast sofort produktiv beheben. Diese Fähigkeit ist selten, kann aber erlernt werden.
  2. Die Segregabilität von Aufgaben. Sie müssen in der Lage sein, an Objekten und Funktionen zu arbeiten, ohne über die vorhandenen Entwickler zu stolpern und diese zu verlangsamen.
  3. Die Komplexität des Projekts und die Dokumentation zur Verfügung. Wenn es sich um eine bewährte Vanille-ASP.Net-Anwendung und gängige, gut dokumentierte Geschäftsszenarien handelt, kann ein guter Entwickler sofort stecken bleiben. Dieser Faktor wird mehr als jeder andere bestimmen, wie viel Zeit die vorhandenen Ressourcen in den Unterricht investieren müssen und daher die anfänglichen negativen Auswirkungen der neuen Ressourcen.
  4. Die verbleibende Zeit. Dies wird oft auch falsch eingeschätzt. Häufig haben wir nur noch x Wochen und es dauert x + 1 Wochen, um jemanden auf den neuesten Stand zu bringen. In Wirklichkeit wird das Projekt ausrutschen und hat tatsächlich noch 2x Wochen Entwicklungszeit, und es wird helfen, eher früher als später mehr Ressourcen bereitzustellen.

1

Wenn ein Team bereits mit dem Pairing der Programmierung vertraut ist, kann das Hinzufügen eines anderen Entwicklers, der bereits mit dem Pairing vertraut ist, das Projekt möglicherweise nicht verlangsamen, insbesondere wenn die Entwicklung mit einem TDD-Stil fortgesetzt wird.

Der neue Entwickler wird langsam produktiver, wenn er die Codebasis besser versteht, und Missverständnisse werden sehr früh entweder von seinem Paar oder von der Testsuite erkannt, die vor jedem Check-in ausgeführt wird (und im Idealfall sollte ein Check durchgeführt werden) in mindestens alle zehn Minuten).

Die Auswirkungen des zusätzlichen Kommunikationsaufwands müssen jedoch berücksichtigt werden. Es ist wichtig, das vorhandene Wissen über das Projekt nicht zu stark zu verwässern.


Sie sagen also, es könnte hilfreich sein und es könnte nicht hilfreich sein?
Ed Guiness

Mehr oder weniger. Ich sage, dass die akzeptierte Weisheit ist, dass das Hinzufügen von Personen zu einem späten Projekt später erfolgt, aber unter bestimmten Umständen, die sehr sorgfältig verwaltet werden, können Sie von einer zusätzlichen Person nützliche zusätzliche Arbeit erhalten.
Bill Michell

1

Das Hinzufügen von Entwicklern ist sinnvoll, wenn die Produktivität der zusätzlichen Entwickler die Produktivität übersteigt, die durch die Schulung und Verwaltung dieser Entwickler verloren geht.

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.