“Jede menschliche Aktivität, die Ressourcen verbraucht, aber keinen Wert erzeugt.“
Wallace J. Hopp
In manchen Diskussionen versteigt sich der Software Entwickler ins Japanische und spricht von Kaizen, Mura und Muri, Seiri und Seiton. Diese Begriffe stammen alle aus dem Bereich des Lean-Managements, mit dem die japanischen Hersteller die Produktionsverfahren revolutioniert haben.
Was in der Produktion funktioniert, kann selbstverständlich auch in der Software Entwicklung genutzt werden. Kaizen, der kontinuierlichen Verbesserungsprozess, ist mittlerweile Bestandteil jeder modernen Entwicklungsstrategie.
Bevor jedoch mit Kaizen die Prozesse verbessert werden können, muss das Ziel der Verbesserung klar sein. Im Lean Management ist es Ziel, den Wert für den Kunden zu erhöhen. Dabei ist der direkte Wert für den Kunden gemeint, im Fall der Software Entwicklung also nützliche Features in einem funktionierenden Programm. Eine Spezifikation oder ein Projektplan sind keine Werte für den Kunden.
Um den Wert für den Kunden zu verbessern, müssen also wertschaffende Tätigkeiten verbessert werden und andere, verschwenderische Tätigkeiten, reduziert oder ganz beseitigt werden. Bis zu diesem Punkt können sich viele mit dieser Philosophie identifizieren, denn Muda (Verschwendung) zu vermeiden, klingt vernünftig.
Wer aber genau darüber nachdenkt, erkennt in der Software Entwicklung eine Menge Verschwendung. Ein Issue Tracker, um die bekannten Defekte der eigenen Anwendungen zu verwalten, ist Verschwendung. Die Verwendung erscheint zwingend, weil sonst Informationen zum Problem und seine Lösung verloren gehen. Verfolgt man aber ein Null-Fehler-Prinzip, dann reicht für tatsächliche Fehler einige Post-It Notizen.
Es werden allgemein sieben Arten der Verschwendung in der Produktion beschrieben und wer Akronyme mag, merkt sich TIMWOOD.
Transport Das Bewegen von Produkten und Produktteilen kostet Geld, beeinträchtigt deren Qualität und bringt keinen Mehrwert. In der Software Entwicklung entsteht diese Verschwendung, wenn Kundenwünsche über viele Stationen an die Entwicklung weitergereicht wird, die Umsetzung durch mehrere Team stattfindet. Diese Verschwendung kann reduziert werden, indem Kundenwünsche direkt bei dem Team eingebracht werden, das die Funktionalität implementiert
Inventory In der Produktion sind dies Lagerbestände. In der Software Entwicklung sind dies alle nicht fertig gestellten Features, die noch auf die Auslieferung warten. Sie benötigen weiterhin Pflege und produzieren Kosten ohne einen Mehrwert. Dabei muss es sich nicht nur um Software in einem Feature-Branch handeln, auch nicht begonnene User-Stories und der Inhalt des Issue Trackers gehören dazu. Damit die Bestände reduziert werden, dürfen neue Aufgaben erst begonnen werden, wenn andere Aufgaben beendet wurden.
Motion In der Produktion der Mitarbeiter der ein Ersatzteil am anderen Ende des Firmengelände abholen muss. In der Software Entwicklung der Mitarbeiter der an vielen Meetings teilnehmen oder fehlende Informationen suchen muss. Aber auch ein Entwickler, der durch Störungen häufig seinen Fokus wechseln muss, ist in Bewegung. Hier hilft es das Development Team und den Produkt Owner in direkter Nachbarschaft zu platzieren und unvollständige Aufgaben sofort an den Auftraggeber zurückzuspielen.
Waiting Auf irgendetwas warten ist Verschwendung. In der Software Entwicklung können es fehlende Details zur User-Story sein, nicht rechtzeitig fertiggestellte Bibliotheken oder Schnittstellen, ein nicht beendeter Task eines Kollegen, ein ausstehender Code Review oder Akzeptanz Test, lange Build-Zeiten des eigenen Moduls oder zu wenige Slots auf dem Build-Server sein. Warten ist immer ein Resultat von Prozessen, die nicht harmonisieren oder Resourcen-Engpässe.
Over-Processing Sind Arbeiten am Produkt die unnötig sind oder Dinge hinzufügt die niemand braucht. In der Software Entwicklung sind dies in der Hauptsache komplizierte Lösungen für einfache Probleme. Meist mit der Idee im Hinterkopf, einen zukünftigen Mehrwert zu schaffen oder mögliche Probleme zu umgehen. Der Einsatz von KISS und YAGNI helfen diese Verschwendung zu stoppen.
Overproduction Wer zuviel produziert, muss den Überschuss verwalten, transportieren und produziert dabei auch mehr Fehler. Daher ist Überproduktion eine Hauptquelle von Verschwendung. In der Software Entwicklung können dies Features sein, die niemand benötigt, Dokumentationen, die niemand liest, Spezifikationen, die verworfen werden.
Defects Schlechte Qualität in der Produktion führt zu defekten Teilen, die weggeworfen oder teuer repariert werden müssen. Beides ist Verschwendung. In der Software Entwicklung sind dies in der Hauptsache, die Bugs, die sich in der Software bemerkbar machen. Automatisierte Tests können frühzeitig helfen Fehler zu fixen. Es sollte allerdings klar sein, dass automatisierte Tests auch Verschwendung sind. Besser ist es die Ursachen für viele Fehler zu eliminieren, indem die Kundenanforderungen und ihre Auswirkungen besser besprochen werden.
Wer Kaizen anwenden möchte, wird schnell erkennen, dass der kontinuierliche Verbesserungsprozess, schwieriger ist, als 7 Arten der Verschwendung zu vermeiden. Denn die Verschwendung ist integraler Bestandteil der bestehenden Prozesse und Arbeitsabläufe. Wer Verschwendung reduziert, erhöht nicht nur wertschöpfende Tätigkeiten, er verteilt sie auch anders.