Bei Implementierungen müssen wir uns immer wieder mit der Frage beschäftigen: “Was machen wir denn mit Aufgaben wie dem Aufsetzen eines Servers oder dem nötigen Update des Betriebssystems? Soll das auch ins Backlog?” Unsere Antwort auf diese Frage ist immer die gleiche: “Nein! Ins Backlog gehören ausschließlich Lieferungen aus Kundensicht, interne Aufgaben haben also nichts im Backlog zu suchen.”

Die Verwirrung ist verständlich, denn leider gibt es immer wieder Artikel wie jenen von Thomas Lieder, die rechtfertigen, warum es doch technische User Stories geben sollte. Einerseits schreibt er selbst sehr richtig: “User Stories sollen eine Anforderung eines Nutzers an das System beschreiben. Technische Teilaufgaben sollten daher eigentlich immer Teil einer User Story sein und dann in diesem Kontext umgesetzt werden.” [1]  BRAVO! Sehr gut!

Aber dann … anstatt einen Weg zu beschreiben, wie sich das Team selbst um diese User Story herum organisieren kann, gibt er nach: “(…) Es wird aber auch immer wieder technische Aspekte geben, die nicht direkt einem Kundennutzen zugeordnet werden können, z.B. der Umstieg auf eine neue Datenbankversion, weil die bisher genutzte aus der Wartung fällt, oder die zu komplex sind, um als Task einer User Story behandelt zu werden.” ACHTUNG: Das ist eine Sackgasse!

Seine Lösung, die User Stories zu formulieren ist zwar elegant und sieht auch auf den ersten Blick sehr vielversprechend aus, sie verfehlt jedoch am Ende eine der entscheidenden Grundlagen der Product Entwicklung nach der Idee des New New Product Development Games. Die Idee in Scrum war immer, dass das Team alles daran setzen soll zu liefern, wie bei einer Task-Force tun. Im Backlog stehen ausschließlich die Dinge, die vom Team (als Auftrag) geliefert werden sollen. [2]

Merke: Das Backlog ist KEINE AUFGABENLISTE UND BESCHREIBT AUCH NICHT, WAS ALLES GETAN WERDEN MUSS um etwas zu liefern, und es soll schon gar nicht zur RECHTFERTIGUNG von Arbeit dienen.

Thomas Lieder schreibt weiter: “In dieser Form (in seiner Variante) lassen sich Sinn und Wichtigkeit technischer Aufgaben leichter dem Product Owner vermitteln.” Darum geht es aber nicht. Der Product Owner muss nicht verstehen, warum wir technische Aufgaben zu erledigen haben.

Meine Vermutung ist: Die Entwickler, das Team, lagern mit technischen User Stories die Verantwortung für eine technische Aufgabe an den PO aus. Das ist nichts anderes als die traditionelle Projektmanagement-Idee wieder bei der Hintertür hereinzulassen und in Scrum zu implementieren. Der PO sagt in diesem Fall an, was ein Team zu tun hat. Nicht mehr, was es LIEFERN soll.

Aber die Verantwortung dafür, was ein Team zu tun hat, um die Funktionalität zu liefern, liegt beim Team und dafür muss sich das Team nicht vor dem PO rechtfertigen.

[1] http://blog.setzwein.com/2011/04/04/technische-user-stories/

[2] Ken Schwaber, Jeff Sutherland und Mike Beedle, haben das ursprünglich anders beschrieben. Für sie war es, vor der Zeit der User Stories, auch OK, technische Arbeitsaufträge ins Backlog zu schreiben. Aber bitte bedenkt, das ist vor mehr als 10 Jahren geschrieben worden. Die Best Practice in Scrum haben sich weiterentwickelt.

