Wie man Software-Architekturdiagramme zeichnet (2022)
(terrastruct.com)- Ein gutes Architekturdiagramm sorgt nicht durch Dekoration, sondern durch das richtige Abstraktionsniveau, Aktualität und die Beseitigung von Mehrdeutigkeiten dafür, dass Ideen vermittelt werden und die Zusammenarbeit langfristig erhalten bleibt.
- Die Minimierung der Nachbarschaftsdistanz, also das Platzieren verbundener Elemente nahe beieinander, ist die Grundlage. Je größer ein Diagramm wird, desto eher muss man es wiederholt löschen und neu zeichnen.
- Symmetrie erzeugt nicht nur einen angenehmen visuellen Eindruck, sondern verstärkt auch die Bedeutung, etwa indem Eingaben und Ausgaben auf unterschiedlichen Seiten platziert werden.
- Wenn die Ausrichtung an Mittellinien beibehalten wird, wirken auch komplexe Konzepte weniger kompliziert, und beim Hinzufügen neuer Elemente gerät das Gesamtlayout nicht aus dem Gleichgewicht.
- Container-Gruppen mit Beschriftung zeigen auf einen Blick Umgebungsgrenzen wie AWS und Azure, Abstraktionen wie ReaderWriter-Implementierungen oder Gruppen zusammengehöriger Objekte wie Cores.
Bedingungen für Diagramme, die Bestand haben
- Gute Diagramme werden nach dem Ende eines Meetings nicht weggewischt, sondern können auch später noch als Bezugspunkt für Diskussionen und Fragen dienen.
- Diagramme, die lange genutzt werden, haben einige gemeinsame Eigenschaften.
- Die Elemente müssen auf dem richtigen Abstraktionsniveau liegen.
- Sie müssen aktuell gehalten werden.
- Sie dürfen keine Mehrdeutigkeiten enthalten.
- Dieselben Entitäten und Beziehungen lassen sich auf viele Arten darstellen, aber manche Anordnungen unterstützen die Zusammenarbeit über die gesamte Projektdauer, während andere nach dem Meeting verschwinden.
- Mit Schönheit ist hier nicht Dekoration wie Schatten oder abgerundete Ecken gemeint, sondern funktionale Schönheit, die Gedanken wirksam vermittelt.
Prinzipien für ein leicht lesbares Layout
-
Minimierung der Nachbarschaftsdistanz
- Grundsätzlich sollten miteinander verbundene Knoten nahe beieinander gezeichnet werden.
- Bei kleinen Diagrammen ist das einfach, aber je größer ein Diagramm wird und je mehr neue Verbindungen hinzukommen, desto leichter geht diese Eigenschaft verloren.
- So wie man im Code beim Entdecken eines Edge Case den betroffenen Teil korrigiert oder in einem Dokument einen fehlenden Punkt durch Überarbeiten des Satzes ergänzt, sollte man auch ein Diagramm für die Dokumentation bei Bedarf löschen und neu zeichnen.
- In Interviewsituationen kann der Aufwand des Neuzeichnens belastend sein, aber bei Dokumenten, die von mehreren Personen oder Teams genutzt werden, führen wiederholte Überarbeitungen zu einem besseren Diagramm.
-
Symmetrie finden
- Symmetrie trägt stark zum ästhetischen Eindruck eines Diagramms bei, und das menschliche Gehirn neigt dazu, visuelle Symmetrie zu bevorzugen, ähnlich wie bei Gesichtern.
- Selbst wenn alle Knoten ihren Nachbarn möglichst nahe sind, kann ein Mangel an Symmetrie das Diagramm wie eine leicht schiefe Zeichnung wirken lassen.
- Auch wenn sich die Nachbarschaftsdistanz eines Knotens etwas vergrößert, kann die symmetrische Version besser aussehen.
- Eingaben auf einer Seite und Ausgaben auf der anderen zu platzieren, stärkt zusammen mit der Symmetrie auch die Aussage des Diagramms.
-
Zentrierte Ausrichtung
- Ausrichtung ist ein wichtiger Faktor dafür, dass ein Diagramm aufgeräumt wirkt.
- Ein aufgeräumtes Diagramm macht Konzepte klarer, während ein unordentliches Diagramm Konzepte komplexer erscheinen lässt.
- Wenn man auf einer leeren Fläche von Anfang an Formen zufällig platziert, bleibt oft auch die spätere Anordnung zufällig.
- Ausrichtung ist nur zwischen zwei oder mehr Formen sinnvoll. Wenn man sie daher bei jedem neuen Element beibehält, wirkt das Diagramm ganz natürlich sauberer.
- Oft ergibt sich Ausrichtung aus Symmetrie, aber nicht immer.
-
Container-Gruppen verwenden
- Wenn ein Diagramm in mehrere beschriftete Bereiche unterteilt wird, kann die betrachtende Person die Struktur leichter verstehen.
- Container können einem Diagramm die folgenden Informationen hinzufügen.
- Sie ergänzen Kontext, etwa: „Diese Services befinden sich in AWS, und diese Services befinden sich in Azure.“
- Sie zeigen Abstraktion, etwa: „Dies sind alles Implementierungen von ReaderWriter.“
- Sie gruppieren zusammengehörige Objekte, etwa wenn core 1, 2, 3 und 4 in einem „Cores“-Container zusammengefasst werden.
Themen im nächsten Teil
- In Teil 2 werden die folgenden Themen behandelt.
- Zeichnen von Edge-Pfaden
- Größe und Position von Labels
- Farben
- Icons
1 Kommentare
Hacker-News-Kommentare
Ich nutze D2 gern zum Erstellen von Diagrammen. Es ist ähnlich wie mermaid.js, bietet aber mehr Formatierungsoptionen, und persönlich finde ich auch die Syntax besser.
Dazu habe ich auch einen kurzen Beitrag geschrieben: https://victorbjorklund.com/build-diagrams-as-code-with-d2-d...
Mir ist klar, dass hässliche Softwarediagramme nicht angenehm anzusehen sind, aber sie zu dekorieren ist ein bisschen wie Kurven in ein Liniendiagramm einzubauen. Es sieht visuell vielleicht besser aus, behindert aber die Daten, die vermittelt werden sollen.
Ich habe das erste Beispiel
x -> yals SVG gerendert und dann nur das SVG im Browser geöffnet; außerdem habe ich in der gesamten Dokumentation nach einer Möglichkeit gesucht, die Ausrichtung der Ausgabe festzulegen, aber nichts gefunden.Weil die Anleitung und das tatsächliche Ergebnis voneinander abwichen, habe ich die Nutzung abgebrochen. Mit der Suche nach
"d2lang connection left to right"bin ich auf https://d2lang.com/tour/layouts/ gestoßen; es scheint aber nicht in der Übersichtsdokumentation verlinkt zu sein. Das zu ergänzen, dürfte Besuchern helfen.Für Flowcharts halte ich es für eines der einfachsten und schnellsten textbasierten Diagramm-Tools, die ich bisher verwendet habe.
Sobald sich ein System zu ändern beginnt, sind hübsche Diagramme sehr schwer zu pflegen. Man stelle sich vor, mitten in ein bereits komplexes Diagramm eine neue Box einzufügen; es kann eine Stunde dauern, alles wieder auszurichten.
In den 2020ern ist die Zeit von Entwicklern wahrscheinlich besser dafür genutzt, Diagramme als Code zu verwalten: https://www.ilograph.com/blog/posts/its-time-to-drop-drag-an...
Aber ehrlich gesagt glaube ich, dass das kein Witz ist.
Noch schlimmer war, dass man beim Hinzufügen einer neuen Box normalerweise alle Pfeile neu ausrichten musste. Das Ergebnis war, dass die Diagramme nicht kontinuierlich aktuell blieben.
Bei Sequenzdiagrammen war es besser, als ich plantML verwendet habe. Die Arbeit selbst war einfacher, sodass die Ausgabe des Interpreters meistens auch ohne manuelle Eingriffe brauchbar war.
Das ist ähnlich wie bei einer hässlichen UI. Auch wenn sie hässlich ist, sind die Nutzer bereits daran gewöhnt. In dem Moment, in dem man sie „aufräumt“, zerstört man ihr mentales Modell und zwingt sie, es neu zu lernen.
Manchmal macht man nur eine Skizze, um Gedanken zu ordnen, die man 20 Minuten später wegwirft.
Wenn es aber Referenzmaterial für Onboarding oder zur Erklärung eines Systems gegenüber anderen Teams ist, kann sich eine Stunde, die in etwas Verständlicheres investiert wird, durchaus auszahlen.
Für solche Dinge verwende ich yEd. Selbst wenn man Boxen und Pfeile komplett durcheinanderbringt, räumt es das mit ein paar Klicks im Menü automatisch auf.
Allerdings muss man Kompromisse eingehen. Boxen in Boxen gehen nicht immer gut aus. Trotzdem kann ich damit viel schneller dokumentieren, und nach ein paar Versuchen bekommt man ein Gefühl dafür, was gut funktioniert und was nicht; für mich ist das ein guter Kompromiss.
Man extrahiert die Beziehungen als TGF, importiert sie und wendet dann ein hierarchisches Layout an.
Das Format
from, to, relationreicht aus.Das hat starke Ähnlichkeiten mit elektrischen Schaltplänen, Schaltkreisdiagrammen und anderen technischen Zeichnungen. Es gibt nicht die eine „richtige“ Methode.
Wie beim Code entscheidet die Fähigkeit, gute Abstraktionen und Darstellungsformen zu wählen, zwischen verständlichen Ideen und einem bedauerlichen Durcheinander. Es ist keine Frage von Schönheit oder Ästhetik, sondern ein Werkzeug, das aktives Denken und Arbeit am Design erfordert.
Es wäre schön, ein Tool zu haben, mit dem man wie in einer Endlos-Zoom-Animation leicht in ein Diagramm hineinzoomen kann.
https://VisualFlows.io v1.0 soll bald veröffentlicht werden.
In wenigen Minuten konnte eine animierte „Architektur“-Karte der SaaS der Muttergesellschaft erstellt werden: https://app.visualsitemaps.com/user_flows/share/e64da8ed-2ef...
Die wichtigsten Funktionen sind Smart Sections, Smart Edges, Smart Node Deletion, Dark-/Light-Mode, Embeds, Drag & Drop für Bilder/SVG/GIFs, AWS-/Windows-/Google-Icons sowie Markdown, das nächste Woche kommen soll.
Siehe Smart Sections: https://support.visualsitemaps.com/en/articles/6477269-how-t...
Dieser Artikel hat mir wirklich gut gefallen. Wenn ich Architekturdiagramme zeichne, Dokumentation oder Code schreibe oder bei der Arbeit irgendetwas mache, nehme ich mir kurz Zeit, es „gut aussehen“ zu lassen.
Warum genau, ist schwer zu erklären, aber ich weiß, dass es mir danach besser gefällt.
Ich hatte ein wenig Sorge, dass das vielleicht nicht die beste Nutzung meiner Zeit ist, habe aber noch nie gehört, dass ich es lassen soll.
Das Gute an diesem Artikel ist, dass er etwas, das ich eher nach Gefühl gemacht habe, als praktische Methode beschreibt, um etwas schöner zu machen.
Es irritiert mich, wenn Teammitglieder offenbar kein visuelles Gespür für Code haben. Etwa wenn sie zwischen dem Ende einer Funktion und der nächsten Funktionsdeklaration keine Leerzeile lassen oder bei Funktionssignaturen mal einen Parameter pro Zeile schreiben und dann wieder mehrere in eine Zeile quetschen. Für mein Auge sticht das stark heraus, aber ihnen scheint es egal zu sein.
Manchmal kostet es Zeit, aber es fühlt sich irgendwie erfüllend an. Ich weiß, dass ich ein gewisses technisches Kunsttalent habe, und in der Highschool wollte ich technischer Zeichner werden.
Das ist das eigentliche Ziel von Visualisierung.
D2 eignet sich gut für solche Zwecke. In einer früheren Rolle habe ich ein Programm geschrieben, das alle
serverless.yml-Dateien geparst und daraus automatisch ein riesiges D2-Diagramm erzeugt hat.Wir machten Microservices auf AWS, und es war praktisch, dass es sich automatisch aktualisierte, wenn das System wuchs. Ich hatte es so gebaut, dass man es in kleinere Diagramme je Subsystem aufteilen konnte, etwa anhand von SNS Topics.
Das erste Beispiel verstehe ich nicht. Der Autor spricht von einem ungeplanten Knoten, nennt ihn tatsächlich „I was unplanned“ und sagt dann „wenn ich es im Voraus geplant hätte“.
Ich weiß nicht, wie man im Kontext eines Diagramms etwas Ungeplantes im Voraus planen kann. Ich frage mich, ob gemeint ist, dass man um alle Knoten herum genügend Leerraum lassen sollte.
Außerdem lässt der vorgeschlagene Verbesserungsentwurf so wirken, als würden „something“ und „I was unplanned“ denselben Kanal oder Mechanismus verwenden, wenn sie mit „engine“ interagieren.
Ich nutze Miro; für Inhalte auf hoher Ebene oder Ideation ist es mit dem Post-it-Tool ziemlich gut. Über eine mittlere Detailebene hinaus kommt es aber nicht.
Sobald Komponenten und Systeme feststehen, gibt es Werkzeuge, die für diese Arbeit besser geeignet sind.
Wenn die Projektdokumentation in Markdown vorliegt, kann man statt einer separaten Binärdatei einfach einen ```plantuml-Block einfügen, um ein Diagramm einzubetten.
In GitLab wird das beim Anzeigen von
.md-Dateien im Browser schön gerendert. GitHub hat diese Funktion noch nicht.https://docs.github.com/en/get-started/writing-on-github/wor...
https://pikchr.org/home/doc/trunk/doc/usepikchr.md