Aktuelle Aktivitäten

Kanban-Missverständnisse, Teil 1

In den letzten Tagen gab es auf Twitter einige interessante Fragen zu Kanban. Diese zeigen, dass es in der Community noch so manche Missverständnisse über die neue Methodik gibt.

Johannes Link stellte auf Twitter eine sehr interessante Frage:

Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer wasserfall-artigen Arbeitsaufteilung?

(Im Dialog mit Johannes, den Sie auf Twitter nachlesen können, hatte ich Probleme, in 140 Zeichen darzustellen, was ich meine, deshalb hier dieser ausführliche Blog-Artikel.)

Der Grund für das, was die Kanban-Fans tun, ist wohl dieser: In Kanban gibt es fünf Schritte oder Kern-Eigenschaften der Methode:

  1. Visualisiere den Workflow
  2. Limitiere angefangene Arbeit (work in progress)
  3. Messe und manage den Fluss
  4. Mache Prozessrichtlinien explizit
  5. Benutze Modelle (wie z.B. ToC), um Möglichkeiten zur Verbesserung zu erkennen

Der erste Schritt “Visualisiere den Workflow” tut genau das: Auf einem Taskboard stellt man dar, wie der aktuelle Workflow des/der Teams gerade ist. Nicht mehr und nicht weniger. Manche Teams beginnen mit Spalten wie “backlog, in progress, done” wie in XP oder Scrum und machen gute Erfahrungen damit. Andere Teams fügen weitere Spalten hinzu, wenn sie glauben, dass es nötig ist.

Beispiele für Workflow-Visualisierung

Ein Beispiel: In einem Scrum-Team, das ich aktuell coache, erkannten wir in einer Retrospektive, dass die Entwickler die Features oft sehr zeitnah entwickelten, die Karten auf dem Taskboard aber trotzdem sehr lange Zeit in der Spalte “in progress” verbrachten.

backlog in progress done

Der Grund war: Unsere Definition of Done schrieb vor, dass der Akzeptanztest durch den Product Owner Bestandteil des Begriffes “done” sein musste. Der Product Owner war jedoch in weiteren Projekten involviert und hatte fast nie sofort Zeit zu testen, sobald ein Feature fertig geworden war. Es bildete sich beim P.O. ein “Test-Stau” mit unangenehmem Ergebnis: Es gab öfters einmal ungetestete Karten, die dann eben nicht zum Sprint-Ergebnis gezählt werden konnten und sollten.

Dies wollten die Entwickler sichtbar machen und fügten dem Taskboard eine Spalte “acceptance test” hinzu. Nun konnte man erkennen, wie sich dort die Karten stapelten bis der Product Owner sie gegen Ende des Sprints abräumte – eine risikoreiche Vorgehensweise.

backlog in progress acceptance test done

Ein anderes Scrum-Team, das ich kenne, verwendet eine separate Spalte mit der Überschrift “GUI design”. Dort werden Karten aufgehängt, die fast fertig entwickelt und auch schon inspizierbar sind, jedoch noch ohne eine richtig schöne und ergonomische Oberfläche, die danach erst durch eine externe UI-Designagentur geschaffen wird. Erst wenn die UIs von dort zurückkommen, wird die Karte auf “acceptance test”, danach auf “done” geschoben.

backlog in progress GUI design acceptance test done

Vom Workflow zum Wasserfall

Zurück zur Frage von Johannes: Warum zeigen die Kanban-Leute wasserfall-artige Taskboards? Antwort: Sie tun es nicht – sie zeigen lediglich Workflows. Was ist der Unterschied? Ein Workflow ist einfach eine Reihe von Arbeitsschritten, die hintereinander ausgeführt werden. Um daraus einen Wasserfall zu machen, muss man mindestens noch folgende negative Eigenschaften hinzufügen:

  1. Das “100% Losgröße”-Syndrom: Man führe jeden Workflow-Schritt mit 100% aller Anforderungen durch und gehe erst danach zum nächsten Schritt des Workflows. Auf keinen Fall das, was schon getan ist, schon mal in den nächsten Workflow-Schritt weiterreichen – das könnte ja unvollständig aussehen!
  2. Das Isolations-Syndrom: Man lasse die Leute, die in einem Workflow-Schritt arbeiten, auf keinen Fall mit den Leuten aus einem anderen Workflow-Schritt zusammenarbeiten. Also darf ein Analyst niemals mit einem Architekten und dieser auch niemals mit einem Entwickler reden – alle dürfen nur über Dokumente miteinander kommunizieren, die durch ausführliche Reviews abgesichert und dann unterschrieben sind.

