So ermitteln Sie die Anzahl der für ein Projekt benötigten Programmierer

18

Woher wissen Sie, wie viele Programmierer ein bestimmtes Projekt benötigt, um erfolgreich zu sein?

Das Unternehmen, für das ich arbeite, führt Aufträge für Kundenunternehmen aus. Wir haben ein internes Lagerverwaltungssystem geschrieben, das die ortsbezogene Bestandsverwaltung, die Auftragsabwicklung, die Erstellung von Frachtbriefen, die Rechnungsstellung, die Frachtprüfung und das Berichtswesen (wahrscheinlich 50 Berichte) übernimmt. Es hat auch Barcode-Scan-Funktionen und ein Client-Portal zusammen mit Dutzenden anderer kleinerer Funktionen. Es enthält auch eine vollständige Zeitschaltuhr für Mitarbeiter. Es lässt sich in Quickbooks, UPS und FedEx integrieren. Es erledigt Arbeiten für mindestens 50 Kunden, die sich in ihrer Funktionalität geringfügig unterscheiden. Beispielsweise importieren wir Bestellungen aus Dateien, die der Kunde sendet, aber jeder Kunde sendet ein anderes Dateiformat (CSV, Excel, Flat File und Webservices), sodass wir weit über ein Dutzend Methoden zur Bestellungskonvertierung eingerichtet haben. Exporte sind die gleiche Geschichte.

Das Projekt ist komplex und wächst täglich mit über einer Viertelmillion Codezeilen. Es geht um 250.000 Zeilen VB.NET-Code, 6.200 Zeilen Ruby-Code und vielleicht 5.000 Zeilen PHP. Es hat auch eine MySQL-Datenbank mit etwa 200 Tabellen.

Aufgrund der sich ständig ändernden Anforderungen und unterschiedlichen Bedürfnisse von Dutzenden von Clients variiert der Code selbst stark in der Qualität von extrem schlechtem bis relativ gutem Code.

Derzeit hat dieses Projekt nur einen einzigen Programmierer - mich. Ich mache derzeit auch den gesamten Produktsupport für unser Unternehmen mit ca. 75 Mitarbeitern. Dies umfasst die Fehlerbehebung und Einrichtung neuer Clients sowie der erforderlichen neuen Funktionen. Außerdem versuchen wir, das Ganze so umzuschreiben, dass es zu 100% auf Ruby on Rails basiert. Und wir möchten das gesamte System innerhalb des nächsten Jahres auf den Markt bringen, um es von anderen Unternehmen nutzen zu können.

Derzeit haben wir nur mich als Programmierer, aber ich glaube nicht, dass das ausreicht. Hat jemand Empfehlungen, wie viele Programmierer ein Projekt dieser Größenordnung haben sollte oder wie wir vorgehen sollten, um die Antwort auf diese Frage zu finden? Insbesondere angesichts der Tatsache, dass die Geschäftsführung wünscht, dass das Produkt bis zum nächsten Jahr kommerzielle Qualität aufweist?

