Technische Architekturentscheidungen treffen, die Sie nicht bereuen
Framework für Technologieentscheidungen. Build vs Buy, Monolith vs Microservices, Datenbankauswahl.
Zusammenfassung
Architekturentscheidungen sind die teuersten Entscheidungen in der Softwareentwicklung. Eine Datenbank im Monat 18 zu wechseln kostet 10-100x mehr als im Monat 1 die richtige zu wählen. Dieser Leitfaden bietet ein strukturiertes Framework für Technologieentscheidungen: Bewerten Sie mit expliziten Kriterien, dokumentieren Sie Entscheidungen in Architecture Decision Records (ADRs) und vermeiden Sie die häufigsten Fallen — einschließlich voreiliger Microservices, lebenslaufgetriebener Entwicklung und dem Sunk-Cost-Irrtum.
Voraussetzungen
- Ein klares Verständnis des zu lösenden Problems (siehe unseren Requirements-Engineering-Leitfaden)
- Kenntnis Ihrer Einschränkungen: Teamgröße, Budget, Timeline, Compliance-Anforderungen
- Stakeholder-Alignment zu Geschäftsprioritäten (Time-to-Market vs langfristige Skalierbarkeit)
- Die Bereitschaft, "langweilige" Technologie zu wählen, wenn sie die richtige Antwort ist
Schritt 1: Das Entscheidungsframework
Jede Architekturentscheidung sollte eine strukturierte Bewertung durchlaufen. Bauchgefühle sind keine Architektur — sie sind Glücksspiel mit dem Geld anderer Leute.
Der Fünf-Fragen-Filter
Bevor Sie eine Technologie bewerten, beantworten Sie diese Fragen:
1. Welches Problem löst das? (Konkret — "wir brauchen es" ist keine Antwort)
2. Was sind die Einschränkungen? (Team-Skills, Budget, Timeline, Compliance)
3. Was sind die Alternativen? (mindestens 3, einschließlich "nichts tun")
4. Was kostet es, falsch zu liegen? (Können wir diese Entscheidung rückgängig machen?)
5. Wann müssen wir entscheiden? (Dringlichkeit vs Wichtigkeit)
Reversibilitäts-Klassifikation
Nicht alle Entscheidungen sind gleich. Klassifizieren Sie jede Entscheidung:
Typ 1 (Einbahnstraße): Irreversibel oder extrem teuer rückgängig zu machen
Beispiele: Programmiersprache, primäre Datenbank, Cloud-Anbieter
Aktion: Investieren Sie signifikant Zeit in die Bewertung. Holen Sie externes Review.
Typ 2 (Drehtür): Mit moderatem Aufwand reversibel
Beispiele: UI-Framework, CI/CD-Tool, Monitoring-Lösung
Aktion: Schnelle Entscheidung treffen. Für Geschwindigkeit optimieren.
Typ 3 (Karusselltür): Trivial reversibel
Beispiele: Code-Formatierung, Variablennamen, Ordnerstruktur
Aktion: Eines wählen, weitermachen. Nicht länger als 15 Minuten diskutieren.
Gewichtete Entscheidungsmatrix
Für Typ-1-Entscheidungen verwenden Sie eine gewichtete Matrix:
Kriterium (Gewicht) | Option A | Option B | Option C
--------------------------+-----------+-----------+----------
Team-Expertise (25%) | 8 (2,0) | 5 (1,25) | 7 (1,75)
Community/Support (20%) | 9 (1,8) | 7 (1,4) | 6 (1,2)
Performance (20%) | 6 (1,2) | 9 (1,8) | 7 (1,4)
Betriebskosten (15%) | 7 (1,05) | 4 (0,6) | 8 (1,2)
Skalierbarkeit (10%) | 7 (0,7) | 9 (0,9) | 7 (0,7)
Lernkurve (10%) | 8 (0,8) | 4 (0,4) | 6 (0,6)
--------------------------+-----------+-----------+----------
Gesamt | 7,55 | 6,35 | 6,85
Die spezifischen Gewichte sind weniger wichtig als die Übung selbst. Sie zwingt Sie, zu artikulieren, was Sie wertschätzen und warum. Wenn die Ergebnisse nah beieinander liegen (innerhalb von 10%), ist die Entscheidung wahrscheinlich weniger wichtig als gedacht — wählen Sie die Option mit besserer Team-Expertise.
Schritt 2: Build vs Buy
Das ist die folgenreichste Architekturentscheidung, die die meisten Unternehmen treffen — und sie liegen konsequent in beide Richtungen falsch.
Wann kaufen (bestehenden Service/Produkt nutzen)
- Es ist nicht Ihr Kernunterscheidungsmerkmal. Authentifizierung, Zahlungsabwicklung, E-Mail-Versand, Monitoring — das sind gelöste Probleme. Wenn Sie kein Auth-Unternehmen sind, bauen Sie keine Auth.
- Der Time-to-Value-Unterschied ist signifikant. Wenn Kaufen 3+ Monate spart und die Jahreskosten weniger als ein Entwickler-Monatsgehalt betragen, kaufen.
- Compliance ist involviert. PCI DSS für Zahlungen, SOC 2 für Datenverarbeitung — Anbieter haben diese Audits bereits bestanden.
- Wartung ist nicht trivial. Datenbank, Message Queue, Suchmaschine — die Baukosten sind 10% der Lebenszeitwartungskosten.
Wann selbst bauen
- Es IST Ihr Kernunterscheidungsmerkmal. Das, was Ihr Produkt einzigartig macht, sollte unter Ihrer vollen Kontrolle sein.
- Vendor Lock-in ist inakzeptabel. Wenn Wechselkosten das Geschäft bedrohen würden, bauen Sie selbst oder nutzen Open-Source.
- Bestehende Lösungen passen nicht. Wenn Sie mehr Zeit mit Workarounds verbringen als mit dem Selbstbauen, bauen Sie.
- Datensouveränität erfordert es. Manche Daten dürfen Ihre Infrastruktur nicht verlassen. Punkt.
Versteckte Kosten von "Kaufen"
Sichtbare Kosten: Lizenz-/Abogebühr
Versteckte Kosten: - Integrationsentwicklung (oft 2-5x der geschätzten Zeit)
- Vendor-API-Änderungen und Breaking Updates
- Support-Reaktionszeiten wenn nachts etwas kaputtgeht
- Datenmigration bei Anbieterwechsel
- Feature-Requests, die nie priorisiert werden
- Sicherheitslücken in Code, den Sie nicht kontrollieren
Versteckte Kosten von "Bauen"
Sichtbare Kosten: Entwicklungszeit
Versteckte Kosten: - Laufende Wartung (planen Sie 20% der Bauzeit jährlich)
- Sicherheitspatches und Schwachstellenmanagement
- Dokumentation und Wissenstransfer
- On-Call-Verantwortung für das Team
- Opportunitätskosten — was könnte das Team sonst bauen?
Schritt 3: Monolith vs Microservices
Die am meisten überdiskutierte Architekturentscheidung der Branche. Hier ist die ehrliche Wahrheit.
Starten Sie mit einem Monolithen. Ernsthaft.
Es sei denn, Sie haben:
- 20+ Entwickler, die nicht an derselben Codebasis arbeiten können ohne ständige Konflikte
- Komponenten mit grundlegend unterschiedlichen Skalierungsanforderungen (CPU-gebunden vs I/O-gebunden)
- Ein dediziertes Platform/DevOps-Team zur Infrastrukturverwaltung
- Klare, stabile Domänengrenzen, die sich mindestens ein Jahr nicht ändern
... sollten Sie einen Monolithen bauen. Ein gut strukturierter Monolith mit sauberen Modulgrenzen kann später aufgeteilt werden. Voreilige Microservices können nicht einfach zusammengeführt werden.
Die wahren Kosten von Microservices
Was Sie gewinnen: Was Sie bezahlen:
- Unabhängige Deployments - Verteilte Systemkomplexität
- Technologievielfalt - Netzwerklatenz zwischen Services
- Isolierte Fehlerbereiche - Verteiltes Tracing und Debugging
- Unabhängige Skalierung - Service Discovery und Load Balancing
- Datenkonsistenz-Herausforderungen
- Integrationstestkomplexität
- Operativer Overhead (10-50 Services
= 10-50 Dinge, die ausfallen können)
Der modulare Monolith: Der Mittelweg
Strukturieren Sie Ihren Monolithen mit klaren Modulgrenzen, wohldefinierten Schnittstellen zwischen Modulen und separaten Datenbankschemas pro Modul. Das gibt Ihnen:
- Einfaches Deployment und Betrieb (ein Artefakt)
- Saubere Architektur, die später aufgeteilt werden kann
- Keine Probleme verteilter Systeme
- Einfache lokale Entwicklung und Tests
# Modularer Monolith - Beispielstruktur
src/
modules/
users/
api/ # Öffentliche Schnittstelle für andere Module
internal/ # Private Implementierung
tests/
orders/
api/
internal/
tests/
shipping/
api/
internal/
tests/
shared/ # Nur wirklich geteilte Hilfsfunktionen
main.py # Composition Root
Wann Microservices tatsächlich sinnvoll sind
Wenn Sie 3+ dieser Kriterien erfüllen, können Microservices gerechtfertigt sein:
- Ihr Team hat 30+ Entwickler
- Sie deployen mehr als 10 Mal pro Tag
- Verschiedene Komponenten haben 10x+ unterschiedliche Lastmuster
- Sie haben ein dediziertes Platform-Team (3+ Personen)
- Ihre Domänengrenzen sind stabil und gut verstanden
- Sie haben bereits einen gut strukturierten Monolithen überwachsen
Schritt 4: Datenbankauswahl
Die Datenbank ist die am schwierigsten zu wechselnde Technologie. Wählen Sie sorgfältig.
Entscheidungsbaum
Sind Ihre Daten relational? (Entitäten mit Beziehungen)
├── JA → Brauchen Sie ACID-Transaktionen?
│ ├── JA → PostgreSQL (Standardwahl für 90% der Projekte)
│ └── NEIN → Trotzdem PostgreSQL (kann auch nicht-ACID gut)
└── NEIN → Welche Art von Daten?
├── Dokumente (JSON-artig, variables Schema) → MongoDB oder PostgreSQL JSONB
├── Key-Value (einfache Lookups, Caching) → Redis
├── Zeitreihen (Metriken, IoT-Daten) → TimescaleDB oder InfluxDB
├── Graph (komplexe Beziehungen, Traversierungen) → Neo4j
├── Suche (Volltextsuche, Facetten) → Elasticsearch oder Meilisearch
└── Wide Column (massive Skalierung, einfache Abfragen) → Cassandra/ScyllaDB
Der PostgreSQL-Standard
Wenn Sie unsicher sind, wählen Sie PostgreSQL. Es beherrscht:
- Relationale Daten (es ist eine relationale Datenbank)
- JSON/Dokument-Daten (JSONB-Spalten mit Indizierung)
- Volltextsuche (eingebautes tsvector)
- Geodaten (PostGIS-Extension)
- Zeitreihen (mit TimescaleDB-Extension)
- Key-Value-Muster (HSTORE oder JSONB)
Eine spezialisierte Datenbank hinzuzufügen ist eine Typ-2-Entscheidung — Sie können das später tun, wenn Sie bewiesen haben, dass Sie sie brauchen. Mit einer spezialisierten Datenbank zu starten ist eine Typ-1-Entscheidung, die Ihre gesamte Architektur einschränkt.
Multi-Datenbank-Strategie
Mehrere Datenbanken zu nutzen ist in Ordnung — aber jede muss ihre Existenz rechtfertigen:
PostgreSQL — Primärer Datenspeicher (Source of Truth)
Redis — Caching-Layer, Session-Storage, Rate Limiting
Elasticsearch — Volltextsuche (wenn PostgreSQL tsvector nicht reicht)
Fügen Sie KEINE Datenbank hinzu, weil:
- "MongoDB ist besser für Dokumente" (PostgreSQL JSONB reicht meist)
- "Redis ist schneller" (als was? Für welches Abfragemuster? Wie gemessen?)
- "Wir könnten es später brauchen" (YAGNI — You Aren't Gonna Need It)
Schritt 5: Architecture Decision Records (ADRs)
Jede signifikante Architekturentscheidung sollte dokumentiert werden. Nicht in einem Wiki, das niemand liest — im Code-Repository, neben dem Code, den sie betrifft.
ADR-Vorlage
# ADR-001: PostgreSQL als primäre Datenbank
## Status
Akzeptiert (2026-03-15)
## Kontext
Wir brauchen einen primären Datenspeicher für das Auftragsmanagementsystem.
Unsere Daten sind relational (Benutzer, Aufträge, Produkte mit Fremdschlüsseln).
Wir brauchen ACID-Transaktionen für die Zahlungsabwicklung.
Das Team hat 3 Entwickler mit PostgreSQL-Erfahrung, 0 mit MongoDB.
## Entscheidung
Wir verwenden PostgreSQL 16 als primäre Datenbank.
## Betrachtete Alternativen
1. MongoDB — Gut für Dokumentspeicherung, aber unsere Daten sind relational.
Würde manuelle Transaktionsverwaltung für Zahlungen erfordern.
2. MySQL — Machbar, aber PostgreSQL hat besseren JSON-Support,
den wir für flexible Produktattribute brauchen.
3. CockroachDB — Verteiltes PostgreSQL-kompatibel, aber wir brauchen
noch kein Multi-Region und es erhöht die operative Komplexität.
## Konsequenzen
- Wir bekommen ACID-Transaktionen out of the box
- Wir können JSONB für flexible Schemas nutzen wo nötig
- Wir müssen Connection Pooling verwalten (PgBouncer)
- Wir akzeptieren Single-Region-Deployment vorerst
- Bei Multi-Region-Bedarf können wir zu CockroachDB migrieren
## Review-Datum
2026-09-15 (6 Monate)
Wo ADRs speichern
project-root/
docs/
adr/
0001-postgresql-nutzen.md
0002-modularer-monolith.md
0003-stripe-fuer-zahlungen.md
template.md
Wann ein ADR schreiben
- Auswahl einer Datenbank, eines Frameworks oder einer Sprache
- Entscheidung über Architekturstil (Monolith, Microservices)
- Auswahl eines Drittanbieter-Services (Zahlung, Auth, Hosting)
- Signifikante Abweichung von Konventionen
- Entscheidung, etwas NICHT zu tun (oft die wertvollsten ADRs)
Problembehandlung & Hinweise
"Wir haben bereits die falsche Wahl getroffen"
Quantifizieren Sie zuerst die Kosten des Weitermachens vs die Kosten des Wechselns. Meistens sind die Wechselkosten höher als geschätzt und der Nutzen geringer. Wenn Sie sich zum Wechsel entscheiden, tun Sie es inkrementell: Strangler-Fig-Pattern für Services, Dual-Write für Datenbanken, Feature Flags für Frameworks.
"Das Team will [neue glänzende Technologie] nutzen"
Fragen Sie: "Welches Problem löst das, das unser aktueller Stack nicht löst?" Wenn die Antwort "es ist moderner" oder "das nutzen alle" ist, widersprechen Sie. Lebenslaufgetriebene Entwicklung ist eines der teuersten Muster unserer Branche. Neue Technologie ist in Ordnung, wenn sie ein echtes Problem löst — aber sie muss gegen das Framework bewertet werden, nicht aus Begeisterung adoptiert.
"Stakeholder wollen eine technologiespezifische Lösung"
Nicht-technische Stakeholder fordern manchmal bestimmte Technologien an ("bau es auf Blockchain", "nutze KI dafür"). Übersetzen Sie zurück zum Problem: "Welches Ergebnis möchten Sie?" Oft ist das Problem besser mit bewährter, einfacherer Technologie lösbar.
"Wir haben keine Zeit für ordentliche Bewertung"
Eine Typ-1-Entscheidung, die in 2 Stunden getroffen wird, kostet Sie 200 Stunden zur Korrektur. Blockieren Sie den Kalender. Machen Sie die Bewertung. Die 2 Tage, die Sie jetzt investieren, sparen 2 Monate später.
Prävention & Best Practices
Der Technology Radar
Pflegen Sie einen Team-Technology-Radar mit vier Ringen: Adopt (in Produktion nutzen), Trial (in nicht-kritischen Projekten nutzen), Assess (in Spikes evaluieren), Hold (nicht nutzen). Vierteljährlich reviewen. Das verhindert sowohl leichtsinnige Adoption als auch Stagnation.
Proof of Concept vor der Festlegung
Für jede Typ-1-Entscheidung bauen Sie einen zeitlich begrenzten Proof of Concept (maximal 1-2 Wochen). Fokussieren Sie auf den riskantesten Aspekt — nicht den Happy Path. Wenn Sie eine Datenbank evaluieren, testen Sie Fehlerszenarien, Backup/Restore und Migrationswerkzeuge, nicht nur einfache CRUD-Operationen.
Architektur-Reviews
Planen Sie vierteljährliche Architektur-Reviews. Schauen Sie ADRs an, prüfen Sie deren Konsequenzen-Abschnitt und fragen Sie: Hat die Realität unsere Vorhersage bestätigt? Aktualisieren oder ersetzen Sie ADRs, die sich als falsch herausgestellt haben.
Die "Langweilige Technologie"-Regel
Dan McKinleys Essay "Choose Boring Technology" sollte Pflichtlektüre sein. Sie haben eine begrenzte Anzahl von "Innovations-Token" — nutzen Sie sie für Ihr Kernprodukt, nicht für Ihre Datenbank, Deployment-Pipeline oder Ihren Monitoring-Stack.
Notausgänge
Wenn Sie eine Typ-1-Entscheidung treffen, designen Sie immer einen Notausgang. Nutzen Sie ein ORM, damit Sie Datenbanken wechseln können. Nutzen Sie eine Message-Queue-Abstraktion, damit Sie Implementierungen tauschen können. Nutzen Sie Infrastructure-as-Code, damit Sie Cloud-Anbieter wechseln können. Der Notausgang kostet vielleicht 10% mehr im Voraus, spart aber das 10-fache, wenn Sie ihn brauchen.
Experten-Hilfe gebraucht?
Expertenmeinung zu Ihrer Architektur? €250.
Jetzt buchen — €250100% Geld-zurück-Garantie