Follow my new blog

Posts mit dem Label Philosophie werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Philosophie werden angezeigt. Alle Posts anzeigen

Dienstag, 3. August 2010

Was treibt uns an?

Mit der Softwarequalität steht´s nicht zum Besten. Könnte das aber nicht nur an den ewig suboptimalen Programmiersprachen, unzulänglichen Werkzeugen, imperfekten Konzepten und inkompetenten Entwicklern liegen, sondern womöglich daran, dass viele die Arbeit als nicht so befriedigend empfinden, wie sie sein sollte, um wirklich gute Ergebnisse abzuliefern?

imageIn einem Artikel meiner Sandbox-Reihe in der dotnetpro habe ich mir darüber einmal Gedanken gemacht. Den gibt es heute exklusiv vorab zu lesen. Auch für die, die keine dotnetpro-Abonnenten sind.

Ich glaube, dass wir einiges an unseren Produkten und auch in unserem (Arbeits)Leben verbessern können, wenn wir uns Gedanken machen, warum wir eigentlich arbeiten. Was treibt uns da wirklich an?

Wen meine Überlegungen dazu interessieren, der kann ja mal in meinen Artikel reinschauen. Und dann diskutieren wir hier. Würde mich freuen.

Den Artikel zu lesen, kostet nichts – außer eine Tweet. Wie ist das? Ein fairer Preis?

Sonntag, 25. Januar 2009

Aspektorientiert diskutieren - Weg und Ziel entkoppeln vermeidet Konflikte [OOP 2009]

Warum fällt Veränderung oft schwer? Liegt es wirklich vor allem daran, dass alte Gewohnheiten schwer zu "entlernen" sind? Teaching an old dog new tricks: ist das wirklich so mühsam? Gestern meine ich einen Zipfel von der Erkenntnis erhascht zu haben, dass das nicht wirklich der Grund ist. Wir machen uns Veränderung vielmehr selbst schwer.

imageGestern saß ich in meinem Lieblingscafé in Hamburg, dem elbgold am Mühlenkamp, und wollte eigentlich nur meinen Lieblingskuchen genießen, Schokosahne - leider nur am Wochenende -, da bekam ich leider keinen Platz. Zunächst. Dann bot mir aber ein mir vom Sehen her bekannter anderer "elbgold-Bewohner" einen Hocker bei sich an und wir kamen ins Gespräch. Kaum sah er, dass ich ein C#-Buch unterm Arm hatte, outete er sich als Java-Jünger. So kamen wir denn unvermeidlich auch auf Clean Code Developer (CCD) als plattformunabhängige Qualitätsoffensive.  Und wir kamen auf die Defizite im Vorgehen in seiner Firma.

Issue Tracking als Veränderungsproblem

Da ist zum Beispiel das Thema Issue Tracking. Damit hat man dort noch nicht soviel am Hut. Man beginne gerade sich zu bemühen, Aufgaben im Nachhinein zu erfassen, also das, was man schon getan hat. Aber mit einer proaktiven Liste von Fehlern oder gar Anforderungen... nein, darüber diskutiere man noch. Es sei alles nicht so einfach: der Chef müsse noch überzeugt werden, ein Tool sei zu entscheiden, das Team hätte unterschiedliche Vorstellungen usw.

Ich habe meinem Gesprächspartner dann natürlich aus aktuellem Anlass gleich den soziokratischen Konsent als Hilfsmittel für die Entscheidungsfindung nahegelegt. Statt die Verantwortung auf den Chef abzuwälzen (Autokratie) oder langwierig unter allen einen Konsens für eine Abstimmung zu erzielen (Demokratie) sei auch ein anderes Vorgehen möglich - und wahrscheinlich sogar zielführender.

Mit diesem Rat bin ich immer noch zufrieden. Konsent ist ein allgemein hilfreiches Instrument zur Entscheidungsfindung. Dennoch oder gerade deshalb geht Konsent nicht die Wurzel des Übels an.

Was macht die Situation in der Firma meines Gesprächspartners so unerquicklich. Was macht die Veränderung zu konsequentem Issue Tracking so schwer? Die neue Gewohnheit, eine qualitätssteigernde Praktik des orangen Grades des CCD, hat es schwer Fuß zu fassen im immer eiligen Tagesgeschäft, bei dem alles wichtig+dringend ist - außer eben solcher Veränderung.

Ist Issue Tracking an sich schwierig? Braucht man dafür schwer zu erlernde Fertigkeiten? Ist es Professoren vorbehalten, Issue Tracking zu verstehen? Oder kostet Issue Tracking schlicht soviel Zeit, dass man dafür eigentlich tagelang den Betrieb schließen müsste?

Alles quatsch! Issue Tracking ist kinderleicht und schnell gemacht.

Also nochmal: Wo liegt das Problem?

Weg und Ziel entkoppeln

Ich glaube, die Veränderung hin zu Issue Tracking ist so schwierig, weil das Team ein undifferenziertes Bild davon hat. Issue Tracking erscheint als großer Klumpen, den es ganz oder gar nicht zu schlucken gilt. Man versucht eine die Entscheidung zu treffen und umzusetzen "Wir machen Issue Tracking so und so. Punkt."

