Der beste Weg, um die Programmierung für kleine Teams zu planen? [geschlossen]

18

Ich bin der Direktor einer kleinen Startup-Organisation. Wir haben derzeit zwei Programmierer (einer mit Erfahrung, einer mit weniger Erfahrung), die eine Webanwendungsplattform aufbauen.

Eine der größten Herausforderungen ist bisher der Planungsprozess. Die Programmierer sind in der Regel für die Planung ihrer eigenen Arbeit verantwortlich, aber wir überschreiten weiterhin ihre selbst gesetzten Fristen. Zum Beispiel dauert eine Aufgabe, die sie schätzen, 2 Tage, am Ende 8 Tage.

Für mich ist es schwierig, sie bei der Planung zu unterstützen, da mir das technische Know-how fehlt, um genau abzuschätzen, wie lange eine bestimmte Aufgabe dauern wird.

Hast du irgendeine Idee:

  1. Was ist der Grund dafür, ist dies für Programmierer üblich?
  2. Was kann ich tun, um sie bei der Planung zu unterstützen? Gibt es Methoden oder Tools, die für Programmierer in kleinen Teams nützlich sind?
John B
quelle
2
Haben Sie Berater, wenn Sie nicht welche finden? Sie müssen wissen, wie schnell der Status der Arbeit ist. Wenn Sie nicht selbst nachschauen können, brauchen Sie als Regisseur Hilfe, um dies zu überwachen. Planung ist immer schwierig für die Entwicklung (siehe Themen hier, Sie werden viel finden). Haben Sie eine gute Vorstellung von der Qualität des zu entwickelnden Produkts? Das Hauptproblem ist, dass Sie nicht wissen können, ob Sie kein Entwickler sind oder zumindest Erfahrung damit haben.
Luc Franken
3
@John B, Sie können sich hier ähnliche Fragen ansehen ( programmers.stackexchange.com/questions/tagged/… ), aber die Tatsache, dass Sie nicht technisch sind, wird die meisten von ihnen als hilfreich erweisen. Aber diese könnten hilfreich sein: programmers.stackexchange.com/questions/16326/… , programmers.stackexchange.com/questions/39468/… , programmers.stackexchange.com/questions/208700/…
superM 15.10.13
1
@superM Vielen Dank, das ist sehr hilfreich. Einige Threads sind für mich als Regisseur sehr nützlich, andere teile ich mit meinen Programmierern, um zu sehen, ob sie sie auch nützlich finden. Danke für Ihre Hilfe.
John B
2
Zu diesem Thema gibt es ein sehr gutes Buch: Mike Cohns Agile Estimating and Planning. mountaingoatsoftware.com/books/agile-estimating-and-planning
Hbas
3
Ich bin überrascht, dass noch niemand darauf verlinkt hat: joelonsoftware.com/items/2007/10/26.html
paul

Antworten:

16

Die allgemeinen Techniken sind einigermaßen vernünftig. Wichtig zu wissen ist, dass sie nicht viel technisches Fachwissen erfordern.

Der Ausgangspunkt bei der Planung besteht darin, das genaue Problem zu identifizieren, das gelöst werden muss, und einen klaren und eindeutigen Bedarf zu haben. Wenn Sie das nicht haben, werden Ihre Schätzungen falsch sein. Wenn dies in einer Art Funktionsspezifikation dokumentiert ist, bevor jemand mit dem Schreiben von Code beginnt, bedeutet dies, dass alle Fragen, die gestellt werden müssen, gestellt wurden, bevor mit dem Codieren begonnen wird. Dies ist eine überraschend effektive Zeitersparnis. Das Zurückgehen und Klären von Anforderungen unterbricht den eigenen Ablauf als Programmierer und das Warten auf Antworten kann den Fortschritt blockieren.

Sobald Sie die Anforderung identifiziert haben, müssen Sie die Arbeitsaufgaben identifizieren, die mit deren Lösung verbunden sind. Dies ist eine klassische Übung zum Teilen und Erobern - jede Aufgabe, die weiter aufgeschlüsselt werden kann, muss weiter aufgeschlüsselt werden.

