“Lass uns die einfachste Lösung bauen.” - Aber was genau bedeutet einfach? Allzu oft wird einfach fälschlicherweise mit leicht verwechselt. Doch “einfach” und “leicht” sind zwei grundverschiedene Konzepte. Rich Hickey hat das in seiner Präsentation Simple Made Easy auseinandergenommen.
Leicht bedeutet naheliegend.
Wenn ein Team die Entscheidung trifft, ein Feature möglichst schnell und einfach umzusetzen, ist damit meist die naheliegendste Lösung gemeint. Die Entwickler kennen sich in einem Stück Code besonders gut aus und beschließen die Änderung dort einzubauen. Statt sich genauer Gedanken über die Architektur und die richtige Stelle im Code zu machen, wird die Lösung gewählt, die den wenigsten Aufwand verursacht und damit am leichtesten umzusetzen ist. Das führt langfristig zu mehr technischer und fachlicher Komplexität.
Ein anderes Beispiel, das nicht aus der Softwareentwicklung kommt: Wenn meine Frau slowakisch mit mir spricht, ist das für sie leicht. Für mich (als nicht-Slowake) ist es aber unglaublich schwer ihr zu folgen und alles richtig (oder überhaupt) zu verstehen.
Sprich, leicht im Sinne von naheliegend erhöht die Komplexität.
Einfach ist das Gegenteil von komplex
Wenn man Code anschaut und direkt versteht worum es geht, ohne selbst zu sehr ins Detail gehen zu müssen, dann erlebt man den Code als einfach.
Meist ist das aber nicht der erste Wurf, sondern durch viele Iterationen, Reviews und Überlegungen geschliffen, bis am Ende die Essenz übrig bleibt.
Auch das Gegenteil ist sofort zu erkennen: Alles hängt mit allem zusammen und man muss viele Abstraktionsebenen durchdringen, bevor man verstehen kann, was eigentlich passiert.
Leider gibt es nicht die eine Eigenschaft, mit der sich diese Einfachheit zusammenfassen lässt (oder ich kenne sie noch nicht).
Wo liegt der Unterschied zwischen den beiden Interpretationen?
Etwas das in einer bestimmten Situation für eine bestimmte Person leicht ist, kann für alle anderen sehr komplex und damit schwer nachvollziehbar sein. In diesem Fall liegt der Fokus auf dem Erstellungsprozess für die konkrete Person in dem konkreten Kontext.
Bei Einfachheit (als Gegenteil von Komplex) kann der Erstellungsprozess durchaus aufwendiger sein. Das Ergebnis ist aber etwas, das für alle leicht nachvollziehbar - und damit einfach - ist.
Um auf das Bild von oben zurückzukommen: Der ‘super simple code’ zu Anfang ist etwas völlig anderes als der ‘super simple code’ am Ende. Das ist aber nur meine persönliche Meinung 😀