Hört sich doch auch ganz normal an. Man entscheidet sich für oder gegen Issue Tracking in einer bestimmten Weise. Was sonst?

Und genau da liegt der Hase im Pfeffer. Das ist nicht-agiles Denken. Das ist Denken aus einer Welt, die erstens überschaubarer war und zweitens viel langsamer und weniger vollgepackt.

So ist es ja aber eben nicht in der Firma meines Gesprächspartners. Dort steht man ständig unter Kundendruck. Neue Features eben noch einflicken, Releases schnell noch zusammenbasteln, Fehler korrigieren, dann wieder neue Features und die Aufwandsabschätzung für das Angebot des Chefs nicht vergessen... Wie so oft findet die Arbeit im ständigen "emergency mode" statt. Da ist die Welt einfach nicht überschaubar, weil man sie durch einen Tunnel sieht. Es gibt kaum Spielräume.

Das kann und soll man beklagen. Am Ende lässt sich diese grundlegende Situation selbst aber nicht schnell ändern. Sie definiert die Rahmenbedingungen für die Einführung von Issue Tracking und sonstigen Veränderungen.

Was also tun? Wie kann es sich das Team einfacher machen, Issue Tracking einzuführen?

imageMeine Erkenntnis derzeit ist, ein großer "Veränderungsklumpen" sollte zunächst grundsätzlich aufgeteilt werden in die Aspekte Ziel und Weg. Der Weg ist also mal nicht das Ziel. Weg und Ziel sind vielmehr deutlich zu unterscheiden. Die Zugspitze ist nicht die Zugspitzbahn. Mir reicht auch nicht die Fahrt mit der Zugspitzbahn ohne längeren Aufenthalt auf dem Gipfel. Und für den Aufenthalt auf dem Gipfel muss ich nicht unbedingt mit der Zugspitzbahn dorthinkommen.

Was ist mit dieser Unterscheidung gewonnen? Das Team kann jetzt zwei Fragen diskutieren:

  1. Wollen wir Issue Tracking einführen?
  2. Wie wollen wir Issue Tracking einführen?

Der Vorteil liegt erstens in einem viel besseren Verständnis davon, was alle Beteiligten unter Issue Tracking überhaupt verstehen. Da mögen die Meinungen nämlich schon auseinandergehen. Solche Meinungsdifferenzen, wenn sie nicht aufgedeckt werden, behindern ansonsten den Veränderungsprozess im Sinne eines "Veränderungsklumpens".

Aus der Diskussion darüber, was Issue Tracking ist, welche Formen es gibt, wo die Vor-/Nachteile liegen usw. ergibt sich dann ein Ziel. Dazu kann das Team einen ersten Beschluss fassen - im besten Fall mittels Konsent. Der Beschluss kann z.B. lauten: "Wir führen Issue Tracking für Anforderungen und Fehler für alle Projekte ein."

Der Trick dabei: Dieser Beschluss ist viel einfacher zu fassen als der über den bisherigen "Veränderungsklumpen". Die Vorteile von Issue Tracking ja liegen auf der Hand. Dass jemand es nicht haben möchte - ganz unabhängig davon wie man das schaffen kann -, ist schwer vorzustellen. Nichtsdestotrotz ist es wichtig, genau solche Einmütigkeit explizit zu machen. "In Notzeiten", wenn die Veränderung mal wieder schwer fällt, kann man sich dann nämlich gegenseitig daran erinnern. "Wir haben doch alle dasselbe Ziel. Wir sind alle für Issue Tracking. Lasst uns das Ziel jetzt nicht aus den Augen verlieren."

Wenn nun das Ziel klar ist, dann kann sich das Team an die zweite Frage machen. Wie wollen wir das Ziel erreichen? Welche Schritte wollen wir in seine Richtung machen?

image

Das ist eine ganz andere Frage als die erste, grundsätzliche, was das Ziel eigentlich sei. Während man den Weg diskutiert, kann man jetzt auch gewiss sein, einer Meinung zu sein, dass das Ziel überhaupt erreicht werden soll. Die Diskutanten richten kohärent ihre Energie darauf, einen Weg zu finden, um gemeinschaftlich ans Ziel zu kommen.

Oft ist es nun gerade diese Diskussion, die von Differenzen und Missverständnissen geplagt ist. Aber das ist jetzt nicht mehr so schlimm. Denn da sich alle einig über das Ziel sind, haben alle ein Interesse, den "Sand im Getriebe" aufzuspüren und unschädlich zu machen.

Baby Steps

image Mit dem Fokus auf dem Weg ist es nun auch einfacher, eine sehr praktible Technik anzuwenden, um ihn zu gehen: die Technik der kleinen Schritte. Der gleichermaßen komische wie tiefgründige Film "Was ist mit Bob?" ("What about Bob?") mit Bill Murray und Richard Dreyfuss sagt dazu "Baby Steps".

