Feature Flags
Feature Flags in modernen Softwareprojekten
Übersicht
Feature Flags (auch Feature Toggles genannt) sind ein zentrales Werkzeug moderner Softwareentwicklung. Sie ermöglichen es, einzelne Funktionen oder Codepfade zur Laufzeit zu aktivieren oder zu deaktivieren, ohne ein neues Deployment durchführen zu müssen.
Beispiel:
if (FeatureFlags.IsEnabled("NewLoginFlow"))
{
ShowNewLoginPage();
}
else
{
ShowOldLoginPage();
}
Damit lässt sich steuern, welche Features für welche Benutzer oder Umgebungen sichtbar sind.
Vorteile
- Trennung von Deployment und Release
- Code kann jederzeit ausgeliefert, aber erst später für Benutzer sichtbar gemacht werden.
- Schnelleres Feedback
- Features lassen sich selektiv aktivieren, um Nutzerfeedback einzuholen.
- Risikominimierung
- Neue Funktionen können bei Problemen sofort deaktiviert werden („Kill Switch“).
- Experimentieren & A/B-Testing
- Verschiedene Varianten können parallel getestet werden.
- Continuous Delivery
- Flags unterstützen häufige Deployments und verkürzen Release-Zyklen.
Einsatzszenarien
| Zweck | Beschreibung |
|---|---|
| Staged Rollouts / Canary Releases | Neue Features werden nur für eine Teilmenge der Benutzer aktiviert. |
| A/B-Testing | Unterschiedliche Varianten werden zur Auswertung des Nutzerverhaltens getestet. |
| Dark Launching | Features laufen im Hintergrund, bevor sie sichtbar gemacht werden. |
| Notfallabschaltung | Fehlerhafte Funktionen lassen sich sofort deaktivieren. |
| Feature Branch Replacement | Flags ersetzen separate Entwicklungs-Branches und reduzieren Merge-Konflikte. |
Implementierungsansätze
1. Einfache statische Flags
Für kleine Projekte reicht oft eine Konfigurationsdatei:
{
"FeatureFlags": {
"NewDashboard": true
}
}
Diese Werte werden beim Start der Anwendung eingelesen.
2. Dynamische Flags mit zentralem Management
Für größere Projekte empfiehlt sich ein zentrales Verwaltungssystem, z. B.:
- LaunchDarkly
- Azure App Configuration
- Unleash
- Flagsmith
- Split.io
- Firebase Remote Config
Solche Systeme bieten:
- Aktivierung nach Benutzer, Region oder Version
- Dashboards zur Laufzeitsteuerung
- CI/CD-Integration und Rollback-Funktion
3. Integration im Anwendungscode
Beispiel in .NET mit dem Feature Management Framework:
builder.Services.AddFeatureManagement();
public class DashboardController : Controller
{
private readonly IFeatureManager _featureManager;
public DashboardController(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
public async Task<IActionResult> Index()
{
if (await _featureManager.IsEnabledAsync("NewDashboard"))
return View("NewDashboard");
return View("OldDashboard");
}
}
Best Practices
- Feature Flags zentral verwalten (z. B. über einen FeatureFlagService).
- Flags regelmäßig überprüfen und nach Rollout entfernen.
- Automatisierte Tests für verschiedene Flag-Kombinationen implementieren.
- Logging und Monitoring für Flag-Änderungen einführen.
- Sicherheitskritische Logik niemals allein über Feature Flags steuern.
Risiken
| Risiko | Gegenmaßnahme |
|---|---|
| Zu viele Flags führen zu unübersichtlichem Code | Flags regelmäßig aufräumen und dokumentieren |
| Vergessene Flags im Code | Nach erfolgreichem Rollout entfernen |
| Fehlerhafte Kombinationen mehrerer Flags | Automatische Tests für Flag-Kombinationen |
| Falsche Konfiguration im Live-System | Änderungen überwachen und mit Alerting absichern |
Fazit
Feature Flags sind ein mächtiges Werkzeug für agile und DevOps-orientierte Teams. Sie ermöglichen kontrollierte Releases, geringeres Risiko und mehr Flexibilität. Allerdings erfordern sie Disziplin, gute Dokumentation und ein regelmäßiges Aufräumen, um nicht selbst zur Komplexitätsfalle zu werden.