Archives

Showing posts with label Agile. Show all posts
Showing posts with label Agile. Show all posts

Sunday, April 3, 2011

Agile Developer Skills und Software Craftsmanship

Im JavaMagazin 01/2011 ist ein Artikel zum Thema Agile Developer Skills. Welche Fähigkeiten gehören zu einem Agile Software Developer? Der Autor wird auch in Kürze ein gleichnamiges Buch veröffentlichen, das schon in Amazon vorbestellt werden kann.

Skill Stufen

Es werden verschiedene Skill-Stufen unterschieden, angelehnt an die japanische Metapher Shu-Ha-Ri. Das ist vergleichbar mit den Lehrling-Geselle-Meister Stufen.
"Shu: Lernen der Grundlagen, Regeln und Heuristiken. In dieser Stufe gibt es einen Meister und vorgegebene Regeln, die der Lehrling lernt, anzuwenden.
Ha: Die Regeln sind in Fleisch und Blut übergegangen, man konzentriert sich auf die Ausnahmen, hinterfragt die Regeln und entwickelt seinen eigenen Stil.
Ri: Es gibt keine isolierten Regeln mehr, alles ordnet sich in einen natürlichen Fluss ein."
Ich hatte in der Vergangenheit immer folgendermaßen unterschieden:



Stufe 1 (Lehrling): Ausführung nur unter mehr oder weniger intensiver Anleitung (vergleichbar mit "Shu").
Stufe 2 (Geselle): Ausführung eigenständig; gemäß Lehrbuch (oben noch "Shu"). Man kann halt schon programmieren, aber "nur" genau so, wie man es gelernt hat. Es ist sehr wichtig lange genug genau so zu programmieren, wie man es im Lehrbuch gelesen hat! Dazu ein Zitat von Ron Jeffries: "My advice is to do it by the book, get good at the practices, then do as you will. Many people want to skip to step three. How do they know?"
Stufe 3 (erfahrener Geselle): Ausführung eigenständig; pragmatische, effiziente Arbeitsweise (oben "Ha"). Nach jahrelanger Praxis, kann man (das was man erlernt hat) nun selber bewerten. Man verwendet viele wiederverwendbare Bibliotheken zur Effizienzsteigerung und bricht auch mal (kontrolliert) Regeln, weil man vielleicht ein anderes Ziel erreichen möchte (Beispiel: Anpassbarkeit vs. Performance) oder weil die Rahmenbedingungen nicht idealtypisch sind (Beispiel: es gibt keine fachlichen Anforderungen).
Stufe 4 (Meister): Man kann andere anleiten (oben "Ri").

In dem Artikel wird weiter zwischen harten und weichen (sozialen) Skills unterschieden.

Harte Skills

Zu den wichtigsten technischen Fähigkeiten eines agilen Entwicklers gehören laut den Autoren:
Nicht berücksichtigt in der Auflistung ist all das Basiswissen, das ein Entwickler (agil oder nicht agil) beherschen sollte: OO Prinzipien, Architekturmuster, Datenbanken, Betriebssysteme, Applikationsserver, Entwicklungsumgebung, Netzwerke, Middleware etc. Die Auflistung bezieht sich also auf zusätzliche spezielle Fähigkeiten von Entwicklern in agilen Teams. Ich würde hier z.B. folgende Punkte ergänzen, die als Grundlage im Bereich OO Anwendungsdesign dienen:

Soft Skills

Im Artikel werden vor allem folgende Soft-Skills betont:
  • Fähigkeit zur Teamarbeit
  • Aktives Zuhören (den anderen durch nachfragen verstehen wollen)
  • Fragen (vor allem: nach Hilfe und Hilfeleistung)
  • Argumentieren (seine eigene Sicht in die Diskussion einbringen und vertreten)
  • Respekt: die Meinung des anderen ist auch legitim ...
  • Vertrauen untereinander (nicht: Fehler nur kritisieren, Schuldzuweisungen)
  • Phasen der Gruppenarbeit kennen und durchleben wollen (Forming, Storming, Performing)
Ich würde folgende praktischen Ratgeber empfehlen:
Ich finde auch die Werte von Extreme Programming als Leitlinien sehr gut. Die XP Werte sind: Einfachheit, Kommunikation, Feedback, Mut und Respekt.

Skills entwickeln

Das geht gemäß Artikel wie folgt:
  • Bücher lesen
  • Wikis, Communities, und Blogs besuchen und gestalten
  • Konferenzen besuchen
  • Eigene Blogs schreiben
  • Lernen in Retrospektiven im eigenen Team
  • Pair Programming
Das war eine knappe aber runde Einführung in das Thema agile Skills. Das ist eine Menge Holz, aber es ist ja bekanntlich noch kein Meister vom Himmel gefallen und: täglich dazu lernen ist in unserem Geschäft normal. Einen guten Ansatz finde ich (als Ergänzung zum agilen Manifesto) die Idee des Software Craftsmanship: unsere Disziplin (Programmierung) als Handwerkskunst zu verstehen und "ehrenwürdig" zu vertreten.
Read More >>

Wednesday, March 16, 2011

Modellierung - Was ist ein gutes Modell?

Als Entwickler und Architekt modelliert man ja hin und wieder. Irgendeinen komplexeren Sachverhalt, den man sich selbst klar machen will, oder anderen erklären möchte. Wenn man sich den Sachverhalt (Fachliches Problem, technisches Design) selber durch ein Modell veranschaulichen möchte, dann gibt es eigentlich wenig zu sagen, wie man das machen sollte. Man will es ja nur selbst anschauen. Wenn man jedoch anderen Kollegen etwas darstellen möchte, dann wird es schon etwas anspruchsvoller. Dann stellt man sich auch mal die Frage: ist das jetzt ein gutes Modell?



Für mich ist Modellierung oft wichtig, um (während man implementiert) das zu lösende Problem erstmal analytisch zu durchdringen: was ist "es" womit ich mich beschäftige und wie sieht es aus? Was sind die einzelnen Begriffe, mit denen ich in meiner Domäne zu tun habe und wie stehen sie in Beziehung? Das stelle ich dann i.d.R. als Klassendiagramm dar (vgl. Abbildung 1). Darin zeichne ich die im Problembereich entdeckten Klassen wie Person, Kunde, Rechnung aber auch Erfindungen aus dem Design: Controller, Command, Adapter, Factory. Ein Kunde ist eine Person, er bekommt mehrere Rechnungen usw. usw. Wenn ich die Struktur meiner Problemdomäne ersfasst habe, frage ich mich: wie verhält es sich, z.B. bei Aufrufen durch den Client? Dann mache ich noch ein Sequenzdiagramm (vgl. Abbildung 2). Nun ergeben sich neue Erkenntnisse und ich ändere das Klassendiagramm wieder. Nach einiger Zeit stabilisiert sich der Entwurf. Dann habe ich das Problem verstanden. Dieses Vorgehen bietet sich an, (1) wenn man etwas komplexes implementieren will, und auch, (2) wenn man den komplexen Code von anderen Entwicklern verstehen möchte.