kstevens715
quelle
11
Ich habe auf einen Glühbirnenwitz gewartet :(
Oded
lol ... google den Titel und du wirst wahrscheinlich einige finden. Als ich googelte, fand ich tatsächlich ein paar von denen, die versehentlich lachen.
kstevens715
8
Wenn sich die Anforderungen ständig ändern, wird dieses Produkt ohne zusätzliche Hände ausgeliefert und aus der Tür geholt. Sie müssen zuerst die Anforderungen festlegen.
Oded
Das ist definitiv wahr in meinem Fall. Ich weiß, dass die Frage, die ich stelle, wahrscheinlich nicht sehr beantwortbar ist. Aber wenn ich vergleichen könnte, an welchen Projekten andere Leute arbeiten und wie viele Leute Vollzeit in diese Projekte involviert sind, würde das vielleicht helfen.
kstevens715
Diese Frage scheint dieser Frage sehr ähnlich zu sein . Vielleicht finden Sie dort auch Antworten, die hilfreich sind.
S.Robins

Antworten:

3

Ich würde mindestens 5 Personen sagen. Eins für Test, eins für Spezifikation, Support und Dokumentation sowie 3Devs. In Ihrem Fall müssen viele Dinge getestet werden, daher sollte ein 50% iger Tester nicht unvernünftig sein. Es sollte eine Person anwesend sein, die die Anforderungen aufzeichnet und die Kundenunterstützung beauftragt, Ihre Infrastruktur für Tests usw. einzurichten. Drei Entwickler sind meiner Meinung nach für ein Projekt wie dieses ziemlich niedrig. Ein großes Backend, das in viele Systeme von Drittanbietern integriert ist, und ein vollständiges Frontend mit extrem vielen benutzerdefinierten Berichten. Ich würde gerne haben.

  1. Ein guter Backend-Entwickler (Persistenz / Business-Schicht)
  2. Ein guter Middle-End- / Front-End-Entwickler, der Action-Klassen und JavaScript-CSS-Design erstellt.
  3. Ein guter Allround-Entwickler, der als Architekt fungiert, aber auch Code in allen Ebenen mit fachmännischer Hilfe der beiden anderen erstellt. Dieser Entwickler kann auch die Verzweigung von JUnit Framework Maven Jenkins Git einrichten und so weiter.

Was passiert, wenn Sie gehen, krank werden, Urlaub machen usw. Eine Person pro Projekt ist niemals schlau. Es ist auch nicht gut, allein zu sein, da Sie sich ohne Kollegen nicht professionell weiterentwickeln können. Ich arbeite ziemlich oft alleine, baue neue Architekturen auf und so weiter, oft in Teams von etwa 5 Entwicklern, aber ich entwickle mich nie so sehr weiter, als wenn ich einem Kollegen sage, dass wir dies gemeinsam einrichten und uns eine Woche lang unterhalten, diskutieren und Frameworks auswählen. Die Programmierung von Paaren ist extrem hilfreich und kann nicht mit einem Entwickler durchgeführt werden. Wer wird Code-Reviews durchführen, wenn Sie sich unsicher fühlen? Wenn Sie stecken bleiben, wer wird Ihnen helfen? Ich würde ein Ein-Personen-Projekt nur dann durchführen, wenn es Teil eines größeren Umfangs wäre und bei Bedarf Expertenressourcen anfordern könnten.

Farmor
quelle
1
Ich habe letzten Sommer 2 Tage Urlaub gemacht und jemand musste in mein Haus einbrechen, um meinen Laptop zu bekommen ... ja. Ich spreche immer davon, in einem Vakuum zu arbeiten, weil ich nicht viele andere Entwickler habe, mit denen ich interagieren kann. Und in einer kleinen Stadt gibt es nicht einmal Benutzergruppen oder etwas, dem man beitreten könnte. Wir (ich?) Haben erst kürzlich angefangen, Testcode zu schreiben, als wir angefangen haben, auf Rails umzusteigen. Ich kann mir schon nicht vorstellen, ohne Tests zu entwickeln. Ich liebe die Idee, einen 50% engagierten Tester zu haben.
kstevens715
1
Mindestens ein Entwickler sollte ein Datenbankspezialist sein.
HLGEM
8

Willkommen in der oft schwierigen Welt der Beschaffung !

Das Problem betrifft nicht die Projektgröße im Vergleich zur Teamgröße. Dies ist ein weit verbreitetes Missverständnis, das häufig andere Probleme verbirgt, die normalerweise mit dem Management zusammenhängen. Das Thema dreht sich alles um dreht Scope . Sie müssen entscheiden, was Sie mit Ihren aktuellen Ressourcen erreichen können - auch Sie. Anschließend müssen Sie entscheiden, ob Ihre Kapazität zur Bewältigung der Arbeitslast ausreicht, um die Aufgabe innerhalb des Ihnen zugewiesenen Zeitrahmens zu erledigen. Daher müssen Ihre Projektanforderungen identifiziert und abgegrenzt werden.

  • Möchten Sie Zeit damit verbringen, die vorhandene Codebasis zu bereinigen?
  • Ist dies eine Grundvoraussetzung für den Erfolg des Projekts?
  • Müssen Sie dem System neue Funktionen hinzufügen? Was sind die wichtigsten Aspekte Ihres Projekts, die behandelt werden müssen, und welche Nebenaspekte stehen auf der Wunschliste?
  • Kann eine der Anforderungen entweder aufgegeben oder zumindest bis zur nächsten Wartungsversion verschoben werden?

Wenn Sie eine Vorstellung vom Umfang Ihrer Anforderungen haben, können Sie den Arbeitsaufwand leichter bestimmen, der erforderlich ist, um innerhalb eines bestimmten Zeitrahmens ein Ergebnis zu erzielen. Wenn Ihre Ressourcen wahrscheinlich überlastet sind, benötigen Sie mehr Personal. Wenn Ihre Ressourcen wahrscheinlich nicht ausgelastet sind, können Sie möglicherweise Ihren Termin verschieben oder den Umfang Ihres Projekts erweitern.

Wenn Ihnen Ihr Bauchgefühl sagt, dass Sie nicht genug Personal haben, um das Projekt zu managen, haben Sie vielleicht Recht, aber Sie müssen verstehen, warum Sie das aus dem Bauch heraus sagen. Es reicht nicht aus, nur ein Gefühl zu haben. Stattdessen müssen Sie in der Lage sein, das Problem wissenschaftlich zu untersuchen, um Beweise für Ihre Instinkte zu liefern, und Sie müssen bereit sein, sich der Möglichkeit zu stellen, dass Ihre Instinkte möglicherweise sogar falsch sind. Sobald Sie Ihre Beweise gesammelt haben, müssen Sie sich mit Ihrem Management in Verbindung setzen, um den Umfang des Projekts zu reduzieren oder die verfügbaren Ressourcen zu erhöhen, um den Erfolg des Projekts zu gewährleisten auf den vorliegenden Beweisen.

S.Robins
quelle
Der Umfang scheint darin zu liegen, ein 250-KByte-SLOC-System vollständig in Shrinkwrap-Qualität (oder zumindest in Consultingware-Qualität) umzuschreiben. Der Vorteil ist, dass die Erfassung der Anforderungen und das Gesamtdesign wahrscheinlich bereits erfolgt sind. Dies ist nicht klein und nichts für einen Entwickler, der andere Aufgaben hat.
David Thornley
@DavidThornley Das hängt in hohem Maße vom Umfang der Entwicklerpflichten, seinen Fristen, seiner Arbeitsbelastung und der Art und Weise ab, wie sein Unternehmen das Produkt bereits vermarktet. Ich habe viele komplexe Projekte gesehen, an denen ein 1-2-köpfiges Team gearbeitet hat, die sehr erfolgreich waren, weil sie gut gemanagt wurden ... und viele weitere, die gescheitert sind. Ich stimme jedoch zu, dass es sich um eine große Aufgabe handelt, die in Bezug auf die Beschaffung bereits eine rote Fahne darstellt. Die Sache ist, dass es sich nicht lohnt, einfach viele Leute einzustellen, ohne vorher ein paar Hausaufgaben gemacht zu haben, was wirklich der Punkt ist, auf den ich antworte. :-)
S.Robins
Umfang ist etwas, das ich in den letzten paar Monaten ziemlich oft angesprochen habe. 20% des Projekts haben 80% der Auswirkungen auf das Unternehmen. Darauf möchte ich mich konzentrieren. Leider werden die 80%, die 20% der Auswirkungen haben, in den Vordergrund gedrängt, wenn wir versuchen, mit "Notfällen" umzugehen, indem wir mehr Code und Funktionen darauf werfen. Ich habe einmal nach einem Feature Freeze gefragt, damit ich einige Kernprobleme beheben kann. Sie gaben mir 5 Tage. Unnötig zu erwähnen, dass es 5 Jahre später ist und viele der Kernprobleme bestehen bleiben. Vielen Dank für Ihren Beitrag, sehr hilfreich.
kstevens715
6

