Innere Werte, Teil 4: Einfachheit

Einfache Entwürfe lassen sich besser verstehen als komplexe Entwürfe. Daher ist Einfachheit ein wichtiger Indikator für innere Qualität. Ist die Sache mit der Einfachheit aber wirklich so einfach?

vorlesen Druckansicht 10 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Dr. Michael Stal

Einfache Entwürfe lassen sich besser verstehen als komplexe Entwürfe. Daher ist Einfachheit ein wichtiger Indikator für innere Qualität. Ist die Sache mit der Einfachheit aber wirklich so einfach?

Eines meiner Lieblingszitate lautet: "Ein System ist nicht dann einfach, wenn man nichts mehr hinzufügen kann, sondern dann, wenn man nichts mehr weglassen kann." Das stammt von Saint-Exupery, Descartes, oder einer anderen berühmten Persönlichkeit, je nach verwendeter Quelle.

Mehr Infos

Um Einfachheit zu erfassen, sollten wir zunächst einen Blick auf Komplexität werfen. Beim Software Engineering unterscheiden wir inhärente und selbstverursachte Komplexität. Eine Lösung des Problems kann folglich nicht weniger komplex sein als dessen inhärente Komplexität. Sobald wir aber etwa nach dem Hammer-und-Nagel-Prinzip oder nach eigenem intellektuellen Anspruch – Stichwort "Entwurfsperlen" – unnötig komplexe Entwürfe erzeugen, verpassen wir unserem Entwurf selbstverursachte Komplexität.

Einfachheit als Ziel steckt auch in agilen Methoden. Laut Kent Beck sollte man immer die einfachste Lösung verwenden, die die Spezifikation erfüllt. Oder mit oberen Zitat: Der Lösung kann kein Teil entnommen werden, ohne dass die Lösung die Spezifikation eben nicht mehr erfüllt.

Erreichen lässt sich dies, indem sich jede Entwurfsentscheidung nachvollziehbar mit einer Anforderung oder einem Geschäftsziel begründet. Und natürlich dadurch, dass unnötig verursachte Komplexität frühzeitig erkannt und mittels Refactoring eliminiert wird.

Einfachheit lässt sich durch Kommunikation der Architektur prüfen. Wenn ein nicht am Projekt beteiligter Architekt die Architektur auch nach ausführlicher Erläuterung nicht versteht, ist entweder die Kommunikation ineffektiv oder der Entwurf zu komplex.

Einfachheit lässt sich nicht unter den Teppich kehren. Es mag sein, dass das gesamte System aus einem einzigen Objekt mit der Methode do-it() besteht, dafür aber sowohl die Methode als auch die internen Definitionen Tausende von Code-Zeilen umfassen. Hier wird Komplexität nur von A nach B verschoben. Wir erinnern uns: Inhärente Komplexität lässt sich nun mal nicht wegoptimieren.

Einfachheit ist übrigens deshalb kein Beweis, sondern ein Indikator für gute Architekturqualität, weil die Architekten ihren Entwurf zu stark simplifiziert haben könnten, weshalb er nicht die Spezifikation erfüllt. Anders ausgedrückt: Nicht alles, was simpel ist, ist auch gut. Natürlich gilt im Umkehrschluss ebenfalls: Nicht alles, was komplex ist, ist auch schlecht. Wie gesagt, inhärente Komplexität lässt sich nicht wegoptimieren. ()