Kanban geht gegen den Wasserfall vor

In Kanban ist beides nicht der Fall. Mit der Kanban-Methode versucht  man im Gegenteil die Durchlaufzeit eines Features durch den Workflow zu minimieren. Wer Littles Gesetz kennt, weiß, dass das mit 100% aller Anforderungen nicht geht, sondern je weniger “work in progress” (angefangene Arbeit) man hat, desto kürzer ist die Durchlaufzeit. Deshalb limitiert man in Kanban die Zahl der gleichzeitig in Arbeit befindlichen Features.

Jeder, der arbeitet, soll die Gelegenheit haben, sich zu konzentrieren – also limitiert man die Zahl der Features z.B. auf 4, wenn man 3 Entwickler hat. Die drei Entwickler sollten im wesentlichen immer an je einem  Feature arbeiten, es sei denn, dieses ist blockiert, weil man auf eine Antwort wartet oder weil eine Ressource fehlt, die man braucht. Dann darf man sich ausnahmsweise ein 4. Feature ziehen.

Je geringer die Menge gleichzeitig angefangener Arbeit, desto geringer ist auch die Zahl der Fehler, die man einbaut. Menschen arbeiten wesentlich korrekter, wenn sie konzentriert sind. Dies reduziert die Zahl der Überarbeitungen, die notwendig sind, um ein Vielfaches!

Auch die Isolation, die im Wasserfall typisch ist, gibt es in Kanban nicht. Da Kanban aus dem agilen Umfeld stammt, ist Kommunikation ein hohes Gut. Man sollte immer mit den Leuten reden, die am selben Feature gearbeitet haben oder arbeiten werden wie man selbst. Der Entwickler wird den Business Analysten oder den Architekten fragen, der Tester wird den Entwickler fragen, was hinter gewissen Zusammenhängen eigentlich steckt. Viel besser ist es natürlich, wenn Business Analyst und Entwickler zum selben cross-funktionalen Team (wie in Scrum) gehören und das Feature gemeinsam analysieren und realisieren.

Die Kraft des Vakuums

Oben habe ich das Beispiel mit dem überlasteten Product Owner erwähnt, bei dem sich ein Test-Stau bildete. In Scrum würde man dies jetzt auf die Impediment-Liste des Scrum-Masters schreiben und dieser würde gegen den Effekt zu kämpfen beginnen. In Kanban würde man das vermutlich folgendermaßen lösen: Man würde für die Spalte “acceptance test” ein WIP-Limit einführen und z.B. auf die Menge einschränken, die der Product Owner in einem Time-Slot, den er sich bei seinen vielen Projekten nimmt, bewältigen kann. Hat er ab und zu mal zwei Stunden Zeit und kann darin 3 Features sauber testen, so würde man das “work in progress”(WIP)-Limit auf 3 setzen. Was würde dann passieren?

Schließen Sie die Augen und überlegen Sie eine Minute, bevor Sie weiterlesen!

Die Entwickler würden jedesmal, wenn sie etwas fertig haben, eine Karte in die Spalte “acceptance test” schieben. Kommt der Product Owner nicht zum Testen und enthält die Spalte nun 3 Karten, würden die Entwickler einfach aufhören zu entwickeln. Sie würden stattdessen vielleicht refaktorisieren, Urlaub machen, Schulungen besuchen, Kaffee trinken oder andere sinnvolle Tätigkeiten durchführen. Beim morgendlichen Stand-Up würden sie diese Tatsache auch sofort bekanntgeben.

Das Risiko, den Sprint mit einer ungetesteten Featuremenge zu beenden, würde dadurch drastisch abnehmen. Das Team inklusive P.O. wäre plötzlich als Gesamtsystem erkennbar, das einfach nicht in der Lage ist, mehr zu leisten als der P.O. fertigbekommt. Der P.O. wäre ganz klar als Bottleneck erkennbar.

Was würde als nächstes passieren, wenn niemand interveniert? Denken Sie einen Moment nach…

Das Vakuum greift um sich

Wenn die Entwickler weniger tun, staut sich plötzlich alles im Backlog zurück. Nehmen Sie an, wir hätten mittels Kanban auch die Länge des Backlogs limitiert. Die Leute, die bisher dem Product Owner geholfen haben, Features zu beschreiben und ins Backlog zu bringen (nennen wir sie “fachliche Analysten”), wären dann plötzlich ebenfalls arbeitslos, weil sie nichts mehr in das bereits volle (weil limitierte) Backlog stellen dürfen.

