So verwalten Sie veraltete Feature Flags

Jeff SingJeff Sing
16. Juli 2019

Feature Flags nicht aufzuräumen kann ein Risiko für Ihre Codebasis darstellen. Erfahren Sie, wie ein Feature Flag Removal Day zu besserem Feature Management führen kann. Feature Flags (auch Feature Toggles genannt) sind aus gutem Grund ein Goldstandard agiler Softwareentwicklung und Continuous Integration: Sie helfen Teams, neue Funktionen sicher an Kunden auszuliefern, und mit besserer

Feature Flags nicht aufzuräumen kann ein Risiko für Ihre Codebasis darstellen. Erfahren Sie, wie ein Feature Flag Removal Day zu besserem Feature Management führen kann.

Feature Flags (auch Feature Toggles genannt) sind aus gutem Grund ein Goldstandard der agilen Softwareentwicklung und Continuous Integration: Sie helfen Teams, neue Funktionen sicher und mit besserer Kontrolle an Kunden auszuliefern. Wenn Sie jemals neue Funktionalität mit Endnutzern validieren, eine Änderung schnell zurückrollen oder einen A/B-Test an einer Funktion durchführen mussten, sind Sie vielleicht auch ein Fan von Feature Flags. Sie helfen, Feature-Releases und Code-Deployment zu entrisikieren.

Doch als DevOps-Engineer kann Ihnen das Feature-Flag-Management auch Bauchschmerzen bereiten. Wenn sie schlecht verwaltet werden, kann man am Ende eine Codebasis haben, die mit alten, vergessenen Feature Flags übersät ist, die tatsächlich ein Risiko einführen.

Ein Feature Flag Removal Day ist eine einfache, effektive Möglichkeit, Feature Flags verantwortungsvoll zu verwalten.

Ein Feature Flag, dessen Aufgabe erledigt ist, sollte entfernt werden

Feature Flagging ermöglicht es Ihnen, Code schnell und sicher auszurollen. Doch sobald Ihr Experiment abgeschlossen ist oder der Rollout vollständig ausgespielt wurde und keine Möglichkeit eines Rollbacks mehr besteht, sollte ein Engineer es als Feature-Flag-Erfolgsmethode entfernen. 

Tut man das nicht, eröffnet das die Möglichkeit, Ihre Kunden der falschen Funktion oder codebasisbrechender Funktionalität auszusetzen.

Allerdings kann es schwierig sein, die Verwaltung von Feature Flags zu priorisieren, und die Zuständigkeit ist nicht immer klar. Sie können Ablaufdaten für Ihre Feature Flags festlegen, aber Entwickler können mit anderen Projekten überlastet sein, das Team verlassen oder einfach wiederholte, sanfte Anstöße brauchen, um die Entfernung zu priorisieren. Der Feature Flag Removal Day kann Ihnen helfen, all das zu durchbrechen.

Warum ein Feature Flag Removal Day?

Der Feature Flag Removal Day ist ein Tag im Monat, an dem Entwickler im Schwarm zusammenkommen, um Feature Flags zu entfernen, die ihre Aufgabe erfüllt haben. Die Session dauert in der Regel 4-6 Stunden – wir bestellen Donuts, um die Energie hochzuhalten! Bei Optimizely kommen einige Squads zusammen, um Flags als Gruppe zu entfernen; andere weisen die Aufgabe einem einzelnen Entwickler zu. 

Das Ziel ist nicht unbedingt, alle Flags während der Session zu entfernen. Wir nutzen die Zeit, um abgelaufene Feature Flags zu auditieren, zu prüfen, ob die Exit-Kriterien erfüllt wurden, und Verantwortliche zuzuweisen.

Einen bestimmten Tag festzulegen gibt Entwicklern eine feste Zeit, um im Schwarm zusammenzukommen und beim Genehmigen der Pull-Request-Änderungen zum Entfernen ihrer Feature Flags zu helfen.

Er hat außerdem die folgenden Vorteile:

  • Eine menschliche Prüfung: Sie können eine menschliche Prüfung mit dem Product Owner einbauen, um sicherzustellen, dass jedes Flag auf der Liste tatsächlich entfernt werden sollte. 
  • Verbreitet Feature-Flag-Hygiene-Praktiken: Zu viele Flags in Ihrer Codebasis zu belassen kann technische Schulden verursachen und die Codebasis brüchig machen. Ein gut beworbener Tag kann Ihnen helfen, Ihre gesamte Organisation auf dieses Risiko aufmerksam zu machen. Es regelmäßig anzugehen sollte Teil der Kultur Ihrer Entwicklungsteams werden.
  • Leichtgewichtiger, verlässlicher Prozess: Beseitigen Sie das Hin und Her an Debatten über jedes zu entfernende Flag, indem Sie eine Standardpraxis und einen festen Zyklus etablieren. Bei Optimizely hilft uns das, die Sorge zu vermeiden, dass Feature Flags ehemaliger Mitarbeiter uns wieder heimsuchen könnten. 
  • Klare, zeitlich begrenzte Zuständigkeit: Statt Ihre Entwickler für immer für ein bestimmtes Feature Flag verantwortlich zu machen, lassen Sie den Prozess das übernehmen. Weisen Sie am Feature Flag Removal Day einem Entwickler die Verantwortung für das Entfernen dieses Flags zu – Fall abgeschlossen.
  • Transparenz: Geben Sie Ihrer gesamten Engineering-Organisation Bescheid, dass bestimmte Feature Toggles entfernt werden. Das verringert die Wahrscheinlichkeit, dass ein Flag, das von einem Team genutzt wird, von einem anderen entfernt wird.
  • Effiziente Nutzung der Entwicklerzeit: Reservieren Sie eine bestimmte Zeit, in der Ihre Entwickler am Entfernen ihrer Feature Flags arbeiten. Danach können sie zu ihrem regulär geplanten Programm zurückkehren.

