Legacy-Dokumentation Legacy-Modernisierung

Dokumentation für Systeme, die niemand mehr versteht

Carola Schulte
Carola Schulte 1. September 2025 19 min Lesezeit

Der Entwickler, der das System gebaut hat, ist seit drei Jahren weg. Die Dokumentation besteht aus einem veralteten Wiki mit Bildern, die nicht mehr laden, und Kommentaren im Code wie // TODO: fix later. Das System läuft. Irgendwie. Aber niemand traut sich, es anzufassen. Willkommen in der Realität von Legacy-Dokumentation.

Dokumentation nachträglich zu erstellen ist möglich. Es erfordert Archäologie, nicht Kreativität.

Kurz gesagt: Sie müssen nicht alles dokumentieren. Sie müssen das Richtige dokumentieren: Was das System tut, warum es so gebaut wurde, und wo die Fallstricke liegen. Der Rest ist Nice-to-have.

Warum überhaupt dokumentieren?

„Der Code ist die Dokumentation" – das sagen Leute, die nie um 3 Uhr nachts einen Bug in fremdem Code fixen mussten.

Dokumentation für Legacy-Systeme hat konkrete Ziele:

  • Onboarding: Neue Teammitglieder produktiv machen, ohne dass jemand 6 Wochen erklärt
  • Incident Response: Im Notfall wissen, wo man suchen muss
  • Änderungen: Verstehen, was kaputt gehen könnte, bevor man etwas anfasst
  • Compliance: Audits, Due Diligence, Zertifizierungen
  • Exit-Strategie: Basis für Migration, Ablösung oder Verkauf
Reality-Check: Perfekte Dokumentation ist ein Mythos. Das Ziel ist nicht „vollständig", sondern „nützlich". Ein Dokument, das niemand liest, ist wertlos – egal wie ausführlich es ist.

Was dokumentieren? Die Prioritäten

Nicht alles ist gleich wichtig. Hier ist die Reihenfolge, die sich in der Praxis bewährt hat:

Priorität 1: Das Überlebenswissen

Was jeder wissen muss, der das System betreiben oder im Notfall anfassen muss:

  • System-Kontext: Was macht das System? Für wen? Warum existiert es?
  • Kritische Pfade: Welche Funktionen dürfen nie ausfallen?
  • Deployment: Wie kommt Code in Produktion? Rollback?
  • Betrieb: Wo laufen die Prozesse? Logs? Monitoring?
  • Kontakte: Wer weiß was? Wer ist verantwortlich?
Template: System-Überblick (1 Seite)
System: _______________ Zweck: _______________ Kritikalität: [ ] Hoch [ ] Mittel [ ] Niedrig Nutzer: _______________ Tech-Stack: _______________ Repos: _______________ Deployment: _______________ Logs: _______________ Monitoring: _______________ Kritische Abhängigkeiten: • _______________ → Ausfall bedeutet: ___ • _______________ → Ausfall bedeutet: ___ Ansprechpartner: • Betrieb: _______________ • Entwicklung: _______________ • Business: _______________

Priorität 2: Die Architektur

Wie hängt alles zusammen? Keine UML-Diagramme, die niemand versteht – einfache Boxen und Pfeile.

  • Komponenten-Diagramm: Was sind die Hauptteile?
  • Datenfluss: Woher kommen Daten, wohin gehen sie?
  • Integrationen: Welche externen Systeme sind angebunden?
  • Datenbank-Schema: Die wichtigsten Tabellen und Beziehungen
Praxis-Tipp: Ein Foto von einem Whiteboard ist besser als kein Diagramm. Perfektion ist der Feind von „gut genug". Zeichnen Sie es, fotografieren Sie es, laden Sie es hoch. Fertig.

Priorität 3: Die Entscheidungen

Warum ist etwas so, wie es ist? Das ist das Wissen, das am schnellsten verloren geht.

  • Architecture Decision Records (ADRs): Dokumentierte Entscheidungen
  • Bekannte Limitierungen: Was geht nicht, und warum?
  • Workarounds: Hacks, die aus gutem Grund existieren
  • „Das ist Absicht": Verhalten, das wie ein Bug aussieht, aber keiner ist
Template: Architecture Decision Record (ADR)
ADR-001: [Titel der Entscheidung] Status: Accepted / Superseded by ADR-XXX Datum: [Wann wurde entschieden?] Kontext: [Was war die Situation? Welches Problem?] Entscheidung: [Was wurde entschieden?] Begründung: [Warum diese Lösung? Welche Alternativen gab es?] Konsequenzen: - Positiv: [Was wird besser?] - Negativ: [Was wird schwieriger? Trade-offs?] Notizen: [Zusätzlicher Kontext, Links, etc.]

