Agil bleiben mit der Null-Fehler- / Fehler-Richtlinie

18

In unserem Projekt arbeiten wir nach einer Null-Fehler-Methode. Die Grundidee ist, dass Fehler immer eine höhere Priorität haben als Funktionen. Wenn Sie an einer Story arbeiten und diese einen Fehler aufweist, muss dieser behoben werden, damit die Story akzeptiert wird. Wenn während des Sprints für eine ältere Story ein Fehler gefunden wird, müssen wir ihn als Nächstes in unseren Rückstand aufnehmen und beheben - oberste Priorität.

Der Grund, warum ich Entschlossenheit sage, ist, dass wir den Fehler nicht immer beheben. Irgendwann deklarieren wir es einfach als "nicht behebbar", da es nicht so wichtig ist. Alles in allem klingt es großartig. Wir versenden qualitativ hochwertige Produkte und haben keinen "Buckel" in Form eines riesigen Bug-Backlogs.

Aber ich bin nicht sicher, ob dieser Ansatz richtig ist. Ich stimme eher zu, dass wir immer so schnell wie möglich schwerwiegende Fehler beheben und nicht interessante Fehler beseitigen müssen. Aber was ist mit Fehlern, die wichtig, aber nicht so wichtig sind wie neue Funktionen? Ich denke eher, dass sie mit einer angemessenen Priorität im Backlog abgelegt werden sollten.

Ich gebe ein Beispiel, damit es klarer wird - in meinem Projekt arbeiten wir mit einer in flex geschriebenen Benutzeroberfläche. Wir haben einen Assistentenbildschirm, der für jede Bildschirmauflösung in der gleichen Größe geöffnet wird. Es stellt sich heraus, dass beim Erweitern des Assistentenfensters eine der Seiten nicht gut aussieht (es gibt eine vertikale Bildlaufleiste, die nicht ausgeblendet wird, obwohl der Assistent jetzt alles darstellen kann und die Bildlaufleiste nicht benötigt). Ich finde diesen Bug hässlich. Ich bin sicher, es muss behoben werden. Aber wir haben einen engen Zeitplan und wir haben eine Menge Features, von denen wir befürchten, dass sie den Schnitt nicht schaffen und in die Veröffentlichung einfließen. Ich habe das Gefühl, dass wir mit einem solchen Fehler leben können. Es muss repariert werden, hat aber eine niedrigere Priorität als andere Funktionen (falls wir es nicht fertigstellen können, haben wir zumindest wichtigere Funktionen nicht ausgelassen). Aber,

Ich würde gerne Meinungen darüber hören, wie man mit Fehlern umgeht, die ich nicht als "nicht behebbar" markieren möchte, die aber auch nicht von höchster Wichtigkeit sind.

Avi
quelle
2
Ich weiß, dass dies nur ein Beispiel ist, aber das Entfernen einer unnötigen Bildlaufleiste ist eine Funktion. Wenn Sie nun versuchen, diese Funktion zu implementieren, und sie nicht funktioniert, ist ein Fehler aufgetreten.
JeffO
Sie sollten gewillt sein, die Idee zu hegen, dass Ihre Fehler immer die höchste Priorität haben und möglicherweise nicht die richtige Lösung für Ihre Anforderungen sind.
Blrfl
@JeffO - Ich denke, du stimmst mir in gewisser Weise zu. Sie nennen es einfach eine Geschichte, anstatt es einen Fehler zu nennen. Welches ist in der Tat von mir für diesen Fall in Ordnung.
Avi
3
Es gibt einen großen Unterschied zwischen "Klingt ansprechend und korrekt" und "Erledigt Dinge, die die Menschen, die Ihr Produkt verwenden, bei Laune halten". Wenn 0-Bug Sie nachweislich davon abhält, Letzteres zu erreichen, ist es das Falsche. Ich bin sicher, Ihr Management wird es lieben, die zusätzliche Zeit zu haben, um mit seiner Methodik zu prahlen, nachdem Ihre Kunden jemanden gefunden haben, der ihnen das bietet, was sie brauchen.
Blrfl
1
@Avi - Dies scheint eine Funktion zu sein, die vervollständigt werden sollte, damit Ihr aktueller agiler Ansatz neue Versionen in Zukunft nicht verzögert.
Ramhound

Antworten:

28

Das Beheben von Fehlern vor dem Schreiben von neuem Code ist einer der zwölf Punkte des Joel-Tests . Joel erklärt auch, warum dies ein Muss ist:

Je länger Sie warten, bevor Sie einen Fehler beheben, desto teurer (in Bezug auf Zeit und Geld) ist die Fehlerbehebung.

