Scrum-Team folgt nicht dem YAGNI-Prinzip

13

Bei einem SCRUM-Meeting diskutierte das Produktteam über eine Funktion einer API, die von der mobilen App genutzt wird. Wir hatten ein Modell, das zeigte, wie der Bildschirm aussehen sollte und welche Schlüsselelemente er enthalten sollte (ein "Layout").

Auf dieser Grundlage und der Diskussion mit dem Produktbesitzer habe ich einen Prototyp für eine API-Antwort (HAL + JSON) erstellt. Es war sehr einfach, HAL-konformes JSON, das nichts anderes tat, als die Dinge darzustellen, die auf den Mockups standen. Ich ließ mich nicht von den Zukunftsideen beeinflussen, die von Geschäftsleuten vorhergesehen wurden, da diese dazu neigen, ihre Ideen häufig zu ändern, und entschied mich für einen minimalistischen Ansatz. Mein Vorschlag wurde vom Team abgelehnt und ich wurde mit 7 zu 1 überstimmt.

Das Team entschied sich für eine komplexere, nicht semantische abstrakte JSON-Struktur, die mehr Flexibilität bei der Anordnung des Layouts ermöglicht. Der Nachteil dieses Ansatzes besteht darin, dass wir eine Reihe von einheitlichen Objekten haben, die vom Design her null und leere Eigenschaften haben können. Sie dachten auch, es wäre schön, A / B-Tests zu ermöglichen, aber sie basierten nur auf ihren Vorhersagen, da wir keine solchen Anforderungen hatten.

Die meiste Zeit diskutierten wir über Dinge, die weder Teil des Sprints waren noch in den Mockups erwähnt wurden. Die beschriebenen Probleme lauteten "Was wäre, wenn das Marketing in Zukunft ...", "Was wäre, wenn das Unternehmen dies wünscht ...".

Ich und der Produktbesitzer sind erfahrene Programmierer, und wir haben solche Probleme in der Vergangenheit gesehen. Wir versuchen, den YAGNI- und KISS- Prinzipien zu folgen . Der Rest des Teams ist etwas weniger erfahren und obwohl sie diese Prinzipien kennen, scheinen sie sie nicht zu verstehen.

Wir haben uns auf ihre Lösung geeinigt, da das gesamte Team für uns wichtiger ist und wir nicht über etwas streiten wollten, das nicht so wichtig ist. Aber ich fürchte, ob so etwas ein Präzedenzfall für bevorstehende, kompliziertere Debatten werden kann? Wie gehe ich mit einem solchen Verhalten um? Was kann ich als Teamleiter besser?

Erwähnenswert ist, dass es sich bei dem Produkt um ein MVP im Frühstadium handelt.

Jacek Kobus
quelle
11
I'm afraid if such thing can become a precedence for upcoming, more complicated debates?- Das verstößt auch gegen YAGNI: sich Sorgen um eine Zukunft zu machen, die nicht passieren könnte. Wenn Sie sich behaupten wollten, hätten Sie dies bereits tun sollen.
Robert Harvey
@gnat: Hier geht es anscheinend nicht um Zeitbeschränkungen.
Robert Harvey
Unterliegt die HAL-Konformität nicht der YAGNI?
Matthew
@Matthew das Ganze hat eine Woche gedauert und ich habe auch einen anderen Prototyp mit einfachem JSON vorbereitet, nur um HAL loszuwerden, aber es wurde auch als "nicht flexibel genug" abgelehnt. Das Team hat es modifiziert und diese modifizierte Version wurde schließlich verwendet. Die HAL ist für uns ein Standard, eine Reihe von Richtlinien, und es fällt mir leichter, auf allen Endpunkten eine einheitliche Struktur durchzusetzen. Die vorherige API verwendete keine Standards und endete nicht gut.
Jacek Kobus
5
Flexibilität erhöht die Komplexität. Solange das Team das versteht, kann man vorankommen.
Jon Raynor

Antworten:

10

Ich fühle deinen Schmerz, war dort. IMHO diese Art von Problemen werden durch die Tatsache verursacht, dass Sie ein Team von 8 Personen haben, das bereits zu groß ist, um Sie immer zu den besten strategischen Entscheidungen kommen zu lassen.

