Unter welchen Umständen - wenn überhaupt - beschleunigt das Hinzufügen von Programmierern zu einem Team tatsächlich die Entwicklung eines bereits verspäteten Projekts?
Unter welchen Umständen - wenn überhaupt - beschleunigt das Hinzufügen von Programmierern zu einem Team tatsächlich die Entwicklung eines bereits verspäteten Projekts?
Antworten:
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):
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:
Hoffentlich hilft das!
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.
Möglicherweise, wenn die folgenden Bedingungen zutreffen:
Ich werde Sie wissen lassen, wenn ich all dies zum ersten Mal auf einmal sehe.
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.
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.
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.
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.
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.
Ich nehme an, das Hinzufügen von Personen gegen Ende der Arbeit könnte die Dinge beschleunigen, wenn:
Die Arbeit kann parallel durchgeführt werden.
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.
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.
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. :-)
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
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):
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.