Veränderungen lassen sich am besten mit kleinen Babyschritten erreichen. Sich nicht zuviel vorzunehmen, sich Unsicherheiten und Fehlschläge zu gestatten, das ist eines der Geheimnisse erfolgreicher Veränderung. Wer nur kleine Schritte macht, kann seinen Weg auch immer wieder korrigieren. Denn Korrektur ist sicher nötig: unvorhergesehenes passiert, auf das man reagieren muss; Feedback unterschiedlicher Art signalisiert, dass man vom Weg abgekommen ist.

Der ursprüngliche undifferenzierte Entschluss für Issue Tracking mag so ausgesehen haben: "Wir führen Issue Tracking ab dem 1.10.2008 für alle Projekte ein und benutzen Bugzilla für alles: Anforderungen und Fehler und Design Issues." Dass führt notwendig zu Problemen. Jedes Problem mit dem Wie (z.B. Bugzilla) stellt dann auch das grundsätzliche Was (Issue Tracking) in Frage.

Wenn Was (Ziel) und Wie (Weg) aber getrennt sind und der Weg auch noch in Baby Steps aufgeteilt ist... dann ist es viel einfacher. Was und Wie geraten nicht mehr in Konflikt. Teammitglieder geraten nicht mehr in Konflikt. Naja, zumindest nicht mehr so leicht.

Mit der konsentbasierten Grundsatzentscheidung - "Wir führen Issue Tracking für Anforderungen und Fehler für alle Projekte ein." - ist das Team viel freier, kleine, auch im Tagesgeschäft gangbare Schritte festzulegen. Die könnten z.B. sein:

  1. Issue Tracking nur für Fehler mit Excel für das Projekt A über 4 Wochen.
  2. Issue Tracking für Fehler und Anforderungen mit Excel für das Projekt A über 4 Wochen.
  3. Issue Tracking für Fehler und Anforderungen mit Bugzilla für das Projekt A über 4 Wochen.
  4. Issue Tracking für Fehler und Anforderungen mit Bugzilla für Projekt A und B über 4 Wochen.
  5. Issue Tracking für Fehler und Anforderungen mit Bugzilla für alle Projekte

Sieht aus wie ein Spring Backlog? Ist ein Backlog. Ein Backlog ist nichts anderes als eine Folge von geplanten Schritten. So sind wir denn also beim Wie zu einem Thema auf dem vertrauten Terrain agilen Vorgehens. Das sollte es einfach machen, die Unterscheidung zwischen Ziel und Weg zu treffen.

Jeder dieser Babyschritte kann separat beschlossen werden - im Konsent. Es müssen zunächst auch gar nicht soviele sein. Mit dem gemeinsamen Ziel könnten in einer ersten Beschlussrunde auch nur Schritte 1 bis 3 ins Backlog kommen plus einer expliziten Entscheidung über den weiteren Weg:

  1. Issue Tracking nur für Fehler mit Excel für das Projekt A über 4 Wochen
  2. Issue Tracking für Fehler und Anforderungen mit Excel für das Projekt A über 4 Wochen
  3. Issue Tracking für Fehler und Anforderungen mit Bugzilla für das Projekt A über 4 Wochen
  4. Entscheidung über Bugzilla und den weiteren Weg

Das Schöne an der Entzerrung von Ziel und Weg ist, dass damit der Weg quasi befreit ist von irgendwelcher festgefügter Konkretheit. Er muss nicht in ganz bestimmter Weise zwangsläufig verlaufen. Er kann geplant und später korrigiert werden. Jeder Schritt muss im Moment des Beschluss nur in den Augen aller einen Beitrag zur Erreichung des Zieles leisten. Stetiger Fortschritt ist wichtiger als gerade Linie.

Dass die beschlossenen Schritte auch abgegangen werden, ist dann eine Sache recht einfacher Kontrolle. Dabei kann Scrum helfen. Welche Schritte beschlossen werden sollen, wie die Prioritäten aussehen, das liegt jedoch außerhalb des Vorgehensmodells.

Bei Veränderungsprozessen gibt es keinen externen Kunden. Die Organisation selbst ist vielmehr der "Kunde" oder genauer: die Organisationsführung. Da kommt die Soziokratie wieder ins Spiel. Es sollte eine Kreishierarchie sein, die das Ziel von Veränderung und den Weg dorthin festlegt. Sie definiert die Schritte und delegiert die Ausführung dann an einen Kontrollprozess.

Veränderung = Aspektorientierung + Soziokratie + Scrum