In einem Team mit einer Größe von 8 oder mehr ist die Anzahl der mittelmäßigen Programmierer höher als die Anzahl der erfahrenen. Das führt oft zu Situationen, in denen die besseren Entscheidungen von mittelmäßigen überstimmt werden. Das hört sich nicht zufriedenstellend an, besonders wenn Sie einer der erfahreneren Typen sind (oder glauben, dass Sie einer von ihnen sind), aber zumindest gilt das oft auch für wirklich schlechte Entscheidungen.

Tatsache ist, dass man nicht viel dagegen tun kann, solange sich das Team nicht ändert , zumindest wenn die Dinge demokratisch bleiben sollen

  • lerne damit zu leben
  • Arbeiten Sie ein oder zwei Jahre mit dem Team zusammen, teilen Sie Ihr eigenes Fachwissen und hoffen Sie, dass sie mit der Zeit den Wert von YAGNI und KISS erfahren
  • Arbeiten Sie an Ihren eigenen Fähigkeiten, Design oder strategische Entscheidungen an das Team zu "verkaufen"
  • Versuchen Sie, zu einem anderen (vielleicht kleineren) Team zu wechseln, dessen eigenes Fachwissen eher dem Durchschnitt des gesamten Teams entspricht

Ich denke, der einzige Weg, den wahren Wert eines minimalistischen Ansatzes und von YAGNI zu lernen und zu verstehen, besteht darin, einige Erfahrungen aus erster Hand zu machen. Zum Beispiel, indem man sich auf die Aufrechterhaltung eines Altsystems einlässt, das eine Menge falscher "Was-wäre-wenn" -Vorhersagen, falsche Entwurfsentscheidungen aufgrund von "nur-für-den-Fall" -Argumenten enthält oder eine Menge übergenerierten Framework-Codes enthält, die eigentlich nie benötigt wurden. Aber das ist nichts, was Sie Ihren Teammitgliedern in zwei Tagen beibringen können. Einige Erfahrungen müssen die Leute selbst machen.

Doc Brown
quelle
5
Die meisten Menschen müssen den Ofen berühren, um zu lernen, dass er heiß ist und nicht, um ihn zu berühren. Software ist ähnlich. ++
RubberDuck
2
Das Führen eines Projektprotokolls / -tagebuchs ist der Schlüssel für diese Art von Dingen. Sobald Sie die verschiedenen Diskussionen aufgezeichnet haben, sind sie viel konkreter als die Erinnerungen der Menschen an Gespräche Monate oder Jahre später. Es ist eine gute Frage über die Praxis hier .
Robbie Dee
@RobbieDee: Sicher, wenn es dem Team hilft, etwas über YAGNI und KISS zu lernen.
Doc Brown
3
Die dritte Kugel (Arbeit an Ihren eigenen Fähigkeiten, ein Design zu "verkaufen") wird nicht genug beachtet. Deshalb müssen Entwickler noch gute Kommunikationsfähigkeiten haben (oder daran arbeiten).
Randall Stewart
@ RandallStewart: absolut. Aber selbst mit den besten Kommunikationsfähigkeiten kann es schwierig sein, YAGNI an Leute zu verkaufen, die keine eigenen Erfahrungen gemacht oder mit "schnell und schmutzig" verwechselt haben oder die die Erfahrung gemacht haben, dass "Abstraktion (immer) gut ist", und versuchen Sie es Dinge der Abstraktion zuliebe abstrahieren statt der Vereinfachung zuliebe. Kommunikation braucht zwei Seiten - eine, die die Dinge gut erklären kann, und eine, die bereit ist, zuzuhören und zu verstehen.
Doc Brown
8

Die Aufwärtskompatibilität ist ein berechtigtes Anliegen

Wenn einer der sieben Entwickler, die Sie überstimmt haben, der Architekt ist, hat er das Recht, NFRs nach Bedarf einzuführen , und einer dieser NFRs könnte "Vorwärtskompatibilität" sein, insbesondere wenn Sie eine Remote-Systemkomponente unterstützen, die möglicherweise eine spärlichere Version aufweist Release-Zeitplan. Sie möchten nicht, dass Benutzer eine neue Version einer App installieren müssen, weil Sie nicht vorausgedacht haben.

