Entwicklung & Code
Babelfisch für Softwarearchitekten – Kommunikation mit den Stakeholdern
In der praktischen Arbeit müssen Softwarearchitektinnen und -architekten mit Personen in vielen unterschiedlichen Positionen und Rollen zusammenarbeiten. Dabei agieren sie überwiegend ohne Macht, sie müssen also kommunikativ eher mit Motivation arbeiten statt mit der Autorität einer Führungsposition. Abbildung 1 zeigt eine Auswahl der wichtigsten Kommunikationspartner.
Weiterlesen nach der Anzeige

Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme und Künstliche Intelligenz.
Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.

Softwarearchitekten kommunizieren in ihrer Tätigkeit mit unterschiedlichsten Rollen und Personen (Abb. 1).
Natürlich sollten Softwarearchitekten darauf achten, keinen Tod durch Meetings zu erleiden. Diese sollten sich auf das notwendige Minimum beschränken, denn Überkommunikation ist genauso kontraproduktiv wie Unterkommunikation. Das Wasserfallmodell tendiert anfangs oft zu Unterkommunikation, aber in späteren Phasen, bisweilen auch Panikmodus genannt, zu Überkommunikation. In agilen Umgebungen verteilen sich im Idealfall die Kommunikationsaufwände gleichmäßig über die Projektlaufzeit.
Architektur als Kommunikationsmittel
Die Softwarearchitektur dient als verpflichtende Guideline zur Umsetzung des Problems, sprich der Anforderungen. Daher ist deren Kommunikation nicht nur für Entwickler essenziell. Für die Kommunikation empfehlen sich folgende Mittel:
Die Architekturdokumentation darf nicht nur das Was und das Wie berücksichtigen, sondern muss auch das Warum der getroffenen Architekturentscheidungen abdecken. Manchen Architekturdokumenten ist anzusehen, dass die Architekten unmotiviert ihrer Dokumentationspflicht nachgekommen sind, was die Sache für die Zielgruppen und letztendlich auch die Architekten selbst schwierig macht. Daher sollten sie sich vorher genau überlegen, welche Informationen Stakeholder wie zum Beispiel Produktmanagerinnen, Tester oder Entwickler benötigen.
Zur Strukturierung und Komplettierung dieser Dokumente empfiehlt es sich, auf ein vorhandenes Template wie arc42 zuzugreifen. Abbildung 2 zeigt die Vorgaben von arc42 mit Ebene 1 (Whitebox-Beschreibung des Gesamtsystems und Blackbox-Beschreibungen der darin enthaltenen Bausteine) und Ebene 2 (Hineinzoomen in einige Bausteine der Ebene 1). Ebene 3 würde wiederum in Ebene 2 hineinzoomen und so weiter.
Weiterlesen nach der Anzeige

Das Dokumentationstemplate arc42 enthält Vorgaben für eine geeignete und gut strukturierte Architekturdokumentation (Abb. 2).
(Bild: arc42)
Solche Templates basieren auf jahrzehntelangen Erfahrungen und weisen in der Regel einen Topdown-Ansatz auf, um Leser nicht zu überfordern. Natürlich dürfen die Dokumente nicht zu umfangreich sein, sondern sollten für Detailinformationen auf entsprechende Dokumente zu Subsystemen oder Komponenten verweisen. Ein Umfang von maximal 60 bis 80 Seiten pro Dokument erweist sich in der Praxis als zielführend.
Erfolgreiche Kommunikation darf sich nicht im Austausch von Dokumenten erschöpfen, sondern sollte als Multi-Channel Communication auch über Präsentationen und Workshops erfolgen. Es hat sich als vorteilhaft herausgestellt, vor der Übergabe des Architekturdokuments eine Präsentation mit den wichtigsten Kernelementen zu zeigen. Einige Unternehmen organisieren zu diesem Zweck sogar Workshops mit Nutzern und Kunden.
Um Kommunikationspartner zu überzeugen, müssen Architekten ihre Entscheidungen begründen können. Architecture Decision Records (siehe Abbildung 3) helfen dabei. Sie geben das Thema der Entscheidung an, zeigen mögliche Alternativen und erläutern, weshalb eine Alternative den Vorrang bekommen hat. Ihre Speicherung erfolgt zusammen mit der Codebasis in Source-Management-Systemen wie GitHub. Davon profitieren nicht nur Newbies, sondern alle Stakeholder, die sich über Entscheidungen informieren wollen.

Architecture Decision Records helfen, Architekturentscheidungen zu dokumentieren (Abb. 3).
Aus Software-Pattern (siehe Abbildung 4) entsteht eine idiomatische Sprache für effektivere Kommunikation, von der alle Beteiligten profitieren. Statt beispielsweise von einer Ereignisquelle, einer Ereignisschnittstelle und Ereignisnutzern zu sprechen, reicht die Nennung des Observer-Pattern aus. Dadurch ist es überflüssig, einzelne Klassen und Schnittstellen zu erläutern, sondern man nutzt eine höhere Abstraktionsebene. Das gilt auch für DDD-Pattern (Domain-driven Design) auf Fachdomänenebene.