Abbildung 1: Beispiel für ein Klassendiagram

Abbildung 2: Beispiel für ein Sequenz-Diagramm

Kommen wir zurück zu dem Thema Kommunikation. In meinem ersten UML Buch stand der Satz: "Modelling is all about communication". Anhand eines Modells möchte man selber genauer verstehen worum es geht bzw. eine Lösung entwerfen (Analyse und Design eines Problems). Es geht bei Modellierung aber vor allem auch um die Weitergabe von Wissen, denn: man ist nicht der einzige Entwickler im Team und jetzt muss ich anderen meine Idee erklären, oder ihnen erklären worum es eigentlich geht in diesem Projekt. Und: ein Bild sagt mehr als 1000 Worte! Jetzt spätestens muss man höhere Anforderungen an die Qualität seines Modells haben. Es wird komplizierter, andere Menschen "sind mit im Spiel". Modelle werden dann häufig größer, dann hat man plötzlich ein High-Level-Modell und weitere Modelle, die die Details erklären. Schnell stößt man auf die Frage: Wann ist ein Modell wirklich gut? Mir ist zur Beantwortung der Frage vor allem folgende Passage von Booch im Gedächtnis geblieben:
"In order to be useful as a visual communication device, any diagram must be aesthetically pleasing as well as correct. As such, analysts should judge their schemas by the following rules:

If it looks messy, it’s probably wrong.
If it’s too complex, it’s probably wrong.
If it’s too big, it’s probably wrong.
If people don’t like it, it’s probably wrong.
If it doesn’t work, it is wrong."
Das ist aus dem Buch „Object Oriented Analysis and Design“ (Addison-Wesley Professional, 1994). Ich finde das hilft wirklich weiter. Und vor allem betont es, dass Modelle nicht nur einem selbst gefallen sollen, sondern vor allem einem Zweck dienen: nämlich Wissen an andere zu übertragen.
Read More >>

Sunday, January 30, 2011

Continuous Feedback

Ich weiß nicht ob das richtig oder zweckmäßig ist, aber bei jeder neuen Technologie frage ich mich: was ist das essentiell Neue an dieser Technologie? Was macht die Technologie im Vergleich zu anderen aus? Die Beantwortung der Frage hilft mir die Idee hinter der neuen Technologie zu begreifen und dann auch in der Folge die Technologie richig anzuwenden.



So bin ich auch zu der Fragestellung gekommen, was an agilen Methoden so neu ist, was ist der Unterschied? Warum funktioniert das so gut? Das beschäftigt mich im Moment und ich habe dazu auch schon einen Blog Eintrag geschrieben. Dort beschreibe ich auch, warum funktionsübergreifende Teams so gut "funktionieren". Ein wichtiger Aspekt in diesen Teams ist, dass man von allen Interessengruppen (insb. auch dem Kunden) regelmäßiges, kurzfristiges und direktes Feedback bekommt. Das habe ich in meinem Blog Eintrag schon als Continuous Feedback bezeichnet. Über diesen Punkt habe ich dann länger nachgedacht und festgestellt, dass viele agile Techniken direkt darauf ausgerichtet sind kurzfristige und kontinuierliche Rückmeldung über die Qualität der Arbeitsergebnisse zu bekommen. Wo findet kontinuierliche Rückmeldung in einem agilen Umfeld statt? Ein paar Beispiele:

Kontinuierliche Rückmeldung vom Kunden

Der Kunde ist in einem agilen Projekt idealerweise Teil des funktionsübergreifenden Teams. Auf diese Weise sieht er das Ergebnis nicht alle paar Wochen oder Tage (im besten Fall), sondern er kann den gesamten Entwicklungsprozess begleiten und aktiv beeinflussen. Er korrigiert unfertige Entwicklungsstände der Entwickler, anstatt auf das Deployment zu warten. Die Entwickler können auch fragen: "... meintest Du das so?" Dann zeigen sie dem Kunden die neue Maske, die geradeentwickelt wird. Das so eingesammelte direkte Feedback reduziert Aufwand und erhöht die fachliche Qualität der deployten Software in der Testumgebung.

Kontinuierliche Rückmeldung von den Entwicklerkollegen

Auch die direkten Entwickler-Kollegen geben sich andauernd Feedback in einem agilen Team. Dies geschieht z.B. beim Pair Programming, über das tägliche Stehmeeting oder in der Kaffee-Küche. Auch der Sachverhalt, das die Teams in einem Büro sitzen sollten, verbessert das Feeback der Kollegen untereinander. So wird die produktorientierte Qualität der Software erhöht, also der Teil der Software, den der Kunde meistens garnicht wahrnimmt. (Der Kunde hat kein Interesse daran, ob das Programm gut "deignt" ist. Er versteht nicht, dass es die Folgekosten und Entwicklungsgeschwindigkeit bei Änderungen beeinflusst.)

Kontinuierliche Rückmeldung über die objektiv messbare Qualität

In einer Continuous Integration Umgebung wird die Anwendung regelmäßig kompiliert, zusammengebaut, analysiert (statische Sicht auf den Code) und getestet (dynamische Sicht). Dabei wird im Idealfall mehrfach am Tag integriert. So hat man einen objektiven Qualitätsstand der Anwendung und kann beobachten, ob man objektiv betrachtet besser oder schlechter geworden ist. Man bekommt kontinuierlich Feedback über die wichtigste Messgröße: läuft meine Software?

Kontinuierliche Rückmeldung über den Nutzen der Software

In kurzen Releasezyklen, also z.B. alle vier Wochen, wird die Software in Produktion gegeben. Dadurch hält man zum einen die Menge der zu entwickelnden Funktionen überschaubar (Prinzip "Teile und Hersche"), zum anderen weiß man aber auch zeitnah, ob die Software wirklich den erhofften Nutzen bei den Anwendern erzielt. Man weiß also frühzeitig, ob man insgesamt auf dem richtigen Weg ist. Spart man wirklich wie erhofft Kosten durch die Prozessautomatisierung? Baut sich der Stau im Auftragseingang im Fachbereich ab? Diese Fragen beantworten sich früh, wenn alle vier Wochen eingeführt wird.