Wie bei anderen Anforderungen benötigen Sie Akzeptanzkriterien

Abgesehen davon müssen alle NFRs als Anforderungen dokumentiert sein und definierte Akzeptanzkriterien haben . Außerdem müssen Sie ein Mittel finden, um sie zu testen . Aus diesem Grund ist YAGNI wichtig - Sie möchten keinen Code schreiben, der nicht getestet werden kann. Wenn der einzige Zweck des Codes darin besteht, eine Funktion zu unterstützen, die von niemandem verwendet wird, ist das Testen schwierig.

Es sollte kein Urteilsspruch sein

Ich würde vorschlagen, dass Sie das Team dazu bringen, sich auf die unausgesprochene Anforderung zu einigen, die Sie anscheinend verpasst haben, und sie aufschreiben zu lassen. Sobald Sie ein Mittel zum Testen definiert haben, sollte Ihre Implementierung mindestens einen Test nicht bestehen und es sollte daher nicht um eine Abstimmung gehen.

John Wu
quelle
1
Wo in der Frage lesen Sie, dass das OP-Team den Pfad von YAGNI aufgrund einer Vorwärtskompatibilitätsanforderung verlassen hat?
Doc Brown
Die Aufwärtskompatibilität ist das, wofür der Content-TypeHeader vorgesehen ist
Jack
2
Ich bin bereit, es etwas anderes zu nennen, wenn Sie möchten, vielleicht Erweiterbarkeit. Der Punkt ist der gleiche; es ist immer noch ein NFR.
John Wu
1
Es gibt zwei Möglichkeiten, ein System erweiterbar zu machen. Auf die eine Weise wird versucht, viele mögliche Änderungen der Anforderungen vorherzusehen und die Dinge "für alle Fälle" stark konfigurierbar zu machen. Ich bin sicher, dass man für diese Art von Erweiterbarkeit viele Akzeptanztests erfinden kann. Oder halten Sie die Dinge so einfach wie möglich, damit die Codebasis klein und verständlich bleibt und Erweiterungspunkte oder Abstraktionen später hinzugefügt werden können, wenn sie wirklich benötigt werden. Letzteres ist nichts, für das Sie Tests schreiben können (oder müssen). Daher glaube ich nicht, dass dies einfach durch "Aufschreiben unausgesprochener NFRs" gelöst werden kann ...
Doc Brown
... es geht also eher darum, ein Team von vielleicht kreativen Entwicklern davon abzuhalten, Annahmen über NFRs zu treffen und welche zu erfinden.
Doc Brown
3

Es hört sich so an, als ob Ihr Entwicklungsteam versucht, das Produktteam zu unterstützen, indem es ein Framework erstellt, das es ihm ermöglicht, schnelle Tests durchzuführen. Das würde das Produktteam anscheinend sehr gerne haben. Ihr Ansatz ist eher wie "Geben Sie ihnen buchstäblich das, wonach sie fragen und denken Sie nicht für sie".

Wenn ich der Product Owner wäre, wäre ich mit einem Entwicklerteam, das den ersten Ansatz wählt, viel glücklicher als das letztere.

