# Kanban (Entwicklung)

Kanban ist eine Methode mit Ursprung in der Softwareentwicklung, bei der die Anzahl paralleler Arbeiten, der Work in Progress (WiP), begrenzt und somit kürzere Durchlaufzeiten erreicht und Probleme – insbesondere Engpässe – schnell sichtbar gemacht werden sollen.

## Wurzeln und Geschichte

Das japanische Wort Kanban bedeutet ursprünglich ‚Signalkarte‘ (kan ‚Signal‘, ban ‚Karte‘) und ist eine Technik aus dem Toyota-Produktionssystem, mit der ein gleichmäßiger Fluss in der Fertigung hergestellt und so Lagerbestände reduziert werden sollen. Der Schwerpunkt liegt dabei auf dem optimalen Fluss jedes einzelnen Produktes durch die Fertigung. Kanban in der Informationstechnik (IT) übernimmt zwar den Namen, versucht aber keine direkte Übertragung einzelner Techniken aus der Produktion auf die IT. Vielmehr werden einige grundlegende Prinzipien aus der Lean Production (‚Schlanke Produktion‘), und mehr noch dem Lean Development (auch Lean Product Development), übernommen und ergänzt durch die Theory of Constraints und das klassische Risikomanagement. Insbesondere die Ideen Don Reinertsens, der verschiedene Techniken vorstellt, wie sich Produkte in wesentlich kürzerer Zeit entwickeln lassen, spielen eine wichtige Rolle in Kanban. Als Begründer von Kanban in der IT gilt David J. Anderson, der zuvor an der Entwicklung von Feature Driven Development mit beteiligt war und 2010 das erste Buch zu Kanban veröffentlichte.

## Prinzipien und Praktiken

Anderson beschreibt sechs Prinzipien und sechs Praktiken, die Unternehmen in ihre Arbeitsweise integrieren, wenn sie Kanban anwenden:

### Prinzipien

Change-Prinzipien
* Starte mit dem, was jetzt getan wird: In diesem Grundprinzip stecken zwei Dinge. Indem man mit dem beginnt, was man gerade tut, beendet man die aktuelle Arbeit, bevor etwas Neues begonnen wird. Genauso ist hier aber auch die Aussage enthalten, dass Kanban einfach eingeführt werden kann, alle bestehenden Rollen, Prozesse und Verantwortlichkeiten bleiben bestehen.
* Führe Einigung darüber herbei, Verbesserung durch evolutionäre Veränderungen anzustreben: Weiterentwicklung ist essentiell, hier sollen Verbesserungen aber vor allem durch kleine/evolutionäre Schritte erreicht werden.
* Fördere Handlungen von Leadership auf allen Ebenen: Verbesserung kann nur funktionieren, wenn sich alle Ebenen in der Organisation daran beteiligen. Besonders wichtig ist es, dass Mitarbeiter, die direkt die Arbeit verrichten, „Acts of Leadership“ zeigen und konkrete Verbesserungsvorschläge einbringen.
Service-Erbringungs-Prinzipien
* Verstehe die Bedürfnisse und Erwartungen der Kunden und fokussiere Dich auf diese
* Manage die Arbeit, lass die Menschen sich selbst um die Arbeit herum organisieren
* Entwickle das Netzwerk aus Services und dessen Regeln häufig weiter, um Ergebnisse zu verbessern

### Praktiken
#### Visualisiere

    Die Wertschöpfungskette mit ihren verschiedenen Prozessschritten (zum Beispiel Anforderungsdefinition, Entwicklung, Dokumentation, Test, Inbetriebnahme) wird gut sichtbar für alle Beteiligten visualisiert. Dafür wird ein Kanban-Board (in der Regel ein großes Whiteboard) verwendet, auf dem die unterschiedlichen Aktivitäten als Spalten dargestellt werden. Die einzelnen Anforderungen (es können Tasks, Features, User Stories, Minimal Marketable Features (MMF) usw. sein) werden auf Karteikarten oder Haftnotizen festgehalten und durchwandern mit der Zeit als so genannte Tickets das Kanban-Board von links nach rechts.

#### Limitiere die parallele Arbeit (das WIP)

    Die Anzahl der Tickets (Work in Progress – WiP), die gleichzeitig innerhalb einer Aktivität bearbeitet werden dürfen, wird limitiert (WiP-Limit). Wenn beispielsweise die Entwicklung gerade zwei Tickets bearbeitet, und das Limit für diese Aktivität zwei beträgt, darf sie kein drittes Ticket annehmen, auch wenn die Anforderungsdefinition ein weiteres bereitstellen könnte. Hierdurch entsteht ein Pull-System, bei dem sich jede Aktivität ihre Arbeit bei der Vorgängeraktivität abholt, anstatt fertige Arbeit einfach an die nächste Aktivität zu übergeben.