Priorität 4: Die Fallstricke

Wissen, das nur durch Schmerz erworben wurde:

  • Bekannte Bugs: Die, die man nicht fixen kann oder will
  • Performance-Fallen: „Diese Query nicht in der Hauptlast ausführen"
  • Konfiguration: Einstellungen, die das System zum Absturz bringen
  • Zeitbomben: Dinge, die irgendwann zum Problem werden
Wichtig: Fallstricke gehören nicht in ein Wiki, das niemand liest. Sie gehören dahin, wo sie wirken: Runbooks, Onboarding-Checklisten, verlinkte Tickets – und nur dann in den Code, wenn sie direkt am relevanten Stück stehen.

Reverse Documentation: Vom Code zur Dokumentation

Wenn keine Dokumentation existiert, müssen Sie sie aus dem System extrahieren. Das ist Archäologie, keine Kreativität.

Schritt 1: Code lesen lassen

Nutzen Sie Tools, die Code analysieren:

# Abhängigkeiten visualisieren (PHP)
dephpend metrics src/ --format=html > dependencies.html

# Klassen-Diagramm generieren (Java)
java -jar plantuml.jar -tpng src/**/*.java

# Call-Graph erstellen (Python)
pycallgraph graphviz -- ./main.py

# Datenbank-Schema dokumentieren (je nach DB: mysqldump / pg_dump)
mysqldump --no-data mydb | grep -E "^(CREATE|PRIMARY|KEY|CONSTRAINT)" > schema.sql
# Oder mit SchemaSpy für visuelle Darstellung
java -jar schemaspy.jar -t mysql -db mydb -host localhost -u user -p -o docs/

Schritt 2: Git-Archäologie

Die Git-Historie erzählt Geschichten:

# Wer hat am meisten an welchen Dateien gearbeitet?
git shortlog -sn --all -- src/

# Welche Dateien ändern sich am häufigsten?
git log --pretty=format: --name-only | sort | uniq -c | sort -rn | head -20

# Wann wurde eine Datei zuletzt geändert?
git log -1 --format="%ai %an" -- src/CriticalModule.php

# Commit-Messages für eine Datei (die Geschichte)
git log --oneline -- src/BillingService.php

# Wer weiß noch etwas über diesen Code?
git log --format="%an <%ae>" -- src/LegacyAuth/ | sort | uniq
Gold wert: Dateien, die oft geändert werden UND von vielen Leuten angefasst wurden, sind kritisch. Dateien, die seit 5 Jahren niemand angefasst hat, sind entweder perfekt oder tot.

Schritt 3: Laufzeit-Analyse

Beobachten Sie das System bei der Arbeit:

# Welche Queries laufen? (MySQL)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.1;
# Später: mysqldumpslow /var/log/mysql-slow.log

# Welche Endpoints werden genutzt? (aus Access Logs)
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -30

# Welche Jobs laufen? (Crontab dokumentieren)
crontab -l > docs/crontab.txt
for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null
done > docs/all-crontabs.txt

# Netzwerk-Verbindungen (welche Services reden miteinander?)
netstat -tuln
ss -tuln

Schritt 4: Interviews

Menschen wissen Dinge, die nirgendwo stehen:

  • Älteste Teammitglieder: „Warum ist das so?"
  • Support-Team: „Welche Probleme kommen immer wieder?"
  • Ops/DevOps: „Was geht nachts kaputt?"
  • Business/Product: „Was ist kritisch? Was darf nie ausfallen?"
Tipp: Führen Sie Interviews mit konkreten Fragen, nicht mit „Erzähl mal". Menschen erinnern sich besser an Geschichten als an Fakten. Fragen Sie nach Incidents, nach Überraschungen, nach „Das hätte ich gerne vorher gewusst".

Formate, die funktionieren

Das README, das niemand liest

Ein README wird gelesen, wenn es kurz ist und die richtigen Fragen beantwortet:

# System-Name

## Was ist das?
[Ein Satz]

## Quickstart
```bash
docker-compose up
# App läuft auf http://localhost:8080
```

## Architektur
[Ein Diagramm oder Link zu Diagramm]

## Deployment
[Wie kommt das in Produktion?]

## Troubleshooting
- Problem X: Lösung Y
- Problem A: Lösung B

## Wer weiß mehr?
- Team Billing: #billing-dev (Slack)
- Auth/Security: @security-oncall
- Infrastruktur: ops@example.com

Runbooks für Operations

Schritt-für-Schritt-Anleitungen für wiederkehrende Aufgaben:

Template: Runbook
Runbook: [Name der Aufgabe] Wann: [Wann wird das benötigt?] Wer: [Wer darf/muss das ausführen?] Dauer: [Wie lange dauert es?] Risiko: [Was kann schiefgehen?] Voraussetzungen: - [ ] Zugang zu Server X - [ ] VPN aktiv - [ ] Backup von gestern vorhanden Schritte: 1. SSH auf server.example.com 2. cd /app && ./backup.sh 3. Prüfen: ls -la /backups/ 4. ... Rollback: Falls etwas schiefgeht: 1. ... Kontakt bei Problemen: - Primär: [Name, Telefon] - Backup: [Name, Telefon]

Architecture Decision Records (ADRs)

ADRs dokumentieren das „Warum" – das Wissen, das am schnellsten verloren geht.

# Verzeichnisstruktur
docs/
  adr/
    0001-use-mysql-instead-of-postgres.md
    0002-caching-strategy-redis.md
    0003-authentication-via-oauth.md
    template.md

ADRs sind besonders wertvoll, weil sie Kontext liefern. „Warum nutzen wir MySQL statt Postgres?" – Wenn Sie das nicht dokumentieren, wird jemand in 2 Jahren die gleiche Diskussion führen.

Inline-Dokumentation, die hilft

Kommentare im Code, die tatsächlich nützlich sind:

// SCHLECHT: Was der Code tut (sieht man)
// Erhöht den Counter um 1
counter++;

// GUT: Warum der Code das tut
// Counter muss vor dem API-Call erhöht werden,
// weil die externe API idempotent ist und
// duplicate Requests anhand des Counters erkennt
counter++;

// NOCH BESSER: Warnung vor Fallstrick
// ACHTUNG: Diese Funktion ist nicht thread-safe!
// Bei parallelen Aufrufen kann es zu Race Conditions kommen.
// Siehe Incident INC-2023-047 für Details.
function processPayment() { ... }

// GOLD: Link zu mehr Kontext
// Implementiert Algorithmus aus RFC 7519 (JWT)
// Abweichung von Standard: Wir nutzen RS256 statt HS256
// Grund: siehe ADR-0012
function validateToken() { ... }

Tribal Knowledge extrahieren

Das gefährlichste Wissen ist das, das nur in Köpfen existiert. Hier ist, wie Sie es extrahieren:

Die „Bus Factor"-Analyse

Bus Factor: Wie viele Personen dürfen ausfallen, bevor kritisches Wissen verloren geht?

# Git-Analyse: Wer kennt welchen Code?
git log --format='%an' --since="2 years ago" -- src/billing/ | sort | uniq -c | sort -rn

# Ergebnis:
#    847 Maria Schmidt      ← Maria kennt Billing
#    123 Thomas Müller
#     45 Extern Consultant
#      3 CI Bot

# Wenn Maria geht, geht 87% des Billing-Wissens mit.

Identifizieren Sie Wissenszentren und planen Sie Knowledge Transfer.

Die „Letzte Person"-Interviews

Bevor jemand das Team verlässt:

  • Welche Systeme verstehst nur du?
  • Was würdest du deinem Nachfolger sagen?
  • Welche Dokumentation fehlt?
  • Welche Entscheidungen hast du getroffen, die nirgendwo stehen?
  • Was geht regelmäßig kaputt, und wie fixt man es?
Timing: Das Gespräch muss geführt werden, bevor die Person innerlich gekündigt hat. In der Kündigungsfrist ist die Motivation oft gering. Führen Sie solche Gespräche regelmäßig, nicht erst beim Abschied.

Pair Programming zur Wissensweitergabe

Die effektivste Methode, Wissen zu transferieren:

  • Experte erklärt, während er arbeitet
  • Lernender stellt Fragen und dokumentiert
  • Aufzeichnung (mit Erlaubnis) für spätere Referenz

Eine Stunde Pair Programming produziert mehr nutzbares Wissen als ein Tag Dokumentation schreiben.

Dokumentation aktuell halten

Die größte Herausforderung: Dokumentation veraltet. Immer. Verifizieren Sie jede Aussage gegen Code oder Laufzeitverhalten. Hier sind Strategien, die helfen:

Dokumentation im Code-Repository

Wenn Dokumentation neben dem Code liegt, wird sie eher aktualisiert:

project/
├── src/
├── tests/
├── docs/
│   ├── architecture/
│   │   ├── overview.md
│   │   └── diagrams/
│   ├── adr/
│   ├── runbooks/
│   └── onboarding.md
└── README.md

Pull Requests können dann Dokumentations-Updates enthalten. Review-Prozess erfasst auch Docs.