Martin Maat
quelle
3
+1 Veränderungen zu antizipieren und zu planen ist nicht dasselbe wie ein Astronaut mit voller Architektur zu werden und eine innere Plattform zu schaffen . Ein bisschen Vorarbeit im Moment kann in Zukunft viel Arbeit verhindern. Während sich das OP-Team vielleicht etwas zu sehr in Richtung Hypothesen neigt, ist ein fundamentalistischer YAGNI-Ansatz sicherlich nicht optimal.
amon
4
Es hört sich so an, als würden Sie das OP gerne überstimmen und die gleichen Planungsfehler für "Was wäre, wenn das Marketing in Zukunft ..." machen wie der Rest des Teams. Wenn Leute anfangen, Frameworks anstelle von Anwendungssoftware zu erstellen, wenn die Aufgabe darin besteht, Anwendungssoftware zu erstellen, machen sie es fast immer falsch.
Doc Brown
@ DocBrown Technisch würde ich zustimmen. In diesem Fall geht es jedoch anscheinend um die Bereitschaft zur Erleichterung gegenüber der Forderung nach persönlichem Respekt. Auf der einen Seite "richtig" und auf der anderen Seite "nützlich" oder "hilfreich" sein. Was ich zwischen den Zeilen gelesen habe, ist, dass die OP an Boden verliert und sich dazu entschließt, sein Ego aufzupumpen, indem er seine Erfahrung einem Online-Publikum untermauert, anstatt in einer Umgebung beizutragen, in der er sich nicht mehr wohlfühlt. Diese Dynamik ist typisch für die Einführung von Scrum.
Martin Maat
@MartinMaat Ich war ein bisschen enttäuscht darüber, dass sie nicht mit mir übereinstimmten. Ich habe nicht verstanden, warum es passiert ist. Während der täglichen Arbeit helfe ich ihnen bei Codeüberprüfungen usw. Wir streiten uns oft, aber ich mag es, weil das Endergebnis besser ist. Ich weiß, dass sie meine Meinung respektieren; Ich versuche immer, gültige Argumente zu verwenden, die meine Theorien stützen. Am Ende wählen sie die beste Option und übernehmen auch die Verantwortung dafür. Das Team tat, was es tun sollte - es löste das Problem. Es war mein Fehler und der Fehler des Produktbesitzers, dass die Angelegenheit von Anfang an zu umfassend und schlecht beschrieben war.
Jacek Kobus
2

Meiner Meinung nach funktioniert Demokratie nicht richtig - weder im politischen System noch in einem Team, in dem die meisten Programmierer jünger oder mittelmäßig sind.

Ihr Wort als Teamleiter und eine der erfahrensten Personen in einem Team sollte eine größere Wirkung haben als der Rest des Teams. Wenn YAGNI für Sie wichtig ist, sollten Sie eine Präsentation darüber halten. Besprechen Sie es und zeigen Sie ihnen, warum es gut ist.

Immerhin ist Ihre Verantwortung höher als für andere Menschen. Es geht nicht nur darum, Code zu schreiben, sondern auch Menschen anzuleiten.

BЈовић
quelle
3
Demokratie ist wahrscheinlich die Ursache des Problems hier, aber nicht demokratisch zu sein, ist meiner Meinung nach keine Lösung, da es leicht größere Probleme verursachen kann als die in der Frage beschriebenen - es kann das Team tatsächlich ruinieren.
Doc Brown
@DocBrown Du hast dir gerade im selben Satz widersprochen. IMO einige Entscheidungen sind nicht an die Menschen zu entscheiden. Was OP erklärte, ist einer von ihnen. Um Armstrong für Leute zu zitieren, die YAGNI nicht benutzen: Sie wollten eine Banane, aber Sie bekamen einen Gorilla, der die Banane und den gesamten Dschungel hält
BЈовић
2
Nein, das ist kein Widerspruch (vielleicht habe ich meinen Standpunkt nicht gut ausgedrückt). Die Dinge sind einfach nicht immer "schwarz und weiß". Nur weil Demokratie in manchen Situationen nicht gut funktioniert, ist es keine Garantie, die Situation zu verbessern und die Dinge zu verbessern, wenn man nicht demokratisch ist. So einfach ist das oft nicht.
Doc Brown
1
Mit Demokratie bekommt man nicht notwendigerweise das "Richtige", worauf sich die meisten Menschen einigen. Und das kann fehlerhaft sein. Und oft hat das "Richtige" ein Problem mit der sozialen Akzeptanz. YAGNI sollte keine Handschellen sein, die Sie daran hindern, geeignete Abstraktionen einzuführen, mit denen Sie bei Bedarf problemlos den "Gorilla" oder den "gesamten Dschungel" hinzufügen können.
oopexpert
@oopexpert Das Problem ist: Sie benötigen sie möglicherweise . YAGNI spricht sich gegen Überengineering aus. Richtige Abstraktionen sind eine Sache, und das Hinzufügen von Dingen, die Sie möglicherweise nicht benötigen, ist eine andere Sache.
B 13овић
2