#### Steuere den Arbeitsfluss

    Die Mitglieder eines Kanban-Prozesses messen typische Größen wie die Durchlaufzeit, die Lieferrate und das WIP, um festzustellen, wie gut die Arbeit organisiert ist, wo man noch etwas verbessern kann und welche Versprechen man an die Kunden geben kann, für die man arbeitet. Dadurch wird die Planung erleichtert und die Verlässlichkeit gesteigert.

#### Mache Regeln explizit

    Um sicherzustellen, dass alle Beteiligten des Prozesses wissen, unter welchen Annahmen und Gesetzmäßigkeiten man arbeitet, werden möglichst alle Regeln der Zusammenarbeit, die es gibt, explizit gemacht. Dazu gehören z. B.
   * eine Definition des Begriffes „fertig“, ähnlich der Definition of Done in Scrum,
   * Bedeutung der einzelnen Spalten,
   * Antworten auf die Fragen: wer zieht, wann zieht man, wie wählt man das nächste zu ziehende Ticket aus der Menge der vorhandenen Tickets aus (Pull-Kriterien)

#### Implementiere Feedbackschleifen

    In festgesetzten Terminen gibt sich das Team (oder die Teams untereinander) gegenseitig Feedback.
    Beispiele:
   * Retrospektiven: Zusammenarbeit revue passieren lassen
   * Standup Meeting: Absprache anstehender Aufgaben / Blockaden ansprechen / Fluss koordinieren
   * Operation Reviews: Kanban-Teams des Unternehmens treffen sich und tauschen Erfahrungen aus

#### Verbessere gemeinsam, entwickle experimentell weiter

Die Visualisierung und die Begrenzung des WiP sind einfache Mittel, mit denen rasch sichtbar wird, wie schnell die Tickets die verschiedenen Aktivitäten durchlaufen und wo sich Tickets stauen. Die Stellen, vor denen sich Tickets häufen, während an den nachfolgenden Aktivitäten freie Kapazitäten vorhanden sind, werden als Bottlenecks bezeichnet. Durch Analysen des Kanban-Boards können immer wieder Maßnahmen ergriffen werden, um einen möglichst gleichmäßigen Fluss zu erreichen. Beispielsweise können die Limits für einzelne Aktivitäten verändert werden, es können Puffer eingeführt werden (insbesondere vor Bottlenecks, die durch nur zeitweise Verfügbarkeit von Ressourcen entstehen), die Anzahl der Mitarbeiter an den verschiedenen Aktivitäten kann verändert werden, technische Probleme werden beseitigt usw. Dieser kontinuierliche Verbesserungsprozess (japanisch: Kaizen) ist wesentlicher Bestandteil von Kanban.

## Kaizen

Kanban enthält als festen Bestandteil eine Kultur des kontinuierlichen Verbesserungsprozesses (KVP), gibt aber keine konkreten Kadenzen hierfür vor. In vielen Kanban-Teams haben sich aber mindestens die folgenden drei Kadenzen etabliert:

### Tägliche Statusmeetings (Standup-Meetings)

    Das Team trifft sich täglich (in der Regel morgens) vor dem Kanban-Board. Dort wird anhand der Tickets der Projektfortschritt seit dem letzten Meeting deutlich gemacht. Außerdem werden Probleme verdeutlicht und Lösungswege besprochen. Das Meeting ist allerdings auf Kürze angelegt (zirka 15 Minuten), so dass längere Diskussionen ausgelagert werden.

### Operations Reviews

    In Kanban werden so genannte Operation Reviews abgehalten. Dies sind Meetings, die der kontinuierlichen Verbesserung dienen. Sie weisen Ähnlichkeiten zu Retrospektiven auf, wie sie aus anderen agilen Methoden bekannt sind. Allerdings finden Operation Reviews unregelmäßig statt. Und sie streben eine hohe Objektivität an, indem sie sich stärker auf die gesammelten Daten aus der Vergangenheit beziehen. Weiterhin wird versucht, dass an diesen Meetings Teilnehmer aus der gesamten Organisation teilnehmen (inklusive Management), und nicht nur das Entwicklungsteam.

