Den Wald vor lauter Bäumen sehen

Unsere Welt ist komplex. Unendlich komplex. Das Projekt „Powers of Ten“ zeigt es deutlich. Spätestens wenn wir den Sturzflug aus einer Entfernung von 100 Millionen Lichtjahren bis in die kleinsten uns bekannten Strukturen unternehmen, wird uns das klar.

Powers of 10

Wir erkennen, dass die größeren Strukturen aus kleineren aufgebaut sind, die wiederum aus kleineren Strukturen bestehen, usw.

Andersherum: je größer unser Betrachtungsabstand wird, desto mehr verschwimmen oder verschwinden die Details der kleineren Strukturen. Wenn wir eine Straße überqueren wollen, schauen wir nach rechts und links und halten Ausschau nach einem herannahenden Auto. Wir interessieren uns nur für das „Muster“ Auto. Typ, Farbe, Räder, Insassen also die kleineren Strukturen des Autos sehen wir nicht.

Wenn wir die Vorgänge in unserem Sonnensystem betrachten, interessieren uns die Kontinente auf der Erde nicht. Die Kontinente haben einfach eine kleinere Granularität als die Planeten. In unserer Beobachtung reduzieren wir unser Stern- und Planetensystem auf die Himmelskörper. Die Kontinente fallen unter die Wahrnehmungsschwelle.

Mit anderen Worten: Wir reduzieren die Komplexität des Systems „Sonnensystem“ auf dessen Strukturelemente „Himmelskörper“. Komplexität und die systemische Betrachtungsweise der Welt sind untrennbar miteinander verbunden.Die allgemeine Systemtheorie beschäftigt sich damit.

Wald
Den Wald vor lauter Bäumen sehen

Wenn wir den Wald vor lauter Bäumen nicht sehen, haben wir uns in der inneren Struktur des Systems Wald verloren. Wenn wir das große Ganze, den Wald, wiedererkennen wollen, müssen wir einen Schritt zurück treten, also Abstand bekommen.

Hinterlasse einen Kommentar

Das Lernen ist schwer, das Können leicht.

Was ich kann, das kann ich! Ja, klar. Aber wie komme ich dahin? Wie komme ich zum Können? Der Weg scheint steinig und die meiste Zeit bergauf zu führen. Der Weg heißt Lernen. Gepflastert ist er mit Wissen. Das Vorwärtskommen ist die Erfahrung. Beides ist nötig, der Weg und das Voranschreiten. An den Zollstellen entrichten wir unser Lehrgeld aber am Ende wartet die Belohnung. Das Können.

Weg
Können warten am Ende des Wegs.

Lernen als Individuum

Wenn ich allein vor einer Aufgabe stehe, dann denke ich darüber nach, wie ich diese Lösen könnte. Wenn mir nichts einfällt, schaue ich im Internet nach oder frage jemand, der sich damit auskennt. Habe ich dann eine Idee, wie ich das Problem angehen kann, mache ich mich an die Arbeit. Das Ergebnis schaue ich mir an, und überlege, ob ich damit zufrieden bin. Wenn ja? Super. Wenn nicht, dann muss ich noch mal ran, bis es passt.

IndividualLearningSimple
Individuelles Lernen

Ich lerne, indem ich mein Wissen verwende und ein Problem löse. Mit der Erfahrung, die ich beim Problemlösen sammle, erweitere ich mein Wissen und Können.

Lernen als Team

Was passiert, wenn ein Team, also mindestens zwei Beteiligte, eine Aufgabe lösen müssen? Wenn sie die Aufgabe schon tausendmal lösen mussten, dann denken sie nicht lange nach, sondern erledigen diese einfach. Sie sind ein eingespieltes Team. So wie die Techniker in der Formel 1.

Denny Medley-US PRESSWIRE Copyright (c) Denny Medley
Können in Aktion. Ein eingespieltes Team.

Wenn die Aufgabe aber neu ist oder in dieser Form noch nie gestellt wurde? Dann muss sich das Team gemeinsam eine Lösung überlegen. Das heißt, die Teammitglieder müssen miteinander kommunizieren. Sie werfen ihr Wissen in einen Topf, ziehen eventuell noch einen Experten zu Rate und machen sich an die Arbeit. Sie müssen sowohl einzeln als auch gemeinsam die Ergebnisse überprüfen und bewerten.

TeamLernen
Teamlernen

Ein Team lernt, indem es das gemeinsame Wissen nutzt und ein Problem löst. Mit der Erfahrung die das gesamte Team beim Problemlösen sammelt, erweitert jedes Teammitglied und damit das gesamte Team sein Wissen und Können. Die Kommunikation zwischen den Teammitgliedern spielt dabei die wesentliche Rolle.

