Schlagwort-Archive: Agile

Das Kanban-Board ist mehr als ein Task-Board

„Wieso, was ist der Unterschied?“ Auf diese Frage stoße ich in Software-Projekten und bei agilen Teams immer wieder. Die Annahme ist, dass mit einem Task-Board das Thema Kanban erfolgreich umgesetzt wurde. Alle Tasks sind auf einem Board platziert und werden entsprechend abgearbeitet. Leider greift dies meist zu kurz – was also ist der Unterschied?

Ein Task-Board dient der Visualisierung und Verwaltung von Aufgaben. Der Status einer Aufgabe ist über Spalten wie “Offen”, “In Bearbeitung” und “Abgeschlossen” erkennbar. Wird ein vermeintliches Kanban-Board in diesem Sinne erstellt, ergeben sich mehrere in Spalten organisierte Aufgaben-Listen. Das Vorgehen in einem Team ist damit aufgabenorientiert.

Das primäre Ziel von Kanban – in der Softwareentwicklung – ist es dagegen, ein System kontinuierlich und evolutionär zu verbessern. In unserem Fall ist das System ein agiles Team, das Software-Features für einen Kunden entwickelt. Für die Umsetzung der Features sind eine Reihe von Aktivitäten notwendig, die mit dem Kanban-Board visualisiert werden. Eine Aktivität ist unverzichtbarer Bestandteil der Wertschöpfung und lediglich ein Schritt in Richtung des Endergebnisses. Auf dem Kanban-Board wird durch die Darstellung aller notwendigen Aktivitäten das Gesamtsystem sichtbar, das Nutzen und Mehrwert für den Kunden erzeugt. Probleme und Hindernisse im Ablauf lassen sich leicht erkennen und können analysiert werden. Im Fokus des Teams steht der Arbeitsfluss mit seinem Kundennutzen.

Fazit – Ein Kanban-Board dient dazu, den Arbeitsfluss der gesamten Wertschöpfungskette zu betrachten. Es ist im oben genannten Kontext nicht dazu gedacht, lediglich Aufgaben zu verwalten.

Tipp – Hilfreich ist aus meiner Sicht die gedankliche Unterscheidung von Aufgabe und Aktivität.

 

Literatur und Quellen

[1] Anderson, David J.: Kanban. Evolutionäres Change Management für IT-Organisationen (German Edition). Heidelberg: dpunkt.verlag 2011.

[2] Leopold, Klaus: Kanban in der Praxis. Vom Teamfokus zur Wertschöpfung. München: Hanser 2017.

Von klassischen Enterprise Applikationen zu Cloud-Native Anwendungen

Mit meinem Team bei der EXXETA AG arbeite ich unter anderem an Enterprise Software-Lösungen für die Cloud. Moderne Web-Anwendungen und Cloud-Transformationen bilden unseren Tätigkeitsschwerpunkt. Dabei geht es nicht einfach darum, bestehende Applikationen in der Cloud auszuführen. Vielmehr sind maßgeschneiderte Software-Architekturen, die passende Organisation und eine entsprechende Kultur gefordert. Ein Cloud-Native Ansatz.

Was bedeutet Cloud-Native konkret? Die Cloud Native Computing Foundation (www.cncf.io) beantwortet diese Frage aus der technischen Perspektive folgendermaßen: Containerisierung, dynamische Orchestrierung, Microservices. Dies bedeutet zum einen, dass alle relevanten Komponenten in einem Container, z. B. Docker, gekapselt werden. Zum anderen werden die notwendige Verwaltung und das Management komplexer Container-Landschaften durch Orchestrierungs-Lösungen wie Kubernetes übernommen. Die Anwendung selbst setzt sich in diesem Szenario aus einer Vielzahl von Microservices zusammen.

Cloud-Native bedeutet darüber hinaus auch die Abkehr von hierarchischen Organisationen mit Projektmanager und Fachspezialisten. Projekte werden durch crossfunktionale Teams mit starkem Fokus auf ein Produkt und dessen Nutzen umgesetzt. Silos wie Software Entwicklung, System Administration, Qualitätssicherung, Betrieb, Releasemanagement oder Projektmanagement werden aufgelöst und durch neue Modelle der Zusammenarbeit wie z. B. DevOps ersetzt.