Du hast eine Wahl:

  • Entweder Sie implementieren eine sehr gewünschte Funktion und verzögern die Behebung eines Fehlers, wodurch sich die Kosten für die Behebung unweigerlich erhöhen.

  • Oder Sie beheben den Fehler sofort, da die Kunden enttäuscht sind, dass Sie die von ihnen benötigten Funktionen nur sehr langsam bereitstellen.

Wenn der Fehler nicht sehr wichtig ist, während das Feature vorhanden ist, wird das Management dazu neigen, zunächst nach der Implementierung des Features zu fragen und dann den Fehler zu beheben. Aus geschäftlicher Sicht ist dies eine absolut gültige Entscheidung, sofern das Management die Konsequenzen klar versteht, dh, dass es schwieriger ist, den Fehler später als jetzt zu beheben.

Das Festhalten an "Keine neuen Funktionen, bis alle Fehler behoben sind" ist möglicherweise nicht die beste Wahl für Unternehmen. Sie haben bereits die Einschränkungen erwähnt, sodass es nicht erforderlich ist, sie zu erläutern.

Abgesehen davon besteht das Risiko, dass sehr wichtige Funktionen implementiert werden, bevor kleinere Fehler behoben werden: Wo sollen die Grenzen gesetzt werden? Ist eine von 1 000 Kunden angeforderte Funktion wichtiger als ein Fehler von 100 Kunden? Wie kann bewertet werden, ob eine bestimmte Funktion ausgeführt werden soll, bevor ein bestimmter Fehler behoben wird?

Ohne strenge Regeln und wenn das Management den Entwicklungsprozess nicht sehr gut versteht, kann es sein, dass Sie sich in einigen Jahren mit einem Überangebot an Fehlern konfrontiert sehen, die als nicht wichtig genug angesehen wurden, um vor einem weiteren ausgefallenen Feature behoben zu werden.

Arseni Mourzenko
quelle
+1 Der Joel-Test kam mir in den Sinn, als ich den Titel las!
jkoreska
1
Ein Zusatz sollte sein, dass es weniger Auswirkungsmöglichkeiten gibt, um mit Fehlern umzugehen. Wenn Sie ein robustes Scrum haben, das Fehler gut managen kann, ist es vielleicht akzeptabel, zu erklären, dass sich ein Fehler ein wenig verzögert ... solange Ihr Team die Fehler, die später behoben werden sollen, tatsächlich gut behebt. Wenn sich Fehler häufen, ist diese Methode fehlgeschlagen, und Sie müssen zu einem Drakonier zurückkehren, der immer zuerst alle Fehler behebt.
Cort Ammon - Reinstate Monica
Ich denke, eine wichtige Sache, die hinzugefügt werden muss, ist zu überlegen, wie lange diese Fehlerbehebung dauert. Der Fehler, den das OP erwähnt hat, klingt nach einer relativ einfachen Behebung. Wird es das Feature also wirklich zu spät bringen? Wenn die Antwort nein lautet, beheben Sie sie einfach. Wenn die Antwort ja ist, dann ist es vielleicht komplexer. Ich habe diesen Teil des Joel-Tests immer so gesehen, als wäre es einfach, ihn zu beheben. Wenn es komplex ist, beheben Sie es, weil Sie komplexe Aufgaben nicht zu lange verlassen möchten, weil Sie vergessen haben, wie das Zeug funktioniert, und weil Sie die Regression vergessen haben.
MikeS159_Funding_Monica
13

Sie sollten nicht nur auf bestimmte Details Ihrer Situation eingehen, sondern auch sicherstellen, dass Sie die grundlegenden Dinge richtig verstanden haben.

In diesem Zusammenhang halte ich es für sehr wichtig, darauf hinzuweisen, dass die von Ihnen erwähnte Richtlinie "Fehler haben immer eine höhere Priorität als Features", insbesondere weicht das Wort immer von mindestens zwei der vier im Agile Manifest genannten Prinzipien ab :

Individuen und Interaktionen über Prozesse und Werkzeuge

Reagieren, um nach einem Plan umzuschalten


Ich bestehe nicht darauf , dass Sie Politik ändern sollte, weil ich fest davon überzeugt , dass man sein sollte agil über sehr Anwendung von agilen Prinzipien.

Sie sollten sich jedoch zumindest bewusst sein, wann Sie abweichen und verstehen, ob und wie eine Abweichung gerechtfertigt ist . Einfach ausgedrückt, stellen Sie besser sicher, dass das, was Sie als "agil" bezeichnen, nicht in eine sinnlose Fälschung übergeht, die in dem Manifest von Half-Arsed Agile so eloquent behandelt wird :

Individuen und Interaktionen über Prozesse und Tools ,
und wir haben verbindliche Prozesse und Werkzeuge zu kontrollieren , wie diese Personen (wir bevorzugen den Begriff ‚Ressourcen‘) interact

Arbeitssoftware über umfassende Dokumentation,
sofern diese Software umfassend dokumentiert ist