Werden Teams größer oder sitzen räumlich getrennt, dann ist die Kommunikation schwieriger und es gelten die gleichen Mechanismen wie beim Lernen als Organisation.

Lernen als Organisation

Wenn verschiedene Teams ähnliche Aufgaben lösen müssen, dann wäre es sinnvoll, wenn ein Team auf das Wissen und die Erfahrungen der anderen Teams zugreifen kann. Organisationen stehen vor der Aufgabe, das Wissen einzelner Personen oder Teams für andere Teams oder Personen zugänglich zu machen. Da nicht mehr, wie in Teams, Jeder mit Jedem reden kann, um sich Rat zu holen oder Erfahrungen zu vermitteln, müssen andere Strukturen geschaffen werden. Es muss eine Art Über- oder Organisatiosgehirn bereitgestellt werden, das Jeder anzapfen kann.

Organisationslernen
Lernen als Organisation

Eine Organisation lernt, indem sie das Wissen aller Personen und Teams nutzt, um Probleme zu lösen. Die Erfahrungen, die beim Problemlösen gesammelt werden, werden wiederum allen Personen und Teams bereitgestellt und vermittelt. Wesentlich sind dabei das Medium, das den Wissensspeicher der Organisation bildet und die Kommunikation mit diesem Speicher.

Lernen ist Reflexion und Veränderung

Wissen

Der Ausgangspunkt in allen drei Szenarios ist vorhandenes Wissen. Durch die Erfahrungen die beim Lösen der Aufgaben gesammelt werden und der Reflexion darüber wird das vorhandene Wissen verändert. Es wird entweder umstrukturiert oder ergänzt.

 

Software Entwicklung ist Lernen

„Software development is an exercise in learning“ beginnt Allan Kelly sein Buch „Changing Software Development: Learning to Become Agile„. Er fährt fort mit „The process of learning and changing is an exercice in knowledge creation. Knowledge itself is learning with action…“.

Er identifiziert drei Bereiche in denen wir durch Software-Entwicklung unser Wissen erweitern:

  • Fachwissen, das Wissen der Anwender in ihrer Fachdomäne, für die die Software entwickelt wird.
  • Werkzeugwissen, das Wissen wie Programmiersprachen und -werkzeuge einzusetzen sind.
  • Prozesswissen, das Wissen wie bei der Software-Entwicklung vorzugehen ist.

Ich ergänze die Liste noch um:

  • Architekturwissen, das Wissen, wie Anwendungen „konstruiert“ werden.

Zu allen Wissensbereichen ist Wissen verfügbar. Es steckt in den Köpfen der Menschen, in den Werkzeugen die sie benutzen oder in allen denkbaren analogen und digitalen Medien. Dieses Wissen kann aber immer nur ein Ausgangspunkt sein. Damit dieses Wissen einen Wert hat, egal ob für einen Einzelnen, für ein Team oder für eine Organisation muss es veränderbar sein. Veränderbar, damit es Erfahrungen aufnehmen kann. Veränderbar, damit daraus eine Fähigkeit, ein Können wird.

Wissensgesellschaft?

Wissensarbeiter
Wir sind Wissensarbeiter, das Notebook verrät uns!

Wir sind Wissensarbeiter. Wissen ist aber nur die halbe Miete. Wissen ist der Weg. Die Steine einzusammeln, die den Weg pflastern, nutzt nichts. Der Weg will gegangen sein. Nicht der Weg ist das Ziel, sondern das Gehen. Das Können wartet erst am Ende.

Hinterlasse einen Kommentar

Prozesse, Fluch oder Segen?

Ivar Jacobson hat in seiner Keynote auf der TeamConf 2008 gefragt: Who loves processes? Who hates processes? Ich habe mich in beiden Antwortlagern wiedergefunden. Wenn ich an das Ausfüllen endloser Formulare denke, um einen Änderungsantrag einzureichen, sträuben sich mir die Nackenhaare. Aber andererseits bin ich froh, wenn ich zuverlässig informiert werde, dass ein Bug gefixt wurde und zum Testen bereit steht.

Was sind die Kriterien, um die empfundene Zu- oder Abneigung gegen Prozesse zu erklären? Intuitiv würde ich antworten: „Solange Prozesse meine Arbeit unterstützen und erleichtern finde ich sie gut aber wenn Prozesse mich in meiner Arbeit behindern, verzichte ich sehr gern darauf.“.

