Agile Funktionsschätzung
Die verschiedenen Methoden verwenden unterschiedliche Terminologie, um auf Features zu verweisen. Es liegt am Team, zu entscheiden, welche Methodik oder Terminologie verwendet werden soll.
Idealerweise sollte eine Funktion die folgenden Kriterien erfüllen
- Es sollte bieten Geschäftswert.
- Es sollte sein schätzbar – Es muss ausreichend definiert sein, damit das Entwicklungsteam eine Einschätzung des Arbeitsaufwands für die Implementierung abgeben kann.
- Es sollte sein klein genug um in eine Iteration zu passen – wenn es also zu groß ist, sollte es weiter zerlegt werden.
- Es sollte sein prüfbar – Sie sollten verstehen, welchen automatisierten oder manuellen Test eine Funktion bestehen muss, um für den Kunden akzeptabel zu sein.
Die verschiedenen Methoden verwenden unterschiedliche Terminologie, um auf Features zu verweisen. Es liegt am Team, zu entscheiden, welche Methodik oder Terminologie verwendet werden soll. Extreme Programming (XP) verwendet die Begriffe „User Stories“ oder „Stories“, um Funktionen darzustellen; Scrum verwendet „Product Backlog“, um eine Funktionsliste zu beschreiben; Feature-gesteuerte Entwicklung verwendet „Feature“; und DSDM verwendet „Anforderung“. Ebenso gibt es verschiedene vereinfachte Versionen des einheitlichen Prozesses oder agilen UP, die „Anforderung“ und/oder „Anwendungsfall“ verwenden, um inkrementell lieferbare Funktionalität zu definieren. Letztendlich ist das Ziel dasselbe: regelmäßig in kleinen Schritten und eher früher als später einen Geschäftswert zu liefern.
Unterschiede in der Methodik
Scrum ruft ein Feature auf a Rückstandselement, das tendenziell grober gegliedert ist und auch Nicht-Feature-Elemente wie „Produktionshardware einrichten“ oder „XYZ-Optionen recherchieren“ enthalten kann.
XP ruft ein Feature auf a Story, was sich als besonders hilfreicher Ansatz zur Definition von Funktionalität eignet.
DSDM ruft ein Feature auf a Anforderung, die auch mehr als nur Systemfunktionen umfassen kann.
Agile UP Praktiker verwenden Anforderungen und Anwendungsfälle um Merkmale zu definieren.
Feature Breakdown Structure (FBS)
Bei der Detailplanung agile Entwicklung bevorzugt einen Feature Breakdown Structure (FBS)-Ansatz anstelle der Work Breakdown Structure (WBS), die in Wasserfall-Entwicklungsansätzen verwendet wird. Feature Breakdown Structures sind aus mehreren Gründen vorteilhaft:
- Sie ermöglichen eine für beide verständliche Kommunikation zwischen dem Kunden und dem Entwicklungsteam.
- Sie ermöglichen es dem Kunden, die Arbeit des Teams basierend auf dem Geschäftswert zu priorisieren.
- Sie ermöglichen die Verfolgung der Arbeit anhand des tatsächlich erzielten Geschäftswerts.
Es ist akzeptabel, mit großen Features zu beginnen und diese dann im Laufe der Zeit in kleinere Features aufzuteilen. Dies ermöglicht es dem Kunden, nicht zu sehr ins Detail zu gehen, bis dieses Detail benötigt wird, um das eigentliche Design und die Lieferung zu erleichtern.
Erstellen einer ersten Funktionsliste
Vorher release Planung und Iterationsplanungmuss das Team schnell eine Liste mit möglichst vielen möglichen Funktionen für das System erstellen. Normalerweise ist eine einzelne Person für das Sammeln der Funktionen verantwortlich (z. B. ein Produktmanager, ein Kunde, ein Programmmanager, ein Unternehmensanalyst oder ein anderer Kundenvertreter), aber Funktionsanforderungen können aus vielen Quellen stammen. Benutzer, Kunden, Vertrieb, Marketing, RFPs, Mitglieder des Entwicklungsteams, Management, Wettbewerber und gesetzliche Vorschriften können alle Quellen für Funktionen sein. Die zentrale Funktionsliste des Teams sollte einige Kontrollen enthalten, um doppelte Einträge, unmögliche Funktionen und allzu vage Anforderungen zu vermeiden. Das Team sollte jedoch ermutigt werden, neue Funktionen einzugeben, sobald sie identifiziert werden, damit sie in den Priorisierungs- und Planungsprozess einbezogen werden können.
Eine anfängliche Feature-Liste kann eine grobe Skizze, eine Obermenge, sein, die als Eingabe für die Planung verwendet wird release und erste Iteration. Es repräsentiert das aktuelle Potenzial dessen, was das System möglicherweise über mehrere Jahre hinweg werden könnte releases. Sie müssen nicht warten, bis alle Funktionen definiert sind, bevor Sie beginnen Bereitstellung von SoftwareUnd Sie müssen sich nicht sinnlos an die ursprüngliche Liste, die ursprünglichen Beschreibung des Produktsen oder die ursprünglichen Prioritäten halten. Einer der Hauptpunkte der agilen Entwicklung besteht darin, dass sich diese Liste (wie alles andere auch) Iteration für Iteration weiterentwickelt.
Nehmen wir an, dass eine grobe Funktionsliste fertig ist, a release Plan und Iterationsplan werden erstellt und die erste Iteration abgeschlossen, bevor einige kritische Merkmale identifiziert werden. Diese Funktionen werden einfach in die Entwicklung integriert release Plan und eine spätere Iteration erstellen und so schnell wie möglich liefern lassen. Aber in der Zwischenzeit wird keine Zeit verschwendet. Das Team beginnt so schnell wie möglich mit der Wertschöpfung und schafft die Infrastruktur, damit sich das Projekt im Laufe der Zeit an neue Prioritäten, Informationen und Geschäftsdynamiken anpassen kann.
Funktionsliste
Bei der Erstellung einer Feature-Liste werden Features zunächst in einem kurzen Absatz beschrieben, typischerweise 2-4 Sätze. Diese Beschreibung des Produkts stellt eine allgemeine Zusammenfassung der Funktion dar, einen Platzhalter für das vorläufige Verständnis und eine Grundlage für die zukünftige Kommunikation. Es ist eher wie eine Überschrift für einen Artikel, der später geschrieben wird. Das Ziel besteht darin, gerade genug Zeit mit der Beschreibung des Produkts des Features zu verbringen, um ein angemessenes Verständnis der relativen Größe, Komplexität und Priorität im Vergleich zu allen anderen Features zu erhalten. Im Laufe werden noch ein paar Details bekannt gegeben Iterationsplanung. Das genaue, konkrete Verständnis der Funktion kann jedoch während der Iteration entstehen, wenn Kunden und Entwickler ausreichend darüber diskutieren, um sie zu implementieren oder (in einigen Methoden) automatisierte Akzeptanztests zu erstellen, die sie deterministisch spezifizieren.
Hilfreiche Referenzen
User Stories
Angewandte User Stories: Für agile Softwareentwicklung von Mike Cohn
Webinar
So führen Sie PI-Planung durch Digital.ai Agility
Organisationsfunktionen
Die Verwaltung einer einzigen langen Funktionsliste kann schwierig sein. Es ist sehr hilfreich, Funktionen durch die Angabe von Kategorien, Funktionsgruppierungen auf höherer Ebene, Geschäftswert oder -priorität und Risiko zu organisieren. Das Filtern und Sortieren nach diesen verschiedenen Attributen kann dabei helfen, eine sehr große Funktionsliste in überschaubare Abschnitte zu unterteilen.
Die gesamte Liste der Funktionen sollte in einer einzigen fortlaufenden Reihenfolge geordnet werden, um dem Projektteam die Möglichkeit zu geben, dass jeder leicht erkennen kann, welche Funktionen am wertvollsten sind. Wenn ein Projekt mit 100 Features auf der Liste beginnt, ist es nicht ungewöhnlich, dass 50 dieser Features in die Kategorie „hohe“ Priorität fallen. Eine einzelne sequentielle Rangfolge der Funktionen hilft dabei, diejenigen zu identifizieren, die „die höchsten der höchsten“ sind und daher zuerst abgeschlossen werden sollten, um den gelieferten Wert zu maximieren.
Risikoabrechnung
Das mit bestimmten Funktionen verbundene Risiko kann zusätzlich berücksichtigt werden. Bei einigen Funktionen handelt es sich um Designs, Architekturen, Frameworks oder Algorithmen, die für das Team neu oder aus anderen Gründen riskant sind. Auch wenn solche Funktionen nicht den höchsten Geschäftswert bieten, ist es oft sinnvoll, ihre Priorität so weit zu erhöhen, dass sie in frühen Iterationen in Angriff genommen werden. Wenn eine risikoreiche Funktion zu Beginn des Projekts angesprochen wird und sich aus irgendeinem Grund als nicht umsetzbar erweist, hat das Team immer noch Zeit, zu reagieren und es zu umgehen. Dadurch wird das Gesamtrisiko für das Projekt minimiert. Es obliegt dem Entwicklungsteam, eng mit dem Kunden zusammenzuarbeiten, um diese Art von Problemen, Risiken und Abhängigkeiten zu identifizieren. Letztlich ist es Sache des Kunden, Funktionen zu priorisieren, aber dieser kritische Prozess sollte nicht im luftleeren Raum stattfinden. Die besten Teams arbeiten während der gesamten Projektlaufzeit zusammen, um sowohl Mehrwert zu schaffen als auch Risiken zu reduzieren.
Schätzen von Funktionen
Nach der Identifizierung von Features arbeitet der Kunde oft mit wichtigen Entwicklungsbeteiligten zusammen, um Feature-Schätzungen zu definieren. Bei Merkmalsschätzungen handelt es sich um vorläufige Schätzungen auf hoher Ebene, die zum Fahren verwendet werden release Planung und Iterationsplanung. Zu den an der Schätzung beteiligten Stakeholdern können Architekten, technische Leiter, Entwickler, Tester, Autoren und Manager gehören. Viele Organisationen haben Prozesse eingerichtet, bei denen Gruppen zusammenarbeiten, um schnell erste Schätzungen abzugeben. Dieser Schritt kann hilfreich sein, um zunächst zu bestimmen, ob die Funktion weiter aufgeschlüsselt werden sollte.
Bei der anfänglichen Schätzung von Merkmalen besteht das Ziel darin, schnell zu einer vernünftigen Schätzung auf hoher Ebene zu gelangen. Anstatt sich darauf zu konzentrieren, ob ein Feature genau 17.5 Ideenstunden erfordert (oder Gummibärchen, NUTs oder welche Einheit auch immer verwendet wird; siehe unten), besteht das Ziel darin, in einem Bruchteil der Zeit einigermaßen nahe zu kommen. Wenn es zwei Minuten dauert, um zu vereinbaren, dass die Implementierung der Funktion zwei bis drei ideale Tage in Anspruch nehmen wird, im Vergleich zu 30 Minuten, um eine genaue Schätzung von 17.5 Ideenstunden zu erstellen, ist der erstere Ansatz vorzuziehen. Um eine einzige Schätzung zu erstellen, wenn die Meinungen in der Gruppe unterschiedlich sind, können Teams entweder einen Durchschnitt nehmen, eine vernünftige Annäherung entwickeln, immer das Best-Case-Szenario verwenden oder möglicherweise eine Berechnung mit Best-Case-, Worst-Case- und erwarteter Schätzung verwenden, wenn die Komplexität höher ist geeignet. In jedem Fall werden die Diskussionen über unterschiedliche Schätzungen oft zu nützlichen Erkenntnissen führen.
Dieser Prozess der Definition und Schätzung von Funktionen kann zunächst schwierig erscheinen, und wenn Teams ihn zum ersten Mal implementieren, benötigen sie möglicherweise mehrere Besprechungen, um sich mit einem Prozess vertraut zu machen, der für sie gut funktioniert. Mit der Zeit wird es einfacher, Features in Arbeitseinheiten zu unterteilen, die innerhalb einer einzigen Iteration bereitgestellt werden können. Die Teams werden sehr gut darin, was sie üben, und die agile Entwicklung ermöglicht es den Teams, Schätzungen jeden Tag zu üben release und Iteration.
Schätzeinheiten
Schätzungen sind naturgemäß ungenau, und Entwickler hatten in der Vergangenheit Schwierigkeiten, brauchbare Schätzungen über die gesamte für die Erledigung einer Entwicklungsaufgabe erforderliche Zeit zu erstellen. Schätzungen der tatsächlichen Programmierzeit sind häufig ungenau (insbesondere, wenn sie nicht genau mit den tatsächlichen Zahlen verglichen werden). Noch schwieriger ist es jedoch, die Zeit zu bestimmen, in der man nicht programmieren kann. Was sagen Sie, wenn Sie jemand fragt, wie lange es dauert, durch die Stadt zu fahren? Sie verwenden ein relatives Maß. „Eine Stunde außerhalb der Hauptverkehrszeit, bei gutem Wetter, wenn keine Bauarbeiten stattfinden, sonst vielleicht 2 Stunden“ usw. Diese externen Faktoren sind nicht kontrollierbar und schwer vorherzusagen. Neben der Entwicklung von Code verbringen Programmierer Zeit mit Tests, dem Schreiben von Dokumentationen, dem Entwerfen, der Teilnahme an Besprechungen und Überprüfungen, dem Verfassen von E-Mails usw. Im Vergleich zur Programmierarbeit ist die Nicht-Programmierarbeit schwer vorherzusagen oder zu kontrollieren. Sie kann je nach Branche, Organisation, Jahreszeit und wechselnden externen Belastungen auf die Organisation variieren.
Einige Teams bitten Programmierer, jede Nicht-Programmieraktivität in ihre Schätzungen einzubeziehen. Aber wie gesagt, das ist nicht einfach. Für ein bestimmtes agiles Projekt kann das Team, lange bevor es eine genaue Messung der Zeit hat, die es mit nicht-programmierenden Dingen verbringt, den relativen Arbeitsaufwand kennen, der für die Erledigung verschiedener Funktionen erforderlich ist, und entsprechend planen. Aus diesem Grund ist es für agile Teams typischer, ihre Schätzungen auf das zu konzentrieren, was am einfachsten geschätzt und gemessen werden kann: die tatsächliche Programmierung. Sie konzentrieren sich darauf, wie viel Arbeit jedes Feature und jede technische Aufgabe im Vergleich zu anderen Features und technischen Aufgaben erfordern wird. Sie machen deutlich, wie viel Zeit diese nicht-programmierenden Dinge in Anspruch nehmen, wenn sich nach einigen Iterationen die tatsächliche Geschwindigkeit ergibt. Es gibt zwei Hauptschätzeinheiten, die agile Teams verwenden, um den Fokus auf diese Weise auf die Programmierung zu konzentrieren:
- Arbeitseinheiten
- Idealer Zeitpunkt
Arbeitseinheiten
Eine Arbeitseinheit ist ein relatives Maß, das hoffentlich nicht mit der tatsächlichen Zeit verwechselt werden kann. Einige dieser Einheiten:
- Punkte
- Gummibärchen
- Fuß-Pfund
- NUTs (Nebulöse Zeiteinheiten)
Diese stellen den relativen Arbeitsaufwand dar, der für die Implementierung einer Funktion (oder Aufgabe) im Vergleich zu anderen Funktionen (oder Aufgaben) erforderlich ist. Erst wenn das Team eine konstante Geschwindigkeit erreicht hat, normalerweise über einige Iterationen hinweg, kann es damit beginnen, diese Arbeitseinheiten auf tatsächliche Zeiteinheiten abzubilden. Das ist genau der Punkt der Geschwindigkeit: Sie beschreibt, wie viel Arbeit das Team pro tatsächlicher Zeiteinheit leisten kann.
Sobald sich das Team oder die Organisation auf eine Schätzungseinheit geeinigt hat, sollte es sich darauf einigen, Anstrengungen zu unternehmen, um diese konsequent umzusetzen und sich an die ursprüngliche Definition zu halten. Besonders in den frühen Iterationen des Projekts sollte jeder dem Drang widerstehen, zu versuchen, diese Einheiten mit beliebiger Präzision auf Zeiteinheiten abzubilden.
Idealer Zeitpunkt
Wie bei den Arbeitseinheiten schließt die ideale Zeit die Nicht-Programmierzeit aus. Wenn ein Team die ideale Zeit für die Schätzung verwendet, bezieht es sich explizit nur auf die Zeit, die der Programmierer benötigt, um eine Funktion oder Aufgabe zu erledigen, im Vergleich zu anderen Funktionen oder Aufgaben. Auch hier akkumuliert sich während der ersten paar Iterationen der Schätzverlauf, es entsteht eine reale Geschwindigkeit und die ideale Zeit kann auf die reale, verstrichene Zeit abgebildet werden.
Viele Teams, die die ideale Zeit nutzen, haben festgestellt, dass ihr letztendlicher Aufwand die anfänglichen Schätzungen des Programmierers um das Ein- bis Zweifache übersteigt und dass sich dieser Wert über einige Iterationen hinweg innerhalb eines akzeptablen Bereichs stabilisiert. Von Aufgabe zu Aufgabe variiert das Verhältnis, aber über die gesamte Iteration hinweg haben sich die von den Teams entwickelten Verhältnisse als ziemlich konsistent erwiesen. Für ein bestimmtes Team kann ein bekanntes historisches Verhältnis von Idealzeit zu Echtzeit bei der Planung besonders wertvoll sein releaseS. Ein Team kann sich schnell die erforderliche Funktionalität ansehen und eine grobe Schätzung von 200 idealen Tagen abgeben. Wenn das historische Ideal-zu-Real-Verhältnis des Teams etwa 2.5 beträgt, ist das Team möglicherweise recht zuversichtlich, eine Schätzung von 500 Projekttagen abzugeben. In Szenarios mit festen Geboten kann diese Art der Schätzung zuverlässig sein.
Relative Schätzung
Viele agile Teams verwenden die Praxis der relativen Schätzung für Features. Anstatt Merkmale über ein Spektrum von Längeneinheiten zu schätzen, wählen sie einige (drei bis fünf) relative Schätzkategorien oder Buckets aus und schätzen alle Merkmale anhand dieser Kategorien.
Feature- vs. Aufgabenplanung
Während der Schwerpunkt in dieser ersten Planungsphase auf der Geschwindigkeit und der relativen Arbeit pro Feature liegt, müssen die Features irgendwann in ihre jeweiligen Aufgaben heruntergebrochen und genauer geschätzt werden. Dies geschieht während release Planung und Iterationsplanung. Im Allgemeinen dienen Merkmalsschätzungen und Aufgabenschätzungen unterschiedlichen Zwecken:
- Feature-Schätzungen helfen dabei, die Planung voranzutreiben releases und Iterationen.
- Aufgabenschätzungen tragen dazu bei, die Ressourcenbelastung innerhalb einer Iteration zu steigern.
Da sie unterschiedlichen Zwecken dienen, muss die Schätzung eines Features nicht genau mit der Summe seiner Aufgabenschätzungen übereinstimmen. Über einen Bereich von Merkmalen sollte jedoch zumindest eine grobe Korrelation zwischen Merkmalsschätzungen und der Summe der Aufgabenschätzungen für die Merkmale bestehen.
FAQ
Wie groß ist ein Feature?
Dies kann je nach Entwicklungsarbeit Ihres Teams stark variieren. Als allgemeine Faustregel gilt, dass ein Feature klein genug sein sollte, um innerhalb einer Iteration abgeschlossen zu werden, und groß genug, um eine Planung zu rechtfertigen. Sie möchten beispielsweise nicht nur einstündige Features für ein zehnköpfiges Team einplanen, das an einem einmonatigen Sprint arbeitet. Das sind viel zu viele Elemente, um sie zu planen und zu verfolgen. Wenn bestimmte Funktionsänderungen so klein sind, ist es oft am besten, diese kleineren Änderungen aus Planungsgründen in einem größeren Element zusammenzufassen. Machen Sie im Rahmen dieser Funktion jede Stunde Aufwand zu einer Aufgabe.
Gibt es Funktionen zur Fehlerbehebung?
Sie können sein. Scrum lehrt beispielsweise, dass alle Aufgaben, die das Team erledigen muss, auf der Backlog-Liste stehen sollten. Zu den gängigen Methoden zur Fehlerbehandlung gehören 1) das Erstellen eines Funktionselements für jeden Fehler, 2) das Erstellen eines Funktionselements mit der Bezeichnung „Fehler beheben“ innerhalb jeder Iteration und die detaillierte Beschreibung des Produkts der Liste oder Arten der zu behebenden Fehler oder 3) die getrennte Behandlung von Fehlern Zeiterfassung gegen sie. Die Anzahl und Größe der Fehler, auf die Ihr Team voraussichtlich stoßen wird, sollte ein wichtiger Faktor bei der Entscheidung für die von Ihnen gewählte Methode sein.
Warum Funktionen schätzen?
Feature-Schätzungen helfen dabei, das Ranking und die Planung voranzutreiben release Planung und Iterationsplanung. Um zu wissen, wie viel Arbeit innerhalb eines bestimmten Zeitraums eingeplant werden muss, müssen Sie den Umfang der einzelnen Arbeiten einschätzen. Siehe auch agile Geschwindigkeit. Wenn zwei Features den gleichen geschäftlichen Wert haben, eines jedoch halb so groß ist wie das andere, ist das Team effizienter, wenn es an dem ersten Feature arbeitet, daher sollte es höher eingestuft werden als das zweite.
Sollten wir Funktionsschätzungen aktualisieren, wenn die Aufgabenschätzungen nicht stimmen?
Nein, die Funktion schätzt die Fahrplanung. Aufgabenschätzungen beeinflussen die Ressourcenzuteilung. Zwischen den Werten sollte zwar eine Korrelation bestehen, sie müssen jedoch nicht genau übereinstimmen.