Der Erfolg des Produkts / Projekts hängt vom Engagement des Unternehmens ab, das dafür bezahlt. Wenn sie mehr Programmierer / Support-Mitarbeiter einstellen, sinkt die Produktivität inhärent von einem Programmierer, der weiß, dass er trainieren, unterrichten, verwalten usw. muss. Nicht, dass es eine schlechte Sache ist eine Verringerung sein, bevor eine Erhöhung realisiert wird. Es besteht auch ein Bedarf an Geschäftsanalysten, Managern, Verkäufen und der Unterstützung des Produkts, sobald es im Handel erhältlich ist.

Das Hosten einer kommerziellen Anwendung ist viel mehr als nur die Schaffung einer soliden Plattform. Es gibt Support-Anforderungen, technischen Support, Fehlerbehebung, Benutzerschulung usw.

Haben Sie ein gutes Analyse- / Spezifikations- / Schätzverfahren? Wenn nicht, können Sie dies jetzt selbst tun.

Trainierst du gerade dein Gehirn? Wenn ja, seien Sie bereit, doppelt so hart zu arbeiten, wenn Sie erwarten, dass Sie diesen Prozess bewältigen und sich weiterentwickeln (Erhöhung fällig?).

Und hier ist die Antwort aus meiner früheren Erfahrung mit einer ähnlichen Situation bei der Preisgestaltung in Südkalifornien:

5-6 Personen && ~ 500k

  • 1 Hauptentwickler / Manager-Träger aller Hüte (~ 100.000 - 120.000)

  • 2 Sr. (sehr fähige, selbstgesteuerte) Programmierer mit guten DB-Kenntnissen und Fähigkeiten (2x ~ 80 - 100k)

  • 1 Projektmanager für die Schnittstelle zum Management ($$?) Diese Person sollte auch in der Lage sein, die Anforderungen der App zu verstehen und diese Anforderungen direkt an die Programmierer zu kommunizieren

  • 1? (HTML / UI) Entwickler? mit Javascript-Fähigkeiten (ich hasse Programmierung UI / Markup-Code)

  • 1? Datenbank Person? Die meisten guten Programmierer haben jedoch kein Problem damit, skalierbare Datenstrukturen zu erstellen. Wenn Sie jedoch Optimierungsprobleme haben, sollten Sie zumindest einen Berater hinzuziehen

Hanzolo
quelle
1
+1 Ich mag deine Aufteilung sehr gut! Die Gehälter, die Sie zitieren, sind für mich deprimierend, da ich daran gedacht habe, bei SoCal zu arbeiten, aber sie sind nicht viel höher als in Westeuropa, wenn die Angestellten wie MSc + 5 Jahre arbeiten.
Farmor
1
Ich bin damit einverstanden, mit der Ausnahme, dass ich auch einem Einsteigerprogrammierer empfehlen würde, die Supportaufgaben (Client-Setup und kleinere Verbesserungen) zu übernehmen und allgemeine Grunzarbeit zu verrichten. Das Kombinieren einiger Rollen kann abhängig von den beteiligten Qualifikationsstufen funktionieren.
Jfrankcarr
Wow, können Sie ältere Entwickler in So Cal für 80-100K bekommen? Das scheint angesichts der Lebenshaltungskosten recht niedrig zu sein. Vielleicht haben wir unterschiedliche Vorstellungen von "Senior"; Die älteren Entwickler, die ich in Dallas kenne, bekommen erheblich mehr.
Kevin Cline
Wir haben wahrscheinlich auch unterschiedliche Vorstellungen davon, was gut schmeckt. Ich habe 2 .Net Sr. eingestellt, die jung und talentiert waren und in den letzten 10 Jahren viel Erfahrung gesammelt haben und bereit waren, in diesem Bereich zu arbeiten. Wir verwendeten den neuesten Microsoft Stack (TFS, .NET 4, C #, EF 4.1, MSSQL 2008 R2, bla bla ..) und hatten kein Problem damit, guten sauberen Code herauszuholen. Wir waren ein kleines Team, und das Problem , das wir gefunden versuchen , einige Seniors zu mieten war , dass sie zu lernen und hatte zu viele Meinungen resistent waren und zu viel Gepäck befördert (Wir haben nicht viel von einem Einstellungsfenster entweder)
Hanzolo
2

1 Programmierer auf einer großen Codebasis mit allen der Verantwortung der Konfiguration, Testen, Kommunikation, Unterstützung, Dokumentation und Bugfixing wird zum Schreiben neuen Code oder das Hinzufügen von Funktionen (oder sogar Refactoring alten Code) nicht viel Zeit haben , .

Teilen Sie Ihre Woche nach dem Prozentsatz dieser obligatorischen Aufgaben auf, die das Geschäft nicht erweitern, und Sie werden überrascht sein, wie schnell das Management zusätzliche Hilfe einstellt.

Bei großen Projekten entsteht ein gewisser Overhead, der nicht verschwindet (insbesondere, wenn Sie die ganze Zeit über neue Clients implementieren / testen). Dies ist der Grund, warum Sie Support-Rotationen und Support im Allgemeinen haben. Einige Teammitglieder haben also Zeit, an neuen Funktionen zu arbeiten.

Vielleicht möchten Sie auch in Büchern über Softwareschätzung suchen. Diese Bücher mögen nicht so klingen, als hätten sie viel zu sagen, aber sie enthalten interessante Fallstudien aus verschiedenen Bereichen und stützen ihre Behauptungen mit Beweisen.

brian
quelle
95% meiner Zeit verbringe ich mit einer dieser Aufgaben. Ich mag die Idee, Rotationen zu unterstützen. Das ist vielleicht etwas zu überlegen, wenn wir jemanden einstellen, den ich mit lol drehen kann. Heute habe ich zum Beispiel tatsächlich an einem Kerncode gearbeitet und wurde unterbrochen, weil jemand eine Batterie brauchte.
kstevens715
@ kstevens715 - Es hört sich so an, als ob Sie Hilfe benötigen, auch wenn es sich um ein technisches Kind handelt. Ich gehe davon aus, dass Ihnen mindestens ein fünfstelliges Einkommen ausgezahlt wird. Wenn ich aufgefordert würde, eine Batterie zu besorgen, würde dies für meinen Arbeitgeber ungefähr 10 USD kosten (35% meines Stundenlohns).
Ramhound