Das waren konkrete Beispiele für kontinuierliches Feedback in einem agilen Projekt. Es gibt bestimmt auch andere Beispiele. Ich wollte in dem Blog nur das Konzept näher bringen. Jetzt muss ich den Kreis nochmal zur Eingangsfrage schliessen. Die Frage war: was ist in agilen Vorgehensweisen so besonders Neues? Neben Konzepten wie Selbstregulation und Selbstorganisation könnte das beschriebene Konzept des Continuous Feedback eine übergeordnete Rolle spielen.

Bei Continuous Feedback geht es um die Ausrichtung des Teams auf kontinuierliche Rückmeldung über die Qualität der einzelnen Arbeitsergebnisse.

Dieser einzelne Punkt ist vielleicht ähnlich wichtig wie die Fähigkeit sich selbst zu organisieren, bzw. die kontinuierliche Rückmeldung stellt auch bei der Selbstorganisation ein wichtiges Grundkonzept dar. In diesem Sinne handelt es sich um ein Querschnittskonzept, dass in verschiedenen Einzelkonzepten "eingewoben" wird. Das ist vergleichbar mit einem Security Konzept für eine Software. Sicherheit kann man auch nicht an einer Stelle einbauen. Stattdessen werden alle Programmteile davon beeinflusst. Was für Security bezogen auf ein Software-System gilt, ist übertragbar auf das Prinzip der kontinuierlichen Rückmeldung in einem agil organisierten Projekt. Die einzelnen organisatorischen Elemente (bzw. agilen Techniken) werden jeweils mit Continuous Feedback versehen.
Read More >>

Saturday, January 22, 2011

Essential differences in agile and traditional software development processes

When I talk to my management or other developers they often express that they see Agile Software Development and Software Engineering as conflictive approaches to software development. To me that's not exactly a true story. One reason I say that is that you will (most likely) not go to university to become an "Agilist", right? Instead you go there to become a Software Engineer, you want to learn
"[...] a systematic approach to the analysis, design, assessment, implementation, test, maintenance and re-engineering of a software by applying engineering to the software [...]"
And yes, here, "systematic" does also mean "agile". Consequently, I look at Agile Software Development as being a sub-discipline in Software Engineering. In that broad subject area "Agile" is "only" a specific category of software development processes. Now, I totally agree that Agile Processes differ from more traditional approaches like Waterfall Model, Spiral Model or Iterative and incremental Development. But what's the essential difference? To me the following characteristics are extremes in a continuum of different software development philosophies:



"heavyweight" vs. "leightweight"

Traditional software development processes are considered heavyweight. What does that mean? Firstly, they were described in comprehensive (very dry) process documents. Nobody I know really ever read through these documents. They were just to large. Secondly, these processes also suggested lots of documentation during the software development process. It was the firm conviction of the authors of these processes that one could measure project progress with "finished" documents.

In agile Methods the only work product that one can measure project progress is "running software". Documents (if created) fulfill just the purpose to create a running piece of software. In an agile team you prefer coding rather then documenting, if both of it leads to success. And again, success means deploying high quality software to production. Only the software adds value to our client's business. In addition, the process description of agile processes are very condensed. These processes suggest only a minimal set of work products and meetings. Therefore, agile processes are considered lightweight.

"micromanaged" vs. "self-organizing"

Another essential difference between agile and traditional processes is in the freedom of acting individuals. In agile processes the developers can choose the tools, techniques and individual procedures that lead to success in their opinion. They organize and regulate themself. In traditional processes every little step that the individual is allowed to take is documented. The behaviour of the individual is regulated by the process. The team is organized in exactly the way that the process suggests. That's probably one of the biggest issues of traditional processes: they define the complete process in detail without knowing the problem to solve. In agile processes the teams adapt to the concrete problem they have to resolve. They do that by self-regulation and self-organization.

"cross-functional" vs. "processoriented" (Teams)

Another important difference in traditional processes and agile processes lies in the way they suggest to organize the teams of a project. In waterfall oriented projects you will often see that individuals are organized along the development process. You have an analysis team, a development team and a test team. In agile teams all skills are organized into one single cross-functional delivery team. That team includes the client, the business analyst, the developers, the testers and so on. That way every person involved gets immediate feedback about the work done. In a traditional organization the analysis team works on a funtional specification and then they "throw" it across the fence. Then the developers wonder what the analysis team meant by all that. Continuous feedback about results is not build into that kind of organization.

"developercentric" vs. "managementcenric"

When I look at the process description of traditional development processes my impression is: they were defined so that (project) management can get in control of a software project. Measuring, organizing, regulating, controlling, meetings etc. The process description adresses management problems. In agile process descriptions most (if not all) of the techniques described directly adress the problems of the developers or the team. The focus is to get the individual and the team going, not to get the management in control of the project. To me, the developer (the guy that has to do the job!) is in the middle of interests in agile process descriptions.

That is what I can see as essential differences between traditional processes and agile processes. I am not saying that's all. What's your opinion to that? 
Read More >>

Wednesday, January 5, 2011

Was bedeutet agil?

Im Moment werde ich häufig mit der Frage konfrontiert, was Agilität eigentlich bedeutet. Ich arbeite in einem Unternehmen, dass (Gott sei Dank) nicht jeden Hype mit macht. Deswegen diskutiere ich mit vielen verschiedenen Leuten über dieses Thema. Dabei werde ich mit verschiedenen Meinungen und auch missverständlichen Aussagen konfrontiert. Diese Aussagen möchte ich in diesem Artikel kommentieren.


Zu den häufigsten Aussagen, die mir im Gedächtnis geblieben sind  gehören:

- agil bedeutet "ohne Dokumentation zu entwickeln"
- agil bedeutet "nicht zu modellieren"
- agil und ingenieurmäßig sind gegensätzliche Vorgehensweisen
- in agilen Projekten lässt sich der Fortschritt nicht messen oder kontrollieren
- agil funktioniert nicht für komplexe Großprojekte
- die Anforderungen an die Entwickler in agilen Projekten sind höher
- in komplexen Großprojekten lässt sich nicht alle 4 oder 6 Wochen ein Produktionsrelease freigeben
- um Agilität einzuführen ist ein umfangreiches Veränderungs-Management notwendig

