Meiner Erfahrung nach ist es so, als würde man Zähne ziehen, wenn man uns Ingenieure dazu bringt, die zu erledigenden Aufgaben genau abzuschätzen und zu bestimmen. Anstatt nur eine Swag-Schätzung von 2-3 Wochen oder 3-6 Monaten anzugeben ... Was ist der einfachste Weg, um Software-Zeitpläne zu definieren, deren Definition nicht so schmerzhaft ist? Zum Beispiel möchte Kunde A eine Funktion bis zum 01.02.2011. Wie können Sie Zeit für die Implementierung dieser Funktion einplanen, da Sie wissen, dass andere Fehlerkorrekturen erforderlich sein können, und zusätzliche Entwicklungszeit in Anspruch nehmen?
software-schedules
Brian
quelle
quelle
Antworten:
Wenn Sie mit vertrauten Tools und einem vertrauten Team ein Projekt starten, das mit anderen Projekten fast identisch ist, und Sie feste schriftliche Anforderungen haben, sollte es möglich sein, eine gute Schätzung vorzunehmen.
Dies sind die Bedingungen, denen Maler, Teppichbauer, Landschaftsgestalter usw. regelmäßig ausgesetzt sind. Aber es passt nicht zu vielen (oder den meisten) Softwareprojekten.
Wir werden oft gebeten, Projekte einzuschätzen, die neue Tools, Technologien, sich ändernde Anforderungen usw. Verwenden. Dies ist mehr eine Extrapolation ins Unbekannte als eine Interpolation über unsere vergangenen Erfahrungen. Es ist daher selbstverständlich, dass die Schätzung schwieriger sein wird.
quelle
Nach meiner persönlichen Erfahrung ist es genau das Gegenteil von dem, was Pemdas gesagt hat : Mit der Übung habe ich nur verstanden, dass es absolut unmöglich ist, abzuschätzen, wie viel Zeit eine Aufgabe benötigt. Zu Beginn meiner Karriere in der Softwareentwicklung gab ich oft Schätzungen wie "45 Tage", "fünf Wochen" usw. an und bemühte mich dann sehr, sie rechtzeitig abzuschließen. Einige Jahre später begann ich, weniger genaue Schätzungen wie "ungefähr einen Monat", "fünf bis sieben Wochen" usw. zu machen. Eigentlich versuche ich entweder, keine Schätzung abzugeben oder den Kunden zu bitten, seine eigene Schätzung abzugeben oder Frist oder ich gebe eine Schätzung so grob wie möglich.
Warum ist es so schwierig, eine Schätzung zu haben? Weil es fast unmöglich ist zu wissen, wie der gesamte Quellcode geschrieben wird, bevor er tatsächlich geschrieben wird, und weil Ihre Arbeit von zufälligen Dingen abhängt, wie sie von anderen Leuten ausgeführt werden, von Ihrer Motivation usw. Im Folgenden finden Sie eine detailliertere Liste der möglichen Gründe:
Es ist nicht leicht zu wissen, was genau erforderlich ist, um ein Produkt zu produzieren, und insbesondere, wie es gemacht wird . Sehr oft habe ich einige Teile einer Anwendung gestartet, als ich nach Tagen der Arbeit begriff, dass mein erster Ansatz falsch war und dass es eine bessere und intelligentere Möglichkeit gibt, Dinge zu tun.
Einige Probleme können auftreten . Wenn Sie beispielsweise auf Ihrem Computer einen ausgefallenen SQL-Server installieren müssen, die Installation fehlschlägt und der Support nicht vorhanden ist, können Sie dieses Problem wochenlang beheben.
Anforderungen sind oft nicht klar genug , aber nachdem Sie sie zu Beginn gelesen haben, denken Sie, dass dies der Fall ist. Manchmal kann man verstehen, dass der Mittelwert 'A' ist, und wenn man mit der Implementierung begonnen hat, merkt man, dass sie möglicherweise 'B' bedeuten.
Kunden mögen es, ihre Anforderungen genau dann zu ändern, wenn Sie das betreffende Teil gerade abgeschlossen haben , und sie verstehen wirklich nicht, warum Sie zwei weitere Wochen und 2000 USD für eine geringfügige Änderung verlangen , weil sie nicht sehen, dass diese geringfügige Änderung erforderlich ist andere Dinge ändern, die es erfordern, andere zu ändern, usw.
Sie können Ihre Motivation nicht einschätzen . Es gibt Tage, an denen Sie stundenlang arbeiten und erfolgreich sein können. In einigen Wochen wechseln Sie nach dem Schreiben von zehn Codezeilen zu Programmers StackExchange und verbringen Stunden damit, Fragen zu lesen und zu beantworten.
Dinge werden wirklich schlimm, wenn Ihre Schätzung von anderen Menschen abhängt . Zum Beispiel musste ich in einem zweimonatigen Projekt darauf warten, dass ein Designer seine Arbeit erledigte, um meine eigene fertigzustellen. Dieser Designer brauchte 3 Monate, bis er ein Stück unbrauchbaren Müll geliefert hatte. Natürlich war das Projekt zu spät.
Ihre Schätzung hängt auch von Ihrem Kunden ab . Ich hatte Kunden, die Wochen damit verbracht haben, ihre E-Mails zu beantworten. Dies kann sich sehr auf Ihren Zeitplan auswirken, wenn Sie auf deren Antwort warten müssen (zum Beispiel, wenn Sie sie bitten, eine Anforderung zu präzisieren).
Was kannst du tun?
Geben Sie einen größeren Zeitplan . Wenn Sie glauben, dass Sie die Arbeit in zwei Wochen erledigen können, sagen Sie, dass Sie sie in einem Monat liefern werden.
Sei klar . Wenn Sie sich auf einen Designer, einen anderen Entwickler usw. verlassen, sagen Sie es. Anstatt zu sagen "Ich werde das Produkt in drei Monaten liefern", sagen Sie "Ich werde das Produkt in zwei Monaten liefern, nachdem der Designer mir PSD-Dateien gegeben hat."
Erklären Sie, dass das Projekt kaum rechtzeitig geliefert werden kann, wenn sich die Anforderungen täglich ändern.
Schneiden Sie Ihren Zeitplan . Es ist einfacher, Teile eines großen Projekts rechtzeitig zu liefern.
Geben Sie niemals eine Schätzung ab, wenn Sie ein Produkt verwenden, das Sie nicht genau kennen, oder wenn Sie an einem Quellcode einer anderen Person arbeiten: Sie können niemals vorhersagen, wie beschissen der Quellcode sein kann und wie viel Zeit Sie verbringen werden Verstehen Sie es und kopieren Sie es in The Daily WTF.
quelle
Eine sehr ähnliche Frage lautet: "Wie lange wird es dauern, bis dieses Kreuzworträtsel gelöst ist?"
Sie können das erst beantworten, wenn Sie sich die folgenden Dinge angesehen haben:
Da ein Projekt in der Regel mehrere neue Elemente enthält (andernfalls handelt es sich nicht um ein Projekt), können Sie nicht sagen, wie lange die Lösung dauert, bis Sie sie sorgfältig überprüft haben. Vielleicht lösen Sie sogar mehr oder weniger, und dann sind Sie sich immer noch nicht sicher, ob es nicht die ein oder andere Überraschung gibt, an die Sie nicht gedacht haben.
Es besteht auch ein starker Druck, dies so billig wie möglich, also so schnell wie möglich, zu tun, und die Schuld für eine zu niedrige Schätzung liegt nicht beim Projektmanager, der Druck ausübt, sondern beim Entwickler, der die Schätzung abgibt. Es dauert nicht viele Iterationen, bis der Entwickler dies feststellt und lernt, SEHR müde zu sein, absolute Zahlen preiszugeben.
quelle
Natürlich können Sie abschätzen, wie viel Zeit + -2 Minuten von zu Hause zur Arbeit benötigt werden. Sie wissen, wie man ein Auto fährt, Sie können den Verkehr und einige andere externe Faktoren bewerten.
Sagen Sie mir, wie lange Sie brauchen, um von London nach Barcelona zu fahren. Natürlich ohne fortgeschrittene GPS-Planungstools. Mit der guten alten Methode, wie wir sie immer noch in der Software-Schätzung anwenden. Empirische Schätzungen und Vorhersagen .
In der Software ist es schlimmer:
Aus diesem Grund können Sie Ihrem Kunden nicht genau sagen, was Sie für den 01.02.2011 versenden können, und den 01.03.2011 vergessen.
Um all diese Probleme anzugehen, empfehle ich Ihnen fortgeschrittene Schätztechniken wie Planning Poker (Haftungsausschluss: Dies ist eine meiner Websites) und Iterative Development with Velocity- Berechnung.
quelle
Softwareentwicklung ist per definitionem ein Akt der Entdeckung und Erfindung. Es muss sich immer um etwas Unbekanntes handeln.
Alles, was mit der Softwareentwicklung zu tun hat, ist nur bekannt, wenn die Software vollständig ist.
Das einzige Mal, dass es keine unbekannte Technologie oder Geschäftsfunktion gibt, ist eine vollständige, gepackte Lösung, die zum Herunterladen bereitsteht.
Der Grund, warum wir neue Software schreiben, ist, dass wir eine neue Funktion oder eine neue Technologie oder beides haben. Neu bedeutet neu - unbekannt - unvorhersehbar.
Da die Softwareentwicklung mit Neuheiten verbunden sein muss, kann der Entwicklungsaufwand nicht vorhergesagt werden.
quelle
Ehrlich gesagt denke ich, dass es nur Übung braucht. Wenn Sie irgendwann genug Code schreiben, sollten Sie "ziemlich" genau sein. Mein erster Chef glaubte, dass diese Fertigkeit wichtig genug war, dass er mich aufforderte, dies bei jedem Feature / Projekt, das ich implementierte, informell zu üben. Nach jedem Projekt überprüften wir die Schätzungen und versuchten herauszufinden, wo ich falsch liege. Irgendwann kriegt man den Dreh raus.
quelle
Es ist niemals einfach. Du versuchst nur besser zu werden.
Ein Vorteil des Aufteilens Ihres zu liefernden Codes in kleinere Teile besteht darin, dass die Kunden verstehen, was zu erwarten ist und wann es zu erwarten ist. Jetzt haben Sie eine Basislinie, die Sie als Referenz verwenden können.
Wenn sie eine genaue Definition eines Features haben, das sie zu einem definierten Zeitpunkt benötigen, müssen sie wissen, dass dieser Anforderung zusätzliche Ressourcen zugewiesen werden müssen. Sie gehen ein Risiko in Bezug auf die Schwere der auftretenden Fehler ein und wie lange sie andauern können, ohne dass sie behoben werden. Wenn etwas Wichtiges auftaucht, kehren Sie zum Kunden zurück und zwingen ihn zu einer Entscheidung. Behebe ich den Fehler oder stelle ich die Frist für die neue Funktion fest? Geben Sie ihnen genügend Informationen, um eine fundierte Entscheidung zu treffen.
Hoffentlich haben Sie genug Erfahrung in der Zusammenarbeit und haben sich genug etabliert, um vertrauenswürdig zu sein. Sie können nicht erwarten, dass sie den Entwicklungsprozess vollständig verstehen, aber Sie können ihnen das Gefühl geben, dass Sie sich ehrlich anstrengen und ihren Wissensmangel nicht ausnutzen.
quelle
Weil wir den Zeitplan zu früh machen. Siehe Construx des Artikels auf eine vorläufige grobe man tut, dann besser ein später. Auch wenn Sie nicht nachvollziehen können, wie Sie es bei früheren Schätzungen getan haben, ist es schwierig, besser zu werden. FogBugz macht das [ein Kunde von ihrem freien, kein anderer Interessenkonflikt].
quelle
Ich habe viel aus diesem Buch gelernt:
Software-Schätzung: Entmystifizierung der schwarzen Kunst
Kurz gesagt, um bessere Schätzergebnisse zu erhalten, machen wir Folgendes:
Nachdem die Arbeit beendet ist und unsere Einschätzung falsch war, versuchen wir, Gründe dafür zu finden. Und dieses Wissen fließen wir in den nächsten Schätzprozess ein. Bisher ist dies das beste Verfahren, mit dem ich größere Aufgaben geschätzt habe. Wenn ich Aufgabe sage, meine ich Jobs, die von ungefähr 50-500 Stunden dauern.
quelle
Hinweis: Dies gilt wirklich nur für Projekte, bei denen Sie eine stundenweise Abrechnung gegen eine feste Pauschale vornehmen.
Normalerweise versuche ich, meinen Zeitplan so zu planen, dass er im Wesentlichen aus einer Reihe von SCRUM-Sprints besteht (unabhängig davon, ob ich SCRUM verwende oder nicht). Wenn ich den Zeitplan erstelle, bestimme ich die Länge jedes Sprints und die Funktionen für das Projekt. In der Regel müssen einige Funktionen zuerst ausgeführt werden, daher versuche ich, eine bestmögliche Schätzung (nicht zu verwechseln mit optimistisch) für diese Funktionen anzugeben, und für alle Funktionen, die gegen Ende des Projekts verfügbar sein werden, werden allgemeine Schätzungen erstellt. Nachdem ich die Features Sprints zugeordnet habe, versuche ich, 1 bis 2 Sprints am hinteren Ende des Projekts hinzuzufügen, um Features zu berücksichtigen, die nach rechts verschoben werden, und um Features zu berücksichtigen, die in der ursprünglichen Anforderungserfassung übersehen wurden.
Der Schlüssel dazu ist, dass ich das alles für den Kunden von vornherein transparent mache, damit er versteht, warum die letzten beiden Sprints leer oder dünn besetzt sind. Zumindest bis zu diesem Punkt hat es den Kunden gefallen, mit denen ich gearbeitet habe, da sie wissen, dass der Zeitplan / die Finanzdaten einen gewissen Puffer aufweisen, da die meisten von ihnen wissen, dass die SW-Schätzungen tendenziell weniger als konkret sind. Sie sind sich auch bewusst, dass wenn wir nicht den letzten Sprint oder so brauchen, dies Stunden sind, die wir nicht in Rechnung stellen. Mit der Transparenz, wie der Zeitplan erstellt wird, und dem regelmäßigen Feedback, wie der Fortschritt während der Ausführung des Projekts verläuft, war jeder Kunde, mit dem ich dies getan habe, äußerst zufrieden.
quelle
Neben all den genannten Dingen sehe ich diese beiden als eines der größten Probleme. Zuerst schätzen Sie das Enddatum, basierend darauf, dass jeder Entwickler an 5 Tagen in der Woche 8 Stunden am Tag zur Verfügung steht. Dies ist falsch und garantiert praktisch zu 100%, dass das Enddatum für ein nicht triviales Projekt nicht eingehalten wird. Die Mitarbeiter nehmen sich frei, nehmen an firmeninternen (oder nicht projektbezogenen) Besprechungen teil, streiten sich mit der Personalabteilung um Krankenversicherungsansprüche, machen Pausen usw. Nehmen Sie niemals eine Verfügbarkeit von mehr als 6 Stunden pro Entwickler und Tag an.
Die nächsten Entwickler vergessen notorisch, alle nicht entwicklungsbezogenen Aufgaben wie Besprechungen und E-Mails zu schätzen, die sich auf das Projekt, die Bereitstellung, den QS-Support, den UAT-Support, das Schreiben von Komponententests, die Recherche, die Dokumentation usw. beziehen Schätzungen wurden viel besser.
quelle
Wenn es um die Zeitschätzung für Aufgaben geht, die länger als ein paar Stunden dauern können, versuche ich nach besten Kräften, diese Regeln anzuwenden:
Es gibt wahrscheinlich mehr Regeln als das, aber ich habe tatsächlich kein Poster mit diesen Regeln an meiner Wand. Ich habe sie jetzt nur formuliert, aber sie stammen aus meiner Erfahrung (daher funktioniert es möglicherweise nicht für Sie).
Die einzige verlässliche Methode, um die Softwareentwicklung zu planen, die mir einfällt (ich habe sie jedoch noch nicht ausprobiert), ist die evidenzbasierte Planung. Dabei handelt es sich im Wesentlichen um die Monte-Carlo-Methode, mit der die Wahrscheinlichkeit eines Versanddatums anhand historischer Aufzeichnungen über von Ihnen ausgeführte Aufgaben ermittelt wird. schon mal geschafft. Es fühlt sich gut an, weil keine anderen Metriken als die geschätzte und die tatsächliche Zeit verwendet werden. Es erfordert jedoch viel Erfahrung, große Aufgaben zuvor in kleinere aufzuteilen, und Sie müssen über einen großen Satz historischer Daten verfügen, damit sie präzise genug funktionieren.
quelle
Es gibt "bekannte Unbekannte" und "unbekannte Unbekannte". :-)
Schätzungen werden oft zu Fristen.
Anforderungen ändern sich (oft rational) und der Programmierer kann kein Veto einlegen.
Programmierer haben möglicherweise keine Kontrolle über Faktoren wie
quelle