Gepost op woensdag 6 maart 2019 om 16:35u.

Techtip: Feature Toggles

Wat is een feature Toggle? 

Een feature toggle of Feature flag is een softwaretechniek die een alternatief biedt voor het gebruik van meerdere grote branches in de broncode (feature branches). Op die manier kan een merge-hell vermeden worden en kunnen bepaalde features getest worden voor de release. Het is een krachtige manier om een feature release te ontkoppelen van het deploymentschema.

De levensduur van toggles wordt best zo kort mogelijk gehouden. Zodra de feature compleet is en de toggle niet meer gebruikt wordt moet deze verwijderd worden. 

Een zeer basic voorbeeld van een feature toggle: (martinfowler.com)

Voor- en nadelen van Feature toggles 

Voordelen: 

Nadelen: 

Categorieën  

We kunnen feature toggles opsplitsen in 4 categorieën op basis van de levensduur en de dynamiek.  

Release Toggle 

Een release toggle dient voor het ontkoppelen van de feature release en het deployment schema. Het voorkomt ook het gebruik van feature branches en bijkomende merge moeilijkheden. Release Toggles zijn over het algemeen van korte levensduur en moeten verwijderd worden zodra de feature klaar is en de toggle niet meer gebruikt wordt. Release Toggles zijn niet erg dynamisch, ze worden meestal op 1 plaats geconfigureerd en worden voor de hele applicatie aan of uitgeschakeld. 

Experiment Toggle 

Een experiment toggle dient voor het gecontroleerd aan of uitschakelen van experimentele features. Een perfecte toepassing voor een experiment toggle is een Canary release: een feature kan beschikbaar gesteld worden aan een beperkte subset van de gebruikers. A/B testing:  Door data te verzamelen van beiden groepen gebruikers (de gebruikers met en de gebruikers zonder de feature) kunnen er nuttige statistieken opgesteld worden, om zo het succes van de feature in te schatten.

Een experiment toggle heeft een langere levensduur dan een release toggle, maar moet evenzeer verwijderd worden nadat de test voorbij is en de feature beschikbaar wordt gesteld voor alle gebruikers. De toggle is ook dynamischer: hij kan op gebruikersniveau bepaald worden of zelfs door de gebruiker zelf. 

Voorbeeld van een experiment toggle in Outlook Office 365

Ops Toggle 

Een Ops Toggle kan gezien worden als een stroomonderbreker voor niet-essentiële functionaliteiten. Features met een grote performance impact, kunnen bv. dynamisch uitgeschakeld worden wanneer de applicatie een hoge load ondervindt. Een ander voorbeeld is het al dan niet gebruiken van koppelingen naar externe partijen die mogelijk instabiliteit veroorzaken.

De Ops Toggle heeft een langere levensduur en gaat net zolang mee als de applicatie, of de feature bestaat. Op vlak van dynamiek kunnen we de Ops Toggle in het middel plaatsen. De toggle kan door meerdere personen aan- of uitgeschakeld worden, bv.  op een admin-pagina.

Permission Toggle 

De Permission toggles, of Business toggles, worden gebruikt om specifieke delen van de applicatie toegankelijk te maken voor een bepaalde set van gebruikers. Deze zijn echter niet te verwarren met autorisatie regels. Voor premium-users kan je bv. een feature vervroegd beschikbaar stellen. Het gaat dan over een vooraf bepaalde subset van gebruikers. Bij een experiment toggle gaat het om een willekeurige groep.

De levensduur is gemiddeld en moet net zoals bij een experiment toggle verwijderd worden van zodra de feature algemeen beschikbaar gesteld wordt. Wanneer er uitgegaan wordt van een lange levensduur kan er beter gekeken worden naar de mogelijkheid tot verwerking in de autorisatie regels. 

Toggles beheren  

Toggles kunnen op verschillende manieren geïmplementeerd en beheerd worden. Ze kunnen in hun meest basic vorm gewoon uit een hard coded variabele bestaan, ze kunnen in een config of database bijgehouden worden, of in een dedicated central configuration store zoals Zookeeper of Consul. 

Om de implementatie en logging van toggles te vergemakkelijk kan er gebruik gemaakt worden van een framework zoals FeatureToggle of Split.io. 

Conclusie 

Het gebruik van Feature Toggles is een nuttige techniek in de ontwikkeling van software. Ze moeten wel met de nodige voorzichtigheid gebruikt worden, want ze impliceren een grote technical debt. 

Dit is een zeer summiere beschrijving van alles wat bij Feature toggles komt kijken. Een veel uitgebreidere uiteenzetting kan gevonden worden op de bron van deze blogpost: https://martinfowler.com/articles/feature-toggles.html

Enkele simpele regels