Die kontinuierliche Auslieferung neuer Funktionalität an Kunden und Nutzer ist ein weiterer Aspekt von Cloud-Native. Dabei sind auf einer technischen Ebene Prozesse und Werkzeuge für Continous Integration und Continous Delivery in den Entwicklungsteams bereits zum Standard geworden. Cloud-Native bedeutet allerdings mehr. Eine Organisation muss auch tatsächlich darauf ausgerichtet sein, neue Funktionalität direkt und auf Ebene von Business-Funktionen oder Microservices produktiv zu nehmen.

Grundsätzlich stellt sich die Frage, warum wir überhaupt einen Cloud-Native Ansatz verfolgen sollten. Was ist unsere Motivation?

Aktuell herrscht weitestgehend Konsens darüber, dass Unternehmen, die sehr schnell auf Kundenbedürfnisse reagieren können, erfolgreicher sein werden als andere. Geschwindigkeit ist entscheidend. Bei vielen Enterprise Applikationen wird ein Releasezyklus allerdings noch immer in Wochen oder Monaten geplant. Das Risiko für ein einzelnes Release ist sehr hoch, Änderungen der Funktionalität sind teuer und aufwendig. Bei einem Cloud-Native Ansatz können Deployments im Gegensatz dazu mehrmals täglich, stündlich oder minütlich durchgeführt werden. Änderungen lassen sich gewissermaßen direkt umsetzen. Das Risiko ein „Release“ zu veröffentlichen reduziert sich damit drastisch. Auch können bei einer Cloud-Native Anwendung auf Basis von Microservices einzelne Business-Funktionen schnell und unabhängig voneinander deployed werden.

Schnell zu sein alleine ist natürlich nicht ausreichend. Ebenso ist es erforderlich, dass das erstellte System die notwendige Zuverlässigkeit aufweist. Klassische Enterprise Applikationen werden oft in einer Designphase vor Entwicklungsstart entworfen, durch umfangreiche Architektur Reviews überprüft, detailliert dokumentiert und langlaufenden Regressionstests unterzogen. Ziel ist immer, die Zahl der Fehlerfälle in Produktion zu verringern. Leider oft wenig erfolgreich.  Durch die Verwendung von Microservices sind unter anderem beim Auftreten eines Fehlers in einer Cloud Native Applikation nur kleine Anwendungsbereiche betroffen. Im Idealfall eben nur der entsprechende Microservice. Um kaskadierende Fehler zu vermeiden, werden Microservices fehlertolerant ausgelegt und lose gekoppelt. Die transparente Überwachung der Anwendung ermöglicht meist auch eine automatisierte Wiederherstellung im Fehlerfall. Nicht zuletzt ist die Einführung neuer Technologien ohne größeres Risiko für das Gesamtsystem möglich, da nur einzelne Services betroffen sind.

Auch die Wirtschaftlichkeit und Effizienz eines Systems sind wichtige Faktoren. In Bezug auf die Skalierbarkeit wird bei klassischen Enterprise Applikationen in vielen Fällen der Worst Case betrachtet. Die dabei gestellte Frage lautet: Welche maximale Last kann unter Umständen auftreten. Entsprechend werden Server und Infrastruktur bemessen. Die meiste Zeit bleiben diese Ressourcen allerdings ungenutzt. Was wenig effizient und teuer ist. Cloud-Native Anwendungen hingegen skalieren horizontal und nutzen nur die aktuell notwendigen Ressourcen. Verwaltet und bereitgestellt durch den Cloud-Provider kann diese Auslagerung die Investitionskosten für Unternehmen erheblich reduzieren. Die horizontale Skalierung einer Cloud-Native Anwendung wird durch den auf Microservices basierenden Architekturansatz optimal unterstützt.

Nicht zuletzt lautet die Prämisse für eine Cloud-Native Anwendung Mobile-First. Enterprise Applikationen wurden noch vor wenigen Jahren für den typischen Fall eines Desktop-Benutzers entworfen. Dies hat sich grundlegend geändert. Es gibt heute eine Vielzahl von Endgeräten und Zielplattformen, der Desktop spielt eine immer geringere Rolle. Mobile Geräte wie Smartphones und Tablets bilden längst die große Mehrheit und sind für den Benutzer immer verfügbar. Dies macht sich im Nutzerverhalten deutlich bemerkbar und hat Einfluss auf die notwendige Systemarchitektur. Einzelne Business-Funktionen werden viel häufiger und zu jedem denkbaren Zeitpunkt genutzt. In diesem Zusammenhang bedeutet Mobile-First natürlich mehr als nur die optimierte Darstellung auf einem kleineren Bildschirm.

