Een feature flag — ook wel feature toggle, feature switch of feature gate genoemd — is een techniek waarbij je een stuk code omhult met een conditie die bepaalt of die code wordt uitgevoerd of niet, zonder dat je een nieuwe deployment nodig hebt. Je beheert de aan/uit-stand van de vlag via een configuratiesysteem, een dashboard of een externe service, waarna de wijziging direct zichtbaar is in de draaiende applicatie. Een webwinkel kan hiermee een nieuwe afrekenflow activeren voor 10% van de gebruikers terwijl de overige 90% de oude flow blijft zien. Een SaaS-bedrijf kan een experimentele AI-assistent uitsluitend tonen aan betaalde klanten. Grotere organisaties zoals Facebook, Google en Netflix gebruiken duizenden feature flags tegelijkertijd om releases te ontkoppelen van deployments en zo snel en veilig te innoveren.
Hoe werkt een feature flag technisch?
Een feature flag is in de eenvoudigste vorm niets meer dan een if-statement in de code dat een configuratiewaarde uitleest. Afhankelijk van die waarde wordt de nieuwe of de oude code-tak uitgevoerd.
In pseudocode ziet dat er als volgt uit:
als feature_vlag(“nieuwe_checkout”) actief is: toon nieuwe afrekenflow, anders: toon oude afrekenflow
De configuratiewaarde kan worden opgeslagen in een omgevingsvariabele, een database, een configuratiebestand of een gespecialiseerd feature management-platform. Naarmate de behoeften complexer worden — denk aan targeting op gebruikerssegmenten, percentages of landen — groeit de waarde van een gespecialiseerde tool.
Feature management platforms
Gespecialiseerde platforms zoals LaunchDarkly, Unleash, Flagsmith, Split.io en AWS AppConfig bieden een centrale plek om feature flags te beheren, te targeten en te monitoren. Ze bieden functies zoals:
- Graduele uitrol naar een percentage van de gebruikers.
- Targeting op basis van gebruikersattributen zoals land, abonnementstype of gebruikers-ID.
- Realtime aan- en uitzetten zonder applicatieherstart.
- Auditlog van wie welke flag wanneer heeft gewijzigd.
- A/B-test-integratie om de impact van nieuwe features te meten.
Soorten feature flags
Niet alle feature flags zijn hetzelfde. Op basis van levensduur en doel onderscheid je vier hoofdtypen.
Release flags
Release flags verbergen onafgemaakte functionaliteit achter een schakelaar zodat code veilig kan worden gemerged en gedeployed zonder dat gebruikers de onafgemaakte feature zien. Dit maakt het mogelijk om te werken met kleine, frequente commits naar de hoofdlijn terwijl de feature toch verborgen blijft. Release flags hebben een korte levensduur: zodra de feature volledig is en breed uitgerold, wordt de flag verwijderd.
Experiment flags (A/B-tests)
Experiment flags sturen een deel van het verkeer naar een nieuwe variant van een feature terwijl de rest de bestaande variant blijft zien. Zo kun je statistisch onderbouwde beslissingen nemen over welke variant beter presteert op basis van echte gebruikersdata. Na het experiment wordt de winnende variant de standaard en wordt de flag verwijderd.
Ops flags
Ops flags zijn bedoeld voor operationeel beheer: het snel kunnen in- of uitschakelen van een feature tijdens een incident, piekperiode of technisch probleem. Een voorbeeld is een “circuit breaker” die een zwaar belaste feature tijdelijk uitschakelt om de rest van het systeem te beschermen. Ops flags kunnen een langere levensduur hebben als het gedrag dat ze beheersen structureel onderdeel is van het systeem.
Permission flags
Permission flags bepalen welke gebruikers of groepen toegang hebben tot een feature op basis van hun rol, abonnement of andere attributen. Een betaalde feature die alleen beschikbaar is voor premium-gebruikers wordt geregeld via een permission flag. Deze flags zijn permanent: ze maken deel uit van de business logica van de applicatie.
Voordelen van feature flags
Feature flags bieden een reeks voordelen die de snelheid, kwaliteit en veiligheid van software-uitlevering verhogen.
- Ontkoppeling van deployment en release: je kunt code deployen naar productie zonder deze direct zichtbaar te maken voor gebruikers. Dit geeft je controle over het moment van release en maakt nacht- of weekenddeployments overdag mogelijk.
- Graduele uitrol: in plaats van een functie in één keer voor alle gebruikers te activeren, rol je hem eerst uit naar een kleine groep, monitor je de impact en breid je de uitrol geleidelijk uit. Dit verkleint het risico van een grootschalig incident aanzienlijk.
- Snelle rollback zonder redeployment: als een feature problemen veroorzaakt, zet je de flag uit en is de feature direct uitgeschakeld — zonder een nieuwe deployment te hoeven doen.
- Trunk-based development: feature flags maken het mogelijk dat iedereen op de hoofdbranch werkt zonder dat onafgemaakte code zichtbaar wordt, waardoor merge-conflicten en lange-levende branches worden vermeden.
- Gepersonaliseerde ervaringen: je kunt verschillende versies van een feature tonen aan verschillende gebruikerssegmenten op basis van locatie, abonnementstype, gedrag of andere criteria.
Risico’s en best practices
Feature flags brengen ook risico’s met zich mee als ze niet goed worden beheerd.
Flag debt
Het grootste risico is de ophoping van verouderde flags die nooit zijn verwijderd — ook wel flag debt of toggle debt genoemd. Elke actieve flag voegt complexiteit toe aan de code en vergroot het aantal codepaden dat getest moet worden. Teams die tientallen of honderden flags hebben die al maanden of jaren niet zijn aangeraakt, lopen risico op verwarrende, moeilijk te debuggen gedragingen.
Voorkom flag debt door:
- Elke flag te voorzien van een geplande vervaldatum.
- Flags na volledige uitrol actief te verwijderen uit de codebase.
- Een eigenaar te koppelen aan elke flag die verantwoordelijk is voor het opruimen.
- Regelmatige audits te doen van actieve flags in jouw feature management-platform.
Testcomplexiteit
Elke feature flag verdubbelt theoretisch het aantal te testen codepaden. Bij meerdere gekoppelde flags groeit de complexiteit exponentieel. Zorg voor geautomatiseerde tests die de belangrijkste combinaties van flag-staten afdekken en documenteer welke combinaties daadwerkelijk in productie voorkomen.
Conclusie
Feature flags zijn een krachtig instrument dat de kloof overbrugt tussen continue deployment en gecontroleerde release. Ze geven jouw team de vrijheid om code te integreren en te deployen wanneer het klaar is, terwijl je volledige controle houdt over wanneer en voor wie een feature zichtbaar wordt. Gebruik ze voor graduele uitrollen, A/B-tests, noodschakelaars en gepersonaliseerde ervaringen, maar bewaak de flag-hygiëne actief om technische schuld te voorkomen. Begin met een eenvoudige implementatie en overweeg een gespecialiseerd feature management-platform naarmate de complexiteit groeit. Met feature flags neem jij de controle terug over jouw releases en lever je software met meer vertrouwen en minder risico.
Veelgestelde vragen
- Wat is het verschil tussen een feature flag en een A/B-test?
Een A/B-test is een specifiek gebruik van een feature flag waarbij je twee varianten van een feature tegelijk test bij verschillende gebruikersgroepen om te meten welke variant beter presteert op een vooraf gedefinieerde metric. Elke A/B-test maakt gebruik van een feature flag, maar niet elke feature flag is een A/B-test. Andere toepassingen van feature flags zijn graduele uitrollen, noodschakelaars en permission-based toegang. - Hoe implementeer ik feature flags zonder een extern platform?
Voor eenvoudige toepassingen volstaat het opslaan van flag-waarden in een omgevingsvariabele, een configuratiebestand of een eenvoudige database-tabel. Jouw applicatie leest de waarde bij opstart of bij elk verzoek en beslist op basis daarvan welke codetak wordt uitgevoerd. Het nadeel van deze aanpak is dat je minder flexibiliteit hebt voor targeting, geen auditlog hebt en elke wijziging handmatig moet doorvoeren. Voor grotere teams en complexere use cases is een gespecialiseerd platform als LaunchDarkly of Unleash snel de moeite waard. - Hebben feature flags invloed op de prestaties van mijn applicatie?
Een goed geïmplementeerde feature flag voegt minimale overhead toe: het is in essentie een extra conditie-check bij elke relevante aanroep. Wanneer je een extern platform gebruikt dat flags via een netwerkaanroep ophaalt, is caching essentieel om vertraging te voorkomen. De meeste feature management-platforms slaan de flag-waarden lokaal op in geheugen en vernieuwen deze op de achtergrond, zodat de latentie-impact verwaarloosbaar is. - Hoe verwijder ik een feature flag veilig uit de codebase?
Zodra een feature volledig is uitgerold en stabiel is gebleken, verwijder je de flag in drie stappen. Eerst zet je de flag permanent op actief in jouw configuratie of platform. Vervolgens verwijder je de conditie-code uit de codebase en laat je alleen de actieve codetak over. Ten slotte verwijder je de flag uit jouw feature management-platform of configuratiesysteem. Zorg dat de verwijdering gepaard gaat met voldoende testdekking om te verifiëren dat de active codetak correct werkt zonder de flag-controle. - Kan ik feature flags gebruiken voor backend-functionaliteit in plaats van alleen UI?
Ja, absoluut. Feature flags zijn even goed toepasbaar op backend-functionaliteit als op de gebruikersinterface. Denk aan het activeren van een nieuwe API-versie, het inschakelen van een alternatief algoritme, het aansturen van een nieuwe betalingsprovider of het inschakelen van uitgebreide logging voor diagnosedoeleinden. Backend feature flags worden vaak gecombineerd met monitoring-dashboards zodat je direct kunt zien wat de impact is van het activeren of deactiveren van de flag op systeemgedrag en prestaties.