Bedeutung: Agilität

Ich werde hier keine Definition erarbeiten, was Agilität oder Agile Software Entwicklung im Allgemeinen bedeutet. Das ist auch garnicht notwendig. Wer daran interessiert ist, kann sich hier einen Überblick verschaffen:


Agile Softwareentwicklung als Regelkreis

Später im Blog möchte ich zu den oben erwähnten Aussagen Stellung nehmen. Dazu möchte ich noch ergänzend zu den genannten Artikeln beschreiben, wie sich ein agiles Projekt als Regelkreis darstellen lässt.


Abbildung 1: Neutraler Regelkreis

Abbildung 1 zeigt einen neutralen Regelkreis. Der Regelkreis besteht aus zwei Elementen: dem (1) Regler, der die (2) Regelstrecke steuert. Regler und Regelstrecke sind in Form einer Rückkopplung miteinander verbunden. Diese Rückkopplung ermöglicht eine permanente, zyklische Interaktion. Die Rückkopplung ermöglicht das selbstregulierende Verhalten des Regelkreises. Output der Regelstrecke ist die Regelgröße, die den aktuellen Zustand der Regelstrecke meldet. Die Regelgröße wird laufend mit der Führungsgröße verglichen. Aus der Abweichung zwischen Regelgröße und Führungsgröße generiert der Regler die Stellgröße, mit der das Verhalten der Regelstrecke beeinflusst wird. Neben der Stellgröße wird das Verhalten der Regelstrecke durch Störgrößen beeinflusst.

Das Konzept des Regelkreises übertragen wir nun auf ein agiles (Scrum) Projekt.


Abbildung 2: Regelkreis in einem Scrum-Projekt

Die Führungsgröße in einem agilen Projekt ist das Product Backlog in dem alle (fachlichen und technischen) Anforderungen priorisiert aufgelistet werden. Das funktionsübergreifende Team (der Regler) analysiert das Backlog, vergleicht es mit dem aktuellen Entwicklungsstand der Anwendung (die Regelgröße) und bildet daraus das Sprint Backlog (die Stellgröße). Im Entwicklungsprozess wird die Anwendung entwickelt, einziger relevanter Output der Regelstrecke ist die laufende Software. Als typische Störgrößen, die auf die Regelstrecke wirken können neue Erkenntnisse des Kunden oder Fehlinterpretationen der Entwickler genannt werden.

Falsch: agil bedeutet "ohne Dokumentation zu entwickeln"

Die Aussage, das in agilen Projekten nichts dokumentiert wird, treffe ich sehr häufig an. Agil und "ohne Dokumentation" gehören aber definitiv nicht zusammen. In agilen Projekten ist die einzige relevante Regelgröße (Output des Entwicklungsprozesses) die laufende Software. Das ist in traditionellen Projekten oft anders. Dort wird ein erstelltes Dokument als messbares Ergebnis oder Meilenstein angesehen. Aber was haben wir damit erreicht? Kann der Kunde mit einem Dokument was anfangen? Dokumente sind in agilen Projekten keine Meilensteine, weil sie dem Kunden keinen Nutzen bringen und weil man in Wahrheit damit auch nicht den Fortschritt des Projektes messen kann. Nur die laufende Software ist relevant. Hier wird ultimativ klar, ob die Anforderungen des Kunden richtig umgesetzt worden sind. Deswegen stehen zum Beispiel Entwurfs- oder Analyse-Dokumente nicht im Mittelpunkt des Interesses, sondern dienen nur als Mittel zum Zweck. Wenn es aber hilft die Anforderungen aus dem Backlog umzusetzen, dann wird dokumentiert. Wenn es hilft dem Endbenutzer die neuen Feautures nahe zu bringen, dann wird auch dokumentiert.

Wenn ein Entwickler in einem agilen Team aus Zeitgründen zwischen kodieren und dokumentieren auswählen muss, und er kommt auch ohne Dokumentation zum Ziel (laufende Software), dann entscheidet er sich für kodieren.
   
Falsch: agil bedeutet "nicht zu modellieren"

Diese Aussage ist genauso falsch wie die Aussage zur Dokumentation. Selbst in Extreme Programming (XP), der wohl unformalsten agilen Vorgehensweise, wird vorgeschlagen komplexe/wichtige Teile des Systems zu modellieren, wenn es hilft sauber zu implementieren. Dazu wird aber eher Bleistift und Papier oder das Whiteboard vorgeschlagen, anstatt ein UML Tool.

Falsch: "Agil" und "ingenieurmäßig" sind gegensätzliche Vorgehensweisen

Diese Aussage habe ich aus diesem Artikel entnommen. Folgende Zitate aus dem
Artikel dienen dem besseren Verständnis:
"Sie fragen sich, ob es nicht sinnvoller wäre, die Softwareentwicklung vernünftig ingenieurmäßig aufzubereiten, um deterministisch eine Produktionsqualität, wie z. B. im Fahrzeug- oder im Hausbau, zu erzielen, anstatt sich auf Behelfslösungen wie agile Vorgehensmodelle zu verlassen."
"Ein ausschließlich ingenieurmäßiges Vorgehen funktioniert nicht in komplexen Umgebungen, mit denen wir bei der Softwareentwicklung häufig konfrontiert sind."
Die Aussagen interpretiere ich so, dass nach Meinung des Autors ein "ingenieurmäßiges Vorgehen" im Kontrast stehen würde zum agilen Vorgehen. Der Autor lässt gleichzeitig leider weitgehend offen, was genau mit "ingenieurmäßig" gemeint ist. Das habe ich zum Anlass genommen, und habe auf Wikipedia die Einträge zu Ingenieur und Ingenieurwissenschaften gelesen. Den Einträgen kann ich nichts entnehmen, was gegen agile Vorgehensweisen zur Umsetzung von Software-Projekten spricht. Meinte der Autor mit "ingenieurmäßig" vielleicht "Software Engineering"? Software Engineering wird gerne als Teil der Ingenieurwissenschaften verstanden, erfasst aber alle Bereiche der Software-Technik und damit auch die agilen Vorgehensweisen. Der Begrif "ingenieurmäßig" ist also zumindest irreführend und etwas unglücklich gewählt.