Neben den technischen Aspekten ist für die Entwicklung einer Cloud-Native Anwendung also ein ganzheitlicher Ansatz entscheidend. Sowohl Organisation als auch Kultur spielen eine große Rolle. Wie Eingangs erwähnt wird Software heute zwar mit Hilfe agiler Methoden entwickelt und durch Continous Delivery Prozesse automatisiert “ausgeliefert”. Häufig existiert dann allerdings ein organisatorischer Bruch in Form klassischer Test- oder Releaseprozesse. Den Fokus gilt es daher auf Kunden und Nutzer zu legen. Neue Funktionen und damit Mehrwert müssen kontinuierlich zur Verfügung gestellt werden. Dies erfordert die entsprechende Haltung bei allen Beteiligten an der es beständig zu arbeiten gilt. Ganz im Sinne der agilen Softwareentwicklung durch Inspect and Adapt.

 

Literatur und Quellen

[1] Stine, Matt (2015): Migrating to Cloud-Native Application Architectures. Sebastopol, CA 95472: O’Reilly Media.

[2] Cloud Native Computing Foundation: www.cncf.io

Agile Day – JAX 2017

Der Agile Day auf der JAX 2017 in Mainz bot in diesem Jahr ein breites Spektrum an Informationen, Beiträgen und Best Practices zum Thema Agilität in Projekten und Organisationen.

Zunächst ging es um die Erkenntnis, dass Agilität auch in großen Unternehmen funktioniert. Der Weg dorthin wird in der vorgestellten Firma allerdings mit „Permanent Beta“ überschrieben. Die Mitarbeiter benötigen Freiraum für Innovationen und die Möglichkeit, dass Dinge auch mal scheitern.

Weiter ging es mit einem entscheidenden Erfolgsfaktor für jedes Projekt, den Stakeholdern. Wie gelingt eine erfolgreiche Zusammenarbeit und wie werden die Stakeholder optimal ins Projekt eingebunden? Als eine Möglichkeit wird die Priorisierung von fachlichen Anforderungen durch ein dem Planning Poker ähnliches „Geschäftswertpoker“ vorgestellt.

Eines der wichtigsten Instrumente innerhalb von Scrum ist die Retrospektive. Ziel ist die ständige Verbesserung oder Optimierung des Scrum Projekts. Präsentiert wurden unterschiedliche Möglichkeiten eine Retrospektive interessant und abwechslungsreich zu gestalten. Eine gute Retrospektive greift dabei den aktuellen Kontext des Projekts auf und leitet daraus die entsprechenden Verbesserungen ab.

Welche Möglichkeiten zur Optimierung gibt es, wenn große Organisation agile Projekte kapern? Wenn Begriffe wie Scrum Master oder Product Owner lediglich Worthülsen für bestehende Organisationsstrukturen sind. Auf der JAX 2017 wird als entscheidendes Kriterium das Mindset aller Beteiligten genannt, dieses gilt es zu fördern. Im Idealfall können durch eine „agile Analyse“ entsprechende Handlungsfelder identifiziert werden.

Und vielleicht stellt sich für diejenigen die Scrum bereits einsetzen einmal die Frage, was tun wenn mein Scrum kaputt ist? Anhand vieler Beispiele aus der Praxis kamen Themen wie Product Owner vs. Team, Technische Schulden oder zu große User Stories zur Sprache. Dabei wurden jeweils konkrete Tipps zur möglichen Problemlösung gegeben.

Zum Abschluss beantworteten die Speaker des Tages gemeinsam die Fragen der Teilnehmer. Ein kleiner Konsens konnte dabei erzielt werden: Auch einmal Nein zu sagen! Vielleicht zum Management das ausführliche Reportings fordert. Oder gegenüber dem  Kunden der einen festen Scope zu einem festen Termin möchte. Die Herausforderung bei erfolgreichen agilen Projekten liegt darin, das Umfeld und das passende Mindset zu schaffen!