Automatisch generierte Dokumentation

Was automatisch generiert wird, ist immer aktuell:

  • API-Dokumentation: OpenAPI/Swagger aus Code generieren
  • Datenbank-Schema: Automatische Schema-Extraktion
  • Dependency-Graphen: Tools wie dephpend, madge
  • Metriken: SonarQube, CodeClimate Reports
# OpenAPI aus Code generieren (PHP/Laravel)
php artisan l5-swagger:generate

# TypeScript/Node
npx @hey-api/openapi-ts -i ./openapi.yaml -o ./src/client

# Schema-Dokumentation (PostgreSQL)
pg_dump --schema-only mydb > schema.sql
# Oder mit dbdocs.io für visuelle Darstellung

Regelmäßige Reviews

Dokumentation braucht Pflege wie Code:

  • Quartalsweise: Architektur-Diagramme noch korrekt?
  • Bei jedem Incident: Runbooks aktualisieren
  • Beim Onboarding: Neue Mitarbeiter dokumentieren, was fehlt
  • Beim Offboarding: Wissenstransfer dokumentieren
Praxis-Tipp: Neue Teammitglieder sind die besten Dokumentations-Autoren. Sie sehen, was fehlt. Machen Sie „Dokumentation verbessern" zum Teil des Onboarding-Prozesses.

Anti-Patterns: Was nicht funktioniert

1. Das 200-Seiten-Dokument

Niemand liest es. Niemand aktualisiert es. Es wird zur historischen Fiktion.

2. Das Wiki ohne Struktur

Hunderte Seiten, keine Navigation, Suchfunktion liefert 47 Treffer für „deployment". Information existiert, ist aber nicht findbar.

3. Dokumentation als Projekt

„Wir dokumentieren jetzt 3 Monate, dann sind wir fertig." Falsch. Dokumentation ist ein Prozess, kein Projekt. Es ist nie fertig.

4. Nur Architekten dokumentieren

Die Leute, die täglich im Code arbeiten, wissen am meisten. Wenn nur Architekten dokumentieren, fehlt das Praxiswissen.

5. Dokumentation ohne Zielgruppe

„Dokumentation" ist kein Selbstzweck. Wer soll das lesen? Was sollen sie danach können? Ohne Antwort auf diese Fragen ist jede Dokumentation Zeitverschwendung.

Quick Wins: Sofort umsetzbar

Sie haben wenig Zeit? Hier sind die Maßnahmen mit dem besten ROI:

Maßnahme Aufwand Wert
1-Seite-System-Überblick 2 Stunden Hoch
Deployment-Runbook 1 Stunde Sehr hoch
Kontaktliste „Wer weiß was" 30 Minuten Hoch
Architektur-Skizze (Whiteboard-Foto) 30 Minuten Mittel
Git-Analyse: Wer kennt was 15 Minuten Mittel
Top-10-Fallstricke-Liste 1 Stunde Sehr hoch

Fazit

Legacy-Dokumentation ist keine Frage von „ob", sondern „wann". Entweder Sie dokumentieren proaktiv, oder Sie dokumentieren in der Krise – nachts, unter Druck, wenn das System brennt.

Die wichtigsten Punkte:

  • Priorisieren: Überlebenswissen zuerst, Details später
  • Extrahieren: Code, Git, Logs, Menschen – alles sind Quellen
  • Pragmatisch: Ein Whiteboard-Foto ist besser als nichts
  • Nah am Code: Dokumentation im Repository, nicht im vergessenen Wiki
  • Lebendig: Neue Mitarbeiter dokumentieren, was fehlt

Das beste Dokument ist das, das jemand liest, wenn er es braucht. Alles andere ist Papier.

Nächster Schritt: Nehmen Sie Ihr kritischstes System. Schreiben Sie heute den 1-Seite-Überblick. Morgen das Deployment-Runbook. Übermorgen die Kontaktliste. In drei Tagen haben Sie mehr Dokumentation als die meisten Legacy-Systeme je hatten.

Carola Schulte

Carola Schulte

Software-Architektin mit Erfahrung in Legacy-Systemen. Hat schon Dokumentation für Systeme geschrieben, deren Originalentwickler seit einem Jahrzehnt weg sind.

Beratung anfragen

Dokumentations-Projekt?

Ich helfe Ihnen, Ihre Legacy-Systeme zu dokumentieren – vom 1-Tages-Audit bis zum mehrwöchigen Dokumentationsprojekt. Mit Methoden, die funktionieren, und Ergebnissen, die Menschen tatsächlich nutzen.

Dokumentations-Audit anfragen