„Mut“ ist jener Wert von Scrum, mit dem sich Boris Gloger am stärksten identifiziert. Er hat in seinem eigenen Leben keine Angst vor radikalen Entscheidungen und vor dem Glauben an eine Idee. Für kein Geld der Welt würde er sich Regeln unterwerfen, die keinen Sinn machen. Er glaubt an Scrum, weil es nicht nur bessere Produkte, sondern auch eine bessere und menschlichere Arbeitswelt schaffen kann.
  • Daniel Berger

    Hi Boris,

    wie würdest du mit größeren Architektur-Refactorings umgehen, die das Team als notwendig erachtet, um langfristig performanter zu arbeiten oder um Risiko zu minimieren? Insbesondere, wenn das Team argumentiert, dass das Refactoring des. Legacy-Codes nicht in genügend kleine Teile zerlegt werden kann, um diese im Rahmen der Kunden-User-Stories durchzuführen?

    Gruß Daniel

  • Boris Gloger

    Hi Daniel, meine 3 min Antwort auf deine Frage ist:

    a) diese Idee mit dem langfristig performanter zu arbeiten. Das klingt nach einer Aufräum-Aktion. Das kann man als Teil jeder einzelnen Story machen. Jedesmal wenn man den Code anfasst hinterlässt man ihn besser.

    b) Legacy Code — super Thema und damit könnte man Bücher füllen. Frage: Wie will man bei einer solchen Aktion sicherstellen, dass man nichts zerstört, wenn man nicht zuvor die Test Cases für die existierende Funktionalität in Form von automatisierten Regression Test abgesichert hat. Auch das geht wieder nur über das kontinuierliche Arbeiten pro Story.

    c) Noch was — wo liegt der Business Value der erhöhten Performance? Gibt es einen bewerteten und evaluierten architektonischen Constrain, der vom PO eingestellt worden ist? Wenn ja, wieso erst jetzt, wenn nein, dann brauche ich auch nichts zu machen.

    d) wenn du c) mit ja beantwortest, dann hat man es mit einer Migration, einer Änderung der Rahmenbedingungen zu tun, das heisst alle existierenden Stories sind nicht mehr valide, weil sie den neuen Level of Done nicht mehr entsprechen. DANN kann man die neue Architektur als Neu-Implementierung der Stories umsetzen.

  • http://iqupi.wordpress.com/ Stephan Voigt

    Hallo Boris,

    Dein Artikel greift eine der täglichsten Fragen im Scrum auf, die einem fast ständig über den Weg laufen. Die Entwickler sehen als einzige unter die Haube, und oft graut’s Ihnen da, besonders bei “gewachsener” Individualsoftware. Natürlich waren das immer die Vorgänger, die den grauenvollen Code/Architektur verzapft haben. Dennoch ist die Folge, dass bei kleinsten Änderungen (Bugs oder User-Stories) oft umfangreiche Code Teile angefasst werden müssen bzw. erst erforscht werden müssen. Und: oft gibt es keine Tests hierfür.

    Also (siehe oben Antwort Teil a) dann alles besser hinterlassen, ok. Aber:
    1. Was wird mit den Dingen, die man dabei noch so entdeckt? (Das kann uferlos werden)

    und 2.: Was ich dann doch gern wüsste, wäre ein Hinweis, wie man mit o.g. Beispiel (“… der Umstieg auf eine neue Datenbankversion, weil die bisher genutzte aus der Wartung fällt,…”) umgeht? Einfach an die erste beste User-Story pappen? Oder “Technische Tage” zwischen den Sprints?

    Gruß Stephan

  • Thomas

    Ich würde das nicht ganz so eng sehen, wie Boris und würde daraus eine Story machen, gerade im Fall der Datenbank ist es durchaus sinnvoll. Natürlich kann man das auch so lange drehen und wenden, bis sich da ein Mehrwert ergibt: Die neue Datenbank ist schneller/sicherer/wartungsfreier und damit günstiger…

    Aber man muss nun wirklich nicht Scrum so dogmatisch sehen :) Vor allem gibt es hier ja auch nichts vor.

    • Boris Gloger

      Hi – ich sehe es gar nicht dogmatisch, sondern nur prinzipiell. Wir sind totale Pragmatiker. Klar, macht eine Story daraus, wenn es hilft. Aber muss ich die dann nicht zuerst im Sprint machen? Sonst …. Dann kann ich es auch als Task der ersten Story sehen, oder?

      • Stephen

        Nein kann ich nicht. Zumindest nicht wenn ich die Stories für meine Dokumentation benötige (also z.B. wissen will mit welchem Sprint meine neue DB released wurde).

        Womit meine Frage hinreichend beantwortet wäre.

        Danke :)

  • Pingback: Ressourcen zu Scrum()

  • Boris Gloger

    Hi, ganz wichtig – macht, was funktioniert. Aber gewahrt der Einfachheit. Manchmal wird aus einer guten Absicht ein Fehler. Dann machen Teams plötzlich nur noch technische Tasks.

  • Stephen

    Und was heisst das jetzt genau? Technische Stories nicht über den PO gehen lassen sondern beim Planning direkt oben aufs SprintBacklog hängen (was ich gut finde)? Oder zwei Leute aus dem Team nehmen, denen die Migration aufs Auge drücken und sagen “meldet euch wenn ihr fertig seid” (was ich nicht so gut fände)?

    • Boris Gloger

      Hi … :) es gibt keine technischen Stories. Dein Thema Migration betrifft die Constraints, also die Rahmenbedingungen der ursprünglichen Lösung. Damit veränderst du alles. Genau das wird aber bei der Idee der technischen Story nicht deutlich.

  • Pingback: Ressourcen zu Scrum | Sebastian Schneider()