Oh, hier haben wir Analysten, also fachlich geschulte Leute, die frei sind! Was tun wir mit denen? Wir machen sie zu Testern, die zunächst einmal den Stau von Akzeptanztests abbauen und dadurch den P.O. entlasten. Damit wird die Spalte “acceptance test” wieder frei, die Entwickler nehmen die Arbeit wieder auf und produzieren wieder. Im Backlog werden dadurch wieder Plätze frei, also können die Analysten ihre eigentliche Arbeit wieder aufnehmen und neue Backlog-Items produzieren. Der Propfen löst sich.

Von der Taktik zur Strategie

Das gerade geschilderte Verhalten ist sicherlich nicht optimal, doch hat es erst einmal geholfen. Das Management wird inzwischen von der Aktion gehört haben und sich entscheiden, mehr Tester einzustellen, die dem Product Owner helfen. Die Tester kommen langsam auf Touren und der Propfen wird sich dann nicht mehr bilden müssen.

Die Antwort auf die Frage nach dem Wasserfall

Johannes Frage von oben könnte man nun anders formulieren:

Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer so ausführlichen Arbeitsaufteilung (so viele Spalten auf dem Taskboard)?

Weil sie zeigen wollen, was wirklich passiert. Das dreispaltige Scrum-Taskboard zeigt eben nicht, dass in der Sprint-Mitte typischerweise viel WIP entsteht, besonders bei unreifen Scrum-Teams, die noch nicht lange dabei sind. Führt man mehr Spalten ein, bildet man die Realität im Team u.U. besser ab und kann auf Effekte aufmerksam machen, die man vorher übersehen hat.

D’accord, Johannes?

Die Auferstehung eines Acer Aspire One

Manchmal überkommt mich ein Bastelzwang, wenn ich wieder zu lange zu ernsthaft gearbeitet habe. Das war heute auch wieder so.

Ich hatte mich entschieden, auf meinem Acer Aspire One Netbook eine neue Linux-Version (Ubuntu 10.04) zu installieren. Klappte auch wunderbar. Ubuntu heruntergeladen und auf einen USB-Stick geschrieben, mit dem Stick den Rechner gebootet und Ubuntu ganz einfach parallel zu Windows auf der Festplatte installiert. Rechner neu gebootet, und ich konnte mit Ubuntu oder Windows arbeiten, je nachdem, wie ich Lust hatte.

Doch leider: Beim einem der nächsten Restarts der Maschine kam es zu einem Black Screen Of Death, einem in der Acer-Community offenbar wohlbekannten Problem mit einem nicht mehr startbaren BIOS: Schwarzer Bildschirm nach dem Einschalten, keine Bootmeldungen, voller Stopp!

Gott sei Dank war das Problem relativ leicht zu beheben:

Der Aspire One war danach wieder einsatzbereit. Manchmal hat man doch wirklich Glück, obwohl man es herausfordert. :-)

Softwarearchitekten – die machtlosen Anführer

Die neue Ausgabe der Fachzeitschrift OBJEKTspektrum ist seit kurzem auf dem Markt, diesmal mit dem Schwerpunktthema “Architektur und Teams”. Darin finden Sie auch einen Artikel von mir: Emergente Architektur: Der machtlose Architekt. Hier die Zusammenfassung:

Die Softwarearchitektur ist ein wichtiges Artefakt der Softwareentwicklung. Softwarearchitekten müssen kommunikationsstark sein, für die Durchsetzung der Architektur in den Projekten sorgen usw. Das ist die öffentliche Meinung. In der Projektrealität sieht es meist anders aus: Architekturdokumente werden mühsam erstellt, doch im Alltag nicht gelesen. Architekten versuchen, durch Predigen die Einhaltung der Architektur zu erreichen. Teams entwickeln, auch ohne auf die Architektur zu achten. Was wäre, wenn man Architektur emergieren lassen würde, quasi als “Ergebnis des Schwarms”, anstatt sie mit viel Kraft in Einzelleistung zu erstellen? Die folgende Geschichte ist ein Kondensat meiner Erfahrung aus vielen Projekten. Lesen Sie, warum Architektur letztlich nicht von Einzelnen gemacht werden kann, und erfahren Sie, was nötig ist, damit Emergenz möglich wird.

