Wer Continuous Delivery umsetzen und betreiben will, hat zum einen mit Features zu kämpfen, deren Entwicklung noch nicht abgeschlossen ist. Zum anderen sollen bereits entwickelte Features aber noch nicht - oder nur für bestimmte Benutzergruppen - in Produktion gehen.
Neuer Code und neue Features sollen so schnell wie möglich unter Produktivbedingungen getestet und eingesetzt werden. Der gezielte Einsatz von Feature Flags (aka Feature Toggles) kann hier Abhilfe schaffen. Feature Flags ermöglichen es, bestimmte Teile einer Applikation zur Laufzeit per Konfiguration ein- oder auszublenden. Welche Vorteile Feature Flags im Detail bieten und wie wir bei solvistas mit ihnen arbeiten, wird in Folge beschrieben.
Feature Flags können in verschiedenen Szenarien nutzbringend eingesetzt werden. Dabei ist es wichtig zu verstehen, dass sich der Teil einer Applikation, welcher mittels Feature Flags konfiguriert wird, stark unterscheiden kann. Während manche Feature Flags ganze Bereiche einer Software ein- und ausblenden, werden andere nur dazu verwendet, kleine Codeblöcke auszuführen oder eben nicht. Des Weiteren können Feature Flags am Frontend, Backend oder applikationsweit eingesetzt werden. Ein klassischer Anwendungsfall ist das Steuern von Features für bestimmte Kunden.
So werden zum Beispiel in unserem Projekt solTicketing bestimmte Applikations-Teile nur für jene Kunden eingeblendet, welche diese benötigen. Unter anderem wird der interaktive Stadionplan nur für jene Kunden bereitgestellt, bei denen es keine freie Platzwahl gibt. Sollten sich die Anforderungen eines Kunden ändern, so kann individuell und ohne zusätzliches Deployment jederzeit reagiert werden, indem das jeweilige Feature Flag aktiviert oder deaktiviert wird. Diese Flexibilität bietet zudem den Vorteil, dass bestimmte Funktionen im Fehlerfall jederzeit abgeschaltet werden können, während die restliche Anwendung stabil weiterläuft. So können zusätzliche zeitaufwändige Bugfix-Deployments minimiert werden. Generell können Feature Flags den Arbeitsablauf für EntwicklerInnen deutlich optimieren.
Oft sind Features schon fertig entwickelt, dürfen aber noch nicht produktiv eingesetzt werden. Das heißt aus Entwicklungssicht, dass die jeweiligen Feature-Branches noch nicht zusammengeführt (gemerged) werden können und “herumliegen”, bis das Feature eingesetzt werden soll. In der Zwischenzeit wird jedoch an anderen Teilen der Software weitergearbeitet, wodurch es zu massiven Problemen beim Zusammenführen (Mergen) kommen kann. Durch den gezielten Einsatz von Feature Flags kann der finalisierte Code des Features sofort zusammengeführt und eingesetzt (deployed) werden, und obwohl oberflächlich noch nichts sichtbar ist, sind die neuen Funktionen im Hintergrund schon vorhanden. Feature Flags haben sich hierfür auch bei solvistas bewährt und werden in verschiedenen Projekten nutzbringend eingesetzt.
Continuous Delivery ist bis zum ersten Release gut mit nur einem Branch in der Versionsverwaltung umzusetzen. Sollen danach jedoch weitere Features entwickelt und zeitnah eingecheckt werden, sind Vorkehrungen zu treffen, damit unfertige Features nicht in der Produktionsumgebung sichtbar werden beziehungsweise bereits fertig entwickelte Funktionen gegebenenfalls erst zu einem bestimmten Zeitpunkt nur für gewisse Benutzer oder Serverumgebungen aktiv werden. Feature Flags sind ein hilfreicher Mechanismus, um diese Abläufe zu steuern.
Autor: Dominik Prilmüller