Ich versuche mich der Antwort durch zwei Hintertürchen zu nähern. An der ersten Tür steht: Systemtheorie.

Software Entwicklung als Soziotechnisches System

Dass Software gemeinsam mit dem Computer auf dem sie läuft, als System bezeichnet wird, ist so in unserem Sprachgebrauch aufgegangen, dass wir nicht mehr darüber nachdenken.

System
Ein System als Blackbox

Von Außen betrachtet ist ein System eine Blackbox, die auf unsere Eingaben (Input) irgendwie reagiert (Output). Wie dabei das Innere aussieht (Struktur) und was im Inneren vor sich geht (Verarbeitung) bleibt uns verborgen.

Wenn wir die Softwareentwicklung als Blackbox betrachten, würde es so aussehen:

Softwareentwicklung als System
Das System der Softwareentwicklung

Wir füttern diese Box mit Kundenwünschen und bekommen ein Softwareprodukt geliefert, dass (im Idealfall) diese Wünsche erfüllt. Wenn wir einen Blick in diese Box werfen, sehen wir Menschen, die an Computern sitzen und in Gemeinschaftsarbeit die Kundenwünsche in ein Softwareprodukt verwandeln. Während wir beim Computersystem von einem rein technischen System sprechen, wird die Softwareentwicklung als Soziotechnisches System bezeichnet. Die innere Struktur wird durch Menschen, Technologien und Prozesse gebildet.

Soziotechnisches System
Die innere Struktur eines Soziotechnischen Systems wird durch Menschen, Technologien und Prozessen gebildet.
 

Entropie – das Maß der Unordnung in einem System

An der zweiten Hintertür steht Entropie. Entropie wird als physikalische Zustandsgröße zur Beschreibung von Systemen verwendet. Für uns reicht es, wenn wir sie uns als Ordnung bzw. Unordnung vorstellen. Mein Arbeitsplatz am Freitag ist ein System mit hoher Entropie = hoher Unordnung und der „Pragmatische Programmierer“ spricht von Software Entropie und davon dass Software vergammelt.

Arbeitsplatz
Mein Arbeitsplatz am Freitag ;-)

Das Finanzamt ist ein gutes Beispiel für eine Einrichtung mit niedriger Entropie = hoher Ordnung.

Bürokratie
Behörden als Einrichtungen großer Ordnung
 

Fluch oder Segen?

Eins fällt in beiden Beispielen auf. Richtig produktiv ist niemand. Ich brauche die meiste Zeit, um das Chaos zu beherrschen während die Beamten damit beschäftigt sind, die Ordnung aufrecht zu erhalten. Ich würde mehr auf die Reihe bekommen, wenn ich meinen Schreibtisch aufräumen würde und unsere Steuererklärungen würden schneller bearbeitet werden, wenn die Gesetze und Verfahren einfacher wären. Grafisch würde das so aussehen:

Entropie vs Produktivität
Einfluß der Ordnung / Unordnung auf die Produktivität

Interessanter Weise ist die Produktivität sowohl bei maximaler Unordnung als auch bei maximaler Ordnung am geringsten. Für die Softwareentwicklung bedeutet das, dass ganz links das Chaos und ganz rechts die formale Einhaltung von Arbeitsabläufen die Produktivität bremsen. Da die meisten Menschen etwas Sinnvolles in ihrem Leben leisten möchten, und sich am wohlsten fühlen, wenn sie „etwas geschafft“ haben, nimmt das subjektive Wohlbefinden (bezogen auf die Arbeit) zur Mitte hin zu. Da die Entropie in unserem System der Softwareentwicklung von den drei Strukturelementen Menschen, Technologien und Prozesse abhängt, können wir daraus ableiten, wie Prozesse von den beteiligten Personen empfunden werden:

Fluch oder Segen
Subjektives Empfinden von Prozessen

Auf der linken Seite helfen geordnetere Arbeitsabläufe, produktiver und damit zufriedener zu sein. Prozesse werden als Segen empfunden. Wenn das Prozessspiel aber weiter getrieben wird, kippt die Stimmung. Die Produktivität sinkt und damit auch das Wohlbefinden. Prozesse werden als sinnlos und als Behinderung angesehen. Sie werden zum Fluch!

無駄 (sprich: Muda)

