Feature Flags: Was ist das und wie verwendet man sie?
Feature Flags sind mittlerweile ein unverzichtbares Werkzeug für DevOps- und Softwareentwicklungsteams, um Features schnell und sicher zu veröffentlichen. Sie können für eine Vielzahl von Zwecken eingesetzt werden und sind unter verschiedenen Namen bekannt, von Feature Toggles bis Feature Flippers. Das Kernkonzept bleibt jedoch dasselbe.
In diesem Leitfaden erfährst du, was Feature Flags sind, warum und wie sie heute von Teams verwendet werden, wie sie implementiert werden und welche Vor- und Nachteile sie mit sich bringen.
Was sind Feature Flags?
Feature Flags sind ein Softwareentwicklungstool, mit dem Funktionen ein- oder ausgeschaltet werden können, um sicher in der Produktion zu testen. Dies geschieht durch Trennung des Code Deployment vom Feature Release.
Ein Feature Flag kann von einer einfachen If-Anweisung bis hin zu komplexeren Entscheidungsbäumen reichen, die auf verschiedenen Variablen basieren.
Es gibt viele Arten von Feature Flags, die je nach ihrer Dynamik und Lebensdauer kategorisiert sind und unterschiedliche Zwecke erfüllen.
Kurzlebige vs. langlebige Feature Flags
Wenn wir von Langlebigkeit sprechen, beziehen wir uns auf Feature Flags, die entweder für eine kurze Zeit in deinem System verbleiben sollen, während andere Flags jahrelang bestehen bleiben können.
Zum Beispiel können Feature Flags kurzlebig sein, um vorübergehend neue Änderungen bereitzustellen und in der Produktion zu testen. Andere Flags, wie z. B. Kill Switches, bleiben dagegen langfristig in deinem System. Daher ist es wichtig, verschiedene Feature Toggles oder Flags je nach ihrer Einsatzdauer zu verwalten.
Erfahre mehr: Kurzlebige und langlebige Feature Flags.
Dynamische vs. statische Feature Flags
In Bezug auf die Dynamik, also wie oft ein Flag in seiner Lebensdauer modifiziert werden muss, gibt es zwei Kategorien von Feature Flags:
- Dynamisch – Wert kann während der Laufzeit geändert werden.
- Statisch – ändern sich nur durch tatsächliche Codeänderungen oder Änderungen an Konfigurationsdateien.
Um mehr über die Unterschiede zwischen statischen und dynamischen Flags und darüber zu erfahren, wo sie je nach Kategorie gespeichert werden sollten, lies unseren Artikel zu Best Practices über die Speicherung von Feature Flags.
Wir können Feature Flags weiter in verschiedene Kategorien von Toggles unterteilen, die unterschiedlich verwaltet werden sollten. Mit anderen Worten: Du musst verschiedene Feature Toggles oder Flags je nach ihrem Einsatz unterschiedlich handhaben. Die Hauptkategorien sind:
- Release Toggles
- Experimentelle Toggles
- Operationale Toggles
- Berechtigungstoggles
Für mehr Details zu diesen verschiedenen Kategorien von Feature Toggles schau dir diesen Artikel an.
Warum soll ich Feature Flags verwenden?
Feature Flags können in einer Vielzahl von Anwendungsfällen eingesetzt werden, von einfachen bis hin zu fortgeschritteneren Verwendungen, da Teams wie Engineering-, DevOps- und Produktionsteams in Organisationen deren Vorteile in der Software-Release-Strategie erkannt haben.
Release jederzeit möglich
Mit Feature Flags kannst du jederzeit deployen, indem du die Code-Bereitstellung von der Veröffentlichung trennst. Dadurch werden nur bestimmte Teile deiner Funktion aktiviert, während unvervollständige Änderungen deaktiviert und für die Nutzer unsichtbar gemacht werden.
In der Produktion testen
Feature Flags bieten eine sichere, weniger riskante Methode, um in der Produktion mit echten Nutzern zu testen. Dies hilft dir, wertvolles Feedback von den relevantesten Nutzern zu erhalten und sicherzustellen, dass deine Produkte von hoher Qualität sind. Feature Flags ermöglichen es dir somit, deine Funktionen in realen Umgebungen schneller als je zuvor A/B zu testen.
Progressive Delivery
Wenn du eine Funktion bereit hast, kontrollierst du, welche Teilmenge von Nutzern Zugriff auf diese Funktion hat, durch schrittweise Rollouts der Veröffentlichungen. Progressive Delivery kann durch Techniken wie Canary Releases oder Ring Deployments umgesetzt werden.
User Targeting
Feature Flags geben dir die Macht, deine Nutzer auszuwählen. Es gibt viele Methoden, um Nutzer mit Feature Flags auszuwählen, je nachdem, wie du deine Ziele definiert hast. Zum Beispiel kannst du eine Gruppe von Nutzern für einen frühen Zugriff auf eine Funktion auswählen oder sie freiwillig durch Beta-Tests teilnehmen lassen. Zu den häufigsten Techniken für den schrittweisen Rollout deiner Funktionen durch Nutzersegmentierung gehören Ring Deployment, Canary Testing und Dark Launch. Ebenso wie du bestimmten Nutzern Zugriff gewähren kannst, kannst du auch bestimmte Nutzer blockieren, z. B. aus einem bestimmten Land oder einer bestimmten Organisation.
Kill Switch
Manchmal kann es beim Testen in der Produktion vorkommen, dass eine Funktion nicht wie erwartet funktioniert. Feature Flags können als Kill Switch verwendet werden, um diese fehlerhaften Funktionen vorübergehend für Nutzer auszuschalten, bis das Problem analysiert und behoben ist. Dies ist auch nützlich, um „sunsetting“ Features zu verwalten, die seit langem in deinem System sind und nicht mehr verwendet werden, und daher rausgenommen werden müssen, um technische Schuld zu vermeiden.
Herausforderungen von Feature Flags
Man kann nie genug von etwas Gutem haben, aber nichts ist perfekt. Es gibt Zeiten, in denen du auf einige Stolpersteine beim Einsatz von Feature Flags stoßen könntest. Während ihre Verwendung empfohlen wird und große Vorteile für den Workflow deines Teams bringt, solltest du vorsichtig sein, insbesondere wenn du auf eine Feature-Flagging-Plattform in-house angewiesen bist.
1. Komplexität
Mit der Zeit können die Anwendungsfälle von Feature Flags komplex werden, insbesondere bei internen Systemen, denen die notwendige Raffinesse fehlt, um Produkte zu unterstützen.
2. Unordentlicher Code & Koordination
Das Ansammeln von Feature Flags in deinem System kann zu unordentlichem Code führen. Verstreute Bedingungsanweisungen stören den Systemfluss und machen es schwierig, Probleme während des Debuggens zu erkennen.
3. Technische Schuld
Wenn veraltete, nicht mehr verwendete Flags in deinem System verbleiben, kann dies letztlich zur Ansammlung technischer Schulden führen. Flags müssen daher bereinigt werden, sobald sie verwendet und nicht mehr aktiv sind.
Es ist unbestreitbar, dass Feature Flags zu einer Notwendigkeit geworden sind, um neue Funktionen schnell und sicher zu veröffentlichen. Ein effizientes Feature-Management-System kann helfen, die Release-Prozesse zu optimieren. Die folgenden Punkte zeigen nur einige der Möglichkeiten, wie sie Wert für deine Software-Entwicklungs- und Release-Prozesse bringen können.
1. Continuous Delivery
Feature Flags ermöglichen es Teams, trunk-basiertes Entwickeln ohne das Risiko von langlebigen Branches und der gefürchteten Merge Hell zu praktizieren.
2. Erhöhung der Produktionsrate
Feature Flags ermöglichen risikofreies Testen in der Produktion, was zu schnelleren Feature Releases für Nutzer und höheren Qualitätsergebnissen mit weniger Bugs führt.
3. Kontinuierliches Experimentieren
Feature Flags ermöglichen es dir, deine Änderungen häufig zu validieren, indem du sie an einer Teilmenge von Nutzern testest und die Leistung basierend auf den gewählten KPIs misst.
4. Risikoreduzierung
Durch die Entkopplung von Deployment und Release und das Veröffentlichen an eine kleine Anzahl von Nutzern kannst du Fehler entdecken und die Funktion bei Problemen während des Tests einfach durch Deaktivieren des Feature Flags in der Produktion zurückrollen.
5. Feature Rollback
Feature Flags ermöglichen es dir, eine Funktion bei Fehlfunktionen durch einen Kill Switch zu deaktivieren.
6. Früher Zugang
Feature Flags ermöglichen es, Funktionen für Early Adopters zugänglich zu machen, die wertvolles Feedback zur Produktverbesserung liefern. Dies ist ideal für riskante Releases, die du nicht sofort mit einem breiteren Publikum teilen möchtest.
7. Umgehung der App-Store-Verifizierung
Mit Feature Flags kannst du neue Releases an kleineren Segmenten deines Publikums testen, ohne auf die Genehmigung des App Stores warten zu müssen (was zeitaufwändig sein kann).
Feature Flags in der Softwareentwicklung integrieren
Software durchläuft in der Regel eine Reihe von Stufen oder Phasen, um qualitativ hochwertige Software durch den Softwareentwicklungslebenszyklus (SDLC) zu produzieren. Die Phasen, die integriert werden, hängen von der verwendeten Methodik ab, aber die grundlegenden Prinzipien des SDLC sind mehr oder weniger gleich. Für weitere Informationen zum Softwarelebenszyklus kannst du unseren Artikel über die verschiedenen Phasen des SDLC in konventionellen und agilen Methoden lesen. Basierend auf den oben genannten Aspekten müssen Teams und Organisationen zu Beginn eines jeden Softwareentwicklungsprozesses entscheiden, welche Methodik sie anwenden werden, um qualitativ hochwertige Produkte sicherzustellen. Waterfall und Agile sind zwei der beliebtesten Methoden, wobei Agile schnell gegenüber Waterfall an Bedeutung gewinnt.
- Die Waterfall-Methode ist ein traditionelles Modell. Sie verfolgt einen linearen Ansatz in der Softwareentwicklung, bei dem jede Phase nach unten, wie bei einem Wasserfall, zur nächsten übergeht; jede Stufe muss abgeschlossen sein, bevor die nächste beginnt.
- Die Agile-Methode hingegen folgt einem teamorientierten Ansatz in der Entwicklung. Anstatt das gesamte Projekt im Voraus zu planen, wird die Entwicklung in kleine Batches aufgeteilt, die in Phasen abgeschlossen werden. Das Besondere an der agilen Entwicklung ist, dass sie den Fokus auf den Nutzer legt, da sie auf einem sehr hohen Maß an Kundenbeteiligung während des gesamten Projekts basiert.
Die Integration von Feature Flags in deinen Release-Prozess unterscheidet eine agile Roadmap von einer Waterfall Roadmap und hilft dir, dich auf die wesentlichen nutzerorientierten Aktivitäten zu konzentrieren. Lies weiter, um herauszufinden, warum eine agile Methodik der richtige Weg für die moderne Softwareentwicklung ist und warum du Feature Flags in deine agile Roadmap einbinden solltest, um deine Produkte in die richtige Richtung zu lenken. Wenn es um Release-Management-Strategien geht, gibt es verschiedene Strategien zur Auswahl, je nach deinen Anwendungsfällen.
- Trunk-basiertes Development ist ein Branching-Modell, bei dem Entwickler in einem einzigen Branch zusammenarbeiten und kleinere Änderungen häufiger vornehmen. Die Idee hinter dieser Praxis ist es, langfristige Branches zu vermeiden, die zur Merge Hell führen können. Diese Strategie ist in der Regel gut geeignet, um Features schnell herauszubringen.
- Feature Branching hingegen ist, wenn Entwickler separat an einem Branch arbeiten und ihre Änderungen nach Abschluss in den Hauptbranch (Mainline) zusammenführen. Dies ist eine effiziente Methode, um große Projekte mit vielen Entwicklern, die an spezifischen Features arbeiten, zu verwalten.
Feature Flags: Best Practices
Es gibt viele Praktiken, die beim Arbeiten mit Feature Flags beachtet werden sollten. Die folgenden Best Practices solltest du in Betracht ziehen und umsetzen, um deine Arbeit mit Feature Flags so reibungslos wie möglich zu gestalten:
1. Zugriffskontrolle
Richte einen Login ein, um zu wissen, welche Änderungen von wem vorgenommen wurden. Das ist besonders wichtig, um die Abhängigkeit zwischen Produkt- und Engineering-Teams zu verringern und die Produktivität zu verbessern, da mehr Transparenz herrscht, insbesondere bei der Einführung neuer Änderungen.
2. Verwendung eines standardisierten Benennungssystem
Ohne ein Benennungskonzept könnten die Teammitglieder anfangen, Flags mit denselben Namen zu benennen und die Flags könnten verwechselt werden. Dies könnte dazu führen, dass dein Team das falsche Flag aktiviert, was zu möglichen Störungen in deinem System führen kann.
3. Unterschiedliche Verwaltung verschiedener Toggles
Da es verschiedene Arten von Flags gibt, wäre es unsinnig, beispielsweise ein Release Flag und einen Kill Switch auf dieselbe Weise zu verwalten und umzusetzen.
4. Regelmäßige Bereinigung der Flags
Du solltest sicherstellen, dass du regelmäßig Flags aus deinem System entfernst, die nicht mehr verwendet werden. Einige Flags sind nur für kurze Zeit gedacht und haben einen einmaligen Zweck, daher müssen diese aus deinem System entfernt werden.
Auswahl einer Feature-Flagging-Plattform
Sobald du dich entschieden hast, eine Drittanbieter-Lösung zu nutzen, kann es eine Herausforderung sein, die beste Feature-Flag-Management-Plattform für deine Bedürfnisse zu finden. Besuche unseren Abschnitt zum Vergleich von Feature-Flag-Diensten, um zu sehen, wie sich AB Tasty im Vergleich zu anderen Lösungen schlägt.
AB Tasty’s Feature Experimentation und Experience Rollouts könnten genau die Lösung sein, die du suchst. AB Tasty wurde im Forrester New Wave™: Feature Management & Experimentation, Q2 2021 Bericht als führend eingestuft.
AB Tasty ermöglicht dir nicht nur, Funktionen ein- und auszuschalten, sondern gibt dir auch die volle Kontrolle über deine Feature Releases, indem du deine Funktionen in Flags verpackst und sie basierend auf den spezifischen Flag-Werten, die du verschiedenen Benutzersegmenten zuweist, ausrollst. So kannst du fundierte Entscheidungen gemäß den von dir gewählten Metriken und KPIs treffen.
Wenn du weitere Informationen zum Einstieg in unsere serverseitige Funktionalität benötigst, sieh dir unsere Dokumentation an, um loszulegen.
So implementierst du Feature Flags
Eine typische Implementierung von Feature Flags basiert auf (1) einem Management Service, der das Flag definiert, (2) einer Laufzeitabfrage, um den Wert des Flags herauszufinden, und (3) einer If-else-Anweisungsstruktur.
Es gibt viele Möglichkeiten, Feature Flags zu implementieren. Der einfachste Weg und oft der Ausgangspunkt ist die direkte Verwendung von If-else-Anweisungen in deinem Code.
Du kannst auch auf Open-Source-Projekte und viele Bibliotheken zurückgreifen, die für deine bevorzugte Programmiersprache verfügbar sind. Lies mehr über die Top 10 Feature Flag-bezogenen Projekte auf GitHub.
Jedoch gehen Feature Flags über einfache boolesche Zustände hinaus zu komplexeren logischen Aussagen. Wenn du dich also mit fortgeschritteneren Anwendungsfällen beschäftigen möchtest, benötigst du komplexere Feature Flag Management Tools.
Bevor du dich auf deine Feature-Flag-Implementierungsreise begibst, ist es wichtig, Folgendes zu beachten:
- Probleme identifizieren: Es ist wichtig, deine Ziele und die Probleme, die du im Softwareentwicklungsprozess und in der Produktion angehen möchtest, zu kennen.
- Anwendungsfälle bestimmen: Überlege dir, warum du Feature Flags einsetzen möchtest und wer sie in deiner Organisation neben den Entwicklern verwenden wird.
- Selbst entwickeln oder kaufen: Es gibt viele Faktoren, die du bei der Entscheidung berücksichtigen musst, ob es besser ist, ein Feature-Flag-Management-System selbst zu entwickeln oder eine bestehende Lösung zu kaufen.
Feature Flags FAQs
Was sind Feature Flags?
Feature Flags sind eine Praxis in der Softwareentwicklung, deren Zweck es ist, Funktionen ein- oder auszuschalten, ohne neuen Code deployen zu müssen. Sie ermöglichen es, Code Deployment und Feature Release zu trennen.
Warum sollte man Feature Flags verwenden?
Feature Flags ermöglichen Continuous Delivery, indem sie Teams erlauben, trunk-basiertes Entwickeln ohne die Risiken von langfristigen Branches und der gefürchteten Merge Hell zu praktizieren. Sie erhöhen die Entwicklungsgeschwindigkeit, indem sie Tests in der Produktion vereinfachen und es ermöglichen, Änderungen kontinuierlich an einer Teilmenge von Nutzern zu validieren, während Risiken gemindert werden. Sie werden nicht nur von Engineering Teams, sondern auch von QA- und Produk-Teams sowie von Operations verwendet.
Was ist der Unterschied zwischen Feature Toggles und Feature Flags?
Feature Flags werden oft als Feature Toggles bezeichnet und umgekehrt. Feature Toggles sich quasi von einem einfachen Ein/Aus-Schalter zu komplexeren Anwendungsfällen entwickelt, weshalb der Begriff Feature Flags passender geworden ist.
Ist Feature Flagging dasselbe wie Remote Config?
Remote Config kann durch Feature Flags implementiert werden. Mit Remote Config können Funktionen, die deiner mobilen App hinzugefügt werden, in einem Feature Flag verpackt und aus der Ferne ein- oder ausgeschaltet werden, um zu entscheiden, wer die neuen Funktionen sehen darf.
Unterscheiden sich Feature Flags von Feature Branches?
Ein Feature Branch ist, wenn jeder Entwickler eine Kopie des Codebases in den Trunk in einen Branch erstellt, um dort Änderungen vorzunehmen und diese zurück in den Trunk zu mergen, sobald sie abgeschlossen sind. Erfahre mehr über Git Branching-Strategien.
Feature Branching wird manchmal mit Feature Flags kombiniert, insbesondere wenn ein Entwickler seine Änderungen noch nicht abgeschlossen hat, aber das Release dennoch stattfinden kann. Feature Flags erlauben es, diese unfertigen Änderungen auszuschalten, während fertige Funktionen ohne Verzögerung veröffentlicht werden können.
Sind Feature Flags A/B-Tests?
In gewissem Maße ja. Beide helfen dabei, sicherer zu veröffentlichen. Mit einem A/B-Test kannst du Experimente durchführen und entscheiden, welche Version deiner Website deinen Besuchern angezeigt wird. Du kannst jedoch auch A/B-Tests auf Features deiner Website mithilfe von Feature Flags durchführen. Hier kannst du zwei Varianten deines Features einer Teilmenge von Nutzern präsentieren und analysieren, wie sich die Benutzererfahrung mit dem neuen Feature unterscheidet.
Das heißt, A/B-Testing ist nicht die einzige Testmethode, die du mit Feature Flags implementieren kannst – sie helfen dir zwar bei A/B-Tests, aber ihre Verwendungsmöglichkeiten gehen darüber hinaus.