Veränderungen aspektorientiert in Ziel und Weg zu zerlegen und dann mit Soziokratie und Scrum anzugehen, hat mehrere Vorteile:

  • Durch die differenzierte aspektorientierte Sicht werden Missverständnisse/Konflikte vermieden und gleichzeitig die Energie in Richtung Ziel gebündelt. Kohärenz entsteht durch das gemeinsame Ziel.
  • Durch explizite Beschlüsse für den Weg entsteht eine Schrittfolge, die korrigierbar und erweiterbar ist. YAGNI und KISS lassen sich nicht nur auf Code anwenden, sondern auch auf solche Schrittfolgen. Probleme auf dem Weg färben nicht auf das Ziel ab. Kohärenz wird erhalten und gleichzeitig Agilität gewonnen.
  • Eine soziokratische Organisation all derjenigen, die von Veränderungen betroffen sind, vermeidet Konflikte, weil alle eingebunden sind und ihre Bedürfnisse einbringen können; und sie erhöht das Wissen über mögliche Hindernisse auf dem Weg.
  • Eine Kreishierarchie der "Betroffenen" vereinfacht den Rahmen für Veränderung. Es gibt nicht mehr hier die Führung, dort die Betroffenen und dann einen Prozess. Im Sinne von Scrum sind da vielmehr nur noch "Kunde" (Kreishierarchie der "Betroffenen") und "Team" (operative Organisation der "Betroffenen"). Die Koordination der Beteiligten im Sinne der beschlossenen Schrittfolge ist damit sehr klar.

Veränderungen unter Druck haben durch klare Trennung der Aspekte Ziel und Weg, aber auch Führung und operatives Geschäft eine größere Chance auf Erfolg.

  • Die, die sich verändern sollen, formieren sich als Führer ihres eigenen Veränderungsprozesses in einer soziokratischen Kreishierarchie.
  • Die Veränderung selbst findet in kleinen Schritten in einem iterativen Vorgehensmodell im Tagesgeschäft statt. (Scrum schreint mir da sehr naheliegend.)
  • Ergebnisse werden wiederum an die Kreishierarchie gemeldet, die als "Kunde" den Weg jederzeit verändern kann.

image

Nach Reflektion des gestrigen Gesprächs scheint mir weniger nicht mehr wirklich zielführend in der heutigen Zeit.

Sonntag, 11. Januar 2009

Aspektorientierte Unternehmensführung mit Soziokratie [OOP 2009]

Bei www.clean-code-developer.de beschäftige ich mich gerade mit Grundprinzipien professioneller Softwareentwicklung. Vielleicht ist das der Grund, warum Soziokratie in mir eine Saite zum Schwingen gebracht hat. Sie sieht für mich nämlich ebenfalls wie ein Grundprinzip aus. Nicht für die Entwicklung von Software, sondern für die Entwicklung von Organisationen die Software herstellen.

In meinem vorhergehenden Posting habe ich erklärt, warum ich die Softwarebranche für prädestiniert halte, sich die Soziokratie einmal näher anzusehen. Wir sind schon vertraut mit zwei Kernkonzepten der Soziokratischen Kreismethode (SKM): Lernschleife und Rekursion. Und darüber hinaus sind wir prädestiniert zu verstehen, was die Einführung von Soziokratie mit einem Unternehmen macht. Sie führt zu einer Separation of Concerns. Soziokratie ist Unternehmungsführung aspektorientiert.

In unserer Branche kann ich das so einfach schreiben. Was genau ich damit meine, verstehen Sie wahrscheinlich noch nicht. Aber das macht nichts. Zumindest gewisse Bilder entstehen in Ihrem Kopf, weil diese Begriffe in der Softwarebranche etabliert sind. Und das ist, was es aus meiner Sicht einfacher macht, SKM in der Softwarebranche zu studieren oder gar einzuführen. Wir sind vorbereitet.

Schon im brand eins Artikel, der für mich Anlass zur Beschäftigung mit der SKM war, wird deutlich, dass Soziokratie bei allen Vorteilen und einer grundsätzlichen Einfachheit doch einen Nachteil hat: sie lässt sich irgendwie schwer erklären. So finden zumindest auch viele Soziokratieexperten. Und ich stimme durchaus zu. Eigentlich ist SKM simpel - doch beim Erklären hakt es immer wieder.

Warum ist das so? Da lese ich die Literatur zu SKM, die das Soziokratische Zentrum mit Übersetzungsmühe zur Verfügung gestellt hat; die Liste der Grundprinzipien ist kurz; die Bilder sind einfach; die Beispiele bemüht lebensnah. Und doch... etwas hakt. Das merke ich auch, wenn ich mit Isabell Dierkes, der Vertreterin des deutschen Soziokratischen Zentrums skype. Einerseits verstehe ich sie - und andererseits laufen wir auch immer wieder in Missverständnisse.

Warum ist das so? Ich glaube, zumindest eine Ursache gefunden zu haben. Die Soziokratie setzt ein gewisses Verständnis davon voraus, wie Unternehmen funktionieren. Unglücklicherweise ist dieses Verständnis jedoch viel weniger verbreitet als angenommen. Deshalb stelle ich Soziokratie in anderer Weise dar, als die "kanonischen Dokumente" es tun. Ich fange damit an, was die Soziokratie als selbstverständlich voraussetzt.

Führung ist orthogonal

