Sofortantwort
Feature Flags einfach erklärt
Konfigurationsschalter zum Ein-/Ausschalten von Features ohne neues Deployment.
- Kurz gesagt
- Features können im laufenden Betrieb aktiviert/deaktiviert werden – kein Deployment nötig
- Typischer Einsatz
- Canary Release, A/B-Testing, Notfall-Rollback
- Wichtig zu wissen
- Basis für Canary Releases, A/B-Tests und sofortige Rollbacks
Feature Flags im Überblick
Traditionelles Deployment: Code schreiben → mergen → deployen → Feature ist live. Wenn etwas schiefläuft, braucht man einen Hotfix und ein neues Deployment – das dauert.
Feature Flags trennen Deployment von Release: Der Code wird deployt, aber das Feature ist zunächst deaktiviert. Wenn alles bereit ist, wird der Flag umgelegt – in Sekunden, ohne Deployment. Bei Problemen: Flag zurückschalten, sofort.
Deployment vs. Release:
Ohne Feature Flags:
Code fertig → Deploy → Feature live (alles auf einmal)
Mit Feature Flags:
Code fertig → Deploy (Flag = off) → Testen → Flag = on für 5% → Flag = on für 100%
Flag-Typen:
| Typ | Lebensdauer | Beispiel |
|---|---|---|
| Release Flag | Kurzfristig | Neues Dashboard ausrollen |
| Experiment Flag | Kurzfristig | A/B-Test Prompt-Varianten |
| Ops Flag | Mittelfristig | Cache aktivieren/deaktivieren |
| Kill Switch | Langfristig | Notfall-Deaktivierung |
| Permission Flag | Langfristig | Beta-Nutzer-Zugang |
Technisch betrachtet
Einfache Implementierung
// flags.ts
const flags = await fetchFlags(userId);
if (flags.isEnabled('new-llm-model')) {
return await callGPT4o(prompt);
} else {
return await callGPT4oMini(prompt);
}
LaunchDarkly – Targeting
import * as LaunchDarkly from '@launchdarkly/node-server-sdk';
const client = LaunchDarkly.init(process.env.LD_SDK_KEY);
await client.waitForInitialization();
const user = {
key: userId,
email: userEmail,
custom: { plan: 'pro', region: 'eu' },
};
// Flag mit Targeting: nur Pro-Nutzer in EU
const useNewModel = await client.variation('new-llm-model', user, false);
if (useNewModel) {
return await callNewModel(prompt);
}
Unleash (Open Source, selbst gehostet)
from UnleashClient import UnleashClient
client = UnleashClient(
url="https://unleash.example.com/api",
app_name="ki-assistent",
custom_headers={"Authorization": "Bearer <token>"},
)
client.initialize_client()
if client.is_enabled("new-rag-pipeline", {"userId": user_id}):
result = new_rag_pipeline(query)
else:
result = legacy_rag_pipeline(query)
Gradual Rollout
// 10% der Nutzer bekommen das neue Feature
const rolloutConfig = {
flagKey: 'new-chat-ui',
percentage: 10, // Woche 1
// percentage: 50, // Woche 2
// percentage: 100, // Woche 3 – vollständiger Rollout
};Schritt für Schritt
Funktionen kontrolliert aktivieren
Ein Flag ist ein temporäres Steuerungsinstrument. Es braucht einen klaren Zweck, sichere Zielgruppenregeln und ein Ende.
Zweck und Eigentümer definieren
Zweck
Das Team legt fest, ob das Flag einem Release, Experiment, Notfallabschalten oder einer dauerhaften Berechtigung dient.
flag -> ziel + owner + ablaufdatumFunktion deaktiviert bereitstellen
Deployment
Der Code wird ausgeliefert, bleibt aber zunächst für alle oder für definierte Gruppen ausgeschaltet.
release mit flag = ausGezielt freischalten
Rollout
Eine klare Regel aktiviert die Funktion für ausgewählte Personen, Segmente oder einen kleinen Traffic-Anteil.
regel -> begrenzte zielgruppeWirkung bewerten und aufräumen
Abschluss
Nach der Entscheidung wird das Flag entfernt oder bewusst als dauerhafte Betriebsregel dokumentiert.
ergebnis -> ausrollen oder entfernen
Konkretes Beispiel
Ein neues Modell schrittweise aktivieren
Ein Team möchte eine neue Modellversion nur einem kleinen Teil der Anfragen zeigen.
Vollständiger Wechsel
Die neue Version wird für alle aktiviert. Bei einer Auffälligkeit muss ein neues Deployment vorbereitet werden.
Flag-gesteuerter Rollout
Das Flag begrenzt die neue Version zunächst auf eine kleine, klar definierte Gruppe. Bei Problemen kann sie sofort deaktiviert werden.
Feature Flags machen Experimente und Releases steuerbar, ersetzen aber keine Qualitätsprüfung vor dem Deployment.
Einordnung
Vorteile und Grenzen
Das spricht dafür
- Schnelles Zurückschalten: Eine problematische Funktion kann ohne neues Deployment deaktiviert werden.
- Gezielte Einführung: Neue Funktionen lassen sich für kleine Gruppen oder Anteile kontrolliert testen.
- Trennung von Release und Deployment: Teams können technischen Code ausliefern, bevor die Produktfreigabe erfolgt.
- Gute Experimentbasis: Varianten lassen sich über stabile Regeln an unterschiedliche Gruppen ausspielen.
Das solltest du beachten
- Flags erzeugen Komplexität: Jede Kombination aktiver und inaktiver Schalter vergrößert den Testumfang.
- Vergessene Flags werden technische Schuld: Temporäre Schalter brauchen Eigentümer und ein verbindliches Aufräumdatum.
- Zielgruppenregeln sind sensibel: Unklare oder fehlerhafte Regeln können falsche Personen oder Daten betreffen.
- Nicht jede Änderung passt: Datenmigrationen oder irreversible Effekte lassen sich nicht allein durch einen Schalter absichern.
Vertiefung · für FortgeschritteneDeployment und Produktfreigabe entkoppeln
Das Flag verbindet eine ausgelieferte Funktion mit einer Regel, die ihren tatsächlichen Einsatz kontrolliert.
Schalter für kontrollierte Freischaltung