| name | portfolio-standards |
| description | Big-Tech Engineering Standards (Google/Apple/OpenAI) for portfolio-quality code. Use when: performing code reviews or reviewing PRs; writing design documents or ADRs; planning new features (> 50 LOC); designing APIs or defining contracts; adding observability (logs, metrics, traces, SLOs, alerting); structuring test suites (testing pyramid, 70/20/10 ratio, mutation testing, benchmarks); writing runbooks or post-mortems; evaluating LLM features with evals; checking privacy or GDPR data handling; demonstrating Big Tech engineering practices. |
Big-Tech-Portfolio â Engineering-Standards
Diese Instruktionen modellieren die internen Engineering-Practices von Google, Apple und OpenAI.
Ziel: Jede Ănderung an diesem Repo soll das Niveau einer veröffentlichungsfĂ€higen
Big-Tech-Codebasis demonstrieren â fĂŒr Recruiters, Staff-Engineer-Interviews und Tech-Leads.
I. Design Before Code (Google Design Doc / Amazon 6-Pager)
Pflicht vor jeder nicht-trivialen Ănderung (> 50 LOC oder neue Abstraktion):
Design-Checkliste (mental vor dem ersten Keystroke)
- Problem Statement â Was ist das exakte Problem? Warum jetzt?
- Non-Goals â Was lösen wir explizit NICHT? (Scope-Creep verhindern)
- Alternatives Considered â Mindestens 2 Alternativen skizziert und verworfen (mit BegrĂŒndung)
- API Contract â Wie sieht das Interface aus? (Signatur zuerst, Implementierung danach)
- Data Model Impact â Welche Schema-Ănderungen entstehen? Ist eine Alembic-Migration nötig?
- Failure Modes â Was passiert wenn X ausfĂ€llt? Graceful Degradation definiert?
- Security & Privacy â Threat-Modell skizziert?
owner_id-Filter gesetzt? PII-Handling klar?
- Observability â Welche Metriken/Logs belegen, dass das Feature funktioniert?
- Rollback Plan â Wie reverten wir das Feature ohne Datenverlust?
Google Rule: "A design doc that took 1 day to write saves 1 week of debugging."
FĂŒr ADRs: Template in docs/adr/000-template.md verwenden.
II. Testing Pyramid & Quality Gates (Google Testing Philosophy)
/\
/E2E\ â Wenige, langsam, teuer â nur kritische User-Journeys
/------\
/Integrat\ â Moderate Anzahl â Service-Grenzen testen
/----------\
/ Unit Tests \ â Viele, schnell, eigenstĂ€ndig â GeschĂ€ftslogik isoliert
/--------------\
Pflichtregeln
- 70/20/10-Ratio anstreben: 70% Unit, 20% Integration, 10% E2E
- Keine Tests ĂŒberspringen fĂŒr gelieferte Features â jede neue Funktion hat mindestens einen Test
- Hermetic Tests only: Kein echter Netzwerkzugriff (Redis/Weaviate/Neo4j/DB alle gemockt in Unit-Tests)
- Eigenschaft statt Beispiel: Neben Happy-Path immer
None-Input, leere Listen, Overflow-Cases testen
- Test-Names als Dokumentation:
test_search_returns_empty_list_when_no_documents_indexed â nie test_search()
- Assertions are specifications: Ein Test = eine Kernaussage. Mehrere Assertions = mehrere Tests.
Mutation Testing Mindset (Google's "Effectiveness over Coverage")
Coverage-Zahlen lĂŒgen. Frag stattdessen: WĂŒrde ein Test rot werden, wenn ich diese Zeile lösche?
Wenn nein â Test ist schwach, unabhĂ€ngig vom Coverage-Score.
Performance-Tests als BĂŒrger erster Klasse
@pytest.mark.benchmark
def test_hybrid_search_p99_latency(benchmark):
result = benchmark(search_service.search, query="quarterly review", top_k=10)
assert benchmark.stats["mean"] < 0.200
III. Observability-First (Google SRE / Apple Telemetry)
Das "Three Pillars"-Prinzip (Google SRE Book)
Jedes Feature ist erst "shipped" wenn es in allen drei Dimensionen observable ist:
1. LOGS â Strukturiertes JSON (structlog). Nur IDs, keine PII.
log.info("briefing.generated", briefing_id=str(id), duration_ms=elapsed)
2. METRICS â Prometheus Counter/Histogram fĂŒr jede kritische Operation.
BRIEFING_LATENCY.observe(elapsed) # Histogram, nicht nur Counter
3. TRACES â Correlation-ID durch alle Schichten (bereits in Middleware aktiv).
Jeden externen API-Call (LLM, Weaviate, Neo4j) als Span tracen.
SLO-MentalitÀt vor jeder neuen Route
Bevor ein neuer API-Endpunkt gereviewed wird:
- Availability-SLO: Ziel (z.B. 99,9%) und Error Budget berechnet?
- Latency-SLO: P50 / P99 definiert? (z.B. P99 < 500 ms fĂŒr Search-Endpunkte)
- Alerting: Prometheus-Alert-Rule vorhanden wenn SLO verletzt wird?
IV. API Contract-First Design (OpenAI / Google API Design Guidelines)
Prinzipien (aus Google API Design Guide + OpenAI API-Philosophie)
- StabilitĂ€t ĂŒber Cleverness â Ein langweiliges, vorhersehbares Interface schlĂ€gt jedes clevere API.
- Minimal surface area (Apple-Philosophie) â Ăffentliche API-Felder sind Schulden. Jeden Field hinterfragen.
- Idempotenz by default â Jedes POST/PUT muss bei Wiederholung dasselbe Ergebnis liefern.
- Versionierung vor Breaking Changes â Niemals
/v1/ brechen. Neues Feature â /v2/ oder additive Felder.
- Error responses als API â HTTP-Fehler sind Teil des Contracts.
detail-Dict immer strukturiert:
{"code": "CONNECTOR_AUTH_EXPIRED", "message": "...", "connector_id": "..."}
OpenAPI-Spec als Single Source of Truth
- FastAPI generiert
/docs automatisch â aber: Descriptions, Examples, Deprecation-Hinweise manuell pflegen.
- Alle Response-Schemas vollstÀndig typisiert (kein
dict als Return-Type in Routes).
- Breaking Changes dokumentiert in
CHANGELOG.md unter ### Breaking Changes.
V. Code Review Standards (Google's Code Review Developer Guide)
Als Autor
- CL (Changelist) so klein wie möglich â Ein PR löst ein Problem. Split bei > 400 LOC.
- Description ist Pflicht: Was Àndert sich? Warum? Wie testen? Link zum ADR/Issue.
- Selbst-Review vor Push: Diff nochmals lesen als wÀre man der Reviewer.
- Tests sind Teil des PR â nie "Tests folgen in separatem PR".
Als Reviewer (wenn Copilot Code generiert)
Validiere jeden generierten Code gegen diese Checkliste:
⥠owner_id-Filter bei allen DB-Queries?
⥠Kein PII in Logs?
⥠Idempotent (Upsert statt blindes INSERT)?
⥠Fehlerfall behandelt (nicht nur Happy-Path)?
⥠Type Annotations vollstÀndig?
⥠Test existiert fĂŒr neue Logik?
⥠Kein Hard-Coded Value (URL, Secret, ID)?
⥠Keine Abstraktion die nur einmal genutzt wird?
Google's "No LGTM without understanding"
Jede Zeile die unklar ist muss erklÀrt werden, bevor sie gemergt wird. Bei KI-generiertem Code:
Kann ich diese Zeile verteidigen wenn ein Staff Engineer fragt? Wenn nein â umschreiben.
VI. Operational Excellence (Google SRE / Apple Reliability)
Runbook-Pflicht fĂŒr jede Celery-Task und geplante Job
Jeder Job in pwbs/scheduler/ braucht einen Runbook-Eintrag in docs/runbooks/:
- Symptom: Wie erkennt man einen Fehler?
- Diagnosis: Welche Logs/Metriken prĂŒfen?
- Mitigation: Wie sofort stabilisieren (Feature-Flag, Job pausieren)?
- Resolution: Rootcause-Fix und Verifizierung.
Post-Mortem-Kultur (blameless)
Nach jedem Produktionsvorfall (oder kritischem Bug):
docs/internal/postmortems/YYYY-MM-DD-<title>.md erstellen
- Format: Timeline â Root Cause â Impact â Action Items (mit Owner + Deadline)
- Keine Schuldzuweisung â nur: Was hat das System ermöglicht?
Feature Flags sind Deployment-Safety
Neues Feature immer hinter Feature-Flag deployen:
if feature_flag_service.is_enabled("new_briefing_format", user_id=owner_id):
return new_generator.generate(context)
return legacy_generator.generate(context)
Erst nach 7 Tagen stabilen Betriebs: Flag entfernen, Legacy-Pfad löschen.
VII. Privacy-First Engineering (Apple's Privacy Approach)
Apple's "Privacy Nutrition Label" Denkmuster
FĂŒr jede neue Datenerfassung fragen:
- Daten-Typ: Ist das ein Identifier? Kontaktdaten? Gesundheit? Finanz?
- Verwendungszweck: Exakt einer. Kein "fĂŒr zukĂŒnftige Features"-Vorbehalt.
- VerknĂŒpfung mit IdentitĂ€t: Kann das mit einer Person in Verbindung gebracht werden?
- Tracking ĂŒber Apps hinweg: Nein. Immer Nein.
Differential Privacy Mindset
Aggregierte Stats (Dashboard, Analytics) dĂŒrfen keine RĂŒckschlĂŒsse auf Einzelpersonen erlauben.
Mindest-k = 5: Kein Aggregat ausgeben wenn weniger als 5 Nutzer im Sample.
VIII. AI Safety & Evaluation (OpenAI Engineering Culture)
Evals als First-Class Citizens
Jedes LLM-Feature hat eine Eval-Suite bevor es in Produktion geht:
Eval-Metriken fĂŒr Briefings:
- Factual consistency (Quellenreferenzen validierbar?)
- Hallucination rate (Behauptungen ohne Quelle?)
- Relevance score (Briefing zum richtigen Kontext?)
- User satisfaction (thumbs up/down aus BriefingFeedback)
Red-Teaming Documentation
FĂŒr jede neue LLM-Interaktion:
- Was ist der worst-case Prompt-Injection Angriff?
- Kann ein Nutzer Information eines anderen Nutzers extrahieren?
- Kann das Modell zu unerwĂŒnschten Aktionen gebracht werden?
- Dokumentiert in
docs/adr/ unter Sicherheitsimplikationen.
"No vibes-based deploys" (OpenAI-Prinzip)
LLM-QualitÀtsÀnderungen nur deployen wenn Eval-Ergebnisse das belegen.
Kein "scheint besser" â nur "Eval-Score verbessert sich von X auf Y auf Testset Z."
IX. Data-Driven Development (Google's Culture of Metrics)
Jede Feature-Entscheidung braucht eine Metrik-Hypothese
Hypothesis: "Wenn wir das Meeting-Briefing 30 Min frĂŒher generieren,
steigt die open_rate von 45% auf 60%."
Measurement: briefings.delivery_offset_minutes vs. briefings_viewed / briefings_sent
Decision gate: A/B-Test ĂŒber 2 Wochen, min. 100 Nutzer per Arm
Feature Flags als A/B-Testing-Infrastruktur
Der Feature-Flag-Service (bereits aktiv) kann fĂŒr kontrollierte Experimente genutzt werden.
Kein Feature ship ohne:
- Baseline-Metrik vor dem Deploy
- Expected Impact (quantifiziert)
- Success-Metrik nach dem Deploy
X. Documentation as Code (Google's Engineering Docs Standards)
Versionierte Dokumentation (nicht nur ADRs)
| Dokument-Typ | Speicherort | Wann erstellen? |
|---|
| Architecture Decision Record | docs/adr/NNN-<slug>.md | Bei jeder Architekturentscheidung |
| Runbook | docs/runbooks/<service>.md | Bei jedem neuen Job/Endpunkt |
| Post-Mortem | docs/internal/postmortems/ | Nach jedem Vorfall |
| API Changelog | CHANGELOG.md | Bei jeder Route-Ănderung |
| OpenAPI Examples | FastAPI route openapi_extra | Bei jeder neuen Route |
| Eval Results | docs/evals/<feature>/results/ | Nach jedem LLM-Eval-Lauf |
"Docs rot" vermeiden (Apple's internal documentation discipline)
- Veraltete Docs sind schlechter als keine Docs.
- Wenn Code geĂ€ndert wird â zugehörige Docs im selben PR aktualisieren.
- TODO-Kommentare im Code: immer mit
TASK-NNN oder # TODO(owner): ... referenziert.
XI. Portfolio-Signale fĂŒr Big-Tech-Recruiter
Was Google Staff Engineers im Code suchen:
- Skalierbarkeits-Denken in Kommentaren (z.B.
# O(n*k) â bei >10K docs auf Batch-Cursor umstellen)
- Defensive Programming ohne Paranoia (Fehler an Systemgrenzen fangen, nicht ĂŒberall)
- Clean Abstractions (Klassen tun eine Sache, Interfaces sind schmal)
- VerstÀndnis von Konsistenz-Trade-offs (eventual vs. strong, dokumentiert)
Was Apple Engineers im Code suchen:
- Privacy-impact in Kommentaren bei Daten-Erhebung
- API-Minimalism (jeder public Parameter ist notwendig oder existiert nicht)
- "It just works" ohne Konfiguration (sane defaults, progressive disclosure)
Was OpenAI Engineers im Code suchen:
- Safety-Awareness bei LLM-Calls (Grounding, kein freies Prompt-Format)
- Eval-First statt Ship-First bei ML-Features
- Strukturiertes Experiment-Logging (was wurde getestet, was hat nicht funktioniert)
- Transparenz ĂŒber Modell-Grenzen in Kommentaren und Docs
XII. Code-QualitÀts-Metriken (automatisch validiert)
Pflicht-Gates vor jedem Commit
ruff check .
mypy pwbs/ --strict
pytest tests/unit/ --cov=pwbs
tsc --noEmit
eslint src/ --max-warnings 0
vitest run
Complexity-Budget (Google's readability standards)
- Cyclomatic Complexity pro Funktion: max. 10
- Function length: max. 50 LOC (Ausnahmen dokumentieren)
- Class cohesion: Eine Klasse = ein Concern. God Classes vermeiden.
- Nesting depth: max. 3 Ebenen (dann Extraktion oder Early-Return)
if user:
if user.is_active:
if connector:
if connector.is_authorized:
return fetch_data()
if not user or not user.is_active:
raise HTTPException(status_code=403, detail={"code": "USER_INACTIVE"})
if not connector or not connector.is_authorized:
raise HTTPException(status_code=401, detail={"code": "CONNECTOR_UNAUTHORIZED"})
return fetch_data()