Die berühmte „Was-wäre-wenn…?“-Frage – Der Schlüssel zur soliden Software-Architektur

Wie ich bereits in einem früheren Artike (oder auch hier) erwähnt habe, beginnen die wichtigsten Fragen in der Software-Architektur mit „Was wäre, wenn…?“. Wird eine dieser Fragen übergangen oder vorschnell beantwortet, ohne gründlich darüber nachzudenken, darf man sich später nicht wundern, wenn bereits kleine Änderungen – etwa ein neues Feature oder eine Kundenanpassung – mühsame und kostspielige Anpassungen an unzähligen Stellen im Code nach sich ziehen.

Plötzlich müssen Methoden geändert, Signaturen angepasst und Rückgabewerte modifiziert werden. Ganze Datentypen, inklusive ihrer Eigenschaften, Methoden und Events, müssen umgestaltet werden. Dadurch verlieren bestehende Unit-Tests ihre Gültigkeit, müssen umgeschrieben oder gar entfernt werden. Noch schlimmer: Neue Unit-Tests passen oft nicht mehr nahtlos in das ursprünglich durchdachte Konzept.

Das TDD-Paradigma, kann hier paradoxerweise zu Problemen führen. Denn wenn die Architektur bereits auf wackligen Beinen steht, entstehen „Risse“ nicht nur im Code, sondern auch in der Benutzerführung – spürbar durch inkonsistente Steuerung oder unerwartetes Verhalten der Oberfläche bei Desktop-Anwendungen und Mobile-Apps.


Flexibilität: Was sich immer ändern wird

Manche Dinge ändern sich zwangsläufig – und sollten daher von vornherein leicht konfigurierbar oder erweiterbar sein:

  • Theme, Look & Feel – weil sich Design-Standards weiterentwickeln.
  • Sprachunterstützung – denn neue Märkte bedeuten neue Anforderungen.
  • Datenexport – weil Kunden irgendwann ein anderes Format benötigen.
  • Diagramme und Reports – da sich Analyse- und Visualisierungsanforderungen ändern.
  • Kommunikation mit Schnittstellen und Protokollen – weil neue Technologien und Standards entstehen.

Unwahrscheinliche Änderungen? Vielleicht doch nicht!

Dann gibt es Dinge, bei denen man glaubt, sie würden nie oder nur in den seltensten Fällen geändert werden – und doch geschieht es irgendwann:

  • Der Kunde will Produktionsdaten in einer exotischen Datenbank oder einem speziellen Dateiformat speichern.
  • Eine „unbedeutende“ Zahl soll plötzlich auf dem Bildschirm angezeigt oder eine neue Konfigurationsmöglichkeit für die Nachtschicht integriert werden.
  • Eine günstigere SPS oder Industrie-Kamera eines unbekannten Herstellers muss eingebunden werden – leider nicht ganz standardkonform.

Ob, wann und wie solche Änderungen kommen, ist nur eine Frage der Zeit.


Architektur ist wie Schach – erst denken, dann ziehen!

Ein guter Software-Architekt verhält sich wie ein professioneller Schachspieler: Er nimmt sich Zeit für das Vorausdenken, prüft verschiedene Szenarien und fragt sich „Was wäre, wenn…?“, bevor er zur Tastatur greift.

Denn grobe Architekturfehler verhalten sich wie unbedachte Züge im Schach: Ein frühzeitiger Fehlgriff kann zum Schachmatt führen – oder die gesamte Strategie unnötig kompliziert und mühselig machen. Einmal falsch platziert, steht die Figur im Weg und macht jede weitere Planung schwieriger.

Besser also, man nimmt sich die Zeit für eine durchdachte Architektur – bevor man sich später durch einen Flickenteppich aus Workarounds kämpft.

Dimensionierung und Planung von Software und Fußgängerbrücken

Software:
Am Anfang heißt es immer: „… ein kleines und sehr einfaches Programm…“, und dann fallen ähnliche Sätze wie „…ein Drei-Zeilen-Programm…“ sowie „… keine eye candies…“.

Mitten in Entwicklung, und oft gar gegen Ende heißt es dann: „… wir brauchen schon Benutzerverwaltung…“, und „… man sollte schon arabische und hebräische Texte von rechts nach links darstellen können…“, sowie „… naja auf Mac OSX muss es auch laufen…“ und nicht zu vergessen „… man soll ganz einfach das Datenbank-System auswechseln können…“ sowie „…. Daten von X ins Y migrieren können…“ aber auch „… über Internet Reports abrufen können…“ und eine Selbstverständlichkeit heißt es dann „… die Daten müssen auch in AAA, BBB, …, CSV, XML, JSON, …, ZZZ und 1000 andere Formate exportiert werden können..“ usw. usf.

Fußgängerbrücke:
Ich habe ehrlich gesagt absolut keine Ahnung, was am Anfang bei der Planung von Fußgängerbrücken verlangt und gesagt wird… aber einiges weiß ich mit Bestimmtheit:
Bei oder nach der Fertigstellung von Fußgängerbrücken heißt es nie:

  • Wir hätten gerne die Fußgängerbrücke 30 km weiter südlich!
  • Auf der Fußgängerbrücke sollten auch Radfahrer fahren können.
  • Die Fußgängerbrücke sollte schon 2 Spuren für Fahrzeuge pro Richtung haben!
  • Für jede Richtung sollte es schon einen Pannenstreifen geben!
  • Bitte baut die Fußgängerbrücke etwas breiter und baut Schienen für die Bahn dazu!
  • 1000 vollbeladene LKWs und Sattelschlepper sollten schon täglich mit 100 km/h darüber fahren können!
  • Man sollte schon pro Fahrspur eine Autoschranke haben, um Autobahnmaut zu kassieren!

Das ist keine Fußgängerbrücke mehr, sondern eine große Autobahnbrücke mit weißGottWasWeißIchAllesNoch!

Kann es sein, dass manche Kosten mit Komplexität verwechseln?

Stabilität-Tests von Software und Autobahnbrücken

Software:
Man startet das Programm und lässt es durchgehend laufen, ohne dass jemand damit irgendwas Gezieltes und Intensives nach Logik und Plan tut. Da das Programm, nach ein paar Tagen, Wochen, Monate immer noch läuft, wird es als Stabil gestuft.

Autobahnbrücke: nur weil eine Autobahn nach der Fertigung, immer noch ein paar Wochen steht, wird sie nicht als stabil gestuft!