Feature Flags sind äußerst nützlich. Developer können sich mit ihnen von Merge-Konflikten in Git befreien, Bleeding-Edge-Funktionen ausrollen, Bugs behandeln und viele Stunden Compiler-Zeit einsparen.
Ein einfaches Beispiel-Skript, um die Verwendung von Feature Flags zu verdeutlichen.
(Bild: Lang)
Feature Flags, bisweilen auch (noch) Feature Toggles genannt, sind ein wunderbares Konzept zum Ein- und Ausschalten von Features zur Laufzeit eines Services. Das klingt vielleicht etwas abstrakt, ist aber im Grunde genauso nützlich wie simpel umzusetzen.
In letzter Zeit hört man von Feature Flags vor allem im Zusammenhang mit Trunk Based Development (TBD), einem bestimmten Git-Workflow, der eine Alternative zum etablierten Feature-Branching sein kann. Sie finden bei uns auch eine Übersicht der wichtigsten Git-Workflows sowie eine Vertiefung zum Thema TBD.
Hier daher nur die Kurzfassung: Statt für jedes Feature einen eigenen Branch anzulegen, setzt TBD auf nur einen einzigen Branch. Auf diesem Weg lassen sich Probleme und Arbeitslasten durch Merge-Konflikte reduzieren. Stattdessen werden Feature Flags genutzt, über die unfertige Funktionen schlicht deaktiviert werden. Für die User macht es keinen Unterschied, ob sie eine Funktion nicht sehen, weil der Branch nicht ins Release gewandert ist oder weil das Feature einfach nur nicht sichtbar ist.
Schlankere Entwicklung ist aber nur ein möglicher Vorteil. Da Feature Flags zur Laufzeit ansetzen, lassen sich zum Beispiel experimentelle Features „mal eben“ ausprobieren oder verbuggte Features deaktivieren, ohne diese gleich Code-seitig beheben oder ein neues Release bauen zu müssen.
Die Umsetzung kann dabei simpel sein: Ein externes Dokument oder eine Datenbank enthält eine Liste mit Features und einem zugehörigen Status (aktiv/inaktiv), der Service liest diese Daten ein und im Code werden dann Features gemäß Status ausgeliefert oder nicht. Ein – extrem – simples Beispiel soll das Konzept im Folgenden verdeutlichen.
Beispiel: Bash
Nehmen wir ein einfaches Bash-Skript, das nur ein einziges Feature hat: Es gibt Namen und Status von aktivierten Features aus, gemäß der in der Datei „flags“ gesetzten Feature Flags. Zunächst das Skript:
while read feature state; do if [ "$state" = "aktiv" ]; then echo Das Feature $feature ist $state. fi done < flags
Und hier der Inhalt der Datei „flags“:
feature_01 aktiv feature_02 aktiv feature_03 deaktiviert feature_04 deaktiviert feature_05 deaktiviert feature_06 aktiv
Und noch die Ausgabe:
Das Feature feature_01 ist aktiv. Das Feature feature_02 ist aktiv. Das Feature feature_06 ist aktiv.
Natürlich ist die reine Ausgabe eines Status nicht sonderlich spannend und hier werden die Feature Flags nur beim Programmstart ausgewertet –, aber grundsätzlich ist es tatsächlich so trivial. Das ganze Konzept beschränkt sich in diesem Beispiel also auf die Auswertung einer externen Config-Datei über eine simple if-Abfrage. Die drei deaktivierten Features spielen im Programmablauf aus Nutzersicht keine Rolle.
Nun, eine kleine Einschränkung muss natürlich her: Die deaktivierten Features werden natürlich geparst und würden auch in einer kompilierten Version berücksichtigt werden müssen. Aus diesem simplen Beispiel ließe sich dennoch recht schnell eine fast schon praxistaugliche Anwendung stricken – mit drei simplen Maßnahmen.
Zunächst könnte man die Config-Datei in ein strukturiertes Datenformat wie JSON überführen, was ein zuverlässiges Parsen ermöglicht (etwa mit jq).
Dann sollte solche eine Feature-Flag-Datei freilich nicht lokal beim Anwender liegen, sondern zentral beim Anbieter, etwa in einem Git-Repository. Die Abfrage ließe sich auf Scripting-Ebene zum Beispiel mit einem simplen curl-Befehl erledigen.
Und letztlich sollte die Abfrage der Flaggen nicht an den Programmstart gebunden sein, sondern an Events im Programm, etwa den Aufruf eines Features, das über eine Feature Flag verwaltet wird.
Feature Flags in der Realität
Kommen wir zum Thema Git zurück. Hier bieten sich Feature Flags für das Continuous Deployment an. Beim Betreiben einer Website via GitHub Pages ließen sich mit diesem Konzept schnell experimentelle Features testen, aber auch aktuelle Hinweise setzen oder fehlerhafte Beiträge verstecken.
Schnell kommen dabei Begehrlichkeiten auf: Sollen vielleicht nur einige Besucherinnen und Besucher mit experimentellen Funktionen konfrontiert werden? Oder gar nur angemeldete Personen aus dem Projekt selbst? Wie lassen sich die Marker sinnvoll verwalten und möglicherweise sogar tracken? Oder anders gefragt: Gibt es das nicht „fertig“?
Natürlich gibt es allerlei Tools rund um Feature Flags, teils Spezialisten, teils einzelne Funktionen in umfangreicheren Software-Plattformen. Erfreulicherweise hat auch die Open-Source-Welt einiges zu bieten.
So finden sich Feature Flags seit einiger Zeit zum Beispiel in der Open-Source-Edition von PostHog. Das Projekt bezeichnet sich selbst als „Produkt-Analyse- und Experimentier-Plattform“ und stellt einige nützliche Services rund um Statistiken, Nutzeranalyse und Testing zur Verfügung. Ein Highlight ist dabei sicherlich, Screenvideos von Nutzer-Sessions aufzeichnen zu können, samt hübscher Cursor-Visualisierung – was sogar schon in der freien Version funktioniert.
Die Umsetzung von Feature Flags ist angenehm unkompliziert geraten und zum Beispiel für bestehende Webseiten sehr schnell aufgesetzt. Die Anbindung einer Website an PostHog ist trivial: Nach der Anmeldung erhält der User einen JavaScript-Code-Schnipsel, der in den Header der Seite eingebaut wird. Statistiken und Session-Videos stehen dann umgehend zur Verfügung.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Feature Flags bei PostHog.
(Bild: Lang / Posthog)
Um ein Feature Flag anzulegen, gilt es, den entsprechenden Punkt in der Hauptnavigation und dann „New Feature Flag“ auswählen. Für die Grundfunktion genügt es, hier einen sinnvollen Namen bzw. Key zu vergeben.
Optional lassen sich Feature Flags über etwaige Nutzer-Authentifizierungen persistent machen, damit die Wirksamkeit auch nach einer Anmeldung erhalten bleibt. Man denke da etwa an Online-Shops, wo es normal ist, dass erst gestöbert, dann angemeldet und gekauft wird. Auf Wunsch lassen sich sogar individuelle Payloads zur Auswertung setzen.
Spannend sind aber eher die „Release Conditions“: Hier lassen sich Filter für den Einsatz der Feature Flag setzen. Diese können eine Bereitstellung beispielsweise auf bestimmte Geräte, Betriebssysteme, Browser, Nutzer und so weiter beschränken. Ebenso lässt sich festlegen, wie viel Prozent der gefilterten Nutzer dann letztlich in den Genuss bestimmter Features kommen.
Einmal gesetzt, muss das Feature Flag natürlich noch in das eigene Projekt eingebaut werden. Dafür wird wiederum ein Code-Snippet bereitgestellt, wahlweise für PHP, Ruby, Golang, Node.JS, API oder JavaScript, hier für eine Feature Flag namens „ml_1“:
if (posthog.isFeatureEnabled('ml_1')) { // run your activation code here }
Auswertung aktiver Feature Flags.
(Bild: Lang / Posthog)
Das Einbinden von Feature Flags läuft also auch in der Praxis auf eine simple if-Abfrage hinaus. Die Abrufe der Flagge werden unter dem Punkt „Usage“ (noch eine Beta-Funktion) detailliert protokolliert.
Natürlich ist PostHog nicht auf diese genaue Vorgehensweise beschränkt. Dies gilt vor allem für die Nutzung der Client-Bibliothek, die in diesem Fall über das Header-JavaScript-Snippet angesprochen wird und bei PostHog liegt. Bibliotheken gibt es auch für diverse SDKs, etwa Android, iOS, Python oder Rust.