Lassen Sie mich versuchen, den "Ort für Soziokratie" im Unternehmen mit einer kleinen Beispielfirma zu illustrieren: Ein kleines Softwareunternehmen - die SoftWunder GmbH - hat einen Geschäftsführer, ein Entwicklungsteam, Vertrieb und ein Sekretariat. Das Entwicklungsteam arbeitet schon mit im "softwaretechnischen Kreisprozess" Scrum.

Wenn uns der Geschäftsführer und Inhaber sein Unternehmen vorstellen wollte, würde er sicherlich in einer hübschen Powerpoint-Präsentation auch ein Organigramm wie das Folgende zeigen:

image

Es beschreibt die groben Verantwortungsbereiche im Unternehmen, sozusagen seine Komponenten. Wenn wir hineinzoomen, sehen wir die Rollen, die es mit Leben füllen.

image

So ähnlich könnte das Personal von SoftWunder heute organisiert sein. Die Belegschaft ist nicht groß, so dass die Hierarchie flach sein kann. Zum Beispiel braucht das Unternehmen keine Sekretariatsleitung und die Architektur entwirft das Entwicklungsteam gemeinsam.

Auf Details im Organigramm, die Sie vielleicht anders erwartet hätten, kommt es auch nicht an. Wichtig ist nicht, was im Organigramm fehlt, sondern was das Organigramm verbirgt! Es verbirgt oder kaschiert nämlich etwas, das eigentlich deutlich sichtbar sein müsste.

Das Organigramm macht denselben "Fehler", den dieser Code für Sie ganz offensichtlich macht:

KundenListe SucheKundenNachPLZ(string plz)
{
    logger.Write("Suche Kunden nach PLZ: {0}", plz);

    if (cache.ContainsForKey(plz))
        return cache[plz];

    KundenListe liste = new KundenListe();

    SqlConnection conn = new SqlConnection("...");
    ...

    return liste;
}

Wo liegt das Problem in diesem Code? Er vermischt unterschiedliche Aspekte! Logging, Caching und Datenbeschaffung sind unterschiedliche Aspekte der Lösung. Indem sie eine Methode vermischt, wird der Code schwer lesbar und weniger evolvierbar.

Separation of Concerns, Aspekte oder Belange klar voneinander zu trennen, ist daher ein Grundprinzip guter Softwareentwicklung. Die Aspektorientierte Programmierung (AOP) hat dafür Werkzeuge entwickelt wie zum Beispiel PostSharp. Damit ließe sich der Code klarer formulieren, z.B. so:

[Log("Suche Kunden nach PLZ {0}", "plz")]
[Cache("plz")]
KundenListe SucheKundenNachPLZ(string plz)
{
    KundenListe liste = new KundenListe();

    SqlConnection conn = new SqlConnection("...");
    ...

    return liste;
}

Jetzt steht in der Methode ihr eigentlicher Zweck im Vordergrund: die Beschaffung von Daten. Die Aspekte Caching und Logging sind an sie über Attribute "angeheftet", die von einem AOP-Framework zur Compilezeit oder Laufzeit so eingewoben werden, dass sie wie im ursprünglichen Code ihren Dienst tun.

Das konzeptionelle Verhältnis zwischen den Aspekten, ihre Orthogonalität, mittels AOP einen passenden Ausdruck gefunden. Sie springt uns jetzt ins Auge. Wir verstehen den Code leichter, wir können ihn einfacher erweitern, weil die logische Entkopplung des Aspekte nun auch ihre Entsprechung in der Form hat.

image

Jetzt zurück zu SoftWunder:  Was bedeutet das nun aber für das Organigramm?

Wie gesagt, das Organigramm vermischt genauso wie der ursprüngliche Codeentwurf. Es vermischt ganz unterschiedliche Aspekte eines Unternehmens. Das typische Ogranigramm vermischt operatives Geschäft und Führung dieses Geschäfts. Es trennt nicht deutlich zwischen dem Tagesgeschäft und Management. Es trennt nicht zwischen der Organisation und den Prozessen, die produzieren und verkaufen und einfach den Laden schmeißen - und der Entwicklung all dessen.

Geschäftsführer Friedrich (oder in größeren Unternehmen der Vorstand und das mittlere Management) hat eine fundamental andere Aufgabe als Entwicklerin Rita oder Außendienstler Rolf. Friedrich denkt über das Unternehmen nach, er trifft Grundsatzentscheidungen, er definiert Geschäftsfelder und Grundsätze der Arbeit, er bestimmt das Organigramm. Rita und Rolf hingegen führen nur aus. Sie sind zwar auch verantwortlich in ihren Rollen, aber diese Verantwortlichkeit bezieht sich auf Prozesse des Tagesgeschäftes. Sie arbeiten im Konkreten, Friedrich arbeitet sozusagen auf der Metaebene.

Diese fundamental unterschiedlichen Rollen - Arbeiten im Konkreten und Arbeiten auf der Metaebene, Arbeiten in der Organisation vs Organisationsentwicklung - mache ich mal mit Farben im Organigramm deutlich. Dann sehen Sie die Aspekte schon etwas besser:

image