Später im Artikel wird aber auch klar, dass der Autor nicht "ingenieurmäßig" meinte. Eigentlich war gemeint, das agile Verfahren im Kontrast stehen zu formalen, stark prozessorientierten Vorgehensweisen. Letztere haben die Eigenschaften dem Team sehr fein aufzugliedern, wer, was, wann tun soll. Das "wie" wird also nicht dem Individuum (Entwickler, Analyst etc.) überlassen, sondern wird klar vorgegeben. Folgende Zitate (aus Wikipedia) machen eigentlich ganz gut die Gegensätze zwischen agilen und prozessorientierten Vorgehensmodellen klar:
"Agile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams."
"So-called "lightweight" software development methods evolved in the mid-1990s as a reaction against "heavyweight" methods, which were characterized by their critics as a heavily regulated, regimented, micromanaged, waterfall model of development. Proponents of lightweight methods (and now "agile" methods) contend that they are a return to development practices from early in the history of software development."
Aus den Zitaten finde ich folgende Punkte wichtig:

"heavyweight" vs. "leightweight": Wenig vs. viel Dokumentation speziell über Prozess und Kommunikation

"micromanaged" vs. "self-organizing": Wenig Freiraum vs. viel Freiraum für das Team/Individuum

Weiterhin würde ich noch folgende Gegensätze zwischen traditionellen und agilen Verfahren sehen:

"funktionsübergreifend" vs. "prozessorientiert"
Das muss ich ein wenig erklären. Schon im Regelkreis oben habe ich explizit ein funktionsübergreifendes Team eingezeichnet. Es ist wichtig in agilen Projekten, dass alle notwendigen fachlichen und technische Kompetenzen in einem Team sind. Das heist es gibt fachliche und technische Experten in einem Team. Ein Projekt nach Analyse, Entwicklung und Test zu trennen ist nicht der agile Gedanke.

"developercentric" vs. "managementcenric"
Wenn man sich die agilen Verfahren anschaut, dann sieht man schnell, dass alles auf den Entwickler zugeschnitten ist. Die allermeisten agilen Methoden und Techniken sind Techniken direkt für den Entwickler, oder erfordern seine Beteiligung. Der Entwickler, der der ES TUT, steht im Mittelpunkt. Herkömmliche Vorgehensweisen zielen dagegen eher darauf ab, dass das Projektmanagement kontrollieren und messen kann.

Das sind m.E. wichtige Gegensätze, die "agil" von "prozessorientiert" unterscheiden. Weil wir oben den Entwickler als Mittelpunkt des Universums definiert haben, sei an der Stelle auch mal der Fairness halber auf ein wichtiges Problem agiler Vorgehensweisen hingewiesen: Angelehnt an die X-Y-Theorie von Douglas McGregor, wird bei agilen Projekten wohl eher die Theorie Y angenommen - "der Mensch ist engagiert". Denn "self-organizing" setzt Dinge wie Identifikation mit dem Produkt/Job, Verantwortungsgefühl und Interesse voraus. Typische Eigenschaften richtig motivierter Mitarbeiter. Dieses Thema werde ich später noch einmal aufgreifen und auch erklären, was es mit der X-Y-Theorie auf sich hat.

Fazit von allem: Ingenieurmäßig = Software-Engineering = Software-Technik = Obermenge aller Vorgehensweisen inkl. "Agile Software-Entwicklung". Daraus folgt, dass "agil" auch "ingenieurmäßig" ist.

Falsch: in agilen Projekten lässt sich der Fortschritt nicht messen oder kontrollieren

Ich finde das kann man ganz gut an dem oben eingeführten Regelkreis erklären. Ich glaube nämlich das sich der reale Fortschritt eines Projektes nirgendwo besser ablesen läst als in einem agilen Projekt: nämlich durch laufende Software. Schonmal in einem Projekt gearbeitet, dass 3 Wochen vor Ablieferung nochmal 3 Monate Verzug anmelden musste? Oder schonmal 3 Monate an etwas entwickelt, was der Kunde dann später völlig auf den Kopf gestellt hat? Vielleicht lag es daran, dass die falschen Regelgrößen gemessen wurden. Dokumente sind keine verwertbaren Regelgrößen mit denen man den Fortschritt bemessen könnte. In agilen Projekten gibt es nur eine universelle Regelgröße: die laufende Software. Daran kann man abmessen, ob die Anforderungen des Kunden, die im Product Backlog standen, wirklich abgearbeitet wurden.

Es gibt keine bessere Fortschrittskontrolle (Regelgröße im Regelkreis) als laufende Software.

Kein Dokument kann ein laufendes System ersetzen, mit dem der Kunde die ersten Schritte gehen kann. So früh wie möglich und so schnell wie möglich sollte man deswegen dem Kunden die laufende Software zeigen. In agilen Projekten ist das ein wesentliches Kriterium. Wenn man jetzt noch die hoch priorisierten Anforderungen zuerst bearbeitet (die stehen im Product Backlog ganz oben), dann hat man das Maximum an Planbarkeit in einem Software-Projekt erreicht.

Falsch: agil funktioniert nicht für komplexe Großprojekte

Ich habe selbst noch kein großes Projekt mit vielen Personen mit agilen Verfahren entwickelt. Es waren aber schon Projekte mit 20 oder mehr beteiligten Personen. Gehen wir mal davon aus, das Problem, dass durch Großprojekte gelöst werden soll, sei "komplex". Das ist sicher eine Anahme, die alle, die in einem 20+ oder sogar 100+ Personen-Projekt gearbeitet haben bestätigen würden. Im folgenden möchte ich kurz besprechen, was "komplex" eigentlich bedeutet und warum gerade agile Projekte zur Lösung komplexer Probleme gut geeignet sind.

In seinem Artikel Komplexität - Was ist das? erklärt Fredmund Malik was sich hinter dem Begriff Komplexität verbirgt. Der Artikel ist eine schöne Einführung in das Thema. Viele der folgenden Formulierungen sind direkt aus dem Artikel entnommen. Malik schlägt vor, Komlexität als reale, objektive Eigenschaft der Welt, sowohl der natürlichen wie derkünstlichen Systeme anzusehen. Komplexität kann dabei gemessen werden, und zwar mit Hilfe des Komplexitätsmaßes "Varietät". Varietät ist die Anzahl möglicher, unterscheidbarer Zustände, die ein System haben kann.

In der Natur bestehen nach dieser Definition viele Systeme mit astronomisch hoher Komplexität. Wie löst die Natur das Problem der Steuerung dieser Systeme?

"Zwei der wichtigsten kybernetischen Prinzipien der Natur sind Selbstregulierung und Selbstorganisation. Es sind universelle Architektur- und Funktionsgesetzmässigkeiten der Natur."

