DIY Komplexität meistern

Es gibt viele Arten von Komplexität. Heute soll es um Komplexität in Software und Prozessen gehen. Am Ende des Artikels stelle ich Ihnen wirklich simples Handwerkszeug zur Verfügung – aber denken Sie bitte nicht, dass es einfach wird das einfache Werkzeug einzusetzen.

Komplexität

Manche behaupten der Begriff Komplexität wäre so vielschichtig, dass er selbst schon komplex wäre und damit autologisch. Mir ist hier aber nicht an einer möglichst vielschichtigen Betrachtung des Begriffs gelegen. Das würde vermutlich zu „komplex“ werden und wäre in der Praxis wenig hilfreich.

Nähern wir uns nun dem Begriff „Komplexität“ lieber über die wörtliche Bedeutung. Komplex leitet sich aus dem lateinischen plectere ab.

plectere: lat. flechten, ineinander fügen

Wiktionary: komplex
komplex, verflochten, ineinander gefügt

Komplex ist also etwas verflochtenes, verwobenes, unüberschaubares. Komplex sind also Dinge, die stark verknüpft und verwoben sind.

Emergenz

Emergenz bezeichnet die Eigenschaft komplexer Systeme, dass sie sich häufig anders verhalten, als das anhand der Einzelteile zu erwarten wäre.

Sie kennen das alle aus dem normalen Leben. Sie können z.B. aus unelastischem Garn einen sehr elastischen Soff weben, Oder Sie haben ein wohlerzogenes Kind, ein wahrer Engel … und nehmen Sie 20 davon beim Kindergeburtstag … Sie kennen das Ergebnis. Die Reihe der Beispiele läßt sich beliebig erweitern.

Das Ganze ist mehr als die Summe seiner Teile.

Aristoteles (verkürztes Zitat aus Metaphysik VII 10 )

Wo liegt das Problem?

Emergente Eigenschaften von Systemen lassen sich nicht im Voraus aus den Einzelteilen ableiten. Erst im Nachhinein wird alles klar.

Emergente Eigenschaften komplexer Systeme treten in der Softwareentwicklung und bei betrieblichen Prozessen häufig auf.

Nun weiß man aber bei Software und bei betrieblichen Prozessen gerne im Voraus, was dabei heraus kommen soll. Das wird durch emergente Eigenschaften komplexer Systeme unmöglich.

So äußert sich Komplexität im Betrieb und bei der Software gleichermaßen. Sie erscheint in emergenten Eigenschaften oder einfacher ausgedrückt in Fehlern, Blockaden und unerwünschte Nebeneffekten. Es ist wichtig, festzuhalten, dass dabei alle Einzelteile perfekt funktionieren und fehlerfrei sind.

Komplexität äußert sich in Bugs, Blockaden, schlechter Performance und unerwünschten Seiteneffekten.

Wie begegnet man emergenten Eigenschaften?

Die Antwort liegt auf der Hand. Sie ist einfach und gleichzeitig sehr schwer umzusetzen:

Komplexität vermeiden bedeutet simple (nicht komplexe) Systeme zu verwenden!

Wie vermeidet man Komplexität?

  1. Indem man den Grad der Verflechtung reduziert oder idealerweise Verflechtungen ganz vermeidet.
  2. Indem man die Anzahl der Einzelteile vermindert. (Natürlich nur, wenn eine Verflechtung besteht. Ohne Verflechtung ist die Zahl der Teile nicht wichtig.)
viele Einzelteile aber simpel und nicht verflochten

Ein System, das mit absolut nichts verflochten ist, ist in der Regel nicht praktikabel. So dass wir schlußendlich fast immer vor der Aufgabe stehen, möglichst einfache Einzelteile zu suchen, die Anzahl der Einzelteile und deren Verbindungen untereinander zu vermindern.

Weniger ist besser!

So erkennen Sie Komplexität

Immer wenn Sie viele Dinge haben, die miteinander umgehen, sehen Sie Komplexität.

Beispiele

  • Eine Datenbank mit 100.000 Kunden? Kein komplexes System, solange Sie nicht die Beziehungen zwischen den Kunden verwalten müssen.
  • 10.000 Arbeitsanweisungen? Kein komplexes System, solange die alle nichts miteinander zu tun haben. Z.b. in einem Kochbuch.
  • 100 Arbeitsanweisungen, die sich gegenseitig beeinflussen? Das kann beliebig komplex werden.
  • Ein Softwareprojekt mit einer Klasse und 1000 Zeilen? Kann komplex sein.
  • 10.000 Zeilen Code ohne Funktionen, Prozeduren, Methoden, Schleifen und Sprünge? Vermutlich nicht elegant, wahrscheinlich gibt es redundanten Code, ist aber nicht komplex.
  • 1.000 Klassen mit jeweils einer Methode, die zusammen als Programm funktionieren sollen? Ist hochgradig komplex. (Viele Einzelteile, viel Interaktion zwischen den Einzelteilen)

Kurz: Wenn Sie ohne Hilfsmittel den Überblick verlieren, dann haben Sie vermutlich ein komplexes System vor sich

