Begriff
Feature Flag
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Du hast ein neues Feature programmiert (z. B. "Dark Mode").
Aber es ist noch buggy.
Trotzdem musst du den Code auf den Server laden (Deploy), weil dein Kollege deinen anderen Code braucht.
Feature Flags sind Lichtschalter im Code.
if (feature.darkMode == true) { zeigen() } else { verstecken() }.
Standardmäßig ist der Schalter AUS.
Der Code ist live, aber niemand sieht ihn ("Dark Launch").
Wenn du fertig bist, legst du den Schalter um (im Admin-Panel, ohne neu zu deployen).
Merksatz: Eine Technik in der Softwareentwicklung, die es ermöglicht, Funktionen zur Laufzeit ein- oder auszuschalten, ohne neuen Code bereitzustellen.
Tools: LaunchDarkly, Unleash. Du kannst Features zielgerichtet einschalten:
- "Nur für mich" (zum Testen).
- "Nur für Beta-User".
- "Nur in Deutschland". Das ermöglicht Trunk-Based Development: Alle arbeiten am gleichen Code (Main Branch), aber unfertige Sachen sind hinter Flags versteckt. Keine langlebigen Feature-Branches mehr!
1. Technical Debt
Feature Flags sind Schulden.
Jedes if macht den Code komplexer.
Wenn der Flag jahrelang im Code bleibt ("Zombie Flag"), weiß niemand mehr: "Was passiert, wenn ich den ausmache?".
Regel: Feature Flags müssen kurzlebig sein. Sobald das Feature stabil ist -> Code aufräumen (Flag löschen).
2. Kill Switch
Der Notfall-Knopf. Du rollst ein Feature aus. Performance bricht ein. Statt mühsam zurückzurollen (Rollback dauert 20 Min), klickst du den Flag auf "AUS" (2 Sekunden). Problem gelöst.
1. Backend-Flag Caching und SSE (Server-Sent Events)
Echtes Feature-Flagging im Heavy-Load-Betrieb (Netflix, Uber) darf keine Datenbank-Latenzen erzeugen.
Wenn 10.000 HTTP Requests/Sec ankommen und jeder drinnen hat ein if(flag.isEnabled("new_checkout")), wird ein API-Call an LaunchDarkly das System grillen.
Production-SDKs nutzen daher hartes Local-Caching und Server-Sent Events (SSE).
Das Backend-SDK hält ein Abbild aller Millionen Feature-Bits in einer in-memory Map. Ein Flag-Aufruf der Java CPU dauert dadurch 0.0 Millisekunden. Legt der PM im LaunchDarkly-Dashboard den Schalter um, pusht deren Cloud via asynchroner, offener SSE oder gRPC-Pipe ein Diff-Update auf alle tausend Pods, um die Local-Caches in Sekundenbruchteilen hot zu synchronisieren.
2. AB-Testing und Telemetrie Kopplung (Experimentation)
Ein Feature Flag ist nichts wert, wenn man nicht misst, was er anrichtet.
Aus einem Flag entsteht sofort eine MVT (Multivariate Test) Engine. Schickst man 10% der User durch Flag_A = On, müssen diese HTTP Requests mit den exakten Cohort-Labels an den Analytics-Layer (z.b. amplitude, DataDog) durchgeschleift werden. Reagiert die P99-Latenz negativ, wenn Flag_A an ist? Sinkt die Conversion-Rate im Shop brutal? Top-Plattformen zwingen automatische (Machine-Learning gesteuerte) Revertigations an. Rutscht die Ausfall-Metrik ins Rote, schaltet das Launch-Controller System den Kill-Switch dynamisch sofort aus, während die Coder schlafen.
3. Dependency Hell und Flag Lifecycles
Entwicklungs-Schulden häufen sich zu "Flag-Bäumen" auf. Was passiert, wenn Premium_Video_Feature von New_Player_Core Flag abhängig ist?
Kombinationen aus 5 aktiven Flags erzeugen $2^5 = 32$ mögliche Zustände der Software.
Das QA-Automatisierungs-Testing fällt krachend in die Combinatorial-Explosion. Man kann unmöglich 32 Playwright Branches testen. Darum splittet man Flags streng:
Release Flags: 14 Tage TTL, fliegen sofort nach erfolgreichem Release hart aus dem Code.
Ops Flags: Permanente Drossel für Rate-Limiting.
Permission Flags: Dauerhafte Tier-Freischaltung für Kundenstrukturen.
Dev-Teams verlangen Hooks im CI/CD: Wenn nach 3 Wochen das Release-Flag noch drin ist, Failt der Main-Branch im Linter.
Quick-Check
Verlangsamt es den Code?
Minimal. Einifkostet Nanosekunden. Wenn du aber für jeden User eine Datenbank abfragen musst ("Hat User X das Flag?"), dann ja. Deshalb cachen SDKs die Flags lokal im RAM.Unterschied zu Konfiguration?
Konfiguration (Server-Neustart nötig) ist statisch. Feature Flags (Laufzeit) sind dynamisch.Wer darf schalten?
Nicht nur Entwickler. Auch Product Owner oder Marketing ("Wir schalten das Feature pünktlich zur TV-Werbung frei").