Security by Design
Standard bei einschlägiger Arbeit
Sicherheit ist ab der ersten Entwurfsentscheidung Teil der Architektur, nicht eine Prüfung am Ende.
- Authentifizierung und Autorisierung vor den Funktionen entworfen
- Rollen- und datenbezogene Zugriffskontrolle
- Dienstkonten und API-Scopes nach dem Least-Privilege-Prinzip
- Serverseitige Geheimnisse — nie in einem Client-Bundle
- Eingabevalidierung an jeder Grenze
- Audit-Trails für privilegierte und automatisierte Vorgänge
- Menschliche Freigabe für folgenreiche automatisierte Aktionen erforderlich
- Abhängigkeits- und Sicherheitspflege als laufende Arbeit
Observability
Je Projekt festgelegt
Wenn sich etwas im Produktivbetrieb falsch verhält, kann das System sagen, was passiert ist.
- Strukturiertes Logging rund um Integrationspunkte
- Fehlerbehandlung, die Kontext festhält, nicht nur einen Stacktrace
- Nachvollziehbarkeit von einem Ergebnis zurück zu seinen Quelldatensätzen
- Monitoring, das zu dem passt, was das System tut
Barrierefreiheit
Hier praktiziert
Oberflächen sind per Tastatur und mit assistiver Technologie bedienbar, und das wird getestet.
- Semantische Struktur und Landmarks
- Vollständige Tastaturbedienung mit sichtbarem Fokus
- Kontrast gegen den eigenen Hintergrund gemessen, nicht angenommen
- Reduzierte Bewegung respektiert
- Automatisierte Prüfungen in der Testsuite
Wartbarkeit & Tests
Hier praktiziert
Korrektheit wird durch Tests erzwungen, nicht durch das Gedächtnis dessen, der sie geschrieben hat.
- Typen, die ungültige Zustände nicht darstellbar machen
- Tests, die den Build brechen, wenn eine Invariante verletzt wird
- Code, den jemand anderes sechs Monate später ändern kann
Menschliche Kontrolle
Standard bei einschlägiger Arbeit
Automatisierung bereitet folgenreiche Aktionen vor. Eine Person gibt sie frei.
- Ausdrückliche Freigabeschritte bei allem, was zurückschreibt
- Was vorgeschlagen, freigegeben und ausgeführt wurde, wird aufgezeichnet
- Berechtigungen auf der Automatisierung, nicht nur auf Personen
Architektur
Hier praktiziert
Systeme sind so strukturiert, dass die nächste Änderung ohne Neuschreiben möglich ist.
- Eine Quelle der Wahrheit je Belang
- Explizite Grenzen zwischen Schichten
- Integration hinter Schnittstellen isoliert
- Module, die sich unabhängig ersetzen lassen
Verlässliche Integration
Standard bei einschlägiger Arbeit
Die Teile, die am ehesten ausfallen, sind die zwischen den Systemen — also werden sie dafür entwickelt.
- Wiederholungen, Timeouts und Idempotenz, wo sie zählen
- Validierung, bevor irgendetwas zurückgeschrieben wird
- Ausdrückliche Behandlung des Falls, dass ein Quellsystem widerspricht
- Nichts wird stillschweigend verworfen
Performance & Skalierbarkeit
Hier praktiziert
Performance ist eine Entwurfsvorgabe, gemessen statt angenommen.
- Arbeit vom Anfragepfad genommen, wo sie in den Hintergrund gehört
- Abfrage- und Indexentwurf als Teil der Datenmodellierung
- Animation und Rendering auf dem Compositor, nicht im Haupt-Thread
- Lastverhalten verstanden, bevor Skalierung zugesagt wird
Für Auffindbarkeit gebaut
Hier praktiziert
Öffentlich zugängliche Systeme werden so entwickelt, dass Suchmaschinen und KI-Systeme sie verstehen — soweit das für das jeweilige System relevant ist.
- Semantisches HTML und eine korrekte Überschriftenstruktur
- Strukturierte Daten und Metadaten-Architektur
- Canonicals, Sitemap und Robots-Direktiven
- Serverseitig gerenderte Inhalte statt Text, der in ein Canvas gezeichnet wird
- Interne Verlinkung und crawlbare Navigation
- Core Web Vitals als Engineering-Budget behandelt