Geschäftsführer Friedrich sowie Entwickler, Außendienstler und Sekretariat haben klar getrennte Verantwortungen. Sie gehören eindeutig unterschiedlichen Aspekten an. Scrum Master und Vertriebsleiter jedoch sitzen quasi zwischen den Stühlen. Einerseits sind sie im Tagesgeschäft involviert, andererseits sind sie auch angehalten, darüber hinaus zu denken. Von ihnen erwartet der Geschäftsführer Weitblick und auch (moderate) Eingriffe in die unter ihnen "hängenden" Organisationsteile.

Hört sich alles selbstverständlich an, oder? So ist das halt mit Unternehmen. Oder allgemein: So ist das halt mit organisierten sozialen Systemen. Früher oder später, gewollt oder nicht nehmen sie eine hierarchische Form an. Das ist nicht nur in Unternehmen so. Auch Vereine oder die Politik sind so organisiert. Bestrebungen um flache Hierarchien ändern daran nichts.

Und all diesen Organisationen ist gemein, dass sie in ihren Selbstdarstellungen die Aspekte Operation und Reflektion nicht klar trennen. Das tun sie nicht, weil sie es selbst nicht anders denken. In ihrem Denken verschwimmen die Aspekte, weil die Aspekte mit den zugehörigen Rollen in Personen immer wieder notwendig zusammenfließen. Operieren und Reflektieren geschieht gerade in kleinen Unternehmen zwangsläufig oft in Personalunion.

An diesem Faktum ist auch nichts auszusetzen. Damit aber das Selbstbild, das Denken kontamieren zu lassen, das ist kontraproduktiv! Professionelle Softwareentwicklung braucht klare Prinzipien. Professionelle Unternehmenungen brauchen klare Prinzipien. Wenn drüben Separation of Concerns eine Tugend ist, warum dann also nicht auch hüben?

Größere Organisationen sind da klarer. Der Begriff Management bezeichnet eigentlich den Aspekt Organisationsentwicklung/Reflektion. Im Organigramm sind dann einige Hierarchieebenen rein blau - wenn denn das Organigramm überhaupt farbkodiert wäre. Ist es aber auch in diesen Organisationen nicht. Vielleicht ist es da nicht verwunderlich, dass "die Management-Kaste" in den letzten Jahren sich ins Kreuzfeuer manövriert hat. Vielleicht hat die Krise der Mangements damit zu tun, dass das Denken in den Organisationen nicht so klar ist, wie es sein sollte? Nun, darüber zu sinnen, überlasse ich Ihnen bei einem Bier... ;-)

Hier möchte ich das Organisationsbild im Sinne der Aspektorientierung verbessern. Ich wende einfach mal die Darstellung der Software auf die SoftWunder GmbH an:

image

Führung ist orthogonal zum Tagesgeschäft. Führung kümmert sich um die Organisation, nicht um die Erledigung eines Auftrages. Sie ist insofern nicht funktional! Führung ist kein Feature der Dienstleistungen eines Unternehmens.

Wenn Sie bei einem Pizza Bringdienst nicht nur à la cart bestellen, sondern auch eigene Pizzavariationen kreieren können, dann ist das ein Feature des Pizza Bringdienstes. Er erfüllt damit einen funktionalen Wunsch der Kundschaft. Wenn die "custom Pizza" auch noch superschnell kommt, dann ist das eine nicht funktionale Eigenschaft des Bringdienstes. Denn auch wenn sie 2 Stunden warten müssten, wäre Ihr funktionaler Wunsch nach einer "custom Pizza" immer noch erfüllt.

Aber woher kommt die hohe Geschwindigkeit? Sie ist resultat guter Unternehmensführung. Denn sie ist es, die die Organisation des Tagesgeschäftes definiert, die Prozesse bestimmt, die Mitarbeiter motiviert, so dass am Ende alle und alles reibungslos läuft.

Führung ist insofern sogar in doppelter Hinsicht nicht funktional: zum Einen ist sie selbst kein Feature des Unternehmens, zum anderen wirkt sie maßgeblich auf die nicht funktionalen Eigenschaften der Dienstleistungsfeatures des Unternehmens ein.

Ich denke, das ist ein weiterer Grund, warum Führung verdient, viel expliziter dargestellt zu werden. SoftWunder täte sich einen Gefallen, wenn es sein Organigramm wie folgt zeichnen würde:

image

Dem Betrachter wäre sofort klar, wer in die Entscheidungen über das Unternehmen eingebunden wäre. Der Betrachter wüsste sofort, dass überhaupt Reflektion stattfindet, da dieser Aspekt erkannt und explizit dargestellt wurde.

Soziokratie will explizite Führung

So, nach diesem Ausflug ins Grundsätzliche wieder zurück zur Soziokratie. Wenn ich jetzt sage, dass Soziokratie aspektorientierte Unternehmensführung ist, dann verstehen Sie was ich meine. Soziokratie ist eine Methode der Unternehmensführung. Und Soziokratie führt explizit, d.h. durch Ablösung des Aspekts "Führung" vom operativen Geschäft.

image 

