Dieses Thema brennt mir derzeit richtig unter den Fingernägeln. Es ist ein Ansatz, der in den letzten Jahren durch die Katalysatoren Open-Source, Agile Engineering, eXtreme Programming immer mehr Verbreitung und Nachahmer findet.

Klassische Entwickler-Teams, die eingebettet in reglementierte Prozesse sind, im Bestfall einen Team- oder Abteilungsleiter haben, der teamorientierte Führung praktiziert und hierarchische sowie fachgebundende Strukturen aufweisen verkommen zu einer altbackenen und “muffig”-konservativen Arbeitsweise.

Das ist in meinen Augen auch gut so, denn die Erfahrung mit den klassischen Team-Strukturen hat gezeigt, dass es viele Probleme amit sich bringt, die vor Allem in der Software-Entwicklung Risikofaktoren nach sich ziehen, die nur sehr schwer in den Griff zu bekommen sind. Doch bevor ich detailliert auf diesen alternativen Ansatz der selbstreflektierenden Autonomie von Software-Teams eingehe, lohnt es sich, die allgemeinen Charakteristika von “klassischen” führungsgesteuerten Software-Teams mit den “alternativen” autonomen Software-Teams gegenüberzustellen:

Führungsorientierte Teams

  • Haben einen Team-Leiter, der Gesamt-Verantwortung trägt, Kommunikation im Team fördert und reglementiert, Prozesse etabliert und kontrolliert, Informationen zu anderen Teams / Abteilungen transportiert
  • Sind durch Architekten, Senior Entwickler, Backend- / Frontend-Entwickler und sog. “Code-Maintainer” hierarchisch und fachgebunden organisiert
  • Haben meist ein organisatorisch abgestuftes, nach Arbeitsbereichen strukturiertes, komplexes “Regelwerk” zur teaminternen und teamübergreifenden Arbeitsgestaltung (Coding Guidelines, Issue Tracking Prozesse, Project Roundtables, Jour-Fixe, Monatliche Reports, Lessons Learned)
Autonome Teams

  • Sind ohne Führung, tragen als Team die Gesamt-Verantwortung, kommunizieren und reglementieren selbstbestimmt
  • Haben meist keine Hierarchie, tauschen und rotieren frequentiv ihre Rollen im Team
  • Haben für Prozesse keine Regeln sondern lediglich einen Satz von “Empfehlungen”, etablieren Kontrolle und Qualität durch Rückkopplungen, einigen sich selbstständig auf eine gemeinsame Arbeitsplattform durch “Manifeste”
  • Binden geschäftsorientierte Prozesse (Budgeting, Reporting) mit Hilfe von “Schlusspunkten” (Milestones) und kurzen Bearbeitungszeiten (Interationen, Sprints) ein

Das ähnelt im ersten Blick eher nach einer Gegenüberstellung der Software-Entwicklungs-Paradigmen, wie z.B. Wasserfall vs. Agile. Doch es steckt noch mehr dahinter.

Probleme führungsorientierter Software-Teams

Die Überlegung, neue Wege in der Strukturierung von Software-Teams zu gehen, resultiert nämlich nicht nur aus der Weiterentwicklung von Entwicklungs-Methoden, sondern einer Vielzahl weiterer Faktoren. “Von oben herab” geführte Teams unterliegen starken psychologischen und psychodynamischen Kräften, die in letzter Konsequenz die Arbeit und damit das Produkt beeinflussen. Dies ist zwar für jede Art von Team generalisierbar, hat jedoch spezifisch für die Software-Entwicklung eine besonders starke Ausprägung.

So ist es z.B. immer wieder der Fall, das man als Software-Entwickler “die Management-Fehler” oder “unqualifizierte Management-Entscheidungen” seines Teamleiters oder dessen Vorgesetzten “ausbaden” muss. Der Effekt entsteht durch eine allzu starke Abstraktion der Geschehnisse innerhalb kürzester Hierarchie-Ebenen. Des Weiteren kommt es immer wieder vor, dass fachfremde Kompetenzen in Transport- und Führungspositionen stärker ausgeprägt sind als die für die Software-Entwicklung so wichtigen fachbezogenen Wissensbereiche.

