Feature Toggle
Table of Contents
Was ist ein Feature Toggle?
In der Softwareentwicklung ist ein Feature-Toggle ein Mechanismus, mit dem Code aus der Ferne ein- oder ausgeschaltet werden kann, ohne dass eine Bereitstellung erforderlich ist. Feature-Toggles werden häufig von Produkt-, Entwicklungs- und DevOps-Teams für Canary Releases, A/B-Tests und Continuous Deployment verwendet.
Sie werden auch als "Feature Flags", "Feature Switches" oder "Release Toggles" bezeichnet. Feature Toggles sind in Anwendungen und Infrastrukturen vielfältig einsetzbar und dienen meist der Risikominimierung.
Sie können zum Beispiel in Anwendungen eingesetzt werden, um neue Funktionen schrittweise einzuführen, so dass die Teams die Änderungen an einer kleinen Gruppe von Nutzern testen können, bevor sie sie für alle freigeben. In der Infrastruktur können Feature Toggles wie Stromkreisunterbrecher wirken und es Ingenieuren ermöglichen, das Verhalten eines eingesetzten Systems aus der Ferne zu steuern.
Wie Feature Toggles funktionieren
Feature-Toggles werden in der Regel zu Codebases hinzugefügt, um die Fernsteuerung bestimmter Logik zur Laufzeit zu ermöglichen. Im Code wird diese Logik so verpackt, dass sie durch den Status eines Feature-Toggles gesteuert werden kann. Wenn der Status des Feature-Toggles "an" ist, wird die verpackte Logik ausgeführt. Ist der Status des Feature-Toggles "aus", wird die umschlossene Logik übersprungen.
Wenn eine Anwendung den Status eines Feature Toggles zur Laufzeit wissen will, stellt sie eine Anfrage an eine externe Datenquelle oder einen Managed Service wie Optimizely. Anhand des zurückgegebenen Status kann die Anwendung dann entscheiden, ob sie die Wrapped Logic ausführen möchte oder nicht.
Da die Anwendung den Status von Feature Toggles aus einer externen Quelle erhält, kann sie die Wrapped Logic aus der Ferne steuern, indem sie das Flag in der Konfigurationsdatei einfach ein- oder ausschaltet, ohne dass Code bereitgestellt werden muss. Wenn zum Beispiel der Status eines Feature-Toggles in Optimizely geändert wird, wird er zur Laufzeit auch in der Anwendung geändert.
Codebases enthalten oft viele Feature Toggles, die verschiedene Teile der Anwendung steuern. Aus diesem Grund werden Feature-Toggles in der Regel mit eindeutigen Namen oder Schlüsseln versehen, damit sie unterscheidbar sind und die Logik, die sie steuern, beschreiben. Außerdem können Feature-Toggles für verschiedene Nutzer oder Zielgruppen unterschiedliche Status haben. 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 in Optimizely nachzuschlagen.
Die Vorteile von Feature Toggles
Der Hauptvorteil von Feature Flags ist, dass es die Risiken mindert, die mit der Freigabe von Änderungen an einer Anwendung verbunden sind. Egal, ob es sich um ein neues Feature-Release oder ein kleines Refactoring handelt, es besteht immer das Risiko, dass neue Regressionen veröffentlicht werden. Um dieses Risiko zu verringern, können Änderungen an einer Anwendung mit Feature-Toggles versehen werden, mit denen 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 sie ein Feature-Toggle für einen Bruchteil aller Nutzer/innen aktivieren, können Teams Erkenntnisse gewinnen, bevor die Änderungen für alle ausgerollt werden. Diese Funktion von Feature Toggles wird in der Regel für Feature Rollouts oder Canary Releases verwendet, bei denen Änderungen an Anwendungen und Infrastrukturen an einer Teilmenge von Nutzern getestet werden. Auf diese Weise können Teams Regressionen frühzeitig erkennen und bei Bedarf ein Rollback durchführen, um das Risiko von Fehlern zur Laufzeit zu minimieren.
Entwicklungsprozess für Feature-Toggles
Der erste Schritt bei der Implementierung eines Feature-Toggles besteht darin, es in einer externen Datenquelle oder einem Dienst wie Optimizely zu erstellen und zu definieren. Dazu gehört in der Regel die Wahl eines eindeutigen Namens oder Schlüssels für das Feature Toggle sowie die Festlegung eines Anfangsstatus. Sobald das Feature Toggle definiert ist, können Anwendungen und die Infrastruktur den Status anhand des eindeutigen Schlüssels abfragen.
Nachdem das Feature Toggle in Optimizely oder anderswo definiert wurde, muss der Status für die Anwendung zugänglich sein. Daher muss Code in die Codebasis eingefügt werden, der es der Anwendung ermöglicht, den Status eines Feature-Toggles aus einer externen Quelle abzurufen. Optimizely bietet SDKs für viele wichtige Sprachen und Frameworks an, die diese Funktion bereitstellen.
Sobald die Anwendung Zugriff auf Feature Toggles hat, können sie zu bestimmten Codepfaden hinzugefügt werden, um eine Fernsteuerung zu ermöglichen. Codepfade, die eine Fernsteuerung erfordern, können in eine bedingte Logik verpackt werden, die vor der Ausführung den Status des Feature-Toggles überprüft. Wenn der Codepfad dann während der Laufzeit erreicht wird, wird er nur ausgeführt, wenn sich das Feature-Toggle in einem bestimmten Zustand befindet.
Feature Toggle Beispiele / Use-Cases
Kanarienvogel-Freigaben
Bei der Freigabe einer neuen Funktion ist es oft sinnvoll, sie mit einer kleinen Gruppe 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 genutzt, um das Risiko beim Hinzufügen oder Ändern einer Funktion zu minimieren. Feature-Toggles können für Canary Releases verwendet werden, indem sie festlegen, ob die neue Funktion einem bestimmten Nutzer gezeigt werden soll oder nicht, und indem sie die Möglichkeit bieten, 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 zu Fehlern führen können, die während der Unit-Tests nicht entdeckt werden können. Indem sie das Feature Toggling in ihren Entwicklungsprozess integrieren, können Softwareentwicklungsteams neue Funktionen kontrolliert in ihre Produktionsumgebung einführen und dabei ein kleineres Targeting für ihre Nutzerbasis vornehmen, um das Risiko zu verringern. Wenn der Test fehlschlägt, kann er leicht rückgängig gemacht werden, indem einfach die Toggle-Konfiguration angepasst wird, ohne den Quellcode zu ändern.
A/B-Tests
A/B-Tests werden von Teams eingesetzt, um mit neuen Ideen zu experimentieren und Hypothesen anhand von realen Daten zu bestätigen. Sie segmentieren den Verkehr in eine von zwei Varianten einer Funktion, so dass die Kennzahlen für jede Variante nebeneinander erfasst werden können. Ein Feature-Toggle kann einen A/B-Test erleichtern, indem er die Variation steuert, in die jeder Nutzer eingeteilt wird. Wenn ein Feature-Toggle für einen Nutzer "aus" ist, sieht er die "A"-Variante des Tests, während er, wenn er "an" ist, die "B"-Variante sehen würde.
Stromkreisunterbrecher
Je komplexer eine Anwendung oder Infrastruktur wird, desto schwieriger kann es werden, sie zu warten und im Falle eines Ausfalls zu stabilisieren. Feature-Toggles sind eine gute Möglichkeit, die Wartbarkeit und Wiederherstellbarkeit eines wachsenden Systems zu verbessern. Wenn sie wie Stromkreisunterbrecher oder Kill Switches eingesetzt werden, können Teams die Komponenten eines Systems zentral und aus der Ferne steuern und auf Ausfälle reagieren.
Trunk-basierter Einsatz
Da Feature Toggles die schnelle Bereitstellung und das Rollback von neuem Code ermöglichen, können sie zur Unterstützung eines trunkbasierten Entwicklungsprozesses eingesetzt werden, bei dem Codeänderungen am Hauptstamm vorgenommen werden können, anstatt mehrere Feature-Zweige zu haben, die dann in Github oder anderen Quellcodeverwaltungsplattformen zusammengeführt und abgeglichen werden müssen.
Feature Toggles und Continuous Delivery
Continuous Integration and Continuous Delivery (CI/CD) wurde von dem einflussreichen Softwareentwickler Martin Fowler ins Leben gerufen und ist eine Disziplin der Softwareentwicklung, bei der Software jederzeit für die Produktion freigegeben werden kann. Sie wurde von führenden Softwareunternehmen auf der ganzen Welt übernommen, von deren Teams nun erwartet wird, dass sie ihren Nutzern schnell stabile und fehlerfreie Software zur Verfügung stellen.
Feature Flags verbessern CI/CD, indem sie eine "kontinuierliche" Entwicklung möglich machen. Die Feature Flags und Feature Toggles sind eine Schlüsselkomponente bei der Umsetzung von Continuous Delivery und ermöglichen die Trennung von Feature Rollout und Code Deployment. Unvollständige Features können in die Produktionscodebasis eingebunden werden, aber hinter Feature Flags versteckt werden.
Mit Continuous Delivery und dem Management von Feature Flags kann ein Team seine Features in großem Umfang einführen, kontrollieren und messen.
Optimizely und Feature Toggles
Optimizely ist führend im Bereich Progressive Delivery und Experimentieren und bietet verschiedene Lösungen für das Feature Flags Management an.
Optimizely Server-side Experimentation ist unsere Enterprise Feature Flagging and Experimentation Suite, mit der Entwicklungsteams Features verwalten und Feature-Tests auf jedem mit dem Internet verbundenen Gerät durchführen können. Es gibt SDKs für die gängigsten Sprachen und Frameworks wie Node, Python, Ruby, Go, React, Swift und C#.
Für Teams, die erst einmal mit Feature Flags anfangen wollen, ist Optimizely free feature flagging eine Lösung, für die du dich anmelden und sofort einsetzen kannst, um Feature Flags ohne die A/B-Testing-Funktionalität zu nutzen, und zwar völlig kostenlos (im Gegensatz zu Wettbewerbern wie LaunchDarkly).
Feature Toggles sind ein mächtiges Werkzeug, das du in deiner Softwareentwicklungspraxis einsetzen kannst. Mit Optimizely ist es einfacher denn je, Risiken zu reduzieren, Entwicklungszeiten zu verkürzen und neue Funktionen in deiner Software zu testen.