Die soziokratische Führung habe ich in diesem Bild in der kanonischen Form dargestellt. Die SKM spricht von einer "Kreisorganisation" der Führung, zeichnet aber Dreiecke. Wenn Sie das merkwürdig finden, dann sind Sie nicht allein ;-) Auch darin sehe ich ein Problem der Soziokratie, sich verständlich zu machen; sie ist mehr oder weniger subtil inkongruent in ihren Aussagen. Ich werde im Weiteren daher die Dreiecke nicht verwenden, selbst wenn ich mich damit gegen "die Weisen aus dem Holland" stelle ;-) (Die Geburtsstätte der Soziokratie ist in den Niederlanden, wo auch das soziokratische Hauptzentrum seinen Sitz hat.)

Das wesentliche Problem der Soziokratie sehe ich vielmehr - da bin ich mir nun ganz sicher - darin, dass sie nicht die Orthogonalität von Führung klar macht. Interessenten haben deshalb immer wieder das grundsätzliche Verständnisproblem, wo denn Soziokratie im Unternehmen zu verorten sei.

Darstellungen wie diese aus "Die Soziokratische Kreisorganisationsmethode" machen es da auch nicht besser:

image

Indem sie die soziokratische Kreishierarchie in ein bestehendes Organigramm einblendet, will SKM zwar einen wichtigen Punkt rüberbringen - steigert aber letztlich die Verwirrung. Denn so oktroiert SKM einer bestehenden Führung, die ja schon und noch im Organigramm steckt, eine weitere Führung auf. Das will sie natürlich nicht, sie tut es aber doch. Das ist tragisch.

Die aspektorientierte Darstellung vermeidet diese Verwirrung, indem sie zuerst und ganz allgemein Führung orthogonal zum operativen Geschäft zeigt - und dann (!) die traditionelle Führung durch die soziokratische ersetzt.

Führung in dieser Weise orthogonal zu denken und zu zeigen hat zwei Vorteile für die Soziokratie:

  1. Es wird ganz klar, was Soziokratie will: führen, nicht operieren. Soziokratie hat den Anspruch, die bisherige Führungsorganisation durch etwas Neues zu ersetzen. Was das ist und wie das funktioniert werde ich in zukünftigen Postings beschreiben.
  2. Es wird ganz klar, dass eine Organisation Soziokratie einführen kann, ohne zwangsläufig an der operativen (!) Organisation etwas zu verändern. Das senkt die Einstiegshürde. Denn woimmer innerhalb eines Organigramms Operation und Reflektion vermischt sind, können sie im ersten Schritt entkoppelt werden, um dann im zweiten Schritt die "herauspreparierte" Führung durch Soziokratie zu ersetzen.

Soziokratie ist also eine Führungsmethode, die auf Organisationen oder Teilorganisationen quasi beliebiger Größe angewandt werden kann. Bei SoftWunder könnte zum Beispiel nur der Vertrieb zukünftig soziokratisch geführt werden (soweit das unterhalb einer traditionellen Geschäftsführung möglich ist). Ist das erfolgreich, kann Soziokratie horizontal in anderen Abteilungen eingeführt werden oder eben auch vertikal, d.h. als Ersatz der kompletten bisherigen Führung. Soziokratische Führung kann in einem traditionellen Organisationsbaum von unten nach oben oder von oben nach unten "wachsen". Sie ist somit rekursiv. Ihre Bilder selbstähnlich.

Verstehen Sie jetzt, warum ich glaube, dass Soziokratie es in der Softwarebranche einfachener haben kann als in anderen? Aspekte, Orthogonalität, Separation of Concerns, Rekursion: das sind Begriffe, mit denen Sie täglich umgehen. Wir verstehen sie. Und ohne sie halte ich Soziokratie für viel schwieriger als notwendig verständlich.

Es ist also kein Wunder, wenn die Soziokratie-Proponenten bisher Schwierigkeiten mit ihrer Frohbotschaft hatten. Handwerksunternehmen oder einem Handelshaus Soziokratie SKM zu erklären, ohne solche begriffliche und darstellerische Schärfe, kann nur zu Missverständnissen führen.

Aber vielleicht nützen ja diese Gedanken hier, um das Konzept allgemein einfacher erklärbar zu machen und seine Verbreitung zu fördern. Ich glaube, dass SKM ein guter Schritt voran zu nachhaltiger Unternehmensführung ist.

Ausblick

Da nun die Positionierung der SKM klar ist, konzentriere ich mich beim nächsten Soziokratie-Posting auf die Wechselwirkung von SKM-Führung mit dem operativen Geschäft und der Organisation der soziokratischen "Kreis-Dreicke".

Freitag, 12. Januar 2007

Wer hören kann, ist klar im Vorteil

Gerade habe ich ein Blogposting meiner, hm, "Mitphilosophin" Ina Schmidt gelesen, in dem Sie in durchaus poetischen Worten, das Hören preist oder zumindest ins Bewusstsein hebt. (Mit Ina treffe ich mich regelmäßig zum "philosophischen Diskurs" in einem hamburger Kaffeehaus - sozusagen Kaffeehausphilosophie, statt Kaffeehauskonsultation ;-) - und wir arbeiten daran, einen totalen Bestseller zu schreiben. Natürlich zum heißen Thema Philosophie, ist ja klar. Aber mehr kann ich noch nicht verraten...)