Diese beiden Prinzipien scheinen die Erklärung zu sein, wie die Natur mit der immensen Komplexität zurecht kommt. Weiterhin führt Malik an:

"Natürliche Systeme haben keine Regler, sie regeln sich selbst; sie haben keine Organisatoren, sie organisieren sich selbst. [...] Bei den Systemen der Natur sind Selbstregulierung und Selbstorganisation Fähigkeiten, die in ihrer Struktur eingebaut sind. Es gibt keine anderen natürlichen Systeme. In den von Menschen geschaffenen Systemen, seien es technische oder soziale Systeme oder Mischformen, kommen Selbstregulierung und Selbstorganisation meistens nicht von allein vor; sie müssen vielmehr gezielt "hineinorganisiert" werden. [...] Die Grundstrategie kybernetischen Managements lautet somit: Organisiere das Unternehmen so, dass es sich so weit wie möglich selbst organisieren und selbst regulieren kann."

Darauf aufbauend formuliere ich folgende These:

Agile Vorgehensweisen sind der Versuch ein Projekt so zu organisieren, dass es sich so weit wie möglich selbst organisieren und selbst regulieren kann.

Warum sehe ich das so? Ich habe oben einen Regelkreis gezeichnet, in dem die agierenden Systemelemente (die Teammitglieder) den Entwicklungsprozess (also sich selbst) regulieren. Es ist genau diese Eigenschaft, die ich aufzeigen wollte. Agile Projekt-Teams regeln und organisieren sich selbst. Es gibt kein formales Vorgehensmodell, dass die Handlungen der Team-Mitglieder streng festlegt. Als Stellgröße für die Regelstrecke käme demnach nicht nur das Sprint-Backlog in Frage, sondern auch z.B. eine neue organisatorische Absprache zwischen zwei Team-Mitgliedern, oder zwischen dem Team und der Umwelt (z.B. mit dem Management). Zentraler Punkt ist, dass das Team sich eigenständig an die zu lösende Aufgabe anpassen soll.

Mein Zweifel an strengen Vorgehensmodellen lautet: ein zu formal festgelegter Entwicklung-Prozess engt das Team auf eine Weise ein, die es dem Team unmöglich macht, sich effizient an eine zu lösende komplexe und unbekannte Aufgabe anzupassen.

Denn: wenn man das Problem nicht kennt und das Problem komplex ist, dann reicht es nicht aus, sich auf einen festgelegten Prozess zur Lösung des Problems zu verlassen. Wie kann das Lösungsverfahren feststehen, wenn man das zu lösende Problem garnicht kennt?

Wir sollten uns also wenn möglich (nicht immer!) von dem "Kontrolle durch Prozesse"-Gedanken verabschieden. Denn:

"Einfache Systeme kann man mit einfachen Mitteln unter Kontrolle bringen. Komplexe Systeme benötigen komplexe Mittel. [...] Um ein System unter Kontrolle zu bringen, benötigt man mindestens so viel Varietät (oder Komplexität), wie das System selbst hat. [...] Der weit verbreitete Slogan "Keep it simple" hat daher seine klare – allerdings eng begrenzte – Berechtigung. Wenn es gelingt, die Dinge einfach zu halten, können die Steuerungs- und Regulierungsmechanismen auch einfach sein."

Ich will's auch mal anders ausdrücken: viele Leute sagen "es liegt an den Personen, die das Projekt machen, ob es ein Erfolg wird oder nicht". Wer das denkt, liegt voll auf der geschilderten Argumentationslinie. Ich erkläre mir diese Aussage nämlich so: Ein gut ausgebildeter, fachlich kompetenter Mensch (oder noch besser: ein ganzes Team) verfügt über eine enorme Varietät was sein Verhalten gegenüber den komplexen Problemstellungen des Projektes angeht. Er kennt immer eine adäquate Lösung, auch für vorher unbekannte Probleme. Keine Dokumentation eines formalen Vorgehens würde die Rolle der Leistungsträger im Projekt (und dessen Varietät im Verhalten) adäquat beschreiben können, oder? Und wenn es das nicht kann, sollen wir dann trotzdem strikt nur das tun, was tatsächlich im Vorgehensmodell beschrieben ist?

Auch Carola Lilienthal widmet sich in Ihrer Dissertation dem Thema Komplexität. Sie führt den Begriff der Verstehenkomplexität an. Dabei geht es um die subjektiv enpfundene Komplexität. Darüber hinaus werden zwei weitere Dimensionen der Komplexität für einen Entwickler angeführt: die Komplexität der Interaktion mit dem Team und die Komplexität der Software selbst. Daraus ergibt sich meine dritte These.

In einem großen Software-Projekt führen zu formale Regelungen bzgl. der Tätigkeit zu einer Erhöhung der Komplexität für den Entwickler.

Denn: der Entwickler muss ja nicht nur feststellen, ob der von ihm gewählte Lösungsweg für eine Aufgabe mit hoher Wahrscheinlichkeit zum Ziel führt. Er muss ja auch feststellen, ob der Lösungsweg im Rahmen des vorgegebenen Vorgehensmodells zulässig ist. Wenn nicht, muss er im schlimmsten Fall eine Genehmigung einholen. Agile Verfahren versuchen vergleichsweise wenig zu reglementieren. So hat der Entwickler einen schnellen Überblick über das, was er wirklich wissen muss. Der Baukasten agiler Praktiken (Pair Programming, Daily Standups, Scrum Boards, Testautomatisierung, Continuous Integration etc.) ist zumindest begrenzt, in jedem agilen Umfeld gleich und flexibel anpassbar.

Fazit: Agilisten machen das, was zur Lösung des Problems nötig ist, und begehen nicht dogmatisch einen vorgegeben Lösungsweg.

Viel positives über den Gedanken der Selbstregulation und -organisation, oder? Ich möchte dem Leser hier aber nicht die Kehrseite der Medaille ersparen. Denn auch mit Selbstregulation und Selbstorganisation kommt es in der Praxis zu Problemen. Einige Gedanken (aus der Wiki-Seite zu Selbsorganisation) seien hier genannt:

Überforderung: Es ist durchaus vorstellbar, dass Mitarbeiter mit starker Freizeitorientierung lieber ein vorgeschriebenes Pensum erledigen, um sich so wenig wie möglich mit dem
„notwendigen Übel“ Arbeit auseinandersetzen zu müssen. Vor allem kann aber die ungewohnte Freiheit zu Beginn Angst und Überforderungsgefühle auslösen.