Damit ein System etwas leisten kann, muss Energie zugeführt werden. Das ist beim Auto genauso wie in der Software  Entwicklung. Leider wird diese Energie nur zum Teil in nutzbare Leistung umgesetzt. Der Rest ist Verschwendung (Muda)! Aber selbst die Verschwendung kann noch einmal in notwendige und in unnötige Verschwendung unterteilt werden. Notwendig ist z.B. die Beleuchtung des Autos auch wenn sie nicht zur Fahrleistung beiträgt. Aber wenn zu wenig Luft auf den Reifen ist und dadurch mehr Sprit verbraucht wird ist das unnötige Verschwendung. 

Energiebilanz
Verwendung der zugeführten Energie

Wenn wir uns anschauen, wofür die Energie in der Software Entwicklung verbraucht wird, dann sehen wir, dass links und rechts in den „Produktivitätstälern“ gleich wenig Energie in die Wertschöpfung fließt. Der Energieverbrauch der Verschwendungsarten ist allerdings unterschiedlich. Während auf der linken Seite, dem Chaostal, die Unnötige die Oberhand hat, verschlingt im Ordnungstal die Notwendige Verschwendung die meiste Energie.

Energieverlauf
Energiebilanz im Verhältnis zur Entropie

Wenn wir nun den Berg aus dem Chaostal erklimmen wollen, müssen wir uns zwangsläufig mit der unnötigen Verschwendung auseinander setzen. Hier helfen uns Mery und Tom Poppendieck, die die Konzepte des Lean Product Development für die Software Entwicklung (Lean Software Development) aufbereitet haben.

Fujisan
Mt. Fuji

Das erste und wichtigste Prinzip der Lean Philosophie ist: Beseitige die Verschwendung (Muda)! Noch einmal: Verschwendung ist das, was keinen Wert für den Kunden erzeugt. Die größte und offensichtlichste Verschwendung sind also Dinge die produziert (oder mit auf den Berg getragen werden) und nicht gebraucht werden. Tolle Features, die niemals ein Anwender aufrufen wird. Diese Funktionen kosten nicht nur bei ihrer Herstellung Zeit, sie vergrößern auch die Komplexität der Anwendung. Da sich die Komplexität leider nicht linear auf die Kosten auswirkt sondern exponentiell, tragen also unnötige Funktionen exponentiell zur Verschwendung bei.

Wir wollen noch verweilen, die Aussicht ist so schön.

Nachdem wir uns von dem unnötigen Ballast befreit haben und auf dem Gipfel angekommen sind, wollen wir so schnell nicht wieder herunter. Die Aussicht ist so toll und der Abstieg ist nicht gut für die Knie.

fujisan2008 053
Sonnenaufgang auf dem Mt. Fuji.

Aber was, wenn wir keine Wahl haben? Wenn Gesetzgeber oder Auftraggeber eine höhere Ordnung verlangen? Auch wenn akzeptiert wird, dass Softwareentwicklung in bestimmten Branchen aufwendiger und teurer ist, wird auch hier der Kostendruck immer größer. Wie kann verhindert werden, dass die Produktivität durch Ansteigen der Ordnung sinkt? Warum kann sie nicht auch weiter steigen?

Dilemma
Dilemma: Sinkende Produktivität bei steigender Ordnung

Heronsball

Um im Tal der Ordnung produktiver zu sein, muss auch hier die Verschwendung minimiert werden. Aber im Gegensatz zur Unnötigen Verschwendung im Chaostal, hat hier die Notwendige Verschwendung die Oberhand. Die Energie wird also benötigt, um die geforderte Ordnung aufrecht zu erhalten. Aber vielleicht sind ja die Maschinen und Verfahren veraltet, die zur Erhaltung der Ordnung verwendet werden? Vielleicht ist deren Wirkungsgrad so miserabel, das wir an die Anfänge der Dampfmaschine erinnert werden.

Wir begeben uns also wieder auf die Suche nach Dingen, die keinen Wert für den Kunden erzeugen. Das könnten z.B. Managementberichte sein, die benötigt werden, um das Projekt zu lenken. Die Notwendigkeit des Berichts ist begründet aber die Art und Weise, wie dieser Bericht erstellt wird, ist die pure Energieverschwendung. Wenn wir auf einen Berg steigen, nehmen wir sicherlich etwas zu trinken mit aber wir überlegen uns gut, ob wir für eine Tagestour 10 Liter Wasser nach oben tragen wollen oder ob wir nicht mit einem Liter auskommen und lieber etwas Geld mitnehmen, um uns oben mit einem frisch gezapften Bier zu belohnen.

Auflösung Dilemma
Lösung: Energieaufwand für unterstützende Tätigkeiten verringern.

Wenn es uns gelingt, den Energieaufwand für die notwendigen, ordnenden Prozesse zu verringern, dann steigt nicht nur die Produktivität, auch die Prozesse werden nicht mehr als Arbeitsbehinderung, als Fluch wahrgenommen.

