Read in English · Leer en español · Lire en français
Abschnitt 4.1 von 4.8 · Mittelstufe · 18 Min. Lesezeit
Warum und wie viel dokumentieren
Videolektion
5 Min. · auf Englisch gesprochen, mit UntertitelnNur anhören (Audio)
Transkript lesen
Jedes System hat eine Architektur, ob sie nun jemand aufschreibt oder nicht. In dieser Lektion sehen Sie, wer Architekturdokumentation liest und wie man entscheidet, was sich zu schreiben lohnt.
Denken Sie an die Unterlagen zu einem Haus. Wer kauft, will einen Grundriss, die Elektrikerin den Schaltplan und die Versicherung das Gutachten. Niemand will eine Liste aller Ziegelsteine. Und ein Plan, der eine längst abgerissene Wand zeigt, ist schlimmer als gar kein Plan. Wer es in zwanzig Jahren renoviert, will wissen, warum diese Wand nie versetzt wurde. Bei Architekturdokumentation ist es genauso: wenige zutreffende Dokumente, die erklären, was der Code nicht zeigen kann.
Die Architekturbeschreibung ist die Gesamtheit der Dokumente, Diagramme und Aufzeichnungen, über die Menschen eine Architektur teilen. In einem Team von drei Personen, die zusammensitzen, kann vieles davon in den Köpfen leben. Wenn das Team wächst und Menschen gehen, wird das zum Risiko. Das Buch Views and Beyond nennt drei Verwendungszwecke. Dokumentation bildet Neulinge aus, sie trägt die Kommunikation zwischen Stakeholdern, und sie ist die Grundlage für Analyse. Ein Dokument, das keinem davon dient, ist Verschwendung.
Der Leser entscheidet, ob Dokumentation funktioniert hat, und verschiedene Leser bringen verschiedene Fragen mit. Ein Neuling fragt, was das System tut und wo er anfangen soll. Eine einseitige Übersicht und ein Kontextdiagramm dienen ihm am besten. Der Betrieb fragt, wo es läuft, wovon es abhängt, wie es ausfällt und wie man es wiederherstellt. Er braucht eine Deployment-Sicht und Runbooks. Prüfer wollen sehen, dass Entscheidungen bewusst getroffen wurden und Änderungen nachvollziehbar sind: Entscheidungsdokumente mit Datum und Verantwortlichen. Und künftige Wartende fragen, warum um Himmels willen das so gemacht wurde. Vor allem brauchen sie die Begründung.
Das Agile Manifest von 2001 schätzt funktionierende Software höher als umfassende Dokumentation. Es wird oft als Erlaubnis zitiert, gar nicht zu dokumentieren. Doch seine Autoren sagen, dass die Dokumentation trotzdem Wert hat. Es ist eine Priorität für den Fall, dass beides konkurriert. Abgelehnt wird Dokumentation als Selbstzweck: Hunderte Seiten, abgenommen vor jeder Zeile Code und dann aufgegeben. Zielen Sie also auf gerade genug. Ein Prototyp von zwei Personen braucht eine README-Datei und vielleicht ein Diagramm. Eine regulierte Zahlungsplattform, die acht Teams betreiben, braucht weit mehr. Und wenn Neulinge immer wieder dieselbe Frage stellen, schreiben Sie die Antwort auf.
Dieses Raster hilft Ihnen zu entscheiden, wie Sie eine Information dokumentieren. Die senkrechte Achse fragt, ob sie sich aus dem Code ableiten lässt. Die untere Achse fragt, wie oft sie sich ändert. Oben links steht, was der Code nicht sagen kann und sich selten ändert: Kontext und Abgrenzung, Qualitätsziele und Entscheidungen mit ihren Gründen. Schreiben Sie diese von Hand auf, und bewahren Sie sie auf. Oben rechts steht, was sich öfter ändert, etwa Container- und Deployment-Sichten und wichtige Laufzeitszenarien. Halten Sie sie neben dem Code, und prüfen Sie sie bei jeder Änderung. Unten rechts steht, was der Code bereits aussagt und sich oft ändert, etwa Klassendiagramme und Schnittstellenreferenzen. Generieren Sie diese in der Pipeline, damit sie nicht abdriften können. Unten links steht, was man im Code lesen kann und sich selten ändert, wie der Technologie-Stack oder die Build-Befehle. Ein kurzer Verweis genügt.
Wenden wir das auf eine Essenslieferplattform mit dreißig Engineers in fünf Teams an, der ein Audit bevorsteht. Der Architekt schlägt eine kurze Übersicht vor: Zweck, Nutzer, Qualitätsziele in Prioritätsreihenfolge und eine Lesereihenfolge für Neulinge. Sie hat einen benannten Verantwortlichen und wird vierteljährlich geprüft. Es gibt zwei C4-Diagramme, für den Systemkontext und die Container, generiert aus einem Modell im Repository. Es gibt ein Entscheidungsprotokoll mit etwa vierzig kurzen Einträgen. Ändert sich eine Entscheidung, ersetzt ein neuer Eintrag den alten. Es gibt eine Deployment-Sicht für jede Umgebung, Sequenzdiagramme für die vier wichtigsten Abläufe und ein Runbook für jeden Alarm. Und Klassendiagramme, Endpoint-Listen und Schemata werden generiert, nicht von Hand geschrieben. Jeder Eintrag hat einen Leser, einen Verantwortlichen und einen Auslöser für Aktualisierungen.
Views and Beyond stellt sieben Regeln für gute Dokumentation auf, und fast jedes Scheitern verstößt gegen eine davon. Am häufigsten ist das veraltete Wiki: Hunderte Seiten, teilweise zutreffend, und unmöglich zu erkennen, welcher Teil. Das Big-Bang-Dokument ist eine hundertzwanzigseitige Spezifikation, einmal genehmigt und nie wieder gelesen. Diagramme ohne Legende lassen jeden Leser eine Bedeutung erfinden. Und ein Diagramm, das eine Mobile-App, eine einzelne Klasse und einen Geschäftsprozess mischt, sind mehrere zusammengepresste Sichten. Schließlich das Was ohne das Warum: eine vollständige Beschreibung der Struktur, ohne Begründung. Künftige Teams können nicht erkennen, welche Randbedingungen wesentlich sind und welche Zufälle waren.
Der vollständige Abschnitt stellt alle sieben Regeln, Docs as Code und eine Anleitung dazu vor, was man aufschreiben sollte. Als Nächstes sehen wir in Abschnitt vier Punkt zwei, warum ein einzelnes Diagramm nie genügt. Bis gleich.
Was Sie wissen müssen
- Eine Architekturbeschreibung ist die Gesamtheit der Dokumente, Diagramme und Aufzeichnungen, über die Menschen eine Architektur teilen; sie dient der Wissensvermittlung, der Kommunikation zwischen Stakeholdern und der Analyse.
- Verschiedene Leser (Neulinge, Entwickler, Betrieb, Sicherheit, Prüfer, künftige Wartende und Entscheider) bringen verschiedene Fragen mit, daher sollte Dokumentation nach Lesern und ihren Aufgaben gegliedert sein.
- Das Agile Manifest schätzt funktionierende Software höher als umfassende Dokumentation, sagt aber ausdrücklich, dass die Dokumentation trotzdem Wert hat; es lehnt Dokumentation als Selbstzweck ab, nicht Dokumentation.
- Schreiben Sie von Hand auf, was sich nicht aus dem Code ableiten lässt (Kontext, Qualitätsziele, Entscheidungen und ihre Gründe, Prinzipien); generieren Sie, was der Code bereits aussagt und was sich oft ändert.
- Die sieben Regeln von Views and Beyond: für den Leser schreiben, unnötige Wiederholung vermeiden, Mehrdeutigkeit vermeiden, eine Standardgliederung verwenden, Begründungen festhalten, die Dokumentation aktuell halten, aber nicht zu aktuell, und sie auf ihre Zweckeignung prüfen.
- Docs as Code und lebende Dokumentation halten die Dokumentation in der Versionskontrolle, prüfen sie zusammen mit Codeänderungen und leiten sie, wo möglich, aus dem System ab; das ist der zuverlässigste Schutz gegen das Veralten.
- Häufige Anti-Patterns sind das veraltete Wiki, das Big-Bang-Dokument, das niemand liest, Diagramme ohne Legende, vermischte Abstraktionsebenen und Beschreibungen, die das Warum weglassen.
Warum eine Architektur aufgeschrieben werden muss
Jedes System hat eine Architektur, ob sie nun jemand beschreibt oder nicht (siehe Abschnitt 1.1). Die Architekturbeschreibung ist etwas anderes: die Dokumente, Diagramme, Modelle und Entscheidungsdokumente, über die Menschen ein Verständnis dieser Architektur teilen. In einem Team von drei Personen, die zusammensitzen und jede Zeile selbst geschrieben haben, kann ein Großteil der Beschreibung in ihren Köpfen leben. Sobald das Team wächst, Menschen gehen, ein zweites Team hinzukommt, ein Prüfer auftaucht oder das System seine Autoren überdauert, wird Wissen, das nur in Köpfen existiert, zum Risiko. Ralph Johnsons Definition von Architektur als gemeinsames Verständnis der erfahrenen Entwickler enthält eine Warnung: Ein Verständnis, das nicht aufgeschrieben ist, lässt sich nur durch Gespräche teilen, und Gespräche skalieren nicht.
Documenting Software Architectures: Views and Beyond (Paul Clements und Kollegen am Software Engineering Institute, 2. Auflage, 2010) nennt drei Verwendungszwecke für Architekturdokumentation, und sie sind noch immer die klarste Art, darüber nachzudenken, warum sich der Aufwand lohnt. Sie dient der Wissensvermittlung: Sie führt neue Teammitglieder, externe Prüfer und neue Architekten in das System ein. Sie ist das wichtigste Mittel der Kommunikation zwischen Stakeholdern: Entwickler, Betrieb, Sicherheitsfachleute und Management diskutieren über das System anhand der Dokumentation, und Entscheidungen aus einem Meeting erreichen Menschen, die nicht dabei waren. Und sie ist die Grundlage für Analyse und Umsetzung: Sie sagt den Implementierenden, was sie tun dürfen und was nicht, und sie ist das, was eine Bewerterin untersucht, wenn sie fragt, ob das System seine Qualitätsziele erreichen wird (die Bewertungsmethoden aus Kapitel 11 brauchen eine Beschreibung als Arbeitsgrundlage).
Daraus folgen zwei Konsequenzen. Erstens ist Dokumentation ein Mittel, kein Zweck: Ein Dokument, das keinem dieser Zwecke dient, ist Verschwendung, wie gut es auch formatiert sein mag. Zweitens entscheidet der Leser, ob sie funktioniert hat. Eine Beschreibung, die ihr Autor vollständig findet, mit der ein Neuling aber nichts anfangen kann, ist bei der Wissensvermittlung gescheitert, und ein Diagramm, das das Betriebsteam nicht auf echte Server abbilden kann, ist bei der Analyse gescheitert.
Wer Architekturdokumentation liest und was er braucht
| Leser | Fragen, die sie mitbringen | Was ihnen am besten dient |
|---|---|---|
| Neulinge (neue Entwickler, externe Kräfte, eine neue Architektin) | Was tut dieses System, für wen, und wo fange ich an? Was sind die Hauptteile, und welche Begriffe verwenden die Leute? | Eine einseitige Übersicht, ein Systemkontextdiagramm, ein Containerdiagramm, ein Glossar und eine kurze Lesereihenfolge |
| Aktuelle Entwickler | Wohin gehört dieses neue Feature? Wovon darf ich abhängen? Warum ist es so gebaut, und darf ich es ändern? | Modul- oder Komponentenstruktur, Konventionen, querschnittliche Konzepte (Fehlerbehandlung, Sicherheit, Logging) und Entscheidungsdokumente |
| Betrieb und SRE | Wo läuft es, wovon hängt es ab, wie fällt es aus, und wie stellen wir es wieder her? | Deployment-Sicht je Umgebung, externe Abhängigkeiten, Runbooks, Monitoring und Wiederherstellungsziele |
| Sicherheits- und Datenschutzfachleute | Wo liegen die Vertrauensgrenzen? Wohin fließen personenbezogene Daten, und wo werden sie gespeichert? Wer darf was aufrufen? | Kontext- und Datenflusssichten, Identitäts- und Zugriffskonzept, Liste der Drittanbieterdienste |
| Prüfer und Aufsichtsbehörden | Können Sie zeigen, dass die Kontrollen existieren, dass Entscheidungen bewusst getroffen wurden und dass Änderungen nachvollziehbar sind? | Entscheidungsdokumente mit Datum und Verantwortlichen, Nachverfolgbarkeit von Anforderungen zu Design und Tests, Versionshistorie |
| Künftige Wartende | Warum um Himmels willen wurde das so gemacht? Welche Randbedingungen gelten noch? Was kann man gefahrlos entfernen? | Vor allem Begründungen: Entscheidungen mit ihrem Kontext, den verworfenen Optionen und den getroffenen Annahmen |
| Entscheider (Auftraggeber, Produkt- und Engineering-Management) | Was sind die Risiken, Kosten und Optionen? Was muss ich entscheiden, und bis wann? | Eine einseitige Zusammenfassung, Qualitätsziele, die größten Risiken und technischen Schulden, Entscheidungen, die noch einen Verantwortlichen brauchen |
Funktionierende Software vor umfassender Dokumentation
Das Agile Manifest (2001) nennt vier Wertepaare, eines davon lautet Funktionierende Software mehr als umfassende Dokumentation
. Es wird oft als Erlaubnis zitiert, gar nicht zu dokumentieren. Vollständig gelesen, sagt das Manifest etwas Engeres. Seine Autoren erklären, dass sie zwar die Werte auf der rechten Seite wichtig finden, die Werte auf der linken Seite aber höher einschätzen. Der Wert ist eine Priorität für den Fall, dass beides konkurriert, keine Ablehnung von Dokumentation.
Was der Wert ablehnt, ist das dokumentationsgetriebene Projekt der 1990er-Jahre: Hunderte Seiten Spezifikation, abgenommen, bevor Code geschrieben wird, als Fortschritt an sich behandelt und aufgegeben, sobald der Code davon abweicht. Das entscheidende Wort ist umfassend: Dokumentation, die versucht, alles zu beschreiben, als Selbstzweck, und die höher geschätzt wird als das laufende System. Nichts im Manifest spricht gegen ein Kontextdiagramm, eine kurze Aufzeichnung, warum das Team asynchrones Messaging gewählt hat, oder ein Runbook, mit dem die Person in Rufbereitschaft um drei Uhr morgens den Dienst wiederherstellen kann.
Fachleute sind sich durchaus uneins, wie weit man gehen sollte. Manche agilen Coaches argumentieren, dass Gespräche und Tests fast immer ausreichen und dass schriftliche Architekturdokumentation schneller veraltet, als sie sich auszahlt. Andere, besonders wer langlebige Systeme wartet oder in regulierten Branchen arbeitet, weisen darauf hin, dass gerade die Menschen, die die Dokumentation am dringendsten brauchen (Nachfolger, Prüfer, das Betriebsteam), bei den Gesprächen fehlen. Beide Positionen sind sich über die zugrunde liegende Ökonomie einig: Dokumentation kostet etwas beim Schreiben, beim Aktuellhalten und beim Lesen, und sie lohnt sich nur dort, wo ihr Wert für die Leser diese Kosten übersteigt.
Gerade genug Dokumentation
Scott Amblers Formulierung „just barely good enough“ (gerade eben gut genug) beschreibt das Ziel: Ein Modell oder Dokument ist ausreichend, wenn es seinen Zweck für sein Publikum erfüllt, und Aufwand über diesen Punkt hinaus kostet mehr, als er einbringt. Sein Punkt, dass das Publikum und nicht der Autor entscheidet, ob ein Artefakt ausreicht, ist dasselbe Prinzip wie das Schreiben für den Leser. George Fairbanks führt das entsprechende Argument für die Architekturarbeit insgesamt in Just Enough Software Architecture (2010): Tun Sie so viel, wie die Risiken rechtfertigen (siehe Abschnitt 1.8).
Just-enough-Dokumentation ist daher keine feste Menge. Sie wächst mit der Größe und Lebensdauer des Systems, der Zahl der Teams, der Fluktuation, den Kosten eines Ausfalls und den Anforderungen der Aufsichtsbehörden. Ein Prototyp von zwei Personen braucht eine README und vielleicht ein Diagramm. Eine Zahlungsplattform, die von acht Teams unter Finanzregulierung betrieben wird, braucht Kontext-, Container- und Deployment-Sichten, ein Entscheidungsprotokoll, das Jahre zurückreicht, dokumentierte Sicherheitskonzepte und Nachweise, dass die Dokumente geprüft werden.
Ein praktisches Signal ist die wiederholte Frage. Wenn Neulinge in ihrer ersten Woche immer dasselbe fragen oder dieselbe Designdiskussion alle paar Monate wiederkehrt, gehört die Antwort aufgeschrieben. Ein anderes ist der teure Fehler: Hat ein Team eine ungeschriebene Regel gebrochen („Rufe den Zahlungsanbieter nie aus der Restaurant-App auf“), weil niemand sie ihm gesagt hat, dann war die Regel Architektur und hätte aufgeschrieben werden müssen.
Was sich zu dokumentieren lohnt und was nicht
Informationen unterscheiden sich auf zwei Arten, die bestimmen, wie man sie dokumentieren sollte. Die erste ist, ob sie sich aus dem Code ableiten lassen. Klassennamen, Methodensignaturen und Datenbanktabellen kann man jederzeit aus dem Quellcode lesen; die Gründe für eine Entscheidung, die Qualitätsziele des Systems und die verworfenen Optionen nicht, weil sie nie im Code standen. Die zweite ist, wie oft sie sich ändern. Der Zweck des Systems und seine wichtigsten externen Partner ändern sich selten; die Liste der Klassen in einem Modul ändert sich wöchentlich.
Handgeschriebene Architekturdokumentation sollte sich auf das konzentrieren, was wichtig ist und sich zugleich nicht aus dem Code ableiten lässt: Kontext und Abgrenzung des Systems (wer es nutzt und von welchen anderen Systemen es abhängt), seine Qualitätsziele und Randbedingungen, die wichtigsten Entscheidungen und ihre Gründe, die grobe Struktur (die wichtigsten deploybaren Teile und ihre Verantwortlichkeiten), das Deployment auf die Infrastruktur, die wichtigen Laufzeitszenarien und die querschnittlichen Konzepte, denen jeder Teil folgen muss, etwa wie Fehler behandelt, wie Benutzer authentifiziert und wie personenbezogene Daten geschützt werden. Diese Liste liegt nahe an der Struktur der arc42-Vorlage, die in Abschnitt 4.6 behandelt wird.
Nicht lohnenswert ist es, von Hand aufzuschreiben, was der Code oder die Werkzeuge bereits präzise aussagen und was sich oft ändert: Klassendiagramme einer ganzen Codebasis, Listen von Endpoints, die eine OpenAPI-Datei bereits enthält, oder Beschreibungen jeder einzelnen Funktion. Wo solche Sichten nützlich sind, generieren Sie sie in der Build-Pipeline aus dem Quellcode, damit sie nicht abdriften können. Lassen Sie außerdem Wunschdenken weg (Diagramme davon, wie das System aussehen sollte, präsentiert, als sähe es schon so aus), Protokolle von Meetings, deren Ergebnis anderswo festgehalten ist, und doppelten Text, der irgendwann seiner Kopie widersprechen wird.
Entscheiden, wie eine Information dokumentiert wird
Sieben Regeln für gute Dokumentation
Views and Beyond stellt sieben Regeln für gute Dokumentation auf. Es lohnt sich, sie auswendig zu kennen, denn fast jedes Scheitern von Dokumentation verstößt gegen eine davon.
- 1. Für den Leser schreibenDokumentation wird einmal geschrieben und oft gelesen, also optimieren Sie für den Leser. Entscheiden Sie, wer die Leser sind und was sie mit dem Dokument tun wollen, gliedern Sie es zum Nachschlagen statt zum linearen Lesen, und vermeiden Sie internen Jargon. Ein Zeichen, dass diese Regel verletzt ist: Das Dokument ist in der Reihenfolge gegliedert, in der dem Autor die Dinge eingefallen sind.
- 2. Unnötige Wiederholung vermeidenJede Information sollte einen festen Ort haben, auf den von anderswo verlinkt wird. Wiederholung macht Dokumente länger und, schlimmer noch, lässt Kopien auseinanderdriften, bis Leser nicht mehr erkennen, welche stimmt. Bewusste Wiederholung zur Bequemlichkeit des Lesers, etwa eine Zusammenfassung, ist in Ordnung, wenn sie klar gekennzeichnet ist.
- 3. Mehrdeutigkeit vermeidenEin Kästchen-und-Linien-Diagramm ohne Legende lässt sich auf mehrere Arten lesen: Ist eine Linie ein Aufruf, ein Datenfluss oder eine Deployment-Abhängigkeit? Definieren Sie die Notation in einer Legende, verwenden Sie einen Namen für eine Sache, und geben Sie an, was jedes Element und jede Beziehung bedeutet.
- 4. Eine Standardgliederung verwendenEine bekannte Struktur (eine Vorlage wie arc42 oder die Vorlage von Views and Beyond) sagt Lesern, wo sie nachsehen müssen, und zeigt Autoren, was fehlt. Ein leerer Abschnitt mit dem Vermerk „nicht zutreffend, weil …“ ist aufschlussreicher als eine stille Lücke.
- 5. Begründungen festhaltenSchreiben Sie auf, warum, einschließlich der verworfenen Optionen. Künftige Wartende können meist herausfinden, was gebaut wurde; warum, können sie nicht herausfinden, und ohne das Warum scheuen sie entweder jede Änderung oder machen eine Entscheidung rückgängig, deren Gründe noch gelten. Dafür gibt es Entscheidungsdokumente.
- 6. Aktuell halten, aber nicht zu aktuellVeraltete Dokumentation führt in die Irre. Aber jedes Dokument für jede halb ausgegorene Idee zu aktualisieren, erzeugt ständiges Hin und Her; halten Sie Entscheidungen fest, sobald sie getroffen sind, und aktualisieren Sie die Beschreibung in einem vorhersehbaren Rhythmus, etwa mit jedem Release oder jeder bedeutenden Änderung.
- 7. Auf Zweckeignung prüfenNur die vorgesehenen Leser können sagen, ob ein Dokument funktioniert. Bitten Sie einen Neuling, das System anhand der Dokumente aufzusetzen und zu erklären, oder bitten Sie eine Person in Rufbereitschaft, die Deployment-Sicht in einer Übung zu verwenden, und beheben Sie, worüber sie stolpern.
Lebende Dokumentation und Docs as Code
Das klassische Scheitern von Architekturdokumentation ist das Veralten: Die Beschreibung wird zu Beginn geschrieben, das System ändert sich, und niemand aktualisiert das Dokument, weil es getrennt von der Arbeit liegt. Zwei verwandte Ideen packen dieses Problem an der Wurzel.
Docs as Code, eine von der Write-the-Docs-Community geförderte Praxis, bedeutet, Dokumentation wie Quellcode zu behandeln: in Klartextformaten wie Markdown oder AsciiDoc geschrieben, in der Versionskontrolle gehalten (meist im selben Repository wie der beschriebene Code), über dieselben Pull Requests geändert, von denselben Menschen geprüft und von derselben Pipeline gebaut und veröffentlicht. Von einem Pull Request, der ändert, wie Bestellungen disponiert werden, kann man dann verlangen, dass er im selben Commit die Laufzeitsicht aktualisiert, und der Reviewer sieht beides.
Lebende Dokumentation, ein Begriff, den Cyrille Martraires gleichnamiges Buch (2019) bekannt gemacht hat, geht weiter: Wo immer möglich, sollte Dokumentation aus dem System selbst abgeleitet werden, damit sie nicht abdriften kann. Aus dem Code generierte Abhängigkeitsdiagramme, aus OpenAPI-Dateien generierte API-Referenzen, durch automatisierte Tests geprüfte Architekturregeln und Diagramme, die aus einem neben dem Code gehaltenen Modell generiert werden, sind Beispiele dafür. Handgeschriebener Text bleibt dem vorbehalten, was sich nicht ableiten lässt, vor allem Absicht und Begründung.
Keine der beiden Ideen erspart das Urteil darüber, was man aufschreiben sollte. Abschnitt 4.7, Diagrams as Code, behandelt die Werkzeuge und Gewohnheiten im Detail.
Entscheidungshilfe
Entscheidungshilfe: Sollen wir das aufschreiben?
Stellen Sie diese Fragen der Reihe nach zu einem Stück Architekturwissen.
- Würde jemand einen teuren Fehler machen oder immer wieder dieselbe Frage stellen, wenn das nicht aufgeschrieben wäre?JaWeiter: Es ist ein Kandidat für Dokumentation.NeinÜberlassen Sie es vorerst Gesprächen und dem Code; greifen Sie es wieder auf, wenn die Frage öfter auftaucht.
- Lässt es sich zuverlässig aus dem Code, der Konfiguration oder einem Werkzeug lesen?JaGenerieren Sie es, oder verlinken Sie den Ort, an dem es steht; kopieren Sie es nicht von Hand.NeinWeiter: Es muss von einem Menschen geschrieben werden.
- Ist es eine Entscheidung mit Gründen und verworfenen Optionen?JaSchreiben Sie ein Entscheidungsdokument (siehe Abschnitt 4.5).NeinWeiter.
- Ändert es sich mit den meisten Releases?JaHalten Sie es im Repository neben dem Code, den es beschreibt, und machen Sie seine Aktualisierung zum Teil des Pull Requests.NeinNehmen Sie es in die Architekturübersicht oder den passenden Abschnitt der Vorlage auf, und prüfen Sie es in einem festen Rhythmus.
Ausgearbeitetes Beispiel
Ausgearbeitetes Beispiel: ein Just-enough-Dokumentationssatz für die Essenslieferplattform
Ein Essenslieferunternehmen betreibt eine Plattform mit einer Kunden-App, einer Restaurant-App, einer Kurier-App, Services für Bestellungen, Disposition und Benachrichtigungen sowie einem externen Zahlungsanbieter. Es hat 30 Engineers in fünf Teams und bereitet sich auf ein Audit durch einen Prüfer für Kartenzahlungen vor. Der Architekt schlägt diesen Dokumentationssatz vor, der vollständig in einem einzigen Dokumentations-Repository oder neben dem Code liegt und an keiner Stelle länger ist als nötig.
| Architekturübersicht (2 bis 3 Seiten) | Zweck, Hauptnutzer, Qualitätsziele in Prioritätsreihenfolge (zum Beispiel: nie eine Bestellung verlieren oder doppelt abbuchen; Bestellbestätigung p99 unter 1,5 Sekunden in der Spitzenzeit; Restaurant-App auch bei schlechter Verbindung nutzbar), wichtige Randbedingungen und eine Lesereihenfolge für Neulinge. Verantwortlich: der Architekt. Prüfung jedes Quartal. |
|---|---|
| Systemkontext- und Containerdiagramme | Zwei C4-Diagramme (Abschnitt 4.3) mit Legenden, generiert aus einem Modell im Repository. Aktualisiert in dem Pull Request, der einen Container oder eine externe Abhängigkeit hinzufügt oder entfernt. |
| Entscheidungsprotokoll (Decision Log) | Etwa 40 kurze, nummerierte Entscheidungsdokumente im Repository: asynchrone Bestellereignisse, die Wahl des Zahlungsanbieters, eine Datenbank pro Service und so weiter. Nie umgeschrieben; ersetzt, wenn sich eine Entscheidung ändert. |
| Deployment-Sicht | Ein Diagramm und eine Tabelle je Umgebung: Regionen, Cluster, Managed Databases, der Message Broker und die Netzwerkgrenze um die Kartendaten. Verantwortlich ist das Plattformteam. |
| Laufzeitszenarien | Sequenzdiagramme für die vier wichtigsten Abläufe: Bestellung aufgeben, Restaurant lehnt ab, Kurierzuweisung, Erstattung. Jedes passt auf einen Bildschirm. |
| Querschnittliche Konzepte | Je eine Seite zu Authentifizierung, Idempotenz und Wiederholungen, Logging und personenbezogenen Daten. Das sind die Regeln, denen jedes Team folgen muss. |
| Runbooks | Eines pro Alarm, der jemanden wecken kann, verlinkt aus dem Alarm selbst. |
| Nicht von Hand geschrieben | Klassendiagramme, Endpoint-Listen und Datenbankschemata (in der Pipeline generiert); Meeting-Notizen; die Geschichte, wie das System gewachsen ist (das Entscheidungsprotokoll und die Versionshistorie erzählen sie bereits). |
Jeder Eintrag hat einen benannten Leser, einen Verantwortlichen und einen Auslöser für Aktualisierungen. Dokumentation ohne Verantwortlichen verfällt zuerst.
Das Audit wird durch das Entscheidungsprotokoll, die Deployment-Sicht und die Versionshistorie bedient, nicht durch ein separates Audit-Dokument, das mit ihnen konsistent gehalten werden müsste.
Der gesamte Satz lässt sich in etwa zwei Stunden lesen, was es plausibel macht, dass Neulinge ihn tatsächlich lesen.
Häufige Fragen
Unser Code ist sauber und gut getestet. Ist das nicht Dokumentation genug?
Sauberer Code und Tests sind eine hervorragende Dokumentation dessen, was das System im Detail tut. Sie zeigen nicht das Gesamtbild über Services und Repositories hinweg, die Qualitätsziele, die Randbedingungen von außerhalb des Codes oder warum die Struktur so ist, wie sie ist. Genau dafür ist Architekturdokumentation da.
Wer sollte die Architekturdokumentation schreiben?
Die Menschen, die die Entscheidungen treffen und mit ihnen leben, was in den meisten modernen Teams Engineers ebenso wie Architekten bedeutet. Der Architekt verantwortet meist die Gesamtstruktur und ihre Konsistenz, und die Teams verantworten die Teile, die ihre Services beschreiben. Am wichtigsten ist, dass jedes Dokument einen benannten Verantwortlichen hat.
Wie verhindern wir, dass Dokumentation veraltet?
Halten Sie sie klein, halten Sie sie neben dem Code, machen Sie ihre Aktualisierung zum Teil der Definition of Done für Änderungen, die sie betreffen, generieren Sie, was sich generieren lässt, und prüfen Sie sie in einem festen Rhythmus. Abschnitt 4.7 behandelt diese Gewohnheiten im Detail.
Prüfen Sie Ihr Verständnis
Nennen Sie die drei Verwendungszwecke von Architekturdokumentation, die Views and Beyond identifiziert.
Wissensvermittlung (Menschen in das System einführen), Kommunikation zwischen Stakeholdern und Grundlage für Analyse und Umsetzung.
Bedeutet „Funktionierende Software mehr als umfassende Dokumentation“, dass agile Teams ihre Architektur nicht dokumentieren sollten?
Nein. Das Manifest sagt, dass die Werte auf der rechten Seite trotzdem Wert haben; es setzt eine Priorität, wenn beides konkurriert, und lehnt Dokumentation als Selbstzweck ab, nicht nützliche Dokumentation.
Warum sollten Begründungen von Hand dokumentiert werden, Klassendiagramme im Allgemeinen aber nicht?
Begründungen lassen sich nicht aus dem Code ableiten und ändern sich selten, also muss ein Mensch sie aufschreiben. Die Klassenstruktur lässt sich aus dem Code lesen oder generieren und ändert sich oft, sodass eine handgezeichnete Kopie schnell abdriftet.
Wovor warnt „Dokumentation aktuell halten, aber nicht zu aktuell“?
Sowohl vor veralteter Dokumentation, die Leser in die Irre führt, als auch vor ständigem Hin und Her durch Aktualisierungen für jede unausgereifte Idee; aktualisieren Sie in einem vorhersehbaren Rhythmus, sobald Entscheidungen getroffen sind.
Quellen und weiterführende Literatur
Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.
Fragen: „Wir haben einen 300-seitigen Confluence-Bereich, dem niemand traut. Wie entscheide ich, was ich behalte, was ich lösche und was ich neu schreibe?“