Konflikte: Das Konfliktpotential ist grundsätzlich höher, wenn Verteilungs- und Kompetenzregelungen fehlen und selbst ausgehandelt werden müssen.

Hohe Anforderung an die Führung: Durch die Selbstorganisation kann es zu einer Abänderung der offiziellen Regeln und autogen entstehenden Regeln kommen, die die Unsicherheit über die tatsächliche geltende Ordnung erhöhen, dies führt zu einem Dilemma der Führungskräfte.

Zeitaufwand und Kosten: Häufige Strukturänderungen, welche auch noch konfliktgeladen sind, erfordern Zeit. Daher kann die Lösungs- und Entscheidungsfindung in selbstorganisierten Systemen länger dauern als bei klaren Vorgaben von oben.

Wie sagt man so schön? Nicht ist umsonst, außer der Tod, und der kostet das Leben ;-)

Richtig: die Anforderungen an die Entwickler in agilen Projekten sind höher

Diese Aussage muss man wohl so stehen lassen. Die Skill-Anforderungen an Mitglieder agiler Projekte sind aus meiner Sicht etwas höher. Ich beziehe mich hier mal auf die schon angesprochene X-Y-Theorie. Dort werden folgende Bilder von Mitarbeitern skizziert:

Theorie X - "der Mensch ist unwillig" - Folgende Attribute prägen dieses Bild: Abneigung gegen Arbeit, meistens muss der Mitarbeiter deswegen gelenkt und geführt werden, er muss "an die Hand genommen" werden. Er zieht Routineaufgaben vor, strebt nach Sicherheit, scheut sich vor Verantwortung. Der Manager muss jeden Handlungsschritt detailliert vorgeben, energisch anleiten und führen sowie streng kontrollieren.

Theorie Y - "der Mensch ist engagiert" - Folgende Attribute prägen dieses Bild: Arbeit hat einen hohen Stellenwert und ist wichtige Quelle der Zufriedenheit, von Natur aus leistungsbereit und von innen motiviert. Er strebt nach Selbstverwirklichung, strebt nach mehr Selbstbestimmung, größere Verantwortungsbereiche, flexiblere Organisationsstrukturen, Gruppen- und Projektarbeit etc. Er identifiziert sich mit den Zielen der Organisation. Externe Kontrollen sind deswegen nicht notwendig, denn er wird Verantwortung übernehmen und Eigeninitiative entwickeln.

Theorie Z - "der Mensch ist je nachdem" - Es wird angenommen, dass eine starke Mitarbeiterbeteiligung zu Engagement und höherer Produktivität führt. Hier spielen folgende Mechanismen eine Rolle: lebenslange Beschäftigung, Beteiligung an Entscheidungsfindung, individuelle Verantwortungsübernahme der Mitarbeiter, Leistungsbeurteilung, Beförderung in langen Zyklen, keine formalisierten Verhaltensregeln, hoher Stellenwert interpersonaler Beziehungen.

Agile Vorgehensweisen erfordern engagierte Mitarbeiter oder zumindest solche, die sich "mitnehmen lassen" und sich dann konstruktiv einbringen.

Wir können also nur mit Typ Y und Z in agilen Projekten arbeiten. Warum? Werfen wir mal einen Blick auf ein paar Eigenschaften von Mitarbeiter Typ X und bewerten diese in Bezug auf das Anforderungsprofil in agilen Projektteams:

Nochmal erinnern: Der oben eingeführte Regelkreis verdeutlicht, dass sich das agile Team selbst steuert und organisiert. Der Mitarbeiter vom Typ C hat eine Abneigung gegen Arbeit. Daher muss er gelenkt und eng geführt werden. Überträgt man die Führungsverantwortung (für sich) auf ihn selbst (Selbstregulation), muss damit gerechnet werden, dass nichts oder nur wenig passiert.

Außerdem zieht er Routineaufgaben vor. Eine Idee agiler Projektteams liegt aber gerade darin, der Komplexität des Projektes durch ebenso hohe Komplexität (Varietät) im
Problemlösungsverhalten zu begegnen. In einem solchen Umfeld ist Routine nicht der Alltag, sondern Veränderung und dazu lernen.

Typ X meidet Verantwortung. Selbstorganisation und Sellbstreguation bedeutet dagegen hohe Verantwortung, weil das Entwicklungsvorgehen ja gerade nicht mehr von außen detailliert vorgegeben wird. Der Entwickler muss viel selbst entscheiden, was in konservativen Führungsmodellen durch die Führungskraft entschieden werden sollte.

Ich glaube das reicht aus um darzustellen, dass Typ X von der Mentalität nicht gerade in ein agiles Projekt passt.

Bisher haben wir nur über die Anforderungen an die Grundmotivation der Mitarbeiter gesprochen. Darüber hinaus besteht aber auch eine hohe Anforderung an das "Skill-Niveau". Wer in Extreme Programming einsteigen will, kann auf Ron Jeffries Seite einiges lernen, oder man wirft mal einen Blick in das Inhaltsverzeichnis das Extreme Programming Buch von Kent Beck und Martin Fowler. Oder hier: Agile Developer Skills, das ist auch eine gute Referenz. Und wem das noch nicht reicht, der kann sich auch noch mit anderen Ideen rund um Agile beschäftigen, zum Beispiel mit Alaister Cockburn oder Jeff De Luca. Eine gute Übersicht über die agilen Muster und Methoden (die allen agilen Vorgehensweisen gemein sind) gibt dieses Buch. Alles zusammen veranlasst mich zu der These:

Agile Enticklung setzt ein hohes Maß an erforderlichen technischen und methodischen Fähigkeiten der Team-Mitglieder voraus. Ohne diese Fähigkeiten wären agile Teams ebenso risikoreich unterwegs wie andere Teams.

Ich nenne nur mal ein paar Beispiele der Techniken, die man unbedingt beherschen sollte:

- Testgetriebene Entwicklung (insb. Unit Tests)
- Objekt-orientiertes Design und Programmierung inkl. Analyse- und Design-Muster
- Gemeinsames Planen: User Stories, Release Planung, Iterationen
- Versionskontrolle, z.B. mit CVS oder Subversion
- Detaillierte Kenntnisse der eigenen Entwicklungsumgebung, z.B. Eclipse
- Continuous Integration
- Pair Programming

Wer also denkt, agile Softwareentwicklung wäre keine umfangreiche Vorgehensweise, der irrt. So gesehen handelt es sich sehr wohl um eine umangreiche Vorgehensweise. Der Unterschied zu anderen "Schwergewichten" liegt eher in der beschriebenen Betonung der Selbstregulation und -organisation bei der Auswahl der Techniken aus dem agilen Werkzeugkasten. Wie schon gesagt:

Das funktionsübergreifende Entwicklungsteam darf das tun, was nötig ist um das Ziel zu erreichen, und es entscheidet selbst, was das Nötige ist.

Noch ein letztes Wort zu Skills: Zu den ganzen harten erlernbaren Fähigkeiten kommt das erhöhte Maß an erforderlichen "Soft-Skills" hinzu. Die Fähigkeit und der Wille zur konstruktiven Kommunikation ist wohl das wichtigste Mittel bei der Problemlösung in komplexen dynamischen Projekten. Interaktion zwischen den Menschen hat daher einen sehr hohen Stellenwert. Wir befinden uns nämlich in einem Umfeld in dem häufig adhoc-Absprachen stattfinden, um sich z.B. auf geänderte Rahmenbedingungen einzustellen. Außerdem funktionieren Pair Programming oder Daily Standups auch nur dann wirklich gut, wenn der Entwickler gerne und "gut" kommuniziert.

Falsch: in komplexen Großprojekten lässt sich nicht alle 4 oder 6 Wochen ein Produktionsrelease freigeben

Diese Aussage kann ich so ohne weiteres nicht nachvollziehen. Ich habe schon komplexe Software mit agilen Vorgehensweisen entwickelt und konnte noch kürzere Releasezyklen erreichen. Meine Vermutung ist, dass viele Organisationen "noch nicht so weit sind", aber generell unmöglich ist es sicher nicht. Eine gute Voraussetzung für kurze Releasezyklen sind nach meiner Erfahrung:

Funktionierende Continuous Integration (CI) Umgebung
Wenn die Anwendung jeden Tag kompiliert, zusammengesetzt, getestet und qualitätsgesichert wird, dann hat man jederzeit einen schnellen Überblick. Man weiß jeden Tag ob die Software lauffähig ist. CI ist im Sinne unseres Regelkreises praktisch die laufende automatische Überwachung der Regelgröße (laufende Software).

Ausgiebige Testautomatisierung (Unit Tests und GUI Tests)
Wenn man die gesamte Anwendung immer wieder von Hand durchtesten muss, dann wird es schwer mit kurzen Releasezyklen. Statt dessen sollte eine gute Abdeckung an automatisierten Tests bestehen, wodurch der Regressionstest automatisch abläuft.

Funktionsübergreifendes Team, dass den Kunden "beinhaltet"
Wenn der Kunde im Team ist, dann hat er laufend Rückkopplung über den Stand der aktuellen Entwicklung. Er ist also nicht am Ende eines Entwicklungszyklus plötzlich mit der Anwendung konfrontiert, sondern hat zusammen mit den Entwicklern an der Erstellung gearbeitet.

Falsch: um Agilität einzuführen ist ein umfangreiches Veränderungs-Management notwendig

Hier gibt es aus meiner Sicht zwei Denkphilosophien. Die eine Seite sagt, dass agile Verfahren wie z.B. Scrum einen "Big Change Up Front" benötigen. Andere wehren sich gegen diese Vorgehensweise, weil die zu viele Risiken mit sich bringt. Ich schliesse mich folgender These von Ron Jeffries an:

"[...] big change up front or itty-bitty change up front isn’t the most important thing to me. Choosing the best moves we can manage, every day, that’s what I’m talking about."

Das trifft es aus meiner Sicht auf den Punkt. Bleibt nur noch die Frage, welches die "besten Moves" sind. Es bringt nichts sich dabei einer agilen Vorgehensweise zu verschreiben, ohne zu berücksichtigen was wirklich notwendig für die Organisation und deren Individuen ist. Allan Shalloway sagt:

"We assume that the change here [...] is the correct thing to do without understanding the nature of our true challenge."
Ron Jeffries sagt zu dem Thema "Auswahl der richtigen agilen Methode oder Technik":
"There probably is no best process for everyone. But the best start, for everyone, is probably to decide to improve, pick a way to start improving, and not to stop."
Daraus leite ich folgende Thesen ab:

Es macht keinen Sinn sich einer agilen Methode zu verschreiben, ohne vorher genau die Natur der eigenen Organisation zu betrachten.

Zu Beginn einer "agilen Transition" muss man sich im Team erstmal entscheiden, dass man sich verbessern will, und das man nicht aufhören will, sich zu veressern.

Das Team soll eigenständig entscheiden, welche agilen Techniken zu einer Verbesserung des aktuellen Entwicklungsprozesses führen.

In diesem Sinne macht es auch keinen Sinn ein Pilotprojekt mit einer festgelegten Methode zu starten. Denn dann hat man nicht in die eigentlichen Probleme der Organisation geschaut und man hat nicht das Team entscheiden lassen, welche Techniken den aktuellen Entwicklungsprozess wirklich verbessern. Statt dessen wird einfach eine komplett neue Technik angewand, und damit wird gesagt: alles was Ihr bislang gemacht habt ist nicht gut. Aber auch, wenn im Pilotprojekt alle die neue Vorgehensweise super finden und der Pilot erfolgreich wird, bleit die Frage: waren in dem Pilotprojekt vielleicht nur Mitarbeiter vom Typ Y - also hoch motivierte?

Ein guter Weg aus meiner Sicht ist es also, nicht "revolutionär" vorzugehen, sondern eher "evolutionär". Und man sollte langsam vorgehen, damit man auch jeden mitnimmt auf die Reise, der eigentlich mit will. Allan Shallaway schlägt Kanban als Einführungsmethode für Agilität vor und sagt:
"The Lean/Kanban alternative is to first understand your current process and to gradually change it. You do this by creating visibility into it using a Kanban board which represents the value stream. You discuss your policies to make them explicit. You manage your work in progress to do step by step improvements to your work flow."
Wir sollen also sozusagen folgendes machen:

Visualisiere Deinen Entwicklungsprozess und spreche darüber, was man verbessern könnte. Schaue dabei in den Werkzeugkasten agiler Verfahren. Da findest Du viele Best Practices. Nutze sie aber nur, wenn es Dich verbessert.

Das war es zu den Missverständnissen, die ich oben aufgezählt habe. Ich hoffe es hat Euch gefallen und ich bin gespannt auf Kommentare.
Read More >>