Also, Ina lobt das Zuhören und ich habe sofort das Gefühl gehabt, dass das auch irgendwie relevant für die Softwareentwicklung ist. Aber wie...? Dann ist es mir aufgefallen: In der Softwareentwicklung hat Zuhören keinen so großen Stellenwert wie in anderen Branchen.

Oder genauer: Nicht nur das Zuhören, sondern allgemeiner das Rezipieren, das Aufnehmen, das Auf-sich-wirken-lassen. Denn die Softwareentwicklung beginnt mit dem Produzieren - und ist stolz darauf. Ein Programmierkurs ist gelungen, wenn die Teilnehmern möglichst schnell etwas produziert haben. Man soll Code schreiben lernen - nicht lesen.

Damit ist die Softwareentwicklung wohl quasi symptomatisch für einen großen pädagogischen bzw. didaktischen Trend. Denn in den Schulen steht ja heute der Ausdruck der Kinder im Vordergrund. Kinder sollen lernen, sich zu äußern, sich zu produzieren. Es geht wider den Stubenhocker und stillen Duckmäuser! Nicht nur der Befehlsempfänger als ultimativer Rezipient ist out, schon das schlichte Zuhören ist out. Belege dafür sind auch die unzähligen Fernsehshows, in denen sich jeder quasi nach Belieben produzieren kann. Die letzten Zuhörer sind die Moderatoren; ihre Aufgabe ist aber nicht das partnerschaftliche Zuhören, sondern die Lenkung (oder gar Provokation) der Produktion.

Unsere Gesellschaft ist also eine geworden, in der der Ausdruck, die Selbstproduktion im Vordergrund steht. Und die Softwareentwicklung hat das zum Credo in ihrer Ausbildung erhoben.

Relevant wird das nun, wenn man schaut, woran es bei der Softwareentwicklung hakt: nämlich bei der Kommunikation. Die Kommunikation mit dem Kunden ist immer wieder schwierig. Aber auch im Team ist´s nicht immer leicht. Und dann beim Support.

Meine These: Diese Schwierigkeiten haben damit zu tun, dass das Rezipieren in der Softwareentwicklung von Anfang an einen so geringen Stellenwert hat. Code lesen, Kunden zuhören, Anwendern lauschen, Literatur studieren... das wird nicht gelehrt.

"Code Reading" ist das einzige Buch, das ich kenne, das sich mit dem Lesen von Code beschäftigt. Allen anderen geht es ums Schreiben.

Natürlich soll und muss Code geschrieben werden. Softwareentwickler sollen Produzenten sein. Klar. Sie werden nicht nur für´s Zuhören bezahlt; sie sind ja keine Therapeuten oder Beichtväter.

Insgesamt aber, scheint mir, ist die Waagschale des Produzierens zu schwer. Es sollte etwas mehr Gewicht auf die andere Waagschale gelegt werden. Zuhören, aufnehmen, rezipieren sollte auch explizit geübt werden.

Warum? Nicht aus philosophischen Gründen oder Gutmenschtum. Rezipieren, d.h. aktives Aufnehmen und nicht passives "auf Durchzug schalten" ist einfach die andere Seite der Medaille bei der Interaktion lernender Systeme mit ihrer Umwelt.

Lernende Systeme - einzelne Menschen oder auch Organisationen - sind auf ständige Interaktionen mit ihrer Umwelt angewiesen, um "auf Kurs zu bleiben". Im Sinne des Konstruktivismus müssen sie ständig ihr internes Modell von der Umwelt überprüfen, um ihre "Passgenauigkeit" (Viabilität) zu erhalten. Lernende System müssen handeln (Produktion) und dann wahrnehmen, was passiert (Rezeption). Immer und immer wieder. Je größer der Wandel in der Umwelt, desto häufiger müssen diese Interaktionen stattfinden.

Wer dann aber vor allem nur handelt und nicht gleichzeitig auch rezipiert, auf Feedback lauscht, der lernt nichts dazu. Der geht von einem Modellstand aus und festigt ihn mit jeder Handlung, da er Feedback, welches dem Modell widersprechen könnte, nicht wahrnimmt.

Je weniger das Rezipieren in der Softwareentwicklung also Thema ist, desto schlechter lernen Softwareentwickler und Projektteams - vor allem aus "menschlichen Feedbackquellen". Deshalb kann ich Inas Ermunterung zum Zuhören nur zustimmen. Lernen wir alle besser zuhören, besser aufnehmen, empfangen. Ich bin sicher, dass sich dadurch die Beziehungen zu Kunden und Kollegen nur verbessern können - und der Projekterfolg leichter zu erringen ist.

Schenken wir mehr Aufmerksamkeit...

Aber halt, das Thema "Schenken" behandle ich lieber ein andermal.