### Root Cause Analysis

    Probleme sollen in Kanban nicht verwaltet, sondern behoben werden. Dies geschieht im Wesentlichen dadurch, dass durch das Kanban-Board Fehler schnell deutlich werden, zum Beispiel weil sich Arbeit staut, einzelne Aktivitäten nicht ausgelastet sind, die Durchlaufzeiten zu lang sind oder einzelne Tickets ständig an derselben Aktivität bleiben. Die Fehlerursachen sollen schnell ausfindig gemacht und schnell beseitigt werden (gegebenenfalls durch die Zusammenarbeit des gesamten Teams).

## Value, Flow und Waste Elimination

Kanban orientiert sich am Grundsatz aus dem Lean Thinking “Value Trumps Flow, Flow Trumps Waste Elimination” (deutsch: „Wert geht über Fluss, Fluss geht über Beseitigung von Verschwendung“). Dies bedeutet, dass zwar großer Wert darauf gelegt wird, Verschwendung zu beseitigen (zum Beispiel unfertige Aufgaben) und einen möglichst gleichmäßigen Fluss zu gewährleisten, dass an erster Stelle jedoch stets der Wert der zu erledigenden Tickets steht. Deshalb kann es auch gerechtfertigt werden, ein Kanban-Limit kurzfristig zu brechen, um ein sehr wichtiges Ticket schneller zu bearbeiten oder Features schon im Vorwege detailliert zu spezifizieren, obwohl ungewiss ist, ob/wann sie tatsächlich realisiert werden.

## Priorisierung

Um zu entscheiden, welche work items zu welchem Zeitpunkt in das Kanban-System genommen werden, wird häufig nach dem Schema der Verzögerungskosten (Cost of Delay) priorisiert, das auf Reinertsen/Smith zurückgeht. Die Idee dahinter ist, dass es nicht nur Kosten verursacht, neue work items zu bearbeiten, sondern dass auch Kosten dadurch entstehen, wenn diese mit Verzögerung auf den Markt gebracht werden. Streng genommen handelt es sich dabei nicht um „Kosten“, sondern um Verzichtskosten. Standardmäßig ist davon auszugehen, dass ein work item umso mehr Verzögerungskosten verursacht, je später es am Markt ist. Die Frage ist dann, wie teuer jeder weitere Tag/Woche/Monat Verzögerung ist und wie sich diese Kosten im Verhältnis zu den Verzögerungskosten für andere work items verhalten. Es gibt aber auch work items bei denen über einen gewissen Zeitraum gar keine Verzögerungskosten anfallen, diese dann aber an einem fixen Termin schlagartig ansteigen (und dann sogar das gesamte Unternehmen gefährden können), oder auch kritische work items die von Beginn an hohe Verzögerungskosten verursachen.

## Service-Klassen

Wenn ein Kanban-System installiert wird, werden zu Beginn in der Regel alle Tickets gleich behandelt. Das bedeutet, dass diejenigen Tickets, die zuerst in der ersten Aktivität erledigt wurden, auch zuerst in der nächsten Aktivität bearbeitet werden. Dieses Vorgehen wird als FIFO (First In – First Out) bezeichnet. Oft wird jedoch schnell deutlich, dass Tickets mit verschiedener Wichtigkeit behandelt werden. Deshalb wird in Kanban vorgeschlagen, verschiedene Service-Klassen (Classes of Service) zu definieren:

### Beschleunigt (Expedite)

    Diese Tickets müssen mit hoher Priorität behandelt werden. Es kann nötig sein, dass das gesamte Team seine momentane Tätigkeit stoppt, um dieses Ticket zu bearbeiten. Für diese Service-Arten werden häufig die Kapazitätslimits der einzelnen Aktivitäten vorübergehend außer Kraft gesetzt.

### Fester Termin (Fixed-Date)

    Wenn eine Funktionalität erst zu einem fixen Termin benötigt wird (zum Beispiel weil dann eine Gesetzesänderung wirksam wird), dann werden die entsprechenden Tickets so durch das Kanban-System geschleust, dass die Funktionalität kurz vor diesem Stichtag produktiv geht.

### Vage (Intangible)

    Wenn der Geschäftswert und/oder die Verzögerungskosten für eine neue Funktionalität vage sind, werden die entsprechenden Tickets nachrangig behandelt. Das Team kann zum Beispiel definieren, dass sich zu jedem Zeitpunkt nur ein solches Ticket im System befinden darf.