Die Kluft zwischen Führung und Team ist jedoch nicht nur die auf o.g. personenbezogenen Defizite zurückzuführen. Noch häufiger tritt der Fall ein, dass es zu unterschwelligen Konflikten kommt, obwohl das Team inklusive Führung eine objektiv “harmonische Homogenität” aufweist. Dies resultiert meist auf mangelnde Informationsgüte innerhalb der Hierarchiekette, in der unbewußt, bewußt oder egozentral wichtige Feedbackmechanismen ausgehöhlt oder blockiert werden. In Folge dessen werden auf höheren Ebenen Entscheidungen getroffen, die durch die dünne Entscheidungsgrundlage fehlgeleitet sind und die Quelle der Informationen (also das Software-Team) z.T. gänzlich verfehlen.

Konsequenterweise wird das Team durch Maßnahmen und Doktrien zu bestimmten Aufgaben oder Arbeitstechniken gezwungen. Defizitäre Entscheidungsgrundlagen werden nämlich in halbwegs funktionierenden Unternehmen relativ schnell entdeckt, welches wiederum zur Behebungsmaßnahmen über verschiedene Prozesskanäle führt. Aus Team-Sicht entwickelt sich ein sog. “Insel-Gefühl”, die zumeist auf die Team-Führung negativ projeziert wird.

Diese latente Quelle der Miss- bzw. Unverstandenheit innerhalb der Team-Hierarchie führt zu weiteren negativen Effekten. So ist es nur allzu natürlich, dass Team-Mitglieder mit zunehmender subjektiver Erkenntnis des eigenen beschränkten Wirkungsgrades in ein reaktantes Verhalten übergehen. Dies kann in Folge lapidarer Reglementierungen wie z.B. “Einhaltung der Gesprächszeiten im Team-Meeting” geschehen, oder durchaus auch auf Durchbruch sozialer Beziehungsmuster (Aufteilung in mehrere Teams, Kommunikationsbündelung) basieren.

Bei stetigem Druck oder längerfristiger Dauer dieser Dissonanz zwischen Team und Führung reflektieren sich durch unterschwellige Passivität und Motivationsarmut weitere negative Effekte innerhalb des Teams, die die Homogenität und Produktivität des Teams merklich reduzieren. So wird z.b. die o.g. Reaktanz einzelner Mitglieder meistens mit einer erlernten Hilflosigkeit begleitet, die in letzer Konsequenz bis zur inneren Kündigung führen kann.

Es gibt mittlerweile einige Empfehlungen (im HR-Deutsch auch “aktivierende Führung” genannt), um diesem – vor Allem in der Software-Entwicklung hochkritischen – Team-Effekt entgegenzuwirken. Besonders bekannt sind die Einführung von Bildungsmaßnahmen (z.B. Zertifikate oder Messebesuche), materieller Würdigung (Geschäfts-Laptop, Firmenwagen), verkappte Entwicklungspfade (z.B. Kompetenzmodelle) oder aber Bonussysteme.

All das sind aus Team-Sicht zumeist abstrakte Modelle, die dem einzelnen Software-Entwickler sowie dem Software-Team nur kurzsichtige oder “konzernisierte” Perspekiven bieten. Wenn diese Maßnahmen auch noch (zugegeben berechtigterweise) in Prozessuale Systeme und Management-Verfahren wie KVP oder ITIL eingebettet sind, oder aber sogar kontrakreative, produktionsabgeleitete Unternehmens-Philosophien wie Lean Management und Kaizen etabliert werden, entsteht oft der gegenteilige Effekt, dass Software-Teams (als “Schutzreaktion”) noch tiefer in Software-Spezifika sinken, Intransparenz durch exorbitantes “Fach-Chinesisch” geradezu heraufbeschwören und geschäftsprozessuale Fachkenntnisse für sich behalten um damit subjektiv ihre “Unersetzlichkeit” im Software-Unternehmen zu stärken.

