Wie kann in Scrum / Agile eine Validierungs- / Regel-Engine schrittweise bereitgestellt werden?

8

Angenommen, Sie haben eine Validierungs-Engine, die 100 Regeln abdecken muss, um nützlich zu sein.

Nehmen wir außerdem an, dass das Team nur etwa 10 Regeln pro Iteration liefern kann.

Wie würden Sie vorgehen, um am Ende der ersten Iteration ein "potenziell freisetzbares Produktinkrement" zu erstellen, wenn der Regelengine noch 90 der Kernregeln fehlen würden?

Würden Sie zum Beispiel einen vorübergehenden Fehler / eine Warnung hinzufügen, die immer ausgelöst wird, wenn nicht alle Regeln implementiert wurden?

Für den Kontext bearbeiten: Ich entwickle Middleware für einen komplexen Geschäftsprozess mit vielen älteren Anwendungsfällen, die einen großen Monolithen replizieren und ersetzen sollen. Es ist schwierig, ohne 100% ige Abdeckung live zu gehen, da wir nur begrenzt entscheiden oder einschränken können, welche kniffligen Anwendungsfälle in der Produktion auftreten und um Wartung gebeten werden.

James Daily
quelle
Erstellen Sie die "Validierungs-Engine" oder schreiben Sie einfach 100 Regeln für eine vorhandene Engine?
Bryan Oakley
@BryanOakley: In meinem Fall handelt es sich um eine grundlegende Drools-Tabellenkalkulation, bei der jede agile Story entweder Regelsatzdefinitionen hinzufügt / ändert oder einfach neue Regeln in einen vorhandenen Regelsatz einfügt.
James Daily
Sie sollten Kanban versuchen, anstatt hier zu scrum ...
user666

Antworten:

7

Wie würden Sie vorgehen, um am Ende der ersten Iteration ein "potenziell freisetzbares Produktinkrement" zu erstellen, wenn der Regelengine noch 90 der Kernregeln fehlen würden?

Sie geben die ersten zehn im ersten Sprint frei. Nur weil es "potenziell freisetzbar" ist, heißt das nicht, dass es vom Kunden verwendet werden muss. Dies bedeutet lediglich, dass die vorhandene Funktionalität getestet wurde und sich wie geplant verhält und keine Regressionen im Produkt verursacht.

Stellen Sie sich "potenziell freisetzbar" als "Wir haben keine Arbeit mehr für diese Funktion zu erledigen. Der Code ist fertig und wurde ordnungsgemäß getestet und dokumentiert".

Würden Sie zum Beispiel einen vorübergehenden Fehler / eine Warnung hinzufügen, die immer ausgelöst wird, wenn nicht alle Regeln implementiert wurden?

Dies ist definitiv etwas, das Sie in Betracht ziehen sollten, wenn der Kunde die Funktion tatsächlich testen soll.

Bryan Oakley
quelle
Ich verstehe, es gibt also eine sinnvolle Unterscheidung zwischen "potenziell freisetzbar" und "ausreichend für die Benutzeranforderungen" (wobei der Benutzer ein Benutzer der Benutzeroberfläche oder ein Webdienst-Client sein kann, der darauf hofft, eine API aufzurufen, oder was auch immer)
James Daily
Mir ist klar, dass es bei meiner Frage nicht wirklich um Agilität geht (das "Fertig" -Konzept beantwortet dies sehr einfach), sondern um eine Entwurfsfrage - wie sollte eine API nicht unterstützte Szenarien bei der Bereitstellung aussagekräftiger inkrementeller Releases ordnungsgemäß erkennen und darauf reagieren?
James Daily
6

Im Scrum Guide heißt es in der Definition eines Inkrements :

Am Ende eines Sprints muss das neue Inkrement "Fertig" sein. Dies bedeutet, dass es sich in einem brauchbaren Zustand befindet und der Definition des Scrum-Teams "Fertig" entspricht. Es muss sich in einem brauchbaren Zustand befinden, unabhängig davon, ob der Product Owner beschließt, es tatsächlich freizugeben.

Wenn Sie nicht genügend Regeln ausgefüllt haben, wird der Product Owner diese wahrscheinlich nicht veröffentlichen. Das Inkrement sollte jedoch "Fertig" sein. Alle Regeln, die Sie bereits implementiert haben, sollten gemäß der Definition of Done Ihres Teams abgeschlossen sein.

Die Entscheidungen, die Sie treffen, hängen davon ab, was mit dem Inkrement getan werden soll. In Ihrer Frage erwähnen Sie das Auslösen von Ausnahmen für nicht implementierte Regeln. Dies könnte funktionieren, aber wenn jemand in Ihre Regelengine integriert wird, kann dies zu einem Overhead für ihn führen, um diesen Fehlerfall zu behandeln, insbesondere wenn er in einem fertigen Produkt nicht vorhanden ist. Oder vielleicht ist es das, was ihnen das Leben leichter machen würde. Überlegen Sie, was die Absicht des Inkrements ist, wer es möglicherweise verwendet, und gehen Sie von dort aus.

