Welche Vorteile hat die Softwarearchitektur?
Architektur ist ein hilfreiches Bild, um die Komplexität der Softwareentwicklung zu veranschaulichen. Es zeigt uns auf, dass wir nicht nur die Technologie, sondern auch die Budgets, die Stakeholder und unser Team berücksichtigen müssen. Letzten Endes ist sie das wichtigste Instrument zur Entscheidungsfindung und zur Bestimmung des richtigen Zeitpunktes, um diese Entscheidungen anzupassen.
Softwarearchitektur bedeutet lebenslanges Lernen, weil sie sich ständig weiterentwickelt. Mir gefällt, dass wir heute so viele High-Level-Konzepte haben, dass die Architektur ein Gebrauchsartikel wird. Das hat jemand aus dem Team einmal zu mir gesagt. Im Prinzip muss man Konzepte nicht von Grund auf neu erstellen, man muss sie nur kombinieren. Zum Beispiel gibt es schon viele Dienste in der Cloud. Was man wissen muss, ist, was der Dienst kann und wie viel er kostet. Dann muss man die Teile des Puzzles nur noch zusammensetzen.
Seitdem Vom Mythos des Mann-Monats geschrieben wurde, hat sich die Softwarearchitektur stark verändert. Obwohl der Autor schon damals wusste, in welche Richtung die Entwicklung gehen würde. Er meinte, dass höhere Programmiersprachen die Entwicklung einfacher und schneller machen würden. Und genau das ist ja auch passiert.
Ich bin nicht sicher, wie stark sich die Architektur noch weiterentwickeln wird, weil es in viele Richtungen gehen kann. In letzter Zeit ist zum Beispiel maschinelles Lernen relevant geworden. Quantencomputing, das jetzt noch in weiter Ferne liegt, wird ein echter Gamechanger werden.
Entscheidungen zur Architektur sollen und müssen vom gesamten Team getroffen werden. Ich halte nicht viel davon, die Aufgabe des Software Architects jemandem zuzuweisen. Wenn man einer Einzelperson die Verantwortung dafür überträgt, traut sich das Team vielleicht nicht mehr, architektonische Entscheidungen zu treffen. Schlimmstenfalls fühlt sich das Team dann weniger verantwortlich und motiviert für das Projekt.
Man kann auch den Standpunkt vertreten, dass in der Softwareentwicklung jede Entscheidung eine Architekturentscheidung ist, nur dass manche riskanter sind als andere. Früher haben wir immer gesagt, dass die Softwarearchitektur die „bösen Probleme“ löst – also solche, wo die Entscheidung schwerfällt, weil man nicht alle Konsequenzen vorhersehen kann. Heutzutage gibt es aber gar nicht mehr so viele dieser Probleme, weil es einfacher geworden ist, die Architektur weiterzuentwickeln
Ich bin ein großer Fan der Evolution von Softwarearchitektur. Ich habe schon bei mehreren Projekten gesehen, dass Veränderungen, die früher wirklich schwierig waren, heute relativ problemlos sind. Man braucht weniger Zeit, aber dafür eine gute Strategie und einige Verhandlungen mit den Beteiligten. So kann man sogar nach und nach das gesamte Produkt umwandeln, wenn der Projektrahmen das zulässt.
Wir reden dabei oft von Groß- oder Greenfield-Projekten, aber auch bei kleineren Erweiterungen muss man bei Entscheidungen an die konzeptionelle Integrität des Systems denken. Die Architektur umfasst daher alles von der Ordnerstruktur bis hin zur Large-System-Skalierung.
In der Softwareentwicklung gehen Architektur und Teamorganisation Hand in Hand. Aber wer Zeit mit der Teamorganisation verbringt, hat weniger Zeit fürs Programmieren, vor allem, wenn das Team groß und das Projekt komplex ist. Deshalb dürfen wir nicht vergessen, dass die Person in der Rolle des Tech Lead in erster Linie Software entwickelt. Man muss vor allem technisch fit bleiben. Man programmiert nicht um des Programmierens willen, sondern um Konzepte zu entwickeln, die das Team als „Best Practice“ nutzen soll. Wenn Du so als Tech Lead programmierst, kannst Du wirklich etwas bewirken.
Softwareentwicklung soll möglichst einfach sein. Deshalb verwenden die Teammitglieder ihre Konzepte untereinander wieder und müssen so das Rad nicht jedes Mal neu erfinden. Verwende einfachen Code, und zwar sparsam; man soll den Quelltext wie ein Gedicht lesen können. Hüte Dich vor „Musteritis“: So nennen wir das spaßeshalber, wenn jemand alle Vorlagen aus dem Lehrbuch verwendet. Auch deshalb muss man das Framework, das man verwendet, wirklich gut kennen. Dann kannst Du auf die Konzepte zurückgreifen, die das Framework schon bietet, anstatt neue zu entwickeln.