design

Tom DeMarco bei seiner keynote auf der OOP2011

Auf der OOP2011 in München hielt der Buchautor Tom DeMarco („Der Termin“, Adrenalin Junkies & Formular Zombies“, und einige mehr) eine bemerkenswerte keynote, die von vielen als der Höhepunkt des Kongresses bezeichnet wurde. Da es bisher wenig Aufzeichnungen und Quellen zu diesem Vortrag mit dem Thema 'collaborative design' gibt, und gar noch weniger in deutscher Sprache, habe ich versucht seine Aussagen zusammen zu fassen und ins deutsche zu übersetzen.

Bevor DeMarco zum Kern seiner Aussage kommt, untersucht er ein paar notwendige Definitionen und zieht seine Schlüsse daraus.

Artikel lesen

1. Was ist ein System?

Die Definition eines Systems lässt sich gut im Zusammenhang mit der Definition der Definition laut Aristoteles sehen:

„Definition is a two-step process that first establishes a class that contains the word to be defined, and then differentiates it from all other members of that class.“
(Aristoteles)

„A system is a complex interconnected set of components that act together to achieve some end.“
(Aristoteles)

2. Warum sind Systeme so schwer zu verstehen?

Das menschliche Gehirn, so leistungsfähig es auch ist, es ist dennoch in seiner Kapazität begrenzt. Wie lässt sich die Kapazität des Gehirns bestimmen?

In der Softwareentwicklung besteht jedes System aus einem Projekt, das mit vielen vielen Nachrichten einen Computer füttert, so dass dieser etwas damit anstellt. Dabei kann man davon ausgehen, dass jedes Bit, das im Speicher eines Computers abgelegt worden ist, irgendwann einmal im Gehirn eines Menschen gewesen ist.

John von Neumann hat die Kapazität eines durchschnittlichen Gehirns mit 10^20 Bits berechnet. Entspricht diese Zahl aber der tatsächlich zur Verfügung stehenden Ressourcen, um Systeme zu verstehen, oder müssen wir von Ihr nicht eine Menge an Betriebssystemfunktionen und redundant abgelegter Funktionen abziehen. Wenn ja wie viele sind das?

Betrachten wir einmal das Gehirn von der Menge an Information, die es verarbeiten muss, dem Input. Das Organ, das am meisten Information aufnehmen und verarbeiten muss, ist das Auge. Die Menge an Information, die von anderen Organen aufgenommen wird, ist jeweils um ein vielfaches kleiner, so dass wir uns näherungsweise auf das Auge konzentrieren können.

Thomas K. Landauer hat die Bandbreite der Informationsaufnahme des Auges mit 10 Mbps berechnet. Bis zu einem Alter von 50 Jahren hat ein Mensch über das Auge – Schlafpausen eingerechnet – 10^16 Bits im Gehirn angesammelt. Geht man ferner davon aus, dass laut Studien 2 bps vergessen werden (oder nicht mehr für die Verarbeitung zur Verfügung stehen), bleiben weniger 1 GB übrig. Einen 1GB USB Memory Stick gibt es bereits für 2 € zu kaufen.

Das ist zu wenig, um eine komplexe Software mit allen Metainformationen, Konstruktionsplänen und Projektinformationen aufzunehmen. Die Folge ist, dass wir gezwungen sind, in Teams zu arbeiten, wenn es um umfangreiche Systeme geht.

Die Systeme, die der Mensch entwickelt werden mit der Zeit immer größer und komplexer. Das bedeutet aber auch, dass die Zusammenarbeit intensiviert werden muss.

3. Was unterscheidet technische Systeme von natürlichen?

Natürliche Systeme sind komplexe, hoch integrierte Systeme. Wir werden vielleicht nie zum Beispiel das menschliche Nervensystem oder den Hormonhaushalt im Körper ganz verstehen., weil diese Systeme zu komplex und integriert sind. Es gibt zu viele Wechselwirkungen, als dass die Anzahl der Zustände und die Regeln für die Zustandswechsel erfasst werden könnten. DeMarco spricht bei natürlichen Systemen von „large pieces tightly joined“.

Technische, vom Menschen erzeugte Systeme sind demgegenüber weitaus weniger komplex und nicht so integriert. Wir tendieren dazu, deren Schnittstellen untereinander überschaubar zu halten und die Prozesse in den Komponenten in eine zeitliche und logische Abfolge zu bringen. Letzteres gibt es bei natürlichen Systemen schlichtweg nicht. Die technischen Systeme klassifiziert DeMarco als „small pieces loosly joined“.

4. Wie werden Systeme entwickelt?

Bei der Entwicklung von Systemen kann zwischen der konzeptionellen Entwicklung und der internen Entwicklung unterschieden werden.

Die konzeptionelle Entwicklung beschäftigt sich damit, wie ein gegebenes System sich in die Realität einpasst, mit ihr interagiert und sie in seinem Umfeld verändert. Fred Brooks schreibt in seinem Buch „Design of Design“, dass die optimale Teamgröße für konzeptionelle Entwicklung 1 ist, maximal 2, wenn sich einer dem anderen unterordnet.

Die interne Entwicklung beschreibt den Vorgang, wenn optimale Strukturbereiche, in welche ein Produkt aufgeteilt werden kann, derart verändert werden, so dass mit ihnen Ergebnisse der ausgewählten konzeptionellen Entwicklung erreicht werden können.

Diese optimalen Strukturbereiche können sehr gut von einem Team verarbeitet werden. Oder mit Tom DeMarco gesprochen: „The optimal piece structure is always small pieces loosly joined.“ Die Aufteilung der menschlichen Leistung entspricht in etwa der Aufteilung des Produktes in Struktur-Bereiche.

Conways Law

„...organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.“

Melvin Conway

5. Wie kann oder soll bei der System-Entwicklung zusammengearbeitet werden?

Die kleinste Einheit für Zusammenarbeit ist, wenn 1 Bit, das in einem Menschen gespeichert ist, von einem anderen Menschen verstanden wird.

Die Anzahl der Informationseinheiten für die Beschreibung eines Projekts ist größer als die in Software gespeicherten Informationseinheiten. Die Menge der Information, die bei der Zusammenarbeit aufkommt, ist wiederum größer als die gesamte Information über das Projekt.

„Trust ist the bandwidth of communication“

(Karl Eric Sveiby)

Wenn man einer Informations-Quelle nicht vertraut, wird man von ihr auch keine Information annehmen. Ein gutes Beispiel sind SPAM-E-Mails. Sind sie einmal als solche erkannt, wird deren Inhalt komplett ignoriert.

Die traditionelle Maxime „Vertrauen wird soweit gegeben, wie es beim Gegenüber gefunden wird.“ gilt hier nicht. Die Vorleistung an Vertrauen mach den Unterschied:
„Wer nicht genügend vertraut, wird kein Vertrauen finden.“ (Lao-Tse)
Nur wer vertrauen sät, wird Vertrauen ernten.
Vertrauen ist die tatsächliche Grundlage für die Motivation von Mitarbeitern. Hier geht die soziale Komponente über die professionelle Haltung drüber hinaus.