Selbstähnlichkeit

Eine mögliche Betrachtungsweise unserer Welt ist die Systemsicht. Die Welt besteht aus Systemen, die wiederum aus Systemen zusammengesetzt sind. Die Teilsysteme stehen untereinander in Beziehung und kommunizieren miteinander. Deshalb ist das Gesamtsystem mehr als nur die Summe der Subsysteme.

Romanesque
Im Großen wie im Kleinen (Selbstähnlichkeit)
 

Für die Software Entwicklung ist das kleinste System ein Programmierer, der an seinem Rechner eine Software erstellt. Er überlegt sich dafür, wie er vorgehen muss und wie er seine Arbeit organisiert. Ein Team besteht aus mehreren „kleinsten Systemen“. Hier müssen sie sich gemeinsam Gedanken machen, wie sie bei der Realisierung vorgehen. Das lässt sich weiter fortsetzen auf größere Projekte an denen mehrere Teams arbeiten oder auf Software Firmen, die mehrere Projekte gleichzeitig abwickeln. Die Strukturen sind gleich und damit gelten auch die gleichen Gesetze. Die Schwierigkeit besteht in der Beherrschung der steigenden Komplexität.

Hinterlasse einen Kommentar

Code Metrics with Visual Studio 2008

Code Metrics Results tool window

Visual Studio 2008 Professional Edition Microsoft comes with five code metrics. Maintainability Index, Cyclomatic Complexity, Depth of Inheritance, Class Coupling and Lines of Code. There are a lot of other software metrics but Microsoft picked and shipped only these main indicators. It’s a good set to start measuring code. For the need of more details you can use additional tools like NDepends which brings 82 metrics you can get lost in.

How to run Code Metrics?

Open a solution and choose Calculate Code Metrics for Solution from the Analyze Menu.

This Code Metrics Results view shows an overview and lets you drill down. You can filter and export the results to Excel as well as open a Work Item from a result list item.

How to integrate Code Metrics in Code Analysis?

First you have to enable Code Analysis for your Visual Studio projects.

Then you make sure these Maintainability Warnings are enabled:

    How to define a Check-in Policy for Code Metrics?

    If you need a check-in policy for code metrics? The guys from The Visual Studio Code Analysis Team Blog describes how to activate that policy.

    What’s the meaning of these Metrics?

    A good overview provides the blog entry.

    If you want to present the metrics to your management the Code Analysis Team gives you a few good arguments.

    Lines of Code

    Indicates the approximate number of lines in the code. The count is based on the IL code and is therefore not the exact number of lines in the source code file. A very high count might indicate that a type or method is trying to do too much work and should be split up. It might also indicate that the type or method might be hard to maintain. (Source: MSDN)

    Microsoft uses the Physical LOC. The difference to the Logical LOC describes Patrick Smacchia in his blog.

    Class Coupling

    Measures the coupling to unique classes through parameters, local variables, return types, method calls, generic or template instantiations, base classes, interface implementations, fields defined on external types, and attribute decoration. Good software design dictates that types and methods should have high cohesion and low coupling. High coupling indicates a design that is difficult to reuse and maintain because of its many interdependencies on other types. (Source: MSDN)

    Depth of Inheritance

    Indicates the number of class definitions that extend to the root of the class hierarchy. The deeper the hierarchy the more difficult it might be to understand where particular methods and fields are defined or/and redefined. (Source: MSDN)

    Cyclomatic Complexity

    Measures the structural complexity of the code. It is created by calculating the number of different code paths in the flow of the program. A program that has complex control flow will require more tests to achieve good code coverage and will be less maintainable. (Source: MSDN)

    Wikipedia: Cyclomatic Complexity

    Maintainability Index

    Calculates an index value between 0 and 100 that represents the relative ease of maintaining the code. A high value means better maintainability.
    (Source: MSDN)

    Microsoft uses a range between 0 and 100 in difference to the SEI definition with a range from 171 to an unbounded negative number.

    Hinterlasse einen Kommentar

    Work Item Tracking – Ressources (12.2007)

    Publications

    Books

    Articles

    Blogs

    Customizing

    Extensibility

    Trainings

    Hands on Lab

    Tutorial

    Web Casts

    Presentations

    TechEd 2005

    Microsoft Technical Summit 2006

    TechEd 2006

    TechEd 2007

    Support

    Forum

    Tools

    Hinterlasse einen Kommentar

    Follow

    Get every new post delivered to your Inbox.