### Standard (Standard)

    Alle anderen Tickets zählen zur Standard-Serviceklasse. In der Regel werden sie nach FIFO behandelt. Das Team kann jedoch auch andere/zusätzliche Regeln definieren.
Die Service-Arten werden maßgeblich bestimmt durch die Art der Verzögerungskosten, die mit den jeweiligen work-items verbunden sind.

## Varianzen

Auch wenn es unrealistisch ist, dass alle Anforderungen exakt dieselbe Größe haben bzw. immer in nahezu derselben Zeit erledigt werden können, wird in Kanban-Systemen angestrebt, diesem Ideal möglichst nahezukommen. Ein Ziel von Kanban ist es daher, die Varianzen zu verringern. Dies geschieht, indem zum Beispiel User Stories in Tasks möglichst gleicher Komplexität heruntergebrochen werden.

## Tracking

In Kanban-Systemen werden verschiedene Maße (Metriken) aufgezeichnet, um empirische Daten für zukünftige Verbesserungen zu sammeln:

### Cumulative Flow Diagram (CFD)

    Das kumulative Flussdiagramm kann als Weiterentwicklung der Burnup-Diagramme angesehen werden, die in XP und (teilweise) Scrum verwendet werden. Allerdings zeigt ein CFD nicht nur an, wann wie viele Tasks erledigt werden, sondern es visualisiert die Zustände in allen Aktivitäten des Kanban-Systems (z. B. Entwicklung, Dokumentation, Test usw.). Es macht so schnell deutlich, wo sich die Bottlenecks befinden.

### Work in Progress (WiP)

    Dieses sehr einfache Diagramm zeigt an, wie sich die Anzahl der Tasks und Stories entwickelt, die sich gleichzeitig im Kanban-System befinden. Eine stetig steigende Kurve signalisiert dabei in der Regel ein Problem (zum Beispiel immer mehr blockierte Tickets).

### Durchlaufzeit

    In einem einfachen Liniendiagramm wird dargestellt, wie viele Tickets pro Woche erledigt wurden.

### Fehlerrate

    Durch dieses Diagramm wird kontrolliert, wie sich die Anzahl an Fehlern über die Zeit entwickelt. Weil Kanban auf kurze Durchlaufzeiten ausgerichtet ist und eine Grundannahme lautet, dass kurze Durchlaufzeiten nur durch hohe Qualität zu erreichen sind, liegt ein wichtiges Ziel von Kanban immer in der Reduzierung der Fehlerrate.

## Anwendungsbereiche

Die Anwendungsbereiche von Kanban sind sehr vielfältig. Momentan wird Kanban hauptsächlich in diesen Fällen eingeführt:
* Ein Team, das bereits agil vorgeht (zum Beispiel nach Scrum), sucht nach weiteren Verbesserungsmöglichkeiten. Kanban stellt hierbei eine Möglichkeit dar, noch flexibler mit den Anforderungen umzugehen, die Durchlaufzeiten zu verkürzen, häufiger freizugeben und fokussierter zu arbeiten.
* Für klassisch ausgerichtete Unternehmen, die zum Beispiel nach dem Wasserfall-Modell vorgehen, stellt es häufig eine zu große Herausforderung dar, ein agiles Vorgehen wie Scrum einzuführen, weil hierfür recht weitreichende Veränderungen nötig sind. In diesem Fall bietet Kanban den Vorteil, dass Änderungen evolutionär eingeführt werden können, ohne dass dies unmittelbar größere Änderungen nötig macht.
* Für Bereiche, die durch starke Arbeitsteilung und Spezialisierung gekennzeichnet sind, ist Kanban häufig attraktiver als andere agile Methoden, in denen häufig gefordert wird, dass die Teams aus Generalisten bestehen und keine Wissensinseln vorhanden sind. Dies scheint aber für einige Bereiche unrealistisch zu sein.
* In Bereichen mit hohen Unsicherheiten sind ungestörtes Arbeiten und Iterationen fester Länge wie in Scrum kaum möglich. Hier kann Kanban mit den verschiedenen Service-Arten die bessere Wahl darstellen.

## Zertifizierung

David Anderson gründete die David J. Anderson School of Management in Bilbao und die Kanban University in Seattle, die Personenzertifizierungen zu Kanban anbieten. Bis heute wurden weltweit über 120.000 Personen Kanban-zertifiziert.

## Verhältnis zu anderen Vorgehensweisen
### Wasserfall

