Agent-almanac adapt-architecture
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/de/skills/adapt-architecture" ~/.claude/skills/pjt222-agent-almanac-adapt-architecture-f5ef9a && rm -rf "$T"
i18n/de/skills/adapt-architecture/SKILL.mdArchitektur anpassen
Strukturelle Metamorphose ausfuehren — die Architektur eines Systems von seiner aktuellen Form in eine Zielform transformieren und dabei die betriebliche Kontinuitaet aufrechterhalten. Verwendet Strangler-Fig-Migration, Chrysalis-Phasen und Schnittstellenbewahrung, um sicherzustellen, dass das System waehrend der Transformation nie aufhoert zu funktionieren.
Wann verwenden
- Formanalyse (siehe
) hat das System als BEREIT klassifiziertassess-form - Ein System muss seine Architektur weiterentwickeln, um neue Anforderungen ohne Ausfallzeit zu erfuellen
- Migration von Monolith zu Microservices (oder umgekehrt)
- Ersetzen eines Kernteilsystems waehrend abhaengige Systeme weiterlaufen
- Weiterentwicklung eines Datenmodells bei Beibehaltung der Abwaertskompatibilitaet
- Jede Architekturanpassung, die schrittweise statt als Big-Bang erfolgen muss
Eingaben
- Erforderlich: Aktuelle Formanalyse (von
oder gleichwertiger Analyse)assess-form - Erforderlich: Zielarchitektur (was das System werden soll)
- Erforderlich: Anforderungen an die betriebliche Kontinuitaet (was waehrend der Transformation nicht ausfallen darf)
- Optional: Verfuegbares Transformationsbudget (Zeit, Personen, Rechenleistung)
- Optional: Rollback-Anforderungen (wie weit muessen wir zurueckgehen koennen?)
- Optional: Parallelbetriebsdauer (wie lange sollen Alt und Neu gleichzeitig laufen?)
Vorgehensweise
Schritt 1: Transformations-Blueprint entwerfen
Den Metamorphose-Pfad von der aktuellen Form zur Zielform planen.
- Die Transformation als Abfolge von Zwischenformen abbilden:
- Aktuelle Form → Zwischenform 1 → ... → Zielform
- Jede Zwischenform muss betriebsfaehig sein (kann Traffic bedienen, Tests bestehen)
- Keine Zwischenform sollte schwieriger zu warten sein als die aktuelle Form
- Die Transformationsnaehte identifizieren:
- Wo kann die aktuelle Form "geschnitten" werden, um die neue Architektur einzufuegen?
- Natuerliche Naehte: bestehende Schnittstellen, Modulgrenzen, Datenpartitionen
- Kuenstliche Naehte: Schnittstellen, die speziell fuer den Schnitt erstellt wurden (Anti-Corruption-Layer)
- Das Metamorphose-Muster waehlen:
- Strangler Fig: Neues System waechst um das alte herum und ersetzt es schrittweise
- Chrysalis: Altes System wird in eine neue Huelle verpackt; Interna werden ersetzt, waehrend die Huelle die externe Schnittstelle bewahrt
- Budding: Neues System waechst neben dem alten; Traffic wird schrittweise umgeleitet (siehe
fuer Kolonie-Budding)scale-colony - Metamorphe Migration: Phasenweise Ersetzung von Komponenten in Abhaengigkeitsreihenfolge (Blaetter zuerst, Wurzeln zuletzt)
- Die Schnittstellenbewahrungsschicht entwerfen:
- Externe Konsumenten duerfen keine Stoerung erfahren
- API-Versionierung, abwaertskompatible Vertraege, Adapter-Muster
- Die Bewahrungsschicht ist temporaeres Geruest — ihre Entfernung planen
Metamorphosis Patterns: ┌───────────────┬───────────────────────────────────────────────────┐ │ Strangler Fig │ New code intercepts routes one by one; │ │ │ old code handles everything else until replaced │ │ │ ┌──────────┐ │ │ │ │ Old ████ │ → │ Old ██ New ██ │ → │ New ████ │ │ │ │ └──────────┘ │ ├───────────────┼───────────────────────────────────────────────────┤ │ Chrysalis │ Wrap old system in new interface; replace │ │ │ internals while external shell stays stable │ │ │ ┌──────────┐ ┌──[new]───┐ ┌──[new]───┐ │ │ │ │ old core │ → │ old core │ → │ new core │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ ├───────────────┼───────────────────────────────────────────────────┤ │ Budding │ New system runs in parallel; traffic shifts │ │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │ │ Old │ │ New │ → │ Old │ │ New │ │ │ │ │ 100% │ │ 0% │ │ 0% │ │ 100% │ │ │ │ └──────┘ └──────┘ └──────┘ └──────┘ │ └───────────────┴───────────────────────────────────────────────────┘
Erwartet: Ein Transformations-Blueprint, der Zwischenformen, Naehte, das gewaehlte Metamorphose-Muster und die Schnittstellenbewahrungsstrategie zeigt. Jeder Schritt ist konkret und testbar.
Bei Fehler: Wenn keine saubere Naht gefunden werden kann, muss das System moeglicherweise vorab aufgeloest werden (siehe
dissolve-form), um Naehte vor der Transformation zu schaffen. Wenn die Zwischenformen nicht betriebsfaehig sind, sind die Transformationsschritte zu gross — in kleinere Inkremente zerlegen.
Schritt 2: Geruest aufbauen
Die temporaere Infrastruktur konstruieren, die die Metamorphose unterstuetzt.
- Anti-Corruption-Layer erstellen:
- Eine duenne Uebersetzungsschicht zwischen dem alten und neuen System
- Leitet Anfragen basierend auf dem Migrationsstatus an das entsprechende System (alt oder neu) weiter
- Uebersetzt Datenformate zwischen alter und neuer Darstellung
- Diese Schicht ist der "Kokon", der die Transformation schuetzt
- Parallelbetrieb-Infrastruktur aufsetzen:
- Beide Systeme (alt und neu) muessen gleichzeitig deploybar sein
- Feature-Flags steuern, welches System welchen Traffic behandelt
- Vergleichsmechanismen validieren, dass alt und neu aequivalente Ergebnisse liefern
- Rollback-Kontrollpunkte einrichten:
- Bei jeder Zwischenform sicherstellen, dass ein Rollback zur vorherigen Form moeglich ist
- Rollback muss schneller sein als der Vorwaerts-Transformationsschritt
- Datenmigration muss reversibel sein (oder Daten muessen waehrend der Transition doppelt geschrieben werden)
- Validierungs-Harnisch aufbauen:
- Automatisierte Tests, die die betriebliche Kontinuitaet bei jeder Zwischenform verifizieren
- Performance-Benchmarks, die Regressionen erkennen
- Datenintegritaetspruefungen, die Migrationsfehler auffangen
Erwartet: Geruest-Infrastruktur (Anti-Corruption-Layer, Parallelbetrieb, Rollback, Validierung) ist vorhanden, bevor eine Transformation beginnt. Das Geruest selbst ist getestet und verifiziert.
Bei Fehler: Wenn das Geruest zu aufwaendig ist, vereinfachen: Das minimale Geruest ist ein Feature-Flag und ein Rollback-Verfahren. Anti-Corruption-Layer und Parallelbetrieb erhoehen die Sicherheit, sind aber fuer kleinere Transformationen nicht immer noetig.
Schritt 3: Progressive Umstellung durchfuehren
Funktionalitaet schrittweise von der alten Form in die neue Form migrieren.
- Komponenten fuer die Migration ordnen:
- Mit der am wenigsten gekoppelten, risikoaermsten Komponente beginnen (Vertrauen aufbauen)
- Zu kritischeren, staerker gekoppelten Komponenten fortschreiten
- Die am staerksten gekoppelte/kritischste Komponente fuer zuletzt aufheben (das Team hat dann Erfahrung)
- Fuer jede Komponente: a. Die neue Version hinter dem Anti-Corruption-Layer implementieren b. Parallel betreiben: sowohl alt als auch neu verarbeiten dieselben Eingaben c. Ausgaben vergleichen — sie sollten aequivalent sein (oder die Unterschiede sollten erwartet und dokumentiert sein) d. Bei Zuversicht den Traffic auf die neue Version umschalten (Feature-Flag-Wechsel) e. Auf Anomalien ueberwachen (Monitoring-Empfindlichkeit nach der Umstellung erhoehen) f. Nach einer Stabilitaetsphase die alte Version dieser Komponente stilllegen
- Kontinuierliche Auslieferung durchgehend aufrechterhalten:
- Jeder Umstellungsschritt ist ein normales Deployment, kein Sonderereignis
- Das System befindet sich immer in einem bekannten, getesteten, betriebsfaehigen Zustand
- Wenn eine Umstellung Probleme verursacht, auf den vorherigen Zustand zurueckrollen (der noch betriebsfaehig ist)
Erwartet: Funktionalitaet migriert Komponente fuer Komponente mit Validierung bei jedem Schritt. Das System ist immer betriebsfaehig. Jede Umstellung baut Vertrauen fuer die naechste auf.
Bei Fehler: Wenn der Parallelbetrieb Diskrepanzen aufdeckt, hat die neue Implementierung einen Fehler — vor der Umstellung beheben. Wenn eine Umstellung Performance-Verschlechterung verursacht, benoetigt die neue Komponente moeglicherweise Optimierung oder der Anti-Corruption-Layer erzeugt zu viel Overhead. Wenn das Team mitten in der Migration das Vertrauen verliert, pausieren und stabilisieren — ein halb-migriertes System in einem bekannten Zustand ist weit besser als eine ueberstuerzte vollstaendige Migration.
Schritt 4: Chrysalis-Phase managen
Die verwundbarste Phase navigieren — wenn sich das System zwischen den Formen befindet.
- Die Chrysalis-Realitaet anerkennen:
- Waehrend der Migration ist das System teils alt und teils neu
- Dieser Hybridzustand ist inherent komplexer als jeder reine Zustand
- Komplexitaet erreicht den Hoehepunkt am Mittelpunkt der Migration und nimmt dann ab
- Chrysalis-Disziplin:
- Keine neuen Features waehrend der Chrysalis-Phase (nur Transformation)
- Minimale externe Aenderungen (nicht-essentielle Deployments einfrieren)
- Erhoehtes Monitoring und Bereitschaftsabdeckung
- Taegliche Check-ins zum Migrationsfortschritt und Systemzustand
- Chrysalis-Zwischenbewertung:
- Am Halbzeitpunkt bewerten: Ist die Zielform noch das richtige Ziel?
- Hat sich etwas geaendert (Markt, Anforderungen, Team), das das Ziel beeinflusst?
- Sollte die Transformation fortgesetzt, pausiert oder umgeleitet werden?
- Die Chrysalis schuetzen:
- Den Rollback-Pfad jederzeit freihalten
- Den aktuellen Hybridzustand gruendlich dokumentieren (zukuenftige Debugger werden es brauchen)
- Der Versuchung widerstehen, temporaeres Geruest vor Abschluss der Migration "aufzuraeumen"
Erwartet: Die Chrysalis-Phase wird als bewusste, zeitlich begrenzte Periode mit erhoehter Disziplin und Monitoring gefuehrt. Das Team versteht, dass temporaere Komplexitaet der Preis fuer sichere Transformation ist.
Bei Fehler: Wenn die Chrysalis-Phase zu lange dauert, wird der Hybridzustand zum neuen Normal — was schlimmer ist als alt oder neu. Ein Zeitlimit setzen. Wenn das Limit erreicht ist, entweder die verbleibende Migration beschleunigen oder den Hybridzustand als "neue Form" akzeptieren und stabilisieren.
Schritt 5: Metamorphose abschliessen und stabilisieren
Die Transformation beenden und das Geruest entfernen.
- Finale Umstellung:
- Die letzte(n) Komponente(n) in die neue Form migrieren
- Vollstaendige Validierungssuite gegen das komplette neue System laufen lassen
- Performance-Test unter produktionsaequivalenter Last
- Geruest entfernen:
- Anti-Corruption-Layer stilllegen (wird nicht mehr benoetigt)
- Feature-Flags im Zusammenhang mit der Migration entfernen
- Parallelbetrieb-Infrastruktur bereinigen
- Den alten Systemcode archivieren (nicht loeschen) zur Referenz
- Post-Metamorphose-Stabilisierung:
- 2-4 Wochen in der neuen Form mit erhoehtem Monitoring betreiben
- Alle Probleme behandeln, die unter realen Bedingungen auftreten
- Dokumentation aktualisieren, um die neue Architektur widerzuspiegeln
- Retrospektive:
- Was lief gut bei der Transformation?
- Was war schwieriger als erwartet?
- Was wuerden wir naechstes Mal anders machen?
- Das Transformations-Playbook des Teams aktualisieren
Erwartet: Die Transformation ist abgeschlossen. Das System arbeitet in seiner neuen Form. Das Geruest ist entfernt. Die Dokumentation ist aktualisiert. Das Team hat Erkenntnisse fuer zukuenftige Transformationen festgehalten.
Bei Fehler: Wenn die neue Form nach der Umstellung instabil ist, den Rollback-Pfad aufrechterhalten und die Stabilisierung fortsetzen. Wenn die Stabilisierung laenger dauert als geplant, liegt moeglicherweise ein Designproblem in der neuen Architektur vor — abwaegen, ob gezielte Korrekturen oder ein teilweiser Rollback der problematischsten Komponente angemessen sind.
Validierung
- Transformations-Blueprint zeigt tragfaehige Zwischenformen
- Geruest (Anti-Corruption-Layer, Rollback, Validierungs-Harnisch) ist vor Migrationsbeginn vorhanden
- Komponenten migrieren in der Reihenfolge vom niedrigsten zum hoechsten Risiko
- Parallelbetrieb validiert Aequivalenz bei jedem Schritt
- Chrysalis-Phase ist zeitlich begrenzt mit Feature-Freeze-Disziplin
- Gesamtes Geruest wird nach Abschluss der Transformation entfernt
- Post-Metamorphose-Stabilisierungsphase verlaeuft ohne kritische Probleme
- Retrospektive erfasst Erkenntnisse
Haeufige Stolperfallen
- Big-Bang-Migration: Versuch, alles auf einmal zu transformieren. Dies gibt die Sicherheit der inkrementellen Umstellung auf und maximiert den Wirkungsradius. Immer inkrementell migrieren
- Permanentes Geruest: Anti-Corruption-Layer und Feature-Flags, die nie entfernt werden, werden zu technischen Schulden. Die Geruest-Entfernung als Teil der Transformation planen, nicht als Nachgedanke
- Chrysalis-Leugnung: So zu tun, als waere der Hybridzustand normal, fuehrt zu Feature-Entwicklung auf instabilen Grundlagen. Die Chrysalis-Phase anerkennen und ihre Disziplin durchsetzen
- Zielfixierung: So sehr auf die Zielarchitektur festgelegt sein, dass Anzeichen einer besseren Alternative ignoriert werden. Die Chrysalis-Zwischenbewertung existiert aus diesem Grund
- Transformationsmuedigkeit: Lange Migrationen erschoepfen Teams. Jeden Transformationsschritt klein genug halten, um in Tagen statt Wochen abgeschlossen zu werden. Meilensteine feiern, um die Dynamik aufrechtzuerhalten
Verwandte Skills
— Voraussetzungsanalyse, die bestimmt, ob das System fuer die Transformation bereit istassess-form
— fuer Systeme, die zu starr fuer eine direkte Transformation sind; Aufloesung schafft die hier benoetigten Naehtedissolve-form
— Wiederherstellungs-Skill fuer den Fall, dass die Transformation Schaeden einfuehrtrepair-damage
— Oberflaechenanpassung, die ohne tiefgreifende Architekturanpassung ausreichen kannshift-camouflage
— Schwarmkoordination informiert die Sequenzierung der Transformation ueber verteilte Systemecoordinate-swarm
— Wachstumsdruck ist ein haeufiger Ausloeser fuer Architekturanpassungscale-colony
— GitOps liefert die Deployment-Infrastruktur fuer progressive Umstellungimplement-gitops-workflow
— ergaenzender Review-Skill zur Bewertung der Zielarchitekturreview-software-architecture