Feature Flags
Table of Contents
Was sind Feature Flags?
Feature Flags (auch bekannt als Feature Toggles oder Feature Switches) sind eine Technik der Softwareentwicklung, mit der bestimmte Funktionen während der Laufzeit ein- und ausgeschaltet werden können, ohne dass neuer Code bereitgestellt werden muss. Das ermöglicht eine bessere Kontrolle und mehr Experimente über den gesamten Lebenszyklus von Funktionen.
Die Idee hinter Feature Flags ist es, bedingte Funktionsverzweigungen in den Code einzubauen, um die Logik jeweils nur für bestimmte Gruppen von Nutzern verfügbar zu machen. Wenn die Flagge "an" ist, wird der neue Code ausgeführt, wenn die Flagge "aus" ist, wird der Code übersprungen.
Feature Flags sind eine Erfolgsmethode(n) in DevOps, die häufig in verteilten Versionskontrollsystemen eingesetzt werden.
Feature Flags Use-Cases & Vorteile
Es gibt viele Vorteile, wenn du Produktexperimente und Feature Toggles in deinen Release-Prozess integrierst. Im Folgenden findest du einige gängige Use-Cases:
Testen in der Produktion
Feature Flags ermöglichen es den Entwicklungsteams, neue Funktionen in der Produktion zu testen und gleichzeitig das Risiko einer schlechten Veröffentlichung zu mindern, indem sie eine Möglichkeit bieten, die Funktion bei Bedarf über einen Kill Switch schnell wieder zurückzunehmen. Da es oft nicht möglich ist, die Produktionsumgebung im Staging vollständig zu simulieren, ermöglichen es Feature-Toggles, die Funktionalität neuer Feature-Releases in der realen Welt zu überprüfen und gleichzeitig das Risiko zu minimieren. Feature Flags fördern außerdem eine trunk-basierte Entwicklung, die Merge-Konflikte durch abweichende Codepfade verhindert.
Kanarienvogel-Versionen
Ein weiterer Use-Case für Feature-Toggles ist, dass ein Team eine neue Funktion an einer Untergruppe von Endnutzern testen kann, um zu sehen, wie sie sich verhält, bevor sie an ein breiteres Publikum ausgerollt 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 dir, eine Funktion schnell zurückzunehmen, indem du sie einfach ein- oder ausschaltest, anstatt einen weiteren Bereitstellungszyklus zu durchlaufen.
Schnellere 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 ist daher, dass sie sich im Entwicklungsprozess einfach einsetzen lassen. Feature Flags entkoppeln die Verwaltung des Feature-Lebenszyklus von der Bereitstellung des Codes und geben dem Entwicklungsteam mehr Zeit für andere Aufgaben.
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, anstatt ein erneutes Deployment und einen langwierigen Code-Push zu erfordern. Wenn ein Fehler in einer neuen Funktion entdeckt wird, kann er sofort rückgängig gemacht werden, ohne dass du deinen Quellcode anfassen musst. Dies ist vor allem für Entwickler/innen 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.
Serverseitige A/B-Tests
Entwickler/innen können A/B-Tests mit Feature Flags durchführen, 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 Latenzzeiten, wie es bei einem Test mit JavaScript auf der Client-Seite der Fall sein 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 dafür ein Code benötigt wird. Die Tests können auch auf bestimmte Segmente deiner Nutzerbasis ausgerichtet werden, z. B. 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 Nutzerbasis bereitstellen.
Feature Gating
Feature Flags können dazu verwendet werden, Features gezielt für eine bestimmte Untergruppe deiner Nutzer/innen zu implementieren. Das kann für A/B-Tests mit bestimmten Nutzergruppen nützlich sein, aber auch, um Funktionen nur für eine bestimmte Nutzergruppe freizugeben, z. B. um Nutzern der Enterprise-Stufe Zugang zu Funktionen zu gewähren, die in den unteren Stufen nicht verfügbar sind. Wenn du das Feature Gating mit Hilfe von Flags einführst, kannst du in Zukunft problemlos weitere Funktionen für deine Nutzer/innen bereitstellen, wenn sich dein 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, ihre Software kontinuierlich und schneller an ihre Nutzer/innen zu verteilen. Durch den Einsatz von Feature Flags können Unternehmen schrittweise neue Funktionen einführen, Fehler im Code ohne erneute Bereitstellung beheben, einen schlankeren Entwicklungszyklus erleben und Rollbacks des Codes einfacher durchführen.
Entwicklungsprozess für Feature Flags
Die Implementierung von Feature Flags in deinem Code muss kein komplizierter Prozess sein. Mit einem Feature Flags-Dienst wie Optimizely musst du nur das SDK installieren, die Flags in der Feature Flags-Plattform erstellen und dann neue Features oder Codepfade in deinem Code in die Flags einbinden.
Das ist alles, was du brauchst, um Feature Flags zu aktivieren, und jetzt 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/innen, wie z. B. Produktmanager/innen, neue Funktionen ausprobieren oder abschalten, ohne sich allein auf das Entwicklungsteam verlassen zu müssen.
Sobald die Feature Flags aktiv sind, ist ein weiterer wichtiger Punkt die Verwaltung der Feature Flags. Um zu vermeiden, dass Feature Flags im Code verbleiben, nachdem sie ihren Zweck erfüllt haben, ist es wichtig, sie regelmäßig zu überprüfen und nicht mehr benötigte Flags zu entfernen. Dieser Prozess kann mit vielen Feature Flags-Plattformen automatisiert werden.
Feature Flags und kontinuierliche Bereitstellung
Der einflussreiche Softwareentwickler Martin Fowler hat mit Continuous Delivery eine Softwareentwicklungsdisziplin geschaffen, bei der Software jederzeit in Produktion gegeben werden kann. Sie wurde von führenden Softwareunternehmen auf der ganzen Welt übernommen, von deren Teams heute erwartet wird, dass sie ihrer Benutzerbasis schnell stabile und fehlerfreie Software liefern.
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.
Feature Flags in Optimizely
Produkt- und Entwicklungsteams können jetzt das Feature Management von Optimizely Full Stack 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.
Jetzt können diese Experimente nahtlos mit den Praktiken der kontinuierlichen Integration und der kontinuierlichen Bereitstellung zusammenarbeiten, die von den modernen Entwicklungsteams eingesetzt werden. Beide Teams - und ganze Unternehmen - können von den schnelleren Entwicklungszyklen und Feature-Management-Praktiken wie Flags oder Toggles zur Risikominimierung profitieren.
Optimizely-Kunden, die serverseitige Experimente durchführen, können in die Fußstapfen der weltweit führenden Softwareunternehmen (wie Amazon, Google und Facebook) treten, um ihre Benutzererlebnisse zu entwickeln, indem sie A/B-Tests durchführen, um das bestmögliche Erlebnis zu finden, und dann Feature Flags verwenden, um den Rollout zu steuern.
Durch A/B-Tests mit einer kleinen Gruppe von Nutzern 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 deinem Produkt oder deiner 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#.