In einem größeren Team können Sie mithilfe von Estimation Poker eine Schätzung erhalten, die auf den Erfahrungen aller Beteiligten basiert. Das funktioniert in einem kleineren Team nicht so gut, aber es ist trotzdem nützlich, von beiden Entwicklern einen unabhängigen Kostenvoranschlag zu erhalten und vielleicht auch einen von Ihnen einzubeziehen. Ihr Mangel an spezifischem Fachwissen kann hier hilfreich sein, um Ihnen zu erklären, was passiert Die Aufgabe beinhaltet aus ihrer Sicht, das Entwicklerteam wird das Problem wahrscheinlich besser verstehen.

Mit einem kleineren Team kann es hilfreich sein, für jede Aufgabe eine Schätzung für den besten / erwarteten / schlechtesten Fall zu erhalten, die Ihnen einen Bereich von Werten bietet. Wenn Sie jedoch viele Überschreitungsschätzungen erhalten, können Sie bis zu Ihren Entwicklern zum schlechtesten Fall tendieren lernen, genauer zu schätzen.

In einem kleinen Laden fungieren Entwickler häufig als Systemadministratoren, Supportteams und sogar als Tester (obwohl sie unter allen Umständen versuchen sollten, Tests zu vermeiden), sodass Sie dies berücksichtigen müssen. Finden Sie heraus, wie viel Zeit Ihre Entwickler tatsächlich damit verbringen, an neuen Funktionen zu arbeiten, und berücksichtigen Sie dies in Ihren Schätzungen. Wenn eine Aufgabe auf 2 Tage geschätzt wird, Ihre Entwickler jedoch in 60% der Fälle nur an der Neuentwicklung arbeiten können, benötigen Sie 4 Tage, um sie fertig zu stellen. Möglicherweise können Sie auch hier Abhilfe schaffen, indem Sie die Pipeline der anderen Aufgaben steuern, die von ihnen ausgeführt werden müssen, damit nicht dringende Administrations- oder Support-Aufgaben nicht nur ad-hoc, sondern auch stapelweise ausgeführt werden können. Viele Programmierer (sicherlich auch ich) sind keine großartigen Zeitmanager. Alles, was Sie tun können, um dabei zu helfen, wird helfen. Single-Tasking ist für Programmierer immer einfacher als Multitasking. Auch das Sperren der Zeit während des Tages kann hier Abhilfe schaffen.

Führen Sie eine Aufzeichnung durch . Notieren Sie bei jeder Planungssitzung die Schätzungen und Ist-Werte. Sie können dies dann a) als Richtlinie verwenden, um zu ermitteln, um wie viel die Schätzungen während der Planung aufgeblasen werden sollen, und b) um sie bei der Verfeinerung ihrer Schätzfähigkeiten zu unterstützen. Am Ende jeder Iteration (oder was auch immer für ein Äquivalent Sie haben) sollte das gesamte Team die geleistete Arbeit überprüfen und herausfinden, warum sie länger als erwartet gedauert hat, damit dies in zukünftige Schätzungen einbezogen werden kann. Dies muss eine tadellose Aufgabe sein - Sie scheinen hier die richtige Einstellung zu haben, aber diese Antwort kann eine Weile dauern, also werde ich die Beobachtung machen. Wenn jemand sagt "Ich habe hier einen Fehler gemacht", können Sie das in "Was hätten Sie besser machen können" umwandeln, aber wenn Sie den Leuten sagen, dass sie zu langsam sind oder etwas falsch gemacht haben, wird das alles nur noch schlimmer.

Mir ist kein Patentrezept für diese Art von Problem bekannt, aber der größte Faktor ist die Kommunikation - die mit einem kleineren Team tatsächlich einfacher ist - und das Verwenden von Feedback, um Ihre kollektiven Fähigkeiten zu verfeinern.