Welche Flags sollten entfernt werden?

Das Ziel ist, alle Feature Flags zu entfernen, die nicht mehr aktiv als Teil eines Experiments oder Rollouts genutzt werden.

An unserem ersten Feature Flag Removal Day bei Optimizely bewerteten wir jedes einzelne Flag, das die folgenden Kriterien erfüllte:

  • Flags, die vor 2019 erstellt wurden
  • Flags, die seit 2019 nicht aktualisiert wurden 
  • Flags, denen keine bestimmte Zielgruppe zugeordnet ist, was bedeutet, dass sie allen angezeigt werden
  • Flags, die zu 100 % an die Nutzerbasis und zu 100 % in der Produktionsumgebung ausgerollt sind

Wir identifizierten 11 Flags, die diese Kriterien erfüllten.

Wir sprachen mit den Product Ownern jeder Funktion, um sicherzustellen, dass sie entfernt werden konnten. Wir fanden zwei, die nicht entfernt werden sollten (eines war ein Kill Switch, das andere erhielt eine Legacy-Funktion für bestimmte Kunden). Wir aktualisierten diese Flags mit einem Exit-Kriterium und ließen ihr Ablaufdatum leer. 

Wir untersuchten die übrigen neun. 

Was wir fanden

Ein Teil des Codes war bereits entfernt worden, aber die Flags waren noch im Dashboard unseres Feature-Flagging-Systems aufgeführt. Diese archivierten wir und beließen es dabei.

Einige Feature Flags waren schwieriger zu entfernen, weil sie über die gesamte Codebasis verteilt waren und mehrere Entwickler aus verschiedenen Produktteams zum Entfernen erforderten. Diese brauchten länger als einen Tag und mehrere Code-Reviews, um entfernt zu werden.

Aber die Mehrheit der Flags ließ sich leicht und sauber entfernen.

Bonus: Die Praxis, Flags zu entfernen, gab Entwicklern eine andere Perspektive auf Erfolgsmethoden zu deren Implementierung. Sie höher in der Codebasis zu platzieren und früher herauszunehmen macht sie später leichter herausreißbar.

Zukunftspläne für Feature Flags

Unsere Feature-Flag-Erfolgsmethoden umfassen jetzt ein Exit-Kriterium und ein Ablaufdatum. Diese Markierungen helfen uns zu steuern, wie und wann wir unsere Flags entfernen. 

Das Exit-Kriterium ist eine Bedingung, die das Feature Flag für die Entfernung qualifiziert. Wenn ein Flag zum Beispiel zu 100 % an die Öffentlichkeit ausgerollt wurde und keine größeren Bugs gemeldet wurden, kann es in 30 Tagen entfernt werden (das Ablaufdatum).

Wir legen dieses Exit-Kriterium fest, wenn wir die Feature-Akzeptanzkriterien schreiben, als Vereinbarung zwischen:

  • Entwickler: Der Engineer, der das Feature Flag implementiert.
  • Product Owner: der Projektmanager, der die Feature-Rollout-Strategie festlegt, die anfänglichen Entfernungskriterien schreibt und die Funktion an Kunden kommuniziert.
  • QA-Team: Auditoren, die sicherstellen, dass die Richtlinie korrekt ausgeführt wurde.

Unser Entfernungsprozess sieht so aus:

  • Das QA-Team prüft das Features-Dashboard in Optimizely, um alle Flags zu identifizieren, die ihre Exit-Kriterien erfüllt haben.
  • Flags, deren Ablaufdatum vor dem nächsten Feature Flag Removal Day liegt, werden in einem neuen Jira-Epic aufgelistet. 
  • QA markiert den Entwickler, der das Flag implementiert hat, und lädt ihn zum nächsten Feature-Flag-Removal-Day-Event ein. 
  • Am Feature Flag Removal Day kommen Entwickler im Schwarm zusammen, um ihre Feature Flags zu entfernen und sie im Optimizely Features-Dashboard zu archivieren. 

Fazit

Einen festen Tag einmal im Monat zu bestimmen hilft, eine Praxis zu etablieren, jedes Feature Flag in der Codebasis in regelmäßigen Abständen zu überprüfen, um sicherzustellen, dass nur die richtigen Flags live sind. Das hat unserem Engineering-Team eine bessere Sicht auf die Anzahl der aktiven Flags gegeben und hilft uns, Work in Progress (WIP) als Teil unseres agilen Produktmanagement- und Entwicklungsprozesses zu messen. Indem wir unsere Feature Flags am Feature Flag Removal Day aktiv auditieren, stellen wir sicher, dass Optimizely Produkte sicher und schnell veröffentlichen kann, während die Codebasis sicher und sauber bleibt. 

Wenn Sie mit Feature Management starten möchten, können Sie Optimizely  Free Feature Flagging für unbegrenzte Feature Flags und kontrollierte Rollouts ausprobieren.