Es gibt ein wenig Verwirrung um YAGNI.

Entwickler denken oft, dass sie YAGNI folgen, wenn sie Abstraktionen weglassen, die das System "für Änderungen geschlossen und für Erweiterungen offen" halten.

Sofern Sie das System nicht mit einer "offensichtlich" nicht angeforderten Funktionalität "erweitern", beschäftigen Sie sich nicht mit YAGNI. Das Einführen von Abstraktionen, bei denen eine Erweiterung auftreten könnte, ist die bereits erwähnte "Aufwärtskompatibilität".

Meine persönliche Meinung ist, dass nur ein profundes Wissen über die Domäne dazu beiträgt, Entscheidungen über die Abstraktion zu treffen und wo sie zu lokalisieren ist.

oopexpert
quelle
2

Das Problem bei YAGNI AND KISS ist, dass sie völlig subjektiv und vage sind.

json ?? YAGNI! Sende einfach einen CSV-String!

Objekte? KISSTUPID !!! benutze einfach gotos !!

Die Rolle des "Teamleiters" ist nicht genau definiert, aber ich würde vorschlagen, dass Sie sich davon distanzieren, subjektive Meinungen zu den technischen Entscheidungen Ihres Teams zu äußern. Auch wenn Sie das Gefühl haben, dass sie falsch sind. Halten Sie sich an eine kurze Liste klar definierter Anforderungen.

  • Unit-Tests für Code
  • Integrationstests für apis
  • automatisierte UI-Tests für das Endprodukt
  • Leistungs- und Skalierungsanforderungen

Wenn das Team Tests für alle geschäftlichen Anforderungen und die grundlegenden Leistungsmerkmale gemäß den technischen Anforderungen bestehen kann, verfügt es über ein funktionsfähiges Produkt.

Danach ist es einfach drängend, dasselbe zu tun, aber schneller

Ewan
quelle
1

Jeder im Team muss sich auf die Definition von erledigt einigen . Ohne dies neigen Sie zu massivem Umfang an Scope Creep, Sichtweisen und einer Verfälschung der Kernanforderungen.

Alles, was darüber hinaus geliefert wird, muss im Rückstand sein, der selbst auch eine eigene Definition von erledigt hat.

Wie für Prioritäten, die Moskau hat Methode uns immer gut bedient - YMMV.

Robbie Dee
quelle
1

Mein erster Gedanke ist ... Warum ist das Team besorgt über Veränderungen? Verfügen sie über ein historisches Verständnis des Product Owners, sodass sie das Gefühl haben, die erste Lösung erstellen zu müssen, die ein bisschen konfigurierbarer ist, um zukünftige Verbesserungen zu vereinfachen? Wenn Ihre Lösung 2 Tage und ihre 5 Tage dauern würde, ist sie mehr als doppelt so lang. Wenn die Änderung Ihres Plans jedoch jedes Mal 2 Tage dauern würde, eine Verbesserung jedoch 1 Tag dauern würde, scheint der Plan auf lange Sicht effizienter zu sein. Ich glaube nicht, dass es in dieser Frage eine RICHTIGE oder FALSCHE Entscheidung gibt. Es hängt von anderen Faktoren ab, IMHO. Sie sind jedoch RICHTIG in Bezug auf diese Denkweise, wenn sie bei anderen Lösungen den LOE verdoppeln, ohne dass Sie dazu direkt aufgefordert werden (ein Hinweis darauf, dass die zusätzliche Komplexität für Skalierbarkeit, Robustheit usw. erforderlich ist). Mein Vorschlag wäre, den Produktbesitzer in diese Gespräche einzubeziehen, da er bei der Priorisierung helfen muss. Wenn Ihre Lösung 5 Punkte hat und den Bedarf jetzt decken würde, aber was sie tun möchten, würde 50 Punkte und zwei Sprints oder mehr erfordern, könnte die PO sagen: "Moment, wir haben eine Veröffentlichung dieses MVP mit hoher Priorität geplant und Ich kann nicht zwei Wochen damit verbringen, Funktionen zu entwickeln, die nicht auf der Roadmap stehen! "

Curtis Reed
quelle