Feature Toggle

Ein Feature Toggle ist ein Mechanismus, mit dem Code ohne einen Deployment-Vorgang aus der Ferne „ein"- oder „ausgeschaltet" werden kann.

Was ist ein Feature Toggle?

In der Softwareentwicklung ist ein Feature Toggle ein Mechanismus, mit dem Code ohne einen Deployment-Vorgang aus der Ferne „ein"- oder „ausgeschaltet" werden kann. Feature Toggles werden häufig von Produkt-, Engineering- und DevOps-Teams für Canary Releases, A/B testing, Produktexperimentierung und Continuous Deployment eingesetzt.

Auch bekannt als „Feature Flags", „Feature Switches" oder „Release Toggles"; Feature Toggles haben vielfältige Einsatzmöglichkeiten in Anwendungen und Infrastrukturen, die meisten davon dienen der Risikominimierung.

So können sie beispielsweise in Anwendungen genutzt werden, um neue Funktionen schrittweise einzuführen, sodass Teams Änderungen an einer kleinen Teilmenge von Nutzern testen können, bevor sie für alle freigegeben werden. Ebenso können Feature Toggles in der Infrastruktur wie Circuit Breaker wirken und es Ingenieuren ermöglichen, das Verhalten eines bereitgestellten Systems aus der Ferne zu steuern.

Wie Feature Toggles funktionieren

Feature Toggles werden typischerweise zu Codebasen hinzugefügt, um die Fernsteuerung bestimmter Logik zur Laufzeit zu ermöglichen. Im Code wird diese Logik so umschlossen, dass sie durch den Status eines Feature Toggles gesteuert werden kann. Wenn der Status des Feature Toggles „ein" ist, wird die umschlossene Logik ausgeführt. Wenn der Status des Feature Toggles „aus" ist, wird die umschlossene Logik übersprungen.

Wenn eine Anwendung zur Laufzeit den Status eines Feature Toggles abfragen möchte, stellt sie eine Anfrage an eine externe Datenquelle oder einen verwalteten Dienst wie Optimizely Feature Experimentation. Die Anwendung kann dann anhand des zurückgegebenen Status entscheiden, ob sie die umschlossene Logik ausführt oder nicht.

Da die Anwendung den Status von Feature Toggles aus einer Remote-Quelle bezieht, können umschlossene Logiken aus der Ferne gesteuert werden, indem das Flag in der Konfigurationsdatei einfach ein- oder ausgeschaltet wird, ohne dass ein Code-Deployment erforderlich ist. Wenn beispielsweise der Status eines Feature Toggles in Feature Experimentation geändert wird, ändert er sich auch in der Anwendung zur Laufzeit.

Codebasen enthalten oft viele Feature Toggles, die verschiedene Teile der Anwendung steuern. Deshalb werden Feature Toggles typischerweise eindeutige Namen oder Schlüssel zugewiesen, damit sie unterscheidbar sind und die von ihnen gesteuerte Logik beschreiben. Darüber hinaus können Feature Toggles für verschiedene Nutzer oder Zielgruppen unterschiedliche Statuse aufweisen. Diese eindeutigen Schlüssel sowie Details über den Nutzer oder die Zielgruppe können dann verwendet werden, um den Status eines bestimmten Feature Toggles in einer externen Datenquelle oder Feature Experimentation nachzuschlagen.

Die Vorteile von Feature Toggles

Der Hauptvorteil von Feature Flags ist, dass sie die Risiken im Zusammenhang mit der Veröffentlichung von Änderungen an einer Anwendung mindern. Ob es sich um eine neue Funktionsveröffentlichung oder ein kleines Refactoring handelt, es besteht immer das inhärente Risiko, neue Regressionen einzuführen. Um dies zu mildern, können Änderungen an einer Anwendung hinter Feature Toggles platziert werden, sodass sie im Notfall „ein"- oder „ausgeschaltet" werden können.

In komplexeren Fällen können Feature Toggles verwendet werden, um Änderungen an kleinen Teilmengen von Nutzern zu testen. Indem ein Feature Toggle für einen Bruchteil aller Nutzer aktiviert wird, können Teams Erkenntnisse gewinnen, bevor Änderungen für alle eingeführt werden. Diese Funktionalität von Feature Toggles wird typischerweise für Feature Rollouts oder Canary Releases verwendet, bei denen Änderungen an Anwendungen und Infrastrukturen validiert werden, indem sie an einer Teilmenge von Nutzern getestet werden. Diese Praktiken ermöglichen es Teams, Regressionen frühzeitig zu erkennen und bei Bedarf zurückzurollen, wodurch das Risiko von Laufzeitfehlern gemindert wird.

Feature Toggle Entwicklungsprozess

Der erste Schritt bei der Implementierung eines Feature Toggles besteht darin, ihn in einer externen Datenquelle oder einem Dienst wie Optimizely zu erstellen und zu definieren. Dies umfasst typischerweise die Wahl eines eindeutigen Namens oder Schlüssels für den Feature Toggle sowie einen Anfangsstatus. Sobald der Feature Toggle definiert ist, können Anwendungen und Infrastrukturen damit beginnen, seinen Status anhand seines eindeutigen Schlüssels nachzuschlagen.

Nachdem der Feature Toggle in Optimizely oder anderswo definiert wurde, muss sein Status für die Anwendung zugänglich sein. Daher muss Code zur Codebasis hinzugefügt werden, der es der Anwendung ermöglicht, den Status eines Feature Toggles aus der externen Quelle nachzuschlagen. Optimizely Feature Experimentation bietet SDKs für viele wichtige Sprachen und Frameworks, die diese Funktionalität bereitstellen.

Schließlich können Feature Toggles, sobald sie für die Anwendung zugänglich sind, zu bestimmten Code-Pfaden hinzugefügt werden, um eine Fernsteuerung zu ermöglichen. Code-Pfade, die eine Fernsteuerung erfordern, können in bedingte Logik eingebettet werden, die den Status des Feature Toggles prüft, bevor sie ausgeführt wird. Wenn dieser Code-Pfad dann zur Laufzeit erreicht wird, wird er nur ausgeführt, wenn das Feature Flag in einem bestimmten Zustand ist.

Feature Toggle Beispiele / Anwendungsfälle

Canary Releases

Bei der Veröffentlichung einer neuen Funktion ist es oft sinnvoll, sie zunächst bei einer kleinen Teilmenge von Nutzern zu testen, bevor sie für alle freigegeben wird. Diese Praxis ist als „Canary Release" oder „Feature Rollout" bekannt und wird von Teams eingesetzt, um das Risiko beim Hinzufügen oder Ändern einer Funktion zu mindern. Feature Toggles können für Canary Releases eingesetzt werden, indem gesteuert wird, ob die neue Funktion einem bestimmten Nutzer angezeigt wird, und die Möglichkeit geboten wird, den Rollout oder Rollback aus der Ferne durchzuführen.

Testen in der Produktion

Aufgrund der Komplexität moderner Deployment-Systeme kann es Unterschiede zwischen Test- und Produktionsumgebungen geben, die Fehler einführen können, die beim Unit-Testing nicht entdeckt werden können. Durch die Integration von Feature Toggling in ihren Entwicklungsprozess können Softwareentwicklungsteams Funktionen in einer kontrollierten Weise in ihre Produktionsumgebung einführen, wobei sie ein kleineres Segment ihrer Nutzerbasis ansprechen, um das Risiko zu reduzieren und neue Funktionen in der Produktion zu testen. Wenn der Test fehlschlägt, kann er leicht rückgängig gemacht werden, indem einfach die Toggle-Konfiguration angepasst wird, ohne Änderungen am Quellcode.

A/B testing

A/B-Tests werden von Teams eingesetzt, um mit neuen Ideen zu experimentieren und Hypothesen anhand realer Daten zu bestätigen. Sie unterteilen den Traffic in eine von zwei Variationen einer Funktion, sodass Metriken für jede Variation nebeneinander erfasst werden können. Ein Feature Toggle kann verwendet werden, um einen A/B-Test zu erleichtern, indem die Variation gesteuert wird, der jeder Nutzer zugeteilt wird. Wenn ein Feature Toggle für einen Nutzer „aus" ist, würde er die „A"-Variation des Tests sehen, während er bei „ein" die „B"-Variation sehen würde.

Circuit Breaker

Je komplexer eine Anwendung oder Infrastruktur wird, desto schwieriger wird es, sie zu warten und bei einem Ausfall schnell zu stabilisieren. Feature Toggles sind eine hervorragende Möglichkeit, Wartbarkeits- und Wiederherstellbarkeitsprobleme in einem wachsenden System anzugehen. Wenn Feature Toggles wie Circuit Breaker oder Kill Switches eingesetzt werden, können sie Teams eine zentrale, aus der Ferne steuerbare Möglichkeit bieten, Komponenten bereitgestellter Systeme zu verwalten und auf Ausfälle zu reagieren.

Trunk-basiertes Deployment

Da Feature Toggles schnelles Deployment und Rollbacks von neuem Code ermöglichen, können sie zur Unterstützung eines trunk-basierten Entwicklungsprozesses eingesetzt werden, bei dem Code-Änderungen am Haupt-Trunk vorgenommen werden können, anstatt mehrere Feature Branches zu haben, die dann in Github oder anderen Source-Management-Plattformen zusammengeführt und abgeglichen werden müssen. Dies kann zu schnelleren Release-Zyklen und weniger Zeit für das Debugging führen.

Feature Toggles und Continuous Delivery

Champagnesiert vom einflussreichen Softwareentwickler Martin Fowler, ist Continuous Integration und Continuous Delivery (CI/CD) eine Softwareentwicklungsdisziplin, bei der Software jederzeit in die Produktion gebracht werden kann. Sie wurde von führenden Softwareunternehmen weltweit übernommen, deren Teams nun erwartet wird, schnell stabile und fehlerfreie Software an die Nutzerbasis zu liefern.

Feature Flags verbessern CI/CD, indem sie „Continuous" erreichbarer machen. Feature Flags und Feature Toggles sind eine Schlüsselkomponente der Implementierung von Continuous Delivery, da sie die Trennung von Feature-Rollout und Code-Deployment ermöglichen. Unvollständige Funktionen können in die Produktions-Codebasis eingepflegt, aber hinter Feature Flags verborgen werden.

Mit Continuous Delivery und Feature-Flag-Management kann ein Team seine Funktionen in großem Maßstab starten, steuern und messen.

Optimizely und Feature Toggles

Optimizely ist ein führendes Unternehmen im Bereich Progressive Delivery und Experimentierung und bietet verschiedene Lösungen für das Feature-Flag-Management an.

Optimizely serverseitige Experimentierung ist unsere unternehmensweite Feature-Flagging- und Experimentierungs-Suite, die Entwicklungsteams die Verwaltung von Funktionen und die Durchführung von Feature-Tests auf jedem mit dem Internet verbundenen Gerät ermöglicht, mit SDKs für die beliebtesten Sprachen und Frameworks, einschließlich Node, Python, Ruby, Go, React, Swift und C#.

Für Teams, die einfach mit Feature Toggles beginnen möchten, ist Optimizely kostenloses Feature Flagging eine Feature-Flagging-Lösung, für die Sie sich anmelden und sofort einsetzen können, um Feature Flags ohne die A/B-Testing-Funktionalität zu nutzen, völlig kostenlos (im Gegensatz zu Wettbewerbern wie LaunchDarkly).

Feature Toggles sind ein leistungsstarkes Werkzeug für Ihre Softwareentwicklungspraxis, und Optimizely Feature Experimentation macht es einfacher als je zuvor, das Risiko zu reduzieren, die Entwicklungszeiten zu beschleunigen und neue Funktionen in Ihrer Software zu testen.