Auch wenn die Aktivitäten auf einem Kanban-Board häufig genau den Schritten des Wasserfallmodells entsprechen, besteht hier kein zwingender Zusammenhang. Insbesondere ist Kanban darauf angelegt, dass die einzelnen Tickets möglichst schnell alle Aktivitäten durchlaufen und dann auch regelmäßig freigegeben werden. Kanban arbeitet also mit kleinen Schritten, die regelmäßig überprüft und gegebenenfalls wieder korrigiert werden. Allerdings lässt sich Kanban auf ein existierendes Wasserfall-Modell aufsetzen und kann dazu führen, dieses allmählich schneller und flexibler zu gestalten.
Der Unterschied zum klassischen Wasserfall wird insbesondere dadurch deutlich, dass im Wasserfall das gesamte Produkt seriell die einzelnen Produktionsphasen durchläuft, bei Kanban dagegen einzelne „Werkstücke“ bzw. Produktanforderungen. Insbesondere versucht man bei Kanban, die batch size, d. h. die Menge gleichzeitig in das Produktionssystem eingegebener Anforderungen, zu reduzieren.

### Scrum

Kanban weist viele Gemeinsamkeiten mit dem agilen Produktentwicklungsframework Scrum auf, steht jedoch in keinem zwingenden Verhältnis zu diesem. Weder muss man zuerst Scrum einsetzen, bevor man Kanban einführt, noch schließen sich beide Ansätze komplett aus. In gewisser Weise lässt sich Scrum als eine mögliche Implementierung von Kanban ansehen. Der Hauptunterschied zwischen beiden Ansätzen besteht darin, dass Scrum ein team-zentrierter Ansatz ist und Kanban primär die Wertgenerierung entlang der Wertschöpfungskette optimiert.
Nach Henrik Kniberg lassen sich folgende Gemeinsamkeiten und Unterschiede zwischen Scrum und Kanban ausmachen.

#### Gemeinsamkeiten von Kanban und Scrum

* schlank („lean“) und agil
* Pull-System
* begrenzen WiP
* setzen auf Transparenz, um den Prozess zu verbessern
* fokussieren darauf, möglichst schnell und möglichst häufig releasefähige Produkt-Inkremente auszuliefern
* basieren auf selbstorganisierenden Teams
* erfordern, dass Anforderungen in kleine Einheiten heruntergebrochen werden
* In beiden wird der Releaseplan immer wieder optimiert, indem empirische Daten ausgewertet werden (Team-Geschwindigkeit / Durchlaufzeiten)

#### Unterschiede zwischen Kanban und Scrum

| Kanban | Scrum |
| Iterationen sind optional. Es kann unterschiedliche Takte für Planung, Releases und Prozessverbesserung geben. | Iterationen mit gleichen Längen sind vorgeschrieben. |
| Commitments sind optional. | Das Team commitet sich auf ein Sprint Ziel. |
| Die Durchlaufzeit (Cycle Time) wird als Basis-Metrik für Planung und Prozessverbesserung verwendet. | Die Team-Geschwindigkeit (Velocity) ist die Basis-Metrik für Planung und Prozessverbesserung. |
| Cross-funktionale Teams sind optional. Experten-Teams sind erlaubt. | Cross-funktionale Teams sind vorgeschrieben. |
| Keine Vorschrift bezüglich der Größe von Anforderungen. | Anforderungen müssen so aufgeteilt werden, dass sie sich innerhalb einer Iteration erledigen lassen. |
| WiP wird direkt limitiert. | WiP wird indirekt limitiert (durch die Menge an Anforderungen, die in einen Sprint passt). |
| Schätzungen sind optional. | Schätzungen sind vorgeschrieben. |
| Neue Anforderungen können zu jedem Zeitpunkt an das Team gegeben werden, falls Kapazitäten frei sind. | Während eines laufenden Sprints können keine neuen Anforderungen an das Team gegeben werden. |
| Gibt keine Rollen vor. | Schreibt drei Rollen vor (Product Owner, Scrum Master, Entwicklungs-Team). |
| Ein Kanban-Board kann von mehreren Teams und/oder Einzelpersonen geteilt werden. | Ein Sprint-Backlog gehört einem einzelnen Team, das Product-Backlog kann zu mehreren Teams gehören. |
| Ein Kanban-Board wird kontinuierlich weitergepflegt. | Das Sprint-Backlog wird nach jedem Sprint gelöscht und neu aufgesetzt. Das Product-Backlog wird kontinuierlich weitergepflegt. |
| Priorisierung ist optional. | Schreibt vor, dass alle Einträge im Product-Backlog priorisiert sein müssen. |