Komplexität beherrschen

Ein komplexes System beherrschen Sie nicht! Niemals! Wenn Sie Glück haben, dann können Sie auf das Verhalten des Systems einen gewissen Einfluss ausüben.

Ein komplexes System zeigt Verhalten, das Sie so nicht erwartet hätten, zu Zeitpunkten, die Sie nicht vermutet hätten und es bewegt sich am Rande des mathematischen Chaos.

Die Probleme in komplexen Systemen treten unvorhersehbar auf. Das einzige was man zuverlässig sagen kann ist, dass es mehr kleine als große Probleme gibt. Der Zusammenhang ist in der normalerweise eine Potenzfunktion der Form y=cx^a.

Wenn Sie denken, Sie würden ein komplexes System beherrschen, dann liegt vermutlich einer der folgenden Fälle vor:

  1. Sie machen das noch nicht lange genug, um einen richtig großen Unfall zu sehen.
  2. Sie haben kein komplexes System vor sich.

Jetzt wird es leider etwas redundant, aber es muss einfach wiederholt werden, bis sich das ins Gehirn einbrennt:

Sie beherrschen niemals ein dynamisches komplexes System.

Was nun?

1. Ein Sicherheitsnetz aufspannen

Wenn Sie, aus welchen Gründen auch immer, mit einem komplexen System arbeiten müssen, dann bleibt nichts anderes übrig, als mit den üblichen Maßnahmen für einen angemessenen Umgang mit den negativen Auswirkungen des Komplexität zu sorgen.

Das sind z.B. Risikomanagement, Notfallvorsorge, Redundanz, Sicherheitsmaßnahmen, Schulungen usw…

Das ist natürlich nur die zweitbeste Herangehensweise, denn das Spannen eines Sicherheitsnetzes ist aufwändig, teuer und vermindert in der Regel die Produktivität.

2. Komplexität meiden

Komplexität zu meiden, ist meist simpel und günstig, aber alles andere als einfach. Komplexität zu meiden bedeutet, dass man die Abwesenheit von Dingen achtet und schätzt. Das liegt den meisten nicht im Blut.

Wir wollen von allem immer möglichst viel und das schon gleich zweimal, wenn wir dafür bezahlen. Auch unser eigener Anspruch das beste und tollste Ergebnis zu liefern, das wir nur schaffen können, kommt uns in die Quere.

Da sind wir wieder bei dem Punkt: „weniger ist besser“. Beim Entwickeln bedeutet das: „Weniger Code ist besser“. Bei Prozessen bedeutet das: „weniger Prozesse“. Bei Software: „weniger Features, weniger Klassen, …“

Aber nun mal ehrlich. Wie bereit sind Sie in etwas zu investieren, das nicht alle möglichen Features hat, sondern nur genau so viele, wie Sie unbedingt benötigen? Nur so viel, dass es gerade noch ausreicht um ein Problem zu lösen?

Verwenden Sie den simpelsten Ansatz, um Ihr Problem zu lösen.

Die Theorie

Theoretisch haben wir das vielleicht alle verstanden und sind vom Nutzen einfacher aber dafür guter Dinge überzeugt …

Die Praxis

  • Nutzen Sie eine Textverarbeitung, die viel mehr kann als Sie unbedingt benötigen?
  • Entwickeln Sie Features, die noch gar nicht auf der Anforderungsliste stehen, die aber wahrscheinlich in Zukunft benötigt werden?
  • Verwenden Sie die beste IDE oder die einfachste?

Emotionen

Stellen Sie sich vor, Sie vergeben mehrere Aufträge für die Erstellung spezieller Software für Ihr Unternehmen. Alle Projektteams liegen beim Preis über 100.000,- EUR. Ein Projektteam schafft in 6 Monaten 30.000 Zeilen Code und ein großes vernetztes System. Ein anderes Projektteam erklärt: „Wir haben 6 Wochen gründlich nachgedacht und hier ist unsere Lösung: 300 Zeilen Code. Das ist alles.“

Wenn Sie wie die meisten Auftraggeber empfinden, dann würden Sie sich von 2. Team übervorteilt fühlen. Diese 300 Zeilen tippe ich leicht an einem einzigen Tag. Doch vergleichen wir die Lösungen langfristig …

Die 30.000 Zeilen Lösung wird sehr viele Bugs enthalten, viel Hardware benötigen und langfristig Personal und Ressourcen binden. Sie haben ein komplexes System, das ein gewisses Eigenleben entwickelt und weitere unvorhersehbare Probleme schaffen wird.

Können wir die Einfachheit der 300 Zeilen Lösung wirklich wertschätzen? Wenn die Software 5, 10 oder 15 Jahre läuft, haben Sie mit der 300 Zeilen Lösung unendlich viel besser eingekauft. Nur emotional verstehen wir das seltenst.

Solche Beispiele gibt es noch und nöcher, doch der Beitrag ist ohnehin schon viel zu lang. Sprechen Sie mich ruhig an, wenn Sie an einem weiteren Austausch interessiert sind.

Einfach ist alles andere als einfach!