Glenatron
quelle
Danke, das ist auch sehr nützlich. Die geschätzte und tatsächliche Lieferzeit besser im Auge zu behalten, ist etwas, was wir in der Vergangenheit getan haben, aber möglicherweise aufgrund des Arbeitsdrucks nicht ausreichend. Wir werden damit strukturierter beginnen. Außerdem werden wir versuchen, die Kommunikation zwischen Entwicklern und Managern noch weiter zu optimieren, um den Prozess zu vereinfachen und Zeit zu sparen. Wir haben festgestellt, dass es häufig Unterschiede in der Art und Weise gibt, wie Manager und Programmierer kommunizieren, was zu Missverständnissen und damit zu schlampiger Planung führen kann.
John B
1
@ JohnB das ist genau richtig. Wenn es eine Möglichkeit gäbe, eine völlig klare und eindeutige Kommunikation zwischen Entwicklern und Managern zu haben, würden Softwareprojekte immer reibungslos funktionieren. Leider funktionieren Menschen nicht so ...
Glenatron
Wenn Sie noch mehr Informationen dazu wünschen, können Sie einen guten Text über Scrum lesen, da zum Beispiel der genannte Schätzungs- (/ Planungs-) Poker und der Überprüfungsteil Glenatron Teil davon sind.
TheMorph
20

Was ist der Grund für [ihre Schätzung von 2 Tagen dauert 8 Tage], ist dies für Programmierer üblich?

Es ist, wenn:

  • Es ist nicht wirklich klar, was sie tun sollen, also nehmen sie sich mehr Zeit, um es richtig zu machen (und sie sollten es dann sagen, nicht erraten, wie lange es dauern wird)
  • Sie sind mit der anstehenden Aufgabe nicht vertraut (dann sollten sie dies erwähnen und die Forschung in die Schätzung einbeziehen).
  • Die Integration der fertigen Aufgabe in das größere Produkt dauert länger als erwartet (was bedeuten kann, dass die Architektur des Produkts minderwertig ist).
  • Der Entwickler erfindet das Rad gerne neu und stolpert dabei über Probleme, die von anderen gelöst wurden und in einer Bibliothek frei verfügbar sind
  • Änderungen werden vom Product Owner während der Ausführung der Aufgabe vorgenommen. Dies erfordert einen anderen Ansatz und die Wiederholung der bereits geleisteten Arbeit
  • Die Entwickler arbeiten nicht in einer produktiven Umgebung (wenn sie zu Hause sind, werden sie davon ausgehen, dass es zwei Tage dauern würde, aber bei der Arbeit werden sie acht benötigen, um alle Ablenkungen zu kompensieren).

Um ein paar Dinge zu nennen.

Fragen Sie am besten Ihre Entwickler, warum sie der Meinung sind, dass ihre Schätzungen weit davon entfernt sind. :-)

CodeCaster
quelle
1
Vielen Dank für das Posten dieser Antwort. Wir werden diese Liste als Checkliste bereithalten, um sicherzustellen, dass sich in unserem Planungsprozess nur ein Minimum an Unbekannten befindet. Ich denke, es wird auch den Programmierern helfen, diese Liste zu lesen. Ps Ich würde es positiv bewerten, wenn ich könnte, aber als ich neu bin, habe ich noch nicht genug Reputationspunkte :)
John B
1
Sie haben teilweise recht, obwohl ich glaube, dass ein kompetenter Programmierer die für ein Projekt erforderliche Zeit nicht falsch einschätzen kann. Als solches denke ich, sollten Sie immer nach Hofstadters Gesetz planen , auch wenn alle Aspekte dieser Liste beachtet werden.
Neil
1
Unzureichende Kenntnisse der Codebasis können auch zu falschen Schätzungen führen.
TheMorph
6

Sie wären bei weitem nicht der Erste, der versucht, die beste Methode zur Planung der Entwicklungszeit zu finden. Dies liegt zum einen an der Tatsache, dass es schwierig ist, etwas zu quantifizieren, das Sie nicht wirklich sehen können, und zum anderen an dem mythischen Mannmonat , der einen direkten Gegensatz zu der intuitiven Vorstellung darstellt, dass Sie es sollten, wenn Sie zwei Programmierer haben in der Lage sein, sich doppelt so schnell zu entwickeln, als wenn Sie 1 Programmierer hätten.

Wie Sie wahrscheinlich schon bemerkt haben, ist es viel komplizierter. Ein Ansatz zur Schätzung der Entwicklungszeit als Rundung einer Gruppe hochqualifizierter Personen in Bezug auf Softwareentwicklung und Aufforderung zur Schätzung des Zeitaufwands für die Fertigstellung eines Projekts (Erklärung so detailliert wie möglich). Sie nehmen die höchste aller Schätzungen und verdoppeln sie. Ja, Sie haben richtig gelesen. Sie verdoppelndie höchste Schätzung und Sie haben eine einigermaßen genaue Schätzung. Ich weiß, weil ich mit der Zeit meinen Vorgesetzten so genau sagen konnte, wie lange ich brauchte, um etwas zu tun. Ich sammle die Meinungen meiner Programmierkollegen und meiner eigenen und verdopple die höchste Schätzung. Wenn dies als zu hoch eingestuft erscheint, sollten Sie berücksichtigen, dass das Testen neuer Funktionen von entscheidender Bedeutung ist, und anschließend mögliche Fehlerkorrekturen in Betracht ziehen.

Nach meiner persönlichen Erfahrung als Programmierer kann ich Ihnen sagen, dass es hilfreich ist, Projekte in Meilensteine ​​aufzuteilen. Wie lange dauert es, bis Meilenstein 1, dann Meilenstein 1 bis Meilenstein 2, dann Meilenstein 2 bis Meilenstein 3 usw. erreicht ist? Bei einer solchen Aufteilung ist die Antwort in der Regel weitaus genauer als der Versuch, das gesamte Projekt in seiner Gesamtheit abzuschätzen. Merkwürdigerweise ist die Schätzung aller dieser Meilensteine ​​in der Regel größer als die ursprüngliche Schätzung des gesamten Projekts (wenn der Programmierer trotzdem ehrlich zu sich selbst ist), was mich nur zu der Annahme veranlasst, dass das Detail der Schlüssel ist Hier.

Vielleicht fehlt Ihnen das technische Know-how, aber Sie sollten trotzdem versuchen, allgemeiner vorzugehen. Programmierer haben keine Probleme mit Wiederholungen. Es sind die Drehungen und Wendungen, die die ganze Zeit bei der Entwicklung eines Programms in Anspruch nehmen. Je mehr Funktionen Sie einbinden möchten, desto komplizierter wird das Programm. Vorausgesetzt, diese neue Funktionalität hat keinen Einfluss auf zuvor implementierte Codeabschnitte, verläuft die Entwicklung je nach Arbeitsaufwand linear getan werden. Höchstwahrscheinlich beeinflusst eine neue Funktionalität zuvor implementierte Abschnitte in hohem Maße und die Entwicklung umfasst daher nicht nur die Implementierung der neuen Funktionalität, sondern auch die Korrektur des alten Codes, wodurch die Entwicklungszeit exponentiell wird.

Mein Rat an Sie wäre, ohne den Programmierern mitzuteilen, wie sie ihre Arbeit erledigen sollen, zu versuchen, einen Überblick über die Funktionsweise des Programms auf allgemeiner Ebene zu erhalten, und Sie sollten bald in der Lage sein, zu sehen, wie neue Funktionen dieses Verhalten modifizieren und somit zur Verfügung stellen eine vernünftige Schätzung, wie lange es dauern würde, es zu tun. Kombinieren Sie dies mit ihren Schätzungen (doppelt so hoch wie die höchsten), und Sie erhalten eine bessere Vorstellung davon, wie die Entwicklungszeit geschätzt werden kann.

Ich hoffe das hilft!

Neil
quelle
Nachtrag: Programmierer haben nur wenige Probleme , die Wiederholung abzuschätzen. Zumindest habe ich viele Probleme mit der Langeweile durch Wiederholungen (was manchmal zu einem Hasenloch der Automatisierung führt, einer kurzfristigen
Zeitersparnis, die sich
3
@Izkata, wenn es beim Programmieren um das Kopieren und Einfügen geht, wäre ich nicht in diesem Geschäft. Es ist der Mangel an Wiederholung, den ich an meinem Job genieße. :)
Neil
6

Einer der Gründe, warum Schätzungen oft weit davon entfernt sind, ist, dass die Schätzung tatsächlich ziemlich schwierig ist und dass Erfahrung und Wissen über das zu ändernde System erforderlich sind. Meistens ist es hilfreich, große Schritte in kleinere aufzuteilen.

Nun haben Sie viele Möglichkeiten, von denen ich zwei erwähnen werde:

Poker planen

Dies funktioniert sehr gut in kleinen agilen Teams.

Auszug aus Wikipedia:

  • Ein Moderator, der nicht spielt, leitet das Meeting.
  • Der Produktmanager bietet einen kurzen Überblick. Das Team hat die Möglichkeit, Fragen zu stellen und zu diskutieren, um Annahmen und Risiken zu klären. Eine Zusammenfassung der Diskussion wird vom Projektmanager aufgezeichnet.
  • Jede Person legt eine verdeckte Karte aus, die ihre Schätzung darstellt. Die verwendeten Einheiten variieren - es kann sich um Tage, ideale Tage oder Story Points handeln. Während der Diskussion dürfen Zahlen in Bezug auf die Feature-Größe überhaupt nicht erwähnt werden, um eine Verankerung zu vermeiden.
  • Jeder ruft seine Karten gleichzeitig an, indem er sie umdreht.
  • Personen mit hohen und niedrigen Schätzungen erhalten eine Seifenkiste, um ihre Einschätzung zu begründen, und die Diskussion wird fortgesetzt.
  • Wiederholen Sie den Schätzvorgang, bis ein Konsens erreicht ist. Der Entwickler, der wahrscheinlich das Ergebnis besitzt, hat einen großen Anteil an der "Konsensabstimmung", obwohl der Moderator den Konsens aushandeln kann.
  • Eine Eieruhr stellt sicher, dass die Diskussion strukturiert ist. Der Moderator oder der Projektmanager kann jederzeit die Eieruhr umdrehen, und wenn die Diskussion zu Ende ist, muss die Diskussion unterbrochen werden, und es wird eine weitere Pokerrunde gespielt. Die Struktur im Gespräch wird durch die Seifenkisten wieder eingeführt.

Die wichtigsten Punkte sind hier die Klärung, Diskussion, gleichzeitiger Aufruf der Schätzung, damit keine Verzerrung eingeführt wird, und Konsens.

PERT

Es ist oft schwierig, eine genaue Schätzung vorzunehmen. Was einfacher ist, ist eine Wahrscheinlichkeit anzugeben. PERT verwendet 3 Werte für die Schätzung:

  • Optimistischste Zeit bis zum Ende (wenn weniger Probleme auftreten als erwartet)
  • pessimistischste Zeit bis zum Ende (wenn alles schief geht - mit Ausnahme größerer Katastrophen)
  • Höchstwahrscheinliche Zeit bis zum Ende (wenn alles wie erwartet verläuft) <- das schätzen Ihre Entwickler derzeit höchstwahrscheinlich

Wenn Sie diese drei Schätzungen gewichten, erhalten Sie eine zuverlässigere Schätzung.

t_expected = (t_opt + 4 * t_likely + t_pes) / 6

Und / oder Sie können diese drei Werte verwenden, um eine Wahrscheinlichkeitsverteilung zu erstellen, die die Unsicherheit der realen Welt noch stärker widerspiegelt. Betaverteilung und Dreiecksverteilung sind wichtige Optionen. Auf diese Weise können Sie jetzt Statistiken anwenden wie "Wie wahrscheinlich ist es, dass das Projekt zum x.Termin abgeschlossen wird?"

Tatsächlich besteht PERT aus mehr als diesen hier erwähnten Aspekten, die ich der Kürze halber weggelassen habe.

TheMorph
quelle
Ich habe nicht darüber nachgedacht, Statistiken zu verwenden, aber das ist eine großartige Idee!
Neil
2

Es ist eine Tatsache, dass Sie nicht annähernd vernünftige Schätzungen mit einem angemessenen Grad an Genauigkeit abgeben können, wenn Sie nicht die historischen Messdaten beibehalten. Und es hilft auch nichts, wenn man eine andere Firma oder Person fragt, wie lange es dauert. Das Problem ist, dass jedes Unternehmen und jeder Entwickler seine eigene Vorgehensweise hat. Somit hat jedes Unternehmen unterschiedliche Zeiträume, um genau die gleiche Aufgabe zu erledigen. Jeder Entwickler hat unterschiedliche Zeiträume, um genau die gleiche Aufgabe auszuführen.

Ihre beste Vorgehensweise besteht darin, den Überblick über die Zeit zu behalten und irgendwie herauszufinden, wie Sie den Schwierigkeitsgrad für die Aufgabe kategorisieren können. Einige Unternehmen verwenden Codezeilen, andere verwenden Funktionen, andere fühlen sich einfach nur gut an. Außerdem müssen Sie berücksichtigen, ob dies etwas ähnelt, das die Entwickler bereits erstellt haben, oder ob es sich um etwas Neues handelt, wie beispielsweise eine neue Technologie, eine neue Funktion, die das Team noch nie zuvor erstellt hat usw. Zeitsystem, dann steigt die Komplexität im Allgemeinen ziemlich stark an.

Es sei denn, Sie erfassen echte Daten, unabhängig davon, wie oft Ihre Entwickler Ihnen Schätzungen vorlegen, werden sie bei jeder Abfrage nur die Zahlen von hinten abrufen. Ja, das Sammeln von realen Daten ist mühsam und bietet zunächst nicht viele nützliche Informationen, aber im Laufe der Zeit liefert es tatsächlich ziemlich genaue Schätzungen.

Ich möchte auch darauf hinweisen, dass Schätzungen im Allgemeinen nur über das Gesamtbild und nicht für kurzfristige Messungen gut sind. Zum Beispiel schätzt der Entwickler 2 Tage, aber es dauert 8 Tage. Nun, der Entwickler hat nicht berücksichtigt, dass er eine Testumgebung einrichten und einen Simulator entwickeln musste oder dass es eine völlig neue Technologie gab, die er lernen musste oder die einen Fehler verursachte Sie konnten es nicht herausfinden oder die Funktionalität erforderte ein Refactoring des bestehenden Systems. Solche Dinge kann man für kleine Aufgaben nicht immer vorhersagen. Während eines gesamten Projekts können diese zusätzlichen 6 Tage durch andere Aufgaben, die 6 Tage weniger Zeit in Anspruch nehmen, verwaschen werden.

Dunk
quelle
1

Ich war alleiniger Entwickler bei einigen kleinen Projekten und habe einige industrielle Erfahrung in der Arbeit mit einem großen Team. Mir ist aufgefallen, dass die Techniken, die ein großes Unternehmen einsetzt, nicht unbedingt für ein kleines Team funktionieren. An einem Punkt habe ich mehr geplant und dokumentiert als Code geschrieben. Ich schlage vor, dass Sie zuerst versuchen, eine gute Arbeitsweise zu finden, indem Sie verschiedene Techniken (die anderen Antworten bieten großartige Einblicke) und Tools ausprobieren. Dies kostet Sie einige Zeit und Mühe, aber Sie werden später davon profitieren. Einige Werkzeuge / Techniken, die ich als nützlich empfand, waren:

-Pivotal Tracker - Tolles Programm zum Verfolgen von Geschichten und zum Auflösen von Aufgaben. Schnelle Eingabe von Geschichten und automatische Ableitung der Geschwindigkeit. https://www.pivotaltracker.com/ .

-Dokumente für die Dokumentation, da es einfach ist, mehrere Benutzer gleichzeitig bearbeiten und diskutieren zu lassen.

- In einer Firma, für die ich gearbeitet habe, hatten wir immer ein Meeting für jede einzelne Geschichte, die wir initiiert hatten. In diesem Meeting musste ein leitender Programmierer anwesend sein, da er besser beurteilen konnte, wie lange eine Aufgabe dauern würde. Er würde auch besser beurteilen können, was der schwierige Teil einer Aufgabe sein könnte.

Zusammenfassend glaube ich, dass der Schlüssel zur Arbeit in kleinen Teams in einem soliden Planungsregime liegt, das schnell und flüssig ist. Auch Schwierigkeiten mit der Geschichte können frühzeitig erkannt werden, sodass die Planung einer Aufgabe dies berücksichtigt (dies kann dazu führen, dass etwas anderes erstellt wird).

Hoffe das hilft

Edmond Chhung
quelle