Selbstverständlich unterliegt die Zusammenarbeit der Kunden bei Vertragsverhandlungen im
Rahmen strenger Verträge einer strengen Änderungskontrolle

Reaktion auf die Umstellung auf einen Plan,
vorausgesetzt, ein detaillierter Plan ist vorhanden, um auf die Änderung zu reagieren, und er wird genau befolgt


Der Vollständigkeit halber scheint die Null-Fehler-Politik nicht nur von agilen Prinzipien abzuweichen.

In nicht-agilen Projekten, an denen ich teilgenommen habe, wurde es allgemein als unklug angesehen , Programmierer Zeit mit der Behebung von Fehlern zu verbringen, die nicht wichtig genug sind, um die Verzögerung der Veröffentlichung von Funktionen mit hoher Priorität zu rechtfertigen.

Aus diesem Grund hat das Management in der Regel einige Anstrengungen unternommen (genauer gesagt, investiert ), um zu entscheiden, welche Fehler auf die nächste Veröffentlichung warten könnten.

  • Arbeiten Sie zufällig an unternehmenskritischer Software? Ich frage, weil in diesem Fall eine Null-Fehler-Politik ziemlich sinnvoll ist und es sich lohnt, agile / nicht-agile / welche Prinzipien auch immer zu kompromittieren. Es fällt mir allerdings schwer, mir in diesem Fall einen agilen Prozess vorzustellen.

Wenn Sie nicht an unternehmenskritischer Software arbeiten, würde ich Ihnen empfehlen, die Fähigkeiten und Denkfähigkeiten Ihres Managements genauer einzuschätzen.

Ich meine, so wie Sie es beschreiben, sieht es eher so aus, als ob sie einfach nicht in der Lage sind, Bugs und Features richtig zu priorisieren. Wenn dies der Fall ist, wenn sie eine relativ routinemäßige Aufgabe nicht bewältigen können, wozu sind sie sonst nicht in der Lage? Konkurrenzfähiges Gehalt anbieten? Karrierechancen? Arbeitsbedingungen?

Mücke
quelle
1
+1 - Es hat mir sehr gut gefallen, wie Sie es ausgedrückt haben. Es ist zwar nicht gerade eine Lösung, aber es rechtfertigt, wie ich mich fühle, wenn ich diese Methode wirklich unterstütze, aber glaube, dass in Agilität alles verhandelbar sein sollte.
Avi
12

Wie Sie zu Recht angeben, besteht bei einer Null-Fehler-Richtlinie das Risiko, dass nichtkritische Probleme ignoriert oder unter den Teppich geschoben werden, da dies nicht der beste Zeitpunkt ist, um sie zu lösen.

Was Sie tun können, ist, wenn ein neues Problem gemeldet wird, eine Drei-Wege-Entscheidung zu treffen:

  1. Es ist ein echter Fehler, der so schnell wie möglich behoben werden sollte
  2. Es ist ein echter Fehler, aber nicht kritisch für das Funktionieren der Anwendung: Verwandeln Sie sie in eine normale Story und lassen Sie den Produktbesitzer Prioritäten setzen.
  3. Es ist kein Fehler, oder es ist ein Duplikat, oder es lohnt sich nicht, es zu lösen: mit angemessenem Grund ablehnen.

Auf diese Weise werden die weniger wichtigen Themen nicht ganz vergessen, aber sie zwingen auch nicht alle neuen Glanzmerkmale aus dem nächsten Sprint. Das "Verwandeln in eine Story" dient nur dazu, dass das Management weiterhin behaupten kann, dass Sie eine Null-Fehler-Richtlinie befolgen, und der Product Owner in der Lage sein sollte, die Wichtigkeit des Problems mit der Wichtigkeit der Funktionen im Backlog in Einklang zu bringen.

Beachten Sie, dass bei diesem Verfahren Probleme wie die von Ihnen erwähnte Bildlaufleiste am Ende des Projekts möglicherweise immer noch ungelöst sind. Dies lag jedoch daran, dass niemand dies für wichtig genug hielt (einschließlich der Kunden), und nicht daran, dass dies nicht der Fall war Zeitpunkt, zu dem das Problem gefunden wurde.

Bart van Ingen Schenau
quelle
2
Ja, obwohl Sie sicherstellen müssen, dass die Priorisierung aus geeigneten Gründen (geschäftlicher Wert) erfolgt und nicht den "Ursprung" (Merkmalsanforderung versus Testbericht versus vom Feld gemeldeter Fehler) als "Sortier" -Kriterium verwendet, bei dem Merkmalsanfragen immer erfolgen vorbeikommen ...
Marjan Venema
2

Ich mag Sie Schema jedoch, wie Sie festgestellt haben, es braucht nur eine kleine Änderung, um es zu funktionieren

Mein Vorschlag ist, die Fehlerpriorität bei jedem Sprint zu erhöhen. Nehmen wir an, Sie haben einen Fehler auf Stufe 5 (Skala 1 - hoch, 5 = niedrig). Es beginnt mit 5, 4 Sprints später, es ist ein Level 1 Bug. Die für die Prioritätsberechnung erforderliche Einstellung lautet jedoch "Aktuelle Priorität - Anzahl der Sprints" und nicht "Erhöhen Sie die Priorität anstehender Fehler am Ende jedes Sprints". Dadurch wird verhindert, dass die Priorität auf "Niedrig" zurückgesetzt wird, um sie weiter aufzuschieben.

Level 1 Bugs müssen im nächsten Sprint behoben werden ......

Ist einfach zu erklären, einfach zu implementieren ....

Nun, soweit es Feature-Anfragen betrifft, vielleicht eine andere Rate. Nach einer Weile muss die Anfrage bearbeitet werden - entweder erledigt oder verworfen, um einen Rückstand von Funktionen zu vermeiden, die keinen Wert haben ......

mattnz
quelle
Das ist eine großartige Idee! Ich bringe es meinem Team zur Diskussion! Ich denke, es braucht noch einige Verbesserungen, an die ich denken werde. Aber ich liebe die Grundidee.
Avi
Ok, nachdem wir darüber gesprochen hatten, stellten wir fest, dass es uns genau an die gleiche Stelle bringen könnte, an der sich viele Bugs zu Level 1 wenden: /
Avi
Das ist der Punkt - wenn Sie nicht behobene Fehler so lange aufbewahren, dass sie sich an der Spitze der Arbeitslast ansammeln, halten Sie sich nicht an Ihre Regeln. Sie akkumulieren nur technische Schulden.
Ross Patterson
0

Sie geraten in Schwierigkeiten, wenn Sie versuchen, in der Softwareentwicklung zu wörtlich oder unerbittlich zu sein, so sehr wir alle wirklich wollen, dass die Dinge geschnitten und trocken werden. Fehler sollten behoben werden, bevor neue Funktionen hinzugefügt werden, aber ich würde trotzdem die Wichtigkeit der einzelnen berücksichtigen, wenn ich diese Entscheidung zusammen mit dem Umfang des Problems treffe. Es gibt zu allem Ausnahmen.

Einige Anwendungen sind so groß, dass sie Abschnitte haben, die überhaupt nicht zusammenhängen. Ich verstehe nicht, warum jedes neue Feature des Kreditorenmoduls zurückgestellt werden muss, da es in der GUI für Leistungen an Arbeitnehmer einige ärgerliche Fehler gibt. Wenn im Einkaufsbereich der Unternehmenswebsite ein Problem mit der GUI eines Assistentenschritts aufgetreten ist, beheben Sie das Problem. Viele Fehler müssen jedoch möglicherweise behoben werden, wenn die hinzugefügte Funktion auf eine zusätzliche Sicherheitsanforderung, geschäftliche Anforderungen und insbesondere auf Änderungen der Vorschriften zurückzuführen ist.

Abgesehen von einer großen Diskrepanz in der Zeit und den Ressourcen, die für die Fertigstellung erforderlich sind, ist es am besten, einige Benutzer- / Kundeninformationen einzuholen. Wenn sie mit dem Fehler leben können, wenn dies bedeutet, dass sie die neue Funktion erhalten, fügen Sie die Funktion hinzu. Das Ziel sollte es sein, zu vermeiden, dass sich Insekten ansammeln. Irgendwann werden viele kleine Probleme zu einem großen Problem.

JeffO
quelle
-1

Das Schreiben von Tests zum Anzeigen des Fehlers beim Ausführen des Tests ist ein guter Anfang, um die Fehler zu beheben. Aber wenn wir versuchen, die Fehler zu beheben, die die geringste Priorität haben, sollten wir zweimal überlegen, bevor wir fortfahren. Ich wollte nicht überspringen, es zu reparieren. Wir können jedoch unkritische Ressourcen verwenden, um diese Fehler zu beheben. Nehmen wir an, wir trainieren in meinem Team die neuen Ressourcen mit den am wenigsten priorisierten Fehlern in der Fehlerliste. Auf diese Weise erhalten wir die Möglichkeit, die neue Ressource zu schulen und ihnen ein gewisses Vertrauen zu vermitteln, dass sie bei der Eingabe in die Anwendung eine Korrektur vorgenommen haben. Dies wird sie sicherlich dazu bringen, sich freiwillig für die nächste priorisierte Aufgabe zu melden.

Hoffe das hilft :)

Arun
quelle
Down-Voters: Habe ich etwas verpasst? Oder ist die gestellte Frage total seltsam? Bitte stimmen Sie nicht ohne Angabe von Gründen ab. Falls vorhanden, bitte angeben.
Arun