Thomas Owens
quelle
"Aber wenn sich jemand in Ihre Regelengine integrieren würde, könnte dies zu einem Overhead für ihn führen, um diesen Fehlerfall zu lösen." Absolut wahr, aber ein notwendiges Übel in Unternehmensszenarien, sonst würden wir nie etwas aus der Tür bekommen :)
James Daily
@ JamesDaily Nein, es ist kein notwendiges Übel. Sie können dies abmildern, indem Sie keine Ausnahme auslösen, die das fertige System nicht auslösen würde, oder indem Sie Werte zurückgeben. Alles, was bedeutet, dass das andere System keinen Fehlerbehandlungscode hinzufügen muss, um die Tatsache zu behandeln, dass Ihr System noch nicht fertig ist, um eine Mindestfunktionalität demonstrieren zu können.
Thomas Owens
Vielleicht ist es zu hart, eine Ausnahme zu werfen. Weiche Warnungen oder sogar ein Indikator für die vollständige oder teilweise Validierung sind für einen Kunden sinnvoller und einfacher zu reagieren. In einem anderen Kommentar stellte ich fest, dass sich mein Denken in Richtung bewegt: Wie sollte eine API nicht unterstützte Szenarien ordnungsgemäß erkennen und darauf reagieren, wenn sie aussagekräftige inkrementelle Releases bereitstellt?
James Daily
3

Sie haben eine Situation ohne Flucht definiert.

Ich bin sicher, dass es Situationen im wirklichen Leben gibt, in denen Sie einen Block komplizierter Funktionen haben, die nicht aufgeteilt werden können. Der übliche Fall ist jedoch, dass Sie eine Anforderung in Unteranforderungen aufteilen können, die einen gewissen Nutzen für sich haben.

Angenommen, meine Anforderung besteht darin, die Rechnungsadressen für Kreditkarten in Großbritannien zu validieren. Dies ist ziemlich kompliziert. Wir möchten so gut wie möglich sicherstellen, dass die Adresse die Wohnadresse der auf der Karte genannten Person ist, damit wir sie verfolgen können, wenn sie mit einer Zahlung in Verzug ist.

Es gibt möglicherweise Hunderte von Validierungen und Überprüfungen, die wir durchführen können, um die Zuverlässigkeit der Überprüfung zu verbessern. Jede einzelne Überprüfung ist jedoch überprüfbar und bietet eine echte Verringerung des Betrugsrisikos.

  • Adresse hat eine Hausnummer und eine Postleitzahl
  • Postleitzahl ist gültiges Format
  • Postleitzahlensuche mit externer API erfolgreich
  • Postleitzahl ist eine geografische Postleitzahl
  • Die Adresse wird mit dem Kreditkartenanbieter usw. usw. validiert

Wenn es darauf ankommt, kann der Kunde mit nur einer Teilmenge der implementierten Regeln Geld verdienen. Entweder könnte das zusätzliche Risiko akzeptiert werden, oder es könnten manuelle Umgehungen zum Workflow hinzugefügt werden, um die Situation zu entschärfen.

Scrum- und Agile-Methoden wurden unter diesem Gesichtspunkt entwickelt. Sie versuchen, einen Ausfall des gesamten Projekts zu vermeiden, indem sie sicherstellen, dass einige fehlende Anforderungen nicht dazu führen, dass die gesamte Lösung wertlos wird.

Aber sie können die Realität nicht ändern, wenn Sie eine Weltraumrakete haben, die definitiv X, Y und Z zum Fliegen benötigt. Dann brauchst du alle drei!

Der Trick besteht darin, zu erkennen, dass dies in Branchenanwendungen im Allgemeinen nicht der Fall ist, ungeachtet dessen, was der Kunde sagen könnte.

Ewan
quelle
Ja, ich könnte mir einen iterativen Ansatz mit temporären Informationswarnungen vorstellen, die zurückgegeben werden, wenn bekannt ist, dass die Validierung für eine bestimmte Eingabe unvollständig ist. Sie haben mich beispielsweise gebeten, Ihre lokale Wohnadresse und Ihre ausländische Bankadresse zu überprüfen, aber die Engine musste die ausländische Adresse überspringen, da sie noch nicht unterstützt wird. Die Bestellung kann entscheiden, dass sie nicht vollständig genug ist, um tatsächlich live zu gehen, aber zumindest ist die API ehrlich darüber, was sie validiert hat oder nicht.
James Daily