Kanban-Training im Februar 2010

Im Februar gebe ich ein zweitägiges Kanban-Training in deutscher Sprache. Kanban ist ein leichtgewichtiges Prozess-Framework für die Entwicklung von Software. Es überträgt die Kanban-Prinzipien, die ursprünglich im Umfeld von Lean Production entstanden sind, auf die Softwareentwicklung.

Anmeldung und Organisation übernimmt SIGS-DATACOM, auf deren Website Sie weitere Informationen über dieses Training finden können.

Ich freue mich, Sie in Köln zu sehen – das Training wird sehr spannend werden!

This blog is now iPhone-ready!

Today, I upgraded to Wordpress 2.9 and the WPtouch plugin. Now, the users of Apple’s iPhone and other mobile clients can browse this blog more easily. Have fun!

Welcome back, Uncle Bob! [OOP 2010]

At the OOP 2010 conference, Robert C. Martin will give a keynote about polyglot programming, called “The Polyglot Craftsman”.

Hey, Uncle Bob is back at OOP,! For me this is very special because it was him who brought me to object oriented design/programming and to my first OOP conference, ever. And this was back in 1992 when I was a enthusiastic software developer, coding in C. Java did not exist in those days, design patterns were not published, there was no TDD – well, it was just the old days of poorly maintainable code!

Bob, when I came into your workshop about object oriented design at OOP, you started with a very simple example in C++ (at least, I thought it was): a car with an engine. You said something like this:

Bob: “OK, guys, lets define an accelerate() method on the car – what would be inside the body of this method?”. And my head started thinking. Somebody else: “The car should tell the carburator to increase the fuel to air ratio. And it should also tell the automatic transmission to shift one gear up!”

Bob: “OK, so Car::accelerate() calls Carburator::increaseFuelToAirRatio(), followed by Transmission::shiftUp(). Question to all of you: Is this a good design or a bad design?”

And poor me, inexperienced in OOD, could say neither yes nor no: “In fact, I don’t know!”.

Bob, you suddenly shouted “Of course, it is a BAD design, very bad design!”

Me: “Oh, why this?”

Bob: “What if you have a Diesel engine, without carburator? And: What if your car has an electric engine, without transmission?”

Me: “Hmmm… well, I guess, I would have to change the design significantly. Something like Thyristor::increaseElectricCurrent().”

Bob: “Exactly! So, how about introducing a neutral abstraction above all this? How about Engine::increasePower()? And with an intelligent Engine class that knows how to increase the power purely by itself? With nobody telling it how to do that?”

Me: “Aha!”

And so 1992 was the year when I became enthusiastic about object oriented design. Thanks a lot, Bob – I am really looking forward to see you again at this OOP. I guess, you won’t remember me but this is not a problem. :-)

Understanding social media

At the moment, there is a lot of buzz around social media like Twitter. Keyword is “democratizing information”. Social media users are forming new communities with their own rules and “social speak”. There are even web sites like Klout that calculate how much influence you have in social media (when I test my Twitter user account, it says that it has not indexed my tweets, yet).

This is an interesting phenomenon that I am trying to study and understand. Maybe, it is possible to generate something entirely new.

Viele externe Entwickler = schneller alternde Software?

Sowas passiert Ihnen in Ihrem Projekt hoffentlich nie:

Kunde: “Wir verstehen unser Framework nicht mehr. Es ist total verstrickt!”

Berater: “Aber Ihr habt doch gesagt, es sei erst zwei Jahre jung.”

Kunde: “Ja, und?”

Berater: “Sowas passiert doch sonst nur mit viel älterer Software!”

Kunde: “Nein, hier waren viele Externe vom Dienstleister XY dabei, da altert das Framework schneller!”

Berater: “Oh!???”

Null-Constraint bei MySQL entfernen

Bevor ich die Syntax vergesse:

ALTER TABLE my_table MODIFY some_column varchar(255) NULL;

Released OpenID plugin V0.2 for Grails

Today, I released version 0.2 of the OpenID plugin for Grails (really easy to use plugin by original author Marcel Overdijk). The changes I made today:

  • Fixed a bug that caused a MissingPropertyException when user typed an OpenID that did not have a valid provider address
  • Fixed a bug that caused a NullPointerException when user’s OpenID contained syntactical errors
  • Simplified code in the controller so that it is now independent of the configured URL mapping

You can find more information about the plugin on the plugin’s Wiki page.