Diese für mittlere und hohe Führungskräfte oft unverständliche Reaktion ist vor Allem bei Software-Entwicklern besonders stark ausgeprägt. Hintergrund dessen ist die implizit normierte Subkultur und Community des Entwicklers, der sich selbst (berechtigterweise) als hochqualifizierten, intellektuellen und naturwissenschaftlich fundierten Menschen sieht, im Gegenzug aber keinen allgemeinen Anspruch auf Normierung oder gesellschaftlichen Status stellt.

Als Geek oder Nerd stellt man sich o.g. ganzheitlichen Formalisierungen schon aus Prinzip entgegen. Besonders deutlich wird diese – sagen wir mal opportunistische – Haltung im alltäglichen Arbeitsumfeld gelebt, wenn man sich z.B. dediziert von Business-Kaspern distanziert und in Meetings das berühmte Bullshit-Bingo spielt. Es ist die gesamte Arbeitsumgebung, das Unverständnis der Führung, die Normierungsversuche der Personalabteilung und nicht zuletzt das innere Team-Feedback, die den Entwickler in ein subjektives Selbstbild des Code Monkeys verfallen lassen.

In den meisten Fällen erkennt der Software-Entwickler allerdings schnell seine Machtlosigkeit gegenüber dem bürokratisierten System sowie seine eigene wirtschaftliche Abhängigkeit gegenüber diesem, “spielt das Spiel” teilnahmslos mit und verstärkt sein ohnehin schon durch die Subkultur angeeignetes Cocooning.

Alternative: Autonome Software-Teams

Es gibt mehrere alternative Team-Strukturen zu den klassischen führungsorientierten Teams, eine davon ist das autonome Software-Entwicklungs-Team. Die Idee ist denkbar einfach: Es gibt keinen Team- oder Abteilungsleiter mehr, das Team ist “ohne Kopf” und völlig auf sich alleine gestellt.

Konsequenterweise liegt faktisch die gesamte Arbeit und Organisation im Team selbst. Das Team wird automatisch zur Selbstorganisation gezwungen, was in erster Instanz vorteilige Effekte verspricht, denn sich selbst organisierende Teams sind in der Lage

Dabei gibt es innerhalb des Teams keine Hierarchie, jeder ist gleichwertig. Diese “alle sind gleich” oder besser “jeder ist jemand” Mentalität ist im praktischen Wirken des Teams schwer umzusetzen, zielt aber primär darauf ab, dem Einzelnen die für ihn und das Team notwendige Anerkennung zu geben. Dadurch erhofft man sich, die inhaltlichen Perspektiven des Team-Mitglieds zu stärken und verhindert gleichzeitig das Abspalten einzelner vom Team.

Überhaupt ist die Übertragung der operativen Verantwortung auf das gesamte Team eine Maßnahme, die indirekt die negativen Effekte führungsgetriebener Teams ausschalten soll. So ist durch den Verantwortungsübergang sowie den dadurch erlangten gestalterischen Spielraum eine stärkere Motivation zum aktiven, konstruktiven Mitwirken gegeben. Der Entwickler spürt, das er als Team-Mitlglied in der Lage ist, seine eigenen Interessen zumindest offen zu vertreten und versucht schneller mit den anderen in einen teamgestützten Konsens überzugehen.

Des Weiteren erhofft man sich durch die Selbstorganisation Steigerungen in adaptiver Flexibilität, aktivem Mitdenken und effizienterem (weil selbstbestimmtem) Arbeiten.

In letzter Konsequenz wird also durch die Autonomie des Software-Teams versucht, die sog. intrinsische Motivation der Mitglieder und damit des gesamten Teams zu stärken. Man möchte also – ganz im Gegenteil zu den “aktivierenden Führungsmaßnahmen” – nicht auf materielle oder statusorientierte Belohnung aufbauen, sondern vielmehr den inneren Coder aus jedem Entwickler ansprechen. Durch die Selbstorganisation werden z.B. Aufgaben “gerechter” verteilt.

So kann sich z.B. durch das Rotationsprinzip jeder Entwickler an hochanspruchsvollen Aufgaben beteiligen, erkennt aber im Gegenzug auch an, dass dies nicht immer der Fall sein kann, weil die anderen Entwickler im Team auch diesen Anspruch erheben dürfen. Die Annahme lässt sich auf einen Satz reduzieren: Als glücklich empfindet sich stets ein Mensch, der eine Vielzahl von Handlungs- und Gestaltungsmöglichkeiten hat.

Doch das ist noch nicht alles, was ein autonomes Software-Team leisten kann und leisten soll. Die Stärkung der Motivation und der eigenen Handlungsräume des Teams sind soz. “nur” eine Vorstufe dessen, was erreicht werden soll. Denn aus geschäftsorientierter Sicht lohnt sich die Autonomie des Teams erst, wenn es merklich dem führungsgetriebenen Team in Effizienz und Produktivität überlegen ist.

Das ist auch durchaus denkbar, wenn es nicht bei der “simplen” Bewältigung des eigenverantwortlichen Handelns im Team bleibt, sondern noch darüber hinausgeht. Dazu werden im zweiten Schritt zur “effektiven Autonomie” methodische Grundsätze etabliert, die die gesamte Software-Entwicklung “an einem roten Faden” in einer Bahn halten soll. Hier kommen die Methoden der neueren Software-Entwicklung ins Spiel, wie z.B. Agile Engineering, XP oder SCRUM.

Sie bieten mit einfachen Grundregeln (z.B. dem agile Manifesto) eine “lose Verankerung” des Entwicklungs-Prozesses, ohne den neu erlangten selbstbestimmten Handlungsspielraum des autonomen Teams zu beeinträchtigen.

Ziel ist es, durch die Beigabe eines “haltbaren”, aber dennoch flexiblen Entwicklungsprozesses sowie notwendiger Automatismen wie z.B. Continious Integration eine Team-Struktur zu erlangen, die in der Lage ist, sich selbst adaptiv zu optimieren. Der Selbstverbesserungseffekt soll aber nicht formalisiert sein oder ähnlich dem KVP bürokratisiert eingerahmt werden, sondern soll lediglich das Software-Team als Ganzes von der Leistungsorientierung wegbringen, denn aus Geschäftssicht ist ein Team wesentlich produktiver, wenn es wirkungsorientiert arbeitet statt leistungsorientiert zu agieren.

Letzten Endes erhofft man sich dadurch den Effekt der Emergenz, der das Software-Team als Einheit von Software-Entwicklern wesentlich effektiver macht, als das sture zusammenfassen von Entwicklern zu einem Team. Oder in einem Satz: Das Ganze ist mehr als die Summe seiner Teile.

Strategien & Gefahren bei der Autonomie von Software-Teams

Es ist nicht alles Gold was glänzt. Wie bei jedem Team-Ansatz gibt es auch bei autonomen Software-Teams Nachteile und Risiken. Anders als bei den anderen Team-Strukturen sind die Gefahren, die eine Etablierung autonomer Teams mit sich bringt, implizit, versteckt und schwer erkennbar. Es gibt sogar Risiken, die unvermeidbar oder sogar gewollt sind. Es lohnt sich hierbei, die “Strategien” und Gefahren aus Sicht des Unternehmens sowie aus Sicht des Software-Entwicklers zu betrachten.

Gefahren aus Sicht des Unternehmens

Gefahren aus Sicht des Entwicklers

Wichtige unternehmerische Strategien beim Einsatz autonomer Software-Teams

Fazit

Aus der Betrachtung all der Vor- und Nachteile autonomer Software-Entwicklungs-Teams lässt sich nur sehr schwer ein allgemeines Fazit ableiten. Ich persönlich empfinde autonome Team-Strukturen in der Software-Entwicklung als hilfreich und durchaus fördernd für Unternehmen und Team gleichermaßen.

Dazu müssen allerdings viele Umgebungsfaktoren stimmen und die Führung muss ernsthaft erkennen und wollen, dass ein autonomes Software-Team die Effizienz der Software-Entwicklung steigert. Besonderen Wert sollte das Unternehmen dabei auf Kerntreiber der Autonomie legen. Auswahl der geeigneten Personen ist neben der offensiven – z.T. sogar aggressiven – Kommunikation und Vermittlung der Werte und Ziele des Vorhabens entscheidend. Auch die stringente Kopplung des Verantwortungsübergangs mit dem Entscheidungsübergang ist essentiell. Nur dadurch ist ein gegenseitiges Vertrauen möglich, welches der Ausgangspunkt für zielgerichtete Arbeit und effiziente, ökonomisch wertvolle Produktion ist.

Im Gegenzug müssen die Software-Entwickler im Team realisieren, dass gutes “Programmieren” und “Designen” von Software nicht ausreicht, um wirklich gute Software für kommerzielle Zwecke zu entwickeln. Der Software-Entwickler muss zur fundamentalen Erkenntnis gelangen, das Gestaltungs- und Entscheidungsfreiheit nur durch diszipliniertes und starkes Verantwortungsbewußtsein möglich sein kann. Das fachliche und soziale Handeln des Entwicklers soll dabei auf die grundlegenden Unternehmensinteressen ausgerichtet sein. Jeder Software-Entwickler sollte für sich sowie andere das Verständnis und die Anwendung der Software-Engineering Ethik fordern und fördern.

Das alles ist ein guter Vorsatz, die Realität ist jedoch wesentlich nüchterner und härter.

Software-Entwickler sind nach wie vor die größte Hürde ihres eigenen Erfolges

Das beschränkt sich nicht nur auf ihren “wirtschaftlichen” Erfolg, sondern umfasst gleichermaßen auch das so hochstilisierten “Ich code gute Software”-Prinzip. Sie verfallen in ihrem Cubicle (z.T. verständlich) in eigene Arbeitsmechanismen, kapseln sich aus der unternehmerischen Gruppe oder dem eigenen Team heraus und betrachten das Unternehmen als stotterndes, konzerngeleitetes, kapitalmaximierendes, sozialarmes Vehikel, das es nun mal unweigerlich zu verwenden gilt.

Doch auch das Unternehmen, oder besser dessen Führung ist nicht besser. Die meisten Unternehmen, die autonome Teams einführen, sind bei Gott nicht bereit, Kontrolle, operative oder sogar geschäftskritische Verantwortung an untere Ebenen zu verteilen. Im Gegenteil. Es werden implizite Kontrollmechanismen wie Jour-Fixe eingebaut. Die eigentlich so wichtigen Rückkopplungen zu Schnittstellen und Führung (Feedbacks, Meilensteine, Iterationen) werden durch autoritäres oder subversiv kontrollierendes Personal zu Steuerungsmechanismen umgewandelt. Autonome Teamstrukturen sind mittlerweile ein nützliches und gangbares Mittel, um das eigene Unternehmen zu konsolidieren.

Es bleibt mir nur die Hoffnung, das es Entwickler und Unternehmen gibt, die das Potenzial autonomer Software-Teams erkennen und leben. Eine schlechte Idee ist es jedenfalls nicht.

Comments
This article has no comments yet. Comments are very welcome.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


(c) 2000-2012 ilker.de - Creative Computing.

For any case of inquiry regarding this document, you can always contact the website owner.