Pattern wie der Activator können die Kommunikation zwischen Softwareentwicklern beträchtlich vereinfachen, weil sie auf einer höheren Abstraktionsebene aufbauen als Programmstrukturen (Abb. 4).
Das Nutzen einfacher Arbeitsmittel wie Whiteboards, Blackboards oder Flipcharts in einem Low-Tech-First-Ansatz hat viele Vorteile. Sie erlauben eine freiere und interaktivere Kommunikation sowie Zusammenarbeit und helfen, für jeden Zweck ein adäquates Mittel zu verwenden. Ohnehin erhöht häufiger Medienwechsel die Aufmerksamkeit. Ein relativ simples Verfahren besteht in Karteikärtchen, die in drei Bereiche unterteilt sind. Im oberen schlanken horizontalen Segment schreibt man einen Klassen- oder Komponentennamen (siehe Abbildung 5), darunter auf der linken Seite folgt eine Spalte „Responsibilities“ mit den Verantwortlichkeiten der Komponente und rechts daneben die Spalte „Collaborators“, also anderen Komponenten, mit denen die vorliegende zusammenarbeitet.

Mit CRC-Karten lassen sich auf einer Pinnwand sehr einfach architektonische Entwürfe durchsprechen (Abb. 5).
Diese CRC-Karten (Class-Responsibilities-Collaborators) lassen sich einfach erstellen, auf einer Pinnwand befestigen, gruppieren oder über Fäden verbinden. Auf diese Weise erhalten Entwurfsdiskussionen ein adäquates Tool zur Kommunikation. UML-Tools dokumentieren anschließend die Arbeitsergebnisse solcher Diskussionen in einem elektronischen Format.
Es hat sich bewährt, dass Softwarearchitektinnen und Entwickler mit Fachdomänenexperten getreu dem Ansatz des Domain-driven Design (DDD) eine Ubiquitous Language entwerfen, die die Fachkonzepte und ihre Beziehungen definiert. Dadurch lassen sich später Missverständnisse vermeiden. Die Entwicklung und Verbesserung dieser Sprache erfolgt kontinuierlich. Zusätzlich bietet DDD einen von der Problemdomäne gesteuerten Ansatz, der verhindert, dass sich Entwicklerinnen und Entwickler zu schnell auf die Lösungsdomäne stürzen. So konzentrieren sich Softwarearchitekten bei DDD auf die Entwicklung einer geeigneten Sprache für die Fachdomäne und befassen sich zu Beginn ausschließlich mit dem Problemraum beziehungsweise der Fachdomäne.
Wenn Architekten anderen Beteiligten die Dokumentation nur hinwerfen, sich aber danach nicht mehr darum kümmern, kommt es fast immer zu einer Architekturdrift. Das heißt, die Implementierung entspricht nicht dem Entwurf. Die Gründe dafür können vielfältig sein: Möglicherweise waren Entwickler unter Zeitdruck, haben die Architektur nicht verstanden oder haben aus ihrer Sicht unsinnige Entscheidungen durch eigene Alternativen ersetzt.
Daher ist es ratsam, Management by Walking zu betreiben, sich also kontinuierlich unter die Developer zu mischen, deren Feedback einzuholen und Fragen zu klären. Ebenso sollten Architekten an der Implementierung mitarbeiten, und zwar nicht nur, um der „Eat your own dog food!“-Regel zu folgen, sondern um in Kontakt mit Entwicklern zu bleiben. Es wäre allerdings kontraproduktiv, wenn Architekten im kritischen Pfad arbeiten.
Reviews besitzen neben Optimierungsaspekten auch Kommunikationsaspekte. Durch ein Architektur-Review lassen sich erfahrungsgemäß sowohl Fragen klären als auch Problematiken und Risiken aufspüren. Zudem erhöht sich das Verständnis aller Beteiligten von Problemen und der Architektur. Diesen Aspekt unterschätzen viele Projekte. Reviews sollten bei jedem Inkrement beziehungsweise Sprint erfolgen, um frühzeitig Probleme zu beheben. Das gilt selbstverständlich auch für Code oder Design Reviews.
Als leichtgewichtige Methode bieten sich Architecture Design Reviews an, um kurzfristig Feedback von Kundinnen oder Nutzern zu erhalten. Dazu stellt die Architektin Dokumente oder Entwicklungsartefakte und einen Fragebogen mit Aufgaben zusammen. Zum Beispiel hat das Entwicklungsteam eine Cloud-basierte Persistenzlösung mit AWS S3 erstellt und benötigt Feedback zur Nutzerfreundlichkeit. Die Architektin stellt die Implementierung samt Dokumentation zur Verfügung oder liefert eine URL, über die Reviewer den Dienst nutzen. Hinzu fügt sie für die Reviewer einen Fragebogen, der unter anderem abfragt: „Wie viel Zeit haben Sie benötigt, um über die API ein Verzeichnis zu kreieren und ein neues Objekt dort abzulegen?“ oder „Ist die Dokumentation aus Ihrer Sicht angemessen? Falls nein, tragen Sie bitte Verbesserungsvorschläge ein.“ Der Aufwand für solche Reviews hält sich in Grenzen, der Nutzen ist trotzdem groß. Ratsam ist, für den Verfasser des Reviews einen Tag einzuplanen und für den oder die Reviewer je einen weiteren Tag.
Knowledge Replicas: In einigen Projekten ergeben sich dadurch Stolperfallen, dass gewisse Kompetenzen nur in einzelnen Köpfen vorhanden sind. Verlässt eine Person das Unternehmen, entstehen Probleme. Daher empfiehlt sich eine Information-Sharing-Kultur, zu der auch Softwarearchitekten beitragen. Über jedes kritische Wissen sollten mehrere Personen verfügen. Die Informationen lassen sich via Coaching oder Mentoring teilen. Das gilt insbesondere für das von externen Beratern eingebrachte Wissen. Derartige Wünsche stoßen mitunter auf den Widerstand der Wissensträger, die ihren Wissensvorsprung und ihre Bedeutung für das Unternehmen dadurch sichern wollen, weshalb es entsprechender Anreize bedarf, etwa zusätzliche monetäre Vergütungen oder sichtbare Wertschätzung.
Metriken und Qualitätsprüfung durch Architekturevaluierungswerkzeuge (siehe Abbildung 6) ermöglichen die Bewertung der Architekturqualität, beispielsweise hinsichtlich Abhängigkeitszyklen, Größe der Codebasis, Fehlerbrennpunkten oder Komplexitätsaspekten. Was zunächst wie eine rein technische Facette erscheinen mag, bewährt sich auch für die Kommunikation, da reines Bauchgefühl oft nicht überzeugt. Durch handfeste Zahlen lassen sich andere Beteiligte eher dazu motivieren, Verbesserungsmaßnahmen vorzunehmen und zu finanzieren.

Architekturwerkzeuge wie Structure 101 ermöglichen die Qualitätsanalyse der eigenen Softwarearchitektur und Codebasis (Abb. 6).
Frühzeitige Klärung offener Fragen spielt beim Projektstart eine wichtige Rolle. Softwarearchitekten sollten gezielt auf andere Beteiligte zugehen, um geschäftliche Aspekte, Anforderungen oder die Teststrategie zu klären. Das gilt selbst dann, wenn andere Rollen für diese Aktivität verantwortlich sind. Oft ist beispielsweise der Anforderungskatalog verbesserungswürdig, weil wichtige Informationen oder eindeutige Prioritäten fehlen, insbesondere in Bezug auf Qualitätsattribute. Im letzteren Fall erstellen Softwarearchitekten einen Utility Tree mit selbst eingeschätzten Prioritäten. Den diskutieren sie dann mit den verantwortlichen Rollen und ergreifen so die Initiative.
Softwarearchitekten und -entwickler stehen in Projekten häufig einem nebulösen und dynamischen Umfeld gegenüber. Der Anforderungskatalog ist nicht fertiggestellt oder besitzt mangelnde Qualität. Es fehlt an Erfahrungen mit neuen Technologien, das Team verfügt über zu wenig Wissen oder Ressourcen und vieles mehr. Zwei Faktoren helfen in solchen Situationen. Zum einen bietet ein agiler Prozess mit hintereinander folgenden Sprints und dadurch schnellem Feedback Vorteile. Zum anderen müssen Architektinnen und Architekten mit der entsprechenden Courage Sachverhalte aktiv klären (siehe vorhergehender Aspekt). Sind die Anforderungen unvollständig, sorgen Softwarearchitekten im Idealfall dafür, dass zumindest die wichtigsten 20 bis 30 Prozent der Anforderungen zeitnah vorliegen. Damit können sie eine ausreichende Architecture Baseline (Basisarchitektur) gewährleisten.
Parallel zur Klärungsphase lassen sich zum einen technische Prototypen erstellen, um die Brauchbarkeit und Eigenschaften neuer oder bisher nicht verwendeter Technologien zu eruieren, und zum anderen die dafür notwendigen Fortbildungsmaßnahmen organisieren und durchführen. Dieser Ansatz stammt vom sogenannten Twin-Peaks-Modell. Auch hierfür ist die Überzeugung anderer Beteiligter notwendig.
Blinde Flecke: Wer schon einmal ein Dokument oder ein Programm erstellt und einen darin befindlichen Fehler trotz mehrfacher Prüfung einfach nicht gefunden hat, weiß, dass das Gehirn Details unbewusst verdrängen oder zu falschen Kontexten vervollständigen kann. Ein berühmtes Beispiel ist das vermeintliche Gesicht auf der Mondoberfläche. Hier können andere Mitarbeiter gut unterstützen, weshalb Pair Programming oder Pair Designing hilfreich sind.
Retrospektiven beziehen sich auf die häufig unterschätzte Aktivität, auf die Vergangenheit zurückzublicken, um daraus für die Zukunft zu lernen. Treiber sind die Fragen „Was waren die Ursachen für Fehlschläge oder Probleme?“ und „Was waren die wichtigsten Erfolgsfaktoren?“. Neben technischen Aspekten ergeben sich oft auch kommunikative Defizite, die für Unheil gesorgt haben. Wer in der Rolle des Softwarearchitekten die Vergangenheit retrospektiv analysiert, sollte sich die Frage stellen, wo er oder sie besser hätten agieren können.
Wichtige Fragen der Kommunikation
Natürlich kann dieser Artikel nicht alle Eventualitäten abdecken, doch vor jeder Art von Kommunikation können sich Softwarearchitektinnen und -architekten beispielsweise folgende Fragen stellen:
- Warum/wozu ist das wichtig?
- Für wen ist das wichtig?
- Was will ich erreichen?
- Wie will ich es erreichen?
- Was erwarten oder benötigen die Kommunikationspartner (Zuhörerkontext)?
- Welche Persönlichkeitstypen liegen vor?
- Was ist das notwendige und hinreichende Minimum an Kommunikation beziehungsweise wie lässt sich Communication Overflow vermeiden?
- Welche Aufmerksamkeitsspannen haben meine Gesprächspartner?
Dazu kommt ein entscheidender und oft unterschätzter Faktor, der immer in das Kommunikationsverhalten hineinspielt: Wie schaffe ich es, einen guten Eindruck zu hinterlassen?
Entwicklung & Code
Das Paradox der Softwarearchitektur | heise online
Seitdem wir Mitte der Neunziger-Jahre an dem ersten Buch der Pattern-Oriented-Software-Architecture-Serie gearbeitet haben, tauchte auf Konferenzen und in Fachgremien immer wieder die Diskussion auf, was Softwarearchitektur denn konkret beinhaltet. Vergleiche mit Gebäudearchitektur, Elektrotechnik-Schaltplänen oder Kunst schienen schon damals zu kurz gegriffen, obwohl die genannten Gewerke durchaus einige Gemeinsamkeiten mit Softwarearchitektur aufwiesen. Der folgende Artikel illustriert meine heutige Sicht.
Weiterlesen nach der Anzeige

Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme und Künstliche Intelligenz.
Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.
Prolog: Die Frage, die den Berufsstand verfolgt
Versammelt jemand zehn Softwarearchitekten in einem Raum und bittet sie, ihr Handwerk zu definieren, trägt diese Person wahrscheinlich elf verschiedene Antworten und Kopfschmerzen davon. Das liegt nicht daran, dass Architekten von Natur aus widersprüchlich wären, obwohl einige dies durchaus sind, sondern weil Softwarearchitektur eine eigentümliche Position im Pantheon menschlicher Bestrebungen einnimmt. Sie sitzt unbequem an der Kreuzung mehrerer Disziplinen, verweigert eine ordentliche Kategorisierung, verwendet antike Traditionen und erfindet gleichzeitig völlig neue Paradigmen.
Dazu folgende Überlegung: Als der Architekt Frank Lloyd Wright sein Haus Fallingwater entwarf, arbeitete er mit Materialien, die seit Jahrtausenden existierten. Stein, Wasser, Stahl, Beton. Diese Substanzen besaßen bekannte Eigenschaften, verstandene Verhaltensweisen und Jahrhunderte akkumulierter Weisheit über ihre Verwendung. Als Ada Lovelace den ersten Algorithmus schrieb, arbeitete sie mit nichts als reiner Abstraktion, mathematischer Notation auf Papier, die Operationen für eine Maschine beschrieb, die kaum existierte. Softwarearchitekten erben heute beide Traditionen, operieren jedoch in einem Reich, das weder Wright noch Lovelace wiedererkennen könnten.
Die Frage, was Softwarearchitektur wirklich ist, zählt mehr als bloßes philosophisches Nabelschauen vermuten ließe. Die Disziplin prägt immerhin die Praxis, die Lehre, die Bewertung und letztendlich den Bau der digitalen Infrastruktur, von der die moderne Zivilisation zunehmend abhängt.
Das Plädoyer für Architektur als Kunst
Wenn Martin Fowler ein gut gestaltetes System beschreibt, klingt er manchmal eher wie ein Kunstkritiker, der ein Meisterwerk diskutiert, als wie ein Ingenieur. Er spricht von „Eleganz“, von „Klarheit“, von Lösungen, die sich „richtig“ anfühlen. Dies sind nicht die kalten, klinischen Begriffe reiner Ingenieurkunst. Sie tragen ästhetisches Gewicht, subjektives Urteil, einen Appell an etwas jenseits bloßer Funktionalität.
Weiterlesen nach der Anzeige
Und tatsächlich durchzieht Kunstfertigkeit die Softwarearchitektur auf mehreren Ebenen. Die Wahl zwischen Microservices und einem Monolithen ist selten eine rein mathematische Entscheidung. Zwei gleich versierte Architekten treffen für dasselbe Problem möglicherweise entgegengesetzte Entscheidungen und schaffen beide erfolgreiche Systeme. Der Unterschied liegt nicht in objektiver Korrektheit, sondern in Vision, im Geschmack, in einem intuitiven Gespür dafür, was sich für den Kontext angemessen anfühlt.
Großartige Softwarearchitektur besitzt eine Qualität, die ihre technischen Spezifikationen transzendiert. Wer das Design von Unix mit seiner Philosophie kleiner, komponierbarer Werkzeuge untersucht oder die klare Trennung der Belange in einer gut gestalteten hexagonalen Architektur beobachtet, erkennt eine unleugbare Schönheit darin. Der Code entwickelt sich zu einer Ausdrucksform, zu einer Methode, dem Chaos roher rechnerischer Möglichkeiten menschliche Bedeutung und Ordnung aufzuerlegen.
Die Architektin, die ein System für Millionen gleichzeitiger Nutzer entwerfen muss, steht vor einem unendlichen Lösungsraum. Sie könnte ereignisgesteuerte Architektur, Aktor-Modelle, reaktive Streams oder unzählige andere Muster wählen. Die Einschränkungen verengen die Optionen, aber selten auf eine einzige „korrekte“ Antwort. Was leitet ihre endgültige Wahl? Erfahrung, gewiss. Technisches Wissen, absolut. Aber auch Intuition, ästhetische Präferenz und eine kreative Vision davon, wie die Teile zusammenpassen sollten. Dies ist die Arbeit einer Künstlerin, die rohe Materialien zu etwas formt, das zuerst in der Vorstellung existiert, bevor es Realität annimmt.
Der kreative Prozess in der Softwarearchitektur spiegelt künstlerisches Bestreben auf eine weitere entscheidende Weise: die Bedeutung des Negativraums, dessen, was bewusst nicht gebaut wird. Ein Bildhauer enthüllt Form durch das Entfernen von Stein. Ein Architekt offenbart Klarheit durch Widerstand gegen die Versuchung, Komplexität hinzuzufügen. Die Zurückhaltung, ein System einfach zu halten, wenn jeder Stakeholder ein weiteres Feature fordert, der Mut, Code zu löschen, statt hinzuzufügen – all das erfordert künstlerische Sensibilität ebenso wie technische Fertigkeit.
Die wissenschaftliche Grundlage unter der Oberfläche
Softwarearchitektur als reine Kunst zu bezeichnen, hieße jedoch, die rigorose wissenschaftliche Grundlage zu ignorieren, auf der sie ruht. Anders als ein Gemälde, das Physik und Logik im Dienste emotionaler Wahrheit verletzen kann, muss ein Softwaresystem unnachgiebigen mathematischen Gesetzen und physischen Einschränkungen gehorchen.
Wenn eine Architektin die erwartete Last auf einem verteilten System berechnet, wendet sie Warteschlangentheorie an, einen Zweig der Mathematik mit Wurzeln in frühen Telefonnetzwerken des zwanzigsten Jahrhunderts. Wenn sie über die Konsistenzgarantien einer Datenbank nachdenkt, befasst sie sich mit dem CAP-Theorem, einem formalen Beweis, der einschränkt, was in verteilter Datenverarbeitung möglich ist. Wenn sie die Zeitkomplexität eines Algorithmus analysiert, arbeitet sie innerhalb des Rahmens der Berechnungskomplexitätstheorie, einem Feld mit tiefen Verbindungen zu Logik und Mathematik.
Die wissenschaftliche Methode durchdringt die architektonische Praxis auf offensichtliche und subtile Weise. Eine Architektin bildet Hypothesen darüber, wie sich ein System unter Last verhalten sollte, entwirft Experimente in Form von Leistungstests, sammelt empirische Daten und verfeinert ihr Verständnis basierend auf Beobachtungen. Sie könnte Chaos Engineering nutzen, um bewusst Ausfälle zu injizieren und die Produktionsumgebung als Labor zu behandeln, in dem sie Theorien über Resilienz gegen die unnachgiebige Realität der physischen Welt testet.
Informatik liefert das theoretische Werkzeugset, das jede Softwarearchitektin beherrschen muss. Konzepte wie Zustandsautomaten, Graphentheorie, formale Verifikation und Berechnungskomplexität sind keine abstrakten akademischen Übungen. Sie bilden die Linse, durch die eine Architektin versteht, was möglich, was effizient und was beweisbar korrekt ist. Beim Entwurf eines Konsensalgorithmus für ein verteiltes System geht es nicht um kreativen Ausdruck, sondern um präzises logisches Denken, das sicherstellt, dass das System unter allen möglichen Ereignissequenzen seine Invarianten beibehält.
Die wissenschaftliche Natur der Softwarearchitektur offenbart sich am deutlichsten, wenn Dinge schiefgehen. Ein Systemausfall ist keine Frage ästhetischer Meinungsverschiedenheit. Er ist eine empirische Tatsache, die systematische Untersuchung verlangt. Die Architektin muss Hypothesen über Grundursachen bilden, Experimente entwerfen, um diese Hypothesen zu testen, und rigorose Denkweisen anwenden, um die zugrunde liegenden Mechanismen zu verstehen. Dies ist Wissenschaft in ihrer reinsten Form: Beobachtung, Hypothese, Experiment und die allmähliche Verfeinerung des Verständnisses durch Konfrontation mit der Realität.
Die praktische Disziplin: Ingenieurwesen
Wäre Softwarearchitektur nur Kunst und Wissenschaft, könnte sie eine intellektuelle Übung bleiben, schön in der Theorie, aber getrennt von der chaotischen Realität des Baus tatsächlicher Systeme. Hier offenbart sich die Ingenieurperspektive als wesentlich. Ingenieurwesen handelt fundamental von Kompromissen, von der Lieferung funktionierender Lösungen innerhalb realer Einschränkungen von Zeit, Geld und menschlicher Fähigkeit.
Ein Ingenieur unterscheidet sich von einem reinen Wissenschaftler in der Akzeptanz, dass Perfektion weder möglich noch überhaupt wünschenswert ist. Wo ein Wissenschaftler die optimale Lösung suchen könnte, sucht ein Ingenieur die ausreichende Lösung, die sich morgen ausliefern lässt, statt der perfekten Lösung, die vielleicht niemals eintrifft. Dieser Pragmatismus steht im Zentrum architektonischer Praxis. Die Architektin muss ständig konkurrierende Belange ausbalancieren: Performance gegen Wartbarkeit, Konsistenz gegen Verfügbarkeit, Sicherheit gegen Benutzerfreundlichkeit, Innovation gegen Zuverlässigkeit.
Die ingenieurmäßige Realität technischer Schulden benötigt ebenfalls eine Betrachtung. Eine Architektin entwirft möglicherweise ein schönes, theoretisch solides System, aber wenn das Team es nicht verstehen, nicht warten oder nicht innerhalb des Geschäftszeitrahmens liefern kann, verwandelt sich jenes elegante Design in ein Hindernis statt in einen Vorteil. Gutes Engineering bedeutet, anzuerkennen, dass das System von realen Menschen mit unterschiedlichen Fähigkeiten gebaut, über Jahre von Personen gewartet, die bei seiner Entstehung nicht anwesend waren, und weiterentwickelt werden muss, um Anforderungen zu erfüllen, die zur Entwurfszeit nicht vollständig bekannt sein können.
Die Ingenieurdisziplin manifestiert sich auch in der Beziehung des Architekten zu Einschränkungen. Wo ein Künstler gegen Einschränkungen aufbegehren oder eine Wissenschaftlerin versuchen könnte, sie durch bessere Theorie zu eliminieren, arbeitet ein Ingenieur innerhalb von Einschränkungen und nutzt sie sogar. Begrenztes Budget erzwingt Einfachheit. Enge Zeitpläne ermutigen die Wiederverwendung bewährter Muster. Legacy-Systeme verlangen kreative Anpassung statt Greenfield-Idealismus. Diese Einschränkungen schmälern die Arbeit nicht, sondern formen sie, ähnlich wie die Eigenschaften von Stahl und Beton prägen, was ein Bauingenieur errichten kann.
Softwarearchitektur als Ingenieurwesen bedeutet, Praktiken wie Standardisierung, Dokumentation und wiederholbare Prozesse anzunehmen. Es bedeutet, Systeme zu schaffen, die Teams betreiben, die nicht an ihrem Design beteiligt waren. Es bedeutet, über Wartung, Überwachung, Bereitstellung und all die unscheinbaren, aber wesentlichen Belange nachzudenken, die ein schönes Design von einem funktionierenden Produkt trennen. Die Architektin muss Fehlermodi, Wiederherstellungsprozeduren, Backup-Strategien und Upgrade-Pfade berücksichtigen. Dies sind Ingenieursbelange, verwurzelt in der Realität, dass Systeme nicht in makelloser Isolation existieren, sondern in der chaotischen, fehleranfälligen realen Welt.
Die Handwerkstradition: Lehre und implizites Wissen
Vielleicht am faszinierendsten ist die Verbindung der Softwarearchitektur zu deutlich älteren Traditionen von Handwerk und Handwerkskunst. Bevor Wissenschaft oder Ingenieurwesen als formale Disziplinen existierten, bauten Menschen Kathedralen, Schiffe und Städte durch akkumuliertes Handwerkswissen, das der Meister an den Lehrling weitergegeben hat. Diese Übertragung impliziten Wissens, von Fertigkeiten, die gelernt, aber nicht vollständig artikuliert werden, bleibt zentral für die architektonische Praxis.
Wenn ein leitender Architekt das Design eines Juniors überprüft, widersetzt sich viel dem Feedback der Formalisierung. Der Senior könnte sagen, das Design „riecht falsch“ oder „fühlt sich spröde an“ oder „es fehlt an Kohäsion“. Dies sind keine wissenschaftlichen Begriffe mit präzisen Definitionen. Sie bilden die Sprache des Handwerks, beschreiben Intuitionen, die sich durch jahrelange Erfahrung entwickelt haben. Ein Meisterschreiner kann fühlen, wenn eine Verbindung nicht ganz richtig sitzt, bevor irgendeine Messung es beweist. Ein Meisterarchitekt kann spüren, wenn ein Design zu Problemen führen dürfte, lange bevor diese Probleme sich manifestieren.
Dieses Handwerkswissen erweitert sich durch Praxis und Mustererkennung. Eine Architektin, die zehn Systeme gebaut hat, trifft andere Entscheidungen als eine, die ein System zehnmal gebaut hat. Die Erfahrung zu sehen, wie Designs altern, zu beobachten, welche Teile von Systemen zu Wartungsalpträumen mutieren und welche durch Jahre der Evolution stabil bleiben, schafft ein intuitives Verständnis, das sich nicht auf Regeln oder Algorithmen reduzieren lässt.
Die Handwerkstradition betont auch die Bedeutung von Werkzeugen und deren richtiger Verwendung. Genauso wie ein Holzarbeiter verschiedene Sägen, Hobel und Meißel beherrschen muss, muss ein Softwarearchitekt Entwurfsmuster, architektonische Stile und Frameworks meistern. Doch Meisterschaft bedeutet, nicht nur zu wissen, wie diese Werkzeuge zu verwenden sind, sondern wann sie zu verwenden sind und zu entscheiden, wann nicht. Ein junger Architekt könnte das neueste architektonische Muster auf jedes Problem anwenden, während ein Meister weiß, dass manchmal der einfachste Ansatz der beste ist, wenngleich er unmodisch erscheint.
Das Lehrlingsmodell, obwohl weniger formal als in mittelalterlichen Gilden, besteht in der Softwareentwicklung durch Mentoring, Code-Review und Paarprogrammierung fort. Architektur lernt sich nicht primär aus Büchern, obwohl Bücher helfen, sondern durch die Arbeit neben erfahrenen Praktikern, durch Absorption ihrer Urteilskraft, ihrer Zurückhaltung, ihrer Denkweise über Probleme. Dieser implizite Wissenstransfer ist nach modernen Standards ineffizient, aber vielleicht unersetzlich für die Entwicklung der tiefen Intuition, die architektonische Meisterschaft charakterisiert.
Entwicklung & Code
Entwicklungsumgebung Eclipse IDE 2025-12: Java 25, JUnit 6, Multi-Release-JAR
Eclipse, die quelloffene und frei verfügbare Entwicklungsumgebung für Java, C/C++, PHP und weitere Programmiersprachen, ist in der Version 2025-12 erschienen. Für Windows, macOS und Linux stehen verschiedene eigenständige, erweiterbare IDE-Pakete zur Verfügung. Die Java-Sprachunterstützung von Visual Studio Code und dessen Forks, wie dem KI-Code-Editor Cursor, basiert zwar auf Eclipse, ist aber nicht Teil des Eclipse-IDE-Releases.
Weiterlesen nach der Anzeige
Neben dem Support für Java 25, JUnit 6 und Multi-Release-JAR-Dateien gibt es in der Java-IDE sogenannte Lambda Entry Breakpoints. Damit lassen sich selbst dann gezielt Breakpoints in Lambda-Ausdrücken setzen, wenn mehrere verkettete Lambda-Ausdrücke in einer Zeile stehen. Auch hinsichtlich anderer Programmiersprachen gibt es Verbesserungen, beispielsweise um die jeweils aktuelle Version TypeScript 5.9 und PHP 8.5 nutzen zu können.
Mit Java 21 im Gepäck, reif für Java 25
Die Java-IDE unterstützt zwar Java 25 und die in Java implementierte IDE lässt sich auch mit Java 25 ausführen. Dennoch werden, obwohl Java 25 eine LTS-Version ist, für die die Hersteller Long-Term-Support (LTS) versprechen, die Eclipse-Pakete weiterhin mit der vorherigen LTS-Version Java 21 ausgeliefert. Der Grund: In der von Eclipse verwendeten Java-Distribution Eclipse Temurin ist Java 25 noch nicht für Windows on ARM verfügbar. Wer also Java 25 nutzen will, muss es separat installieren.
In Java 25 gibt es zwei neue Sprachfeatures, „Flexible Constructor Bodies“ und „Module Import Declarations“. Ersteres erlaubt in Konstruktoren Anweisungen vor dem Aufruf von super() oder this(). Bei Verwendung einer älteren Java-Version zeigt Eclipse einen Fehler mit dem Hinweis an, dass dies erst ab Java 25 möglich ist. Beim Schreiben einer Modulimportdeklaration kann per Codevervollständigung ein Modul aus einer Liste der verfügbaren Module ausgewählt werden. Die Funktion Organize Imports entfernt unnötige Modulimportdeklarationen, fügt aber weiterhin nur Importdeklarationen auf Klassenebene hinzu.
Java-IDE: Debugging-Optionen und Erstellen von Multi-Release-JARs
Zum Debuggen von Java-Code kann im Editor in der entsprechenden Zeile per Rechtsklick auf den linken Rand und Auswahl des Menüpunkts „Toggle Lambda Entry Breakpoint“ ein Breakpoint für einen Lambda-Ausdruck gesetzt oder wieder entfernt werden. Befinden sich mehrere Lambda-Ausdrücke in der Zeile, erscheint ein Dialog, in dem der Gewünschte aus einer Liste vorhandener Lambda-Ausdrücke ausgewählt werden kann. Im „Open Type“-Dialog lässt sich nun per Camel Case filtern, beispielsweise „outMem“ anstelle von „out*mem“ für OutOfMemoryError. Für die seit Java 23 verfügbaren Markdown-Javadoc-Kommentare können projektspezifische Vorlagen erstellt werden. Außerdem lässt sich einstellen, ob bei der Code-Generierung Markdown- oder klassische Javadoc-Kommentare verwendet werden sollen. Beim Formatieren werden Markdown-Javadoc-Kommentare nun standardmäßig mitformatiert, was sich deaktivieren lässt.
Weiterlesen nach der Anzeige
Neu ist die Option zur Erstellung von Multi-Release-JAR-Dateien. Diese enthalten einige der kompilierten Klassen zusätzlich in einer für eine höhere Java-Version kompilierten Variante, die nur dann verwendet wird, wenn die JAR-Datei mit mindestens dieser Java-Version ausgeführt wird. In der IDE legt man dazu zusätzliche Quellcodeordner an und bestimmt dann im Java Build Path über die neue Release-Option die Java-Version, entweder „project default“ oder eine höhere Java-Version. Bei Maven-Projekten müssen die Einstellungen nicht manuell vorgenommen werden, stattdessen werden sie automatisch mit denen des Maven-Compiler-Plug-ins in der pom.xml-Datei synchronisiert.
TypeScript, JavaScript und PHP
Beim Tooling für Webtechnologien bedient sich Eclipse, genauer gesagt Eclipse Wild Web Developer, bei Visual Studio Code und unterstützt damit TypeScript, einschließlich der aktuellen Version 5.9. Bei den Eclipse PHP Development Tools (PDT) wurden diese nach längerer Pause aktualisiert und bieten nun Support für PHP 8.4 und 8.5.
Upgrade oder Download
Für Windows, Linux und macOS werden jeweils zehn erweiterbare Basispakete der Eclipse-Entwicklungsumgebung für unterschiedliche Einsatzzwecke angeboten. Sämtliche Pakete enthalten alles, was zum Ausführen von Eclipse und zum Entwickeln notwendig ist: Java 21 und Git, sowie in den Java-IDE-Paketen zusätzlich Maven und Gradle.
Die Eclipse-IDE-Pakete können über den Eclipse Installer installiert oder als ZIP-Dateien heruntergeladen werden. Eine bestehende Eclipse IDE lässt sich über Help | Check for Updates aktualisieren. Weitere Informationen und die Neuerungen von den an diesem Release beteiligten Eclipse-Projekten finden sich auf der Eclipse-IDE-Webseite.
(map)
Entwicklung & Code
Jira-Alternative: Plane 1.2.0 migriert von Next.js zu React Router und Vite
Die Entwickler des quelloffenen Projektmanagement-Tools Plane haben mit Version 1.2.0 eine umfassende Migration vollzogen: Sämtliche Web-Anwendungen laufen nun auf React Router (Framework Mode) und Vite statt Next.js. Die Umstellung betrifft über 1200 Dateien und mehr als 20.000 neue Codezeilen in den Repositories makeplane/plane, plane-ee und der Air-gapped-Deployment-Variante. Gleichzeitig schließt die neue Version kritische Sicherheitslücken in Next.js und React.
Weiterlesen nach der Anzeige
Der Wechsel erfolgte, weil Plane auf eine „client first“-Architektur ohne Server-Side-Rendering setzt und die Next.js-spezifischen Features wie Hybrid-Routing oder spezielle Data-Fetching-Mechanismen nicht nutzt. Die Entwickler berichten in einem Blogbeitrag, dass die Hot-Reload-Zeiten von 20 bis 30 Sekunden auf Millisekunden sanken. Auch der Dev-Server startet deutlich schneller. Zudem konnten die Build-Pipelines vereinfacht werden, da Tests und Produktiv-Builds jetzt auf demselben Tooling basieren.
Für Betreiber bestehender Self-Hosted-Instanzen gibt es laut der Entwickler keine Breaking Changes. Auch für Endnutzer ändert sich durch den Wechsel nichts am Erscheinungsbild oder Verhalten von Plane. Die Migration erfordert lediglich ein Docker-Update oder einen neuen Build der Container. Das Projekt hat die neue Architektur in Cloud-, Self-Hosted- und Air-gapped-Umgebungen getestet. Ein dediziertes Migrationsskript veröffentlicht Plane nicht, die Standard-Upgrade-Prozedur via Git-Pull und docker-compose up genügt.
Neue Navigation und Keyboard-Shortcuts
Neben der technischen Migration bringt Version 1.2.0 auch sichtbare Änderungen: Eine neue Top-Bar mit globaler Suche und Inbox ersetzt Teile der bisherigen Seitenleiste. Projekt-Features wie Cycles, Modules, Epics und Pages erscheinen als horizontale Tabs. Die linke Navigation lässt sich auf einen Icon-only-Modus reduzieren. Mit „Power K“ führt Plane erweiterte Keyboard-Shortcuts ein, die Navigation, das Erstellen von Work-Items, Cycles und Modules sowie das Umschalten von Sidebars und Kopieren von Links umfassen.
Die Intake-Funktion erhält einen neuen „Triage“-Status für eingehende Requests, der isoliert von den regulären Projekt-States arbeitet. Weitere Änderungen umfassen vereinfachte User-Filtering-Endpunkte, neue APIs für Workspace-Invitations und Projekt-Member-Management sowie eine automatische Icon-Zuweisung bei Projekterstellung über einen externen Endpunkt. Das Limit für Projekt-Identifier wurde auf 10 Zeichen erhöht.
Sicherheits-Updates gegen RCE-Lücken
Weiterlesen nach der Anzeige
Ein wichtiger Bestandteil des Release sind Security-Patches: Plane behebt CVE-2025-66478 in Next.js und CVE-2025-55182 in React, beides Schwachstellen mit unauthenticated Remote Code Execution. Außerdem wurde Django auf Version 4.2.27 aktualisiert, um eine SQL-Injection-Lücke in Column-Aliases zu schließen. Auch die Nginx-Version erhielt ein Upgrade. Self-Hosted-Betreiber sollten Plane zeitnah aktualisieren, um diese kritischen Lücken zu schließen.
Die Enterprise-Edition (plane-ee) und Helm-Pakete erhalten dieselben Änderungen wie die Community-Edition. Unterschiede bestehen lediglich in zusätzlichen Cloud- und Analytics-Features der Enterprise-Variante. Quantitative Performance-Metriken zu Bundle-Größe oder Runtime-Latenz vor und nach der Migration veröffentlicht Plane nicht, betont aber die deutlich schnelleren Build- und Entwicklungs-Workflows.
Plane positioniert sich als Open-Source-Alternative zu Jira, Linear, Monday und Asana. Details zu Version 1.2.0 finden sich im GitHub-Release.
(fo)
-
UX/UI & Webdesignvor 2 MonatenIllustrierte Reise nach New York City › PAGE online
-
Datenschutz & Sicherheitvor 3 MonatenJetzt patchen! Erneut Attacken auf SonicWall-Firewalls beobachtet
-
Künstliche Intelligenzvor 2 MonatenAus Softwarefehlern lernen – Teil 3: Eine Marssonde gerät außer Kontrolle
-
Künstliche Intelligenzvor 2 Monaten
Top 10: Die beste kabellose Überwachungskamera im Test
-
UX/UI & Webdesignvor 3 MonatenFake It Untlil You Make It? Trifft diese Kampagne den Nerv der Zeit? › PAGE online
-
UX/UI & Webdesignvor 2 MonatenSK Rapid Wien erneuert visuelle Identität
-
Entwicklung & Codevor 3 WochenKommandozeile adé: Praktische, grafische Git-Verwaltung für den Mac
-
Künstliche Intelligenzvor 2 MonatenNeue PC-Spiele im November 2025: „Anno 117: Pax Romana“
