Feature Flags
Inhalt
Was sind Feature Flags?
Feature Flags (auch Feature Toggles oder Feature Switches genannt) sind eine Technik der Softwareentwicklung und des Experimentierens mit Produkten, bei der bestimmte Funktionen während der Laufzeit ein- und ausgeschaltet werden, ohne dass neuer Code bereitgestellt wird. Dies ermöglicht eine bessere Kontrolle und mehr Experimentieren über den gesamten Lebenszyklus von Funktionen.
Die Idee hinter Feature Flags ist es, bedingte Feature Branches in den Code einzubauen, um die Logik jeweils nur für bestimmte Benutzergruppen verfügbar zu machen. Wenn die Flagge "an" ist, wird neuer Code ausgeführt, wenn die Flagge "aus" ist, wird der Code übersprungen.
Feature Flags werden auch als Feature Toggle oder Release Toggle bezeichnet und sind eine Erfolgsmethode bei DevOps, die häufig in verteilten Versionskontrollsystemen zum Einsatz kommt.
Wie funktionieren Feature Flags?
Feature Flags sind im Wesentlichen bedingte Anweisungen in Ihrem Code, die steuern, ob bestimmte Features oder Codeblöcke ausgeführt werden. Hier ist eine einfache Aufschlüsselung:
- Bedingte Verzweigungen: Entwickler fügen if/else-Anweisungen in den Code ein, in dem neue Funktionen implementiert werden.
- Flaggen-Status: Jedes Feature Flag hat einen Status (an oder aus), der von außen gesteuert werden kann, oft über eine Konfigurationsdatei oder eine Verwaltungsschnittstelle.
- Code-Ausführung: Der Code für das neue Feature wird ausgeführt, wenn der Flag-Status "an" ist. Wenn das Flag "aus" ist, wird der Code umgangen und das alte Verhalten (oder kein Verhalten) bleibt bestehen.
Auf diese Weise können Teams neuen Code für die Produktion bereitstellen, aber die Funktionen so lange verbergen, bis sie zur Veröffentlichung bereit sind, ohne dass zusätzlicher Code bereitgestellt werden muss.
Denken Sie über eine Feature Flag-Rollout-Strategie nach? Jede Feature Flag-Rollout-Strategie dient unterschiedlichen Zwecken und kann je nach Bedarf kombiniert werden.
- Schrittweise Einführung: Schrittweise Freigabe zur Erhöhung des Benutzeranteils
- Canary-Tests: Begrenzte Freigabe für eine kleine, repräsentative Gruppe
- Gezielte Einführung: Freigabe für bestimmte Nutzersegmente (z. B. nach Standort)
- Beta-Tests: Freigabe für Opt-in-Benutzer für Feedback
- Dunkle Markteinführung: In der Produktion aktivieren, aber vor den Benutzern verbergen
- Prozentuale Rollouts: Schrittweise Erhöhung der Benutzerpräsenz
Feature Flags - Anwendungsfälle und Vorteile
Es gibt viele Vorteile, wenn Sie das Experimentieren mit Produkten und Feature Toggles in Ihren Release-Prozess integrieren. Im Folgenden finden Sie einige häufige Anwendungsfälle:
-
Testen in der Produktion
Feature Flags ermöglichen es den Entwicklungsteams, neue Funktionen in der Produktion zu testen und gleichzeitig das Risiko einer mangelhaften Veröffentlichung zu mindern, indem sie eine Möglichkeit bieten, die Funktion bei Bedarf über einen Kill Switch schnell zurückzunehmen. Da es oft unmöglich ist, die Produktionsumgebung im Staging vollständig zu simulieren, können Sie mit Feature Toggles die Funktionalität neuer Features in der realen Welt validieren und gleichzeitig das Risiko minimieren. Feature Flags fördern auch die trunk-basierte Entwicklung, wodurch Merge-Konflikte durch abweichende Codepfade vermieden werden können. -
Kanarienvogel-Versionen
Ein weiterer Anwendungsfall für Feature Toggles ist, dass ein Team eine neue Funktion an einer Untergruppe von Endbenutzern testen kann, um zu sehen, wie sie sich verhält, bevor sie einem breiteren Publikum zur Verfügung gestellt wird. Canary-Tests tragen dazu bei, das Risiko zu begrenzen, das mit der Einführung einer Funktion für die gesamte Benutzerbasis verbunden ist, und ermöglichen es Ihnen, eine Funktion durch einfaches Ein- oder Ausschalten schnell wieder rückgängig zu machen, ohne einen weiteren Bereitstellungszyklus durchlaufen zu müssen. -
Kürzere Release-Zyklen
Mit Feature Flags kann ein Team das Verhalten eines Systems ändern, ohne störende Codeänderungen am Live-Code vorzunehmen. Ein großer Vorteil von Feature Flags besteht also darin, dass sie im Entwicklungsprozess ganz einfach eingesetzt werden können. Feature Flags entkoppeln das Feature Lifecycle Management von der Bereitstellung des Codes, so dass sich das Entwicklungsteam auf andere Aufgaben konzentrieren kann. -
Rollback / Kill Switch
Das Aktivieren oder Deaktivieren neuer Funktionen mithilfe von Feature Flags ist so einfach wie das Ein- oder Ausschalten oder das Bearbeiten einer Konfigurationsdatei - im Gegensatz zum erneuten Deployment und einem langwierigen Code-Push. Wenn in einer neuen Funktion ein Fehler entdeckt wird, kann diese sofort zurückgesetzt werden, ohne dass Sie Ihren Quellcode anfassen müssen. Dies ist vor allem für Entwickler von Mobile Apps von Vorteil, die mit Hilfe von Feature Flags neue Funktionen freigeben oder zurücknehmen können, ohne den langwierigen Prüfprozess im App Store durchlaufen zu müssen. -
Server-seitige A/B-Tests
Entwickler können mit Feature Flags A/B-Tests implementieren, indem sie eine Funktion für die Hälfte eines Nutzersegments aktivieren und für die andere Hälfte deaktivieren, um zu sehen, wie die beiden bei einer bestimmten Kennzahl (z.B. App-Nutzung oder Käufe) abschneiden. Da der Test im Backend durch Code implementiert wird, gibt es keine Latenz, verglichen mit dem, was man bei einem über clientseitiges JavaScript implementierten Test erleben könnte.
Feature Flags ermöglichen es auch Produktmanagern und anderen Nicht-Ingenieuren, A/B-Tests für verschiedene Funktionen innerhalb von Produkten oder Systemen durchzuführen, ohne dass ein Code implementiert werden muss. Die Tests können auch auf bestimmte Segmente Ihrer Nutzerbasis ausgerichtet werden, zum Beispiel auf Nutzer, die in einem bestimmten Land leben oder einem bestimmten Nutzerprofil entsprechen. Führende Technologieunternehmen wie Google, Facebook, Amazon und Netflix führen häufig A/B-Tests neuer Funktionen durch, bevor sie diese für ihre gesamte Benutzerbasis bereitstellen. -
Feature Gating
Feature Flags können verwendet werden, um ein gezieltes Targeting von Features für eine bestimmte Untergruppe Ihrer Benutzer durchzuführen. Dies kann für A/B-Testing von Funktionen mit bestimmten Segmenten Ihres Publikums von großem Nutzen sein, aber auch, um Funktionen nur für eine Untergruppe Ihrer Benutzer freizugeben, z. B. indem Sie Benutzern in Ihrer Enterprise-Stufe Zugang zu Funktionen gewähren, die in den unteren Stufen nicht verfügbar sind. Durch die Implementierung von Feature Gating mit Hilfe von Flags können Sie in Zukunft problemlos Funktionen für eine größere Anzahl von Benutzern freigeben, wenn sich Ihr Produkt weiterentwickelt. -
Kontinuierliche Bereitstellung
Ein weiterer großer Vorteil von Feature Flags ist ihre Fähigkeit, schnell zu lernen. Feature Flags ermöglichen es Unternehmen, Software kontinuierlich und schneller an ihre Benutzer zu liefern und bereitzustellen. Die Verwendung von Feature Flags ermöglicht es Unternehmen, schrittweise Feature-Rollouts durchzuführen, Fehler im Code ohne erneute Bereitstellung zu beheben, einen schlankeren Entwicklungszyklus zu erleben und Rollbacks von Code einfacher durchzuführen. -
Feature Flags Entwicklungsprozess
Die Implementierung von Feature Flags in Ihrem Code muss kein komplizierter Prozess sein. Mit einem Feature Flag-Service wie Optimizely müssen Sie lediglich das SDK installieren, die Flags innerhalb der Feature Flag-Plattform erstellen und dann neue Features oder Codepfade in Ihrem Code in die Flags einbinden.
Das ist alles, was Sie brauchen, um Feature Flags zu aktivieren, und nun kann das neue Feature über eine Konfigurationsdatei oder sogar über eine visuelle Schnittstelle innerhalb der Feature Flagging Plattform ein- oder ausgeschaltet werden. Auf diese Weise können auch nicht-technische Benutzer, wie z.B. Produktmanager, Experimente mit neuen Funktionen durchführen oder Funktionen abschalten, ohne sich dabei ausschließlich auf das Entwicklungsteam verlassen zu müssen.
Sobald Feature Flags in Betrieb sind, ist ein weiterer wichtiger Punkt das Feature Flag Management. Um technische Schulden zu vermeiden, die dadurch entstehen, dass Feature Flags im Code verbleiben, nachdem sie ihren Zweck erfüllt haben, ist es wichtig, Feature Flags in regelmäßigen Abständen zu überprüfen und diejenigen zu entfernen, die nicht mehr benötigt werden. Dieser Prozess kann mit vielen Feature Flags-Plattformen automatisiert werden. -
Feature Flags & Continuous Delivery (kontinuierliche Lieferung)
Continuous Delivery 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 Benutzern 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 wichtige Funktion bei der Implementierung 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 Feature Flags Management kann ein Team seine Features in großem Umfang einführen, kontrollieren und messen.
Lebenszyklus von Feature Flags
1. Erstellen und konfigurieren Sie Feature Flags:
- Definieren Sie das Flag in Ihrer Codebase
- Richten Sie das Flag in Ihrem Feature Management System ein
- Konfigurieren Sie die ersten Regeln und Targeting-Kriterien
2. Bereitstellen und Aktivieren von Flags in der Produktion:
- Geben Sie den Code mit dem neuen Feature Flag für die Produktion frei
- Aktivieren Sie das Flag für anfängliche Zielgruppen oder einen Prozentsatz der Benutzer
3. Überwachen Sie die Leistung und sammeln Sie Analysen:
- Verfolgen Sie die Benutzerinteraktionen mit der neuen Funktion
- Analysieren Sie die Auswirkungen auf die wichtigsten Kennzahlen (z.B. Conversion Rates, Benutzerbindung)
- Sammeln Sie Feedback von Nutzern, die mit der Funktion konfrontiert wurden.
4. Setzen Sie Flaggen ab und entfernen Sie sie, wenn sie nicht mehr benötigt werden:
- Sobald eine Funktion vollständig freigegeben oder veraltet ist, entfernen Sie das Flag
- Bereinigen Sie den zugehörigen Code, um technische Schulden zu vermeiden.
- Aktualisieren Sie die Dokumentation, um die Änderungen zu berücksichtigen.
Feature Flags in Optimizely Feature Experimentation
Produkt- und Entwicklungsteams können jetzt das Feature Management von Optimizely Feature Experimentation nutzen, um Feature Flags zu implementieren . Dies ermöglicht die gleiche Flexibilität, auf die sich Produktteams bei ihren Experimentierprogrammen verlassen haben, um Hypothesen zu validieren, bevor sie neue Produkte, Funktionen und Erlebnisse für alle einführen.
Beide Teasm können nahtlos mit den Praktiken der kontinuierlichen Integration und Continuous Delivery zusammenarbeiten. Ganze Unternehmen können von den schnelleren Entwicklungszyklen und den Praktiken des Feature Managements wie Feature Flags oder Toggles zur Risikominderung profitieren.
Optimizely Kunden, dieserverseitig experimentieren, können in die Fußstapfen der weltweit führenden Softwareunternehmen (wie Amazon, Google und Facebook) treten, um ihre Erlebnisse zu entwickeln, indem sie A/B-Tests durchführen, um das bestmögliche Erlebnis zu finden, und dann Feature Flags verwenden, um das Rollout zu steuern.
Indem Sie zunächst A/B-Tests mit einem kleinen Segment des Datenverkehrs durchführen, kann jedes Team die beste Version einer neuen Funktion ermitteln oder messen, ob die neue Funktion wirklich eine Verbesserung darstellt.
Optimizely bietet auch kostenlose Feature Flags über Optimizely Rollouts an, eine völlig kostenlose Lösung (im Gegensatz zu Wettbewerbern wie LaunchDarkly) für kontrollierte Feature-Releases in Ihrem Produkt oder Ihrer App. Rollouts bietet eine Reihe von SDKs auf Github für einige der beliebtesten Programmiersprachen und Frameworks, darunter Node, Python, Ruby, Go, React, Swift und C#.