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:
- Was ist der Grund dafür, ist dies für Programmierer üblich?
- 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?
Antworten:
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.
quelle
Es ist, wenn:
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. :-)
quelle
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!
quelle
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:
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:
Wenn Sie diese drei Schätzungen gewichten, erhalten Sie eine zuverlässigere Schätzung.
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.
quelle
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.
quelle
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
quelle