Close

Functiemarkeringen

Hoe je je functies geleidelijk kunt uitbrengen met functievlaggen.

Headshot Ian Buchanan
Ian Buchanan

Principal Solutions Engineer


Als je van plan bent om tijdens de ontwikkeling continu functies in je applicatie te integreren, kun je overwegen om functievlaggen te gebruiken. Je wilt immers misschien wel functies schakelen, verbergen, uitschakelen of in schakelen. Misschien wil je gebruiker ook de mogelijkheid geven om verschillende variaties van een functie uit te proberen om te zien welke beter is. Met functievlaggen die ookwel bekend staan als 'toggles', 'bits', 'flippers of 'switches' kun je dit en meer doen.

Wat zijn functievlaggen?


Functievlaggen (ook algemeen bekend als functiewissels) is een techniek voor softwareontwikkeling waarbij bepaalde functies tijdens runtime worden in- en uitgeschakeld, zonder dat er nieuwe code geïmplementeerd wordt. Hierdoor kunnen teams wijzigingen aanbrengen zonder extra code te pushen en zijn er meer gecontroleerde experimenten mogelijk gedurende de levenscyclus van functies. Daarom maken functievlaggen veel nieuwe workflows mogelijk die ongelooflijk nuttig zijn voor een agile managementstijl en CI/CD-omgevingen.

Tijdens de ontwikkeling verwerken software-engineers de gewenste codepaden in een functievlag. Het volgende is een voorbeeld van een standaard functievlag, geschreven in Javascript:

 if(featureFlags[‘new-cool-feature’] == true){
     renderNewCoolFeature();
 } 

Deze code toont een eenvoudige verklaring aan die controleert of een 'new-cool-feature' is ingeschakeld. Zelfs met geavanceerde frameworks en tools die helpen bij het beheren van vlaggegevens of het injecteren en verwijderen van het nieuwe logische pad, zijn functievlaggen in wezen gewoon 'if statements'. Daarom hebben alle synoniemen deze binaire schakelaar gemeen.

Oplossing bekijken

Software bouwen en gebruiken met Open DevOps

Gerelateerd materiaal

Lees meer over trunk-gebaseerde ontwikkeling

Voordelen van functieflaggen


Diagram dat de nadruk legt op de ontwikkeling van functies die worden aangedreven door functievlaggen

In principe kun je met functievlaggen code committen en implementeren in de productie in een inactieve toestand. Je kunt ze later weer activeren. Dit geeft teams meer controle over de gebruikerservaring van het eindproduct. Ontwikkelingsteams kunnen kiezen wanneer en aan welke gebruikers de nieuwe code wordt geleverd.

Functionaliteit van functies valideren

Ontwikkelaars kunnen functievlaggen gebruiken om 'soft rollouts' van nieuwe productfuncties uit te voeren. Als onderdeel van de verwachte release kunnen nieuwe functies worden ontwikkeld met onmiddellijke integratie van functietoggles. De functievlag kan standaard op 'Uit' worden gezet, zodat zodra de code is geïmplementeerd, deze tijdens de productie inactief blijft en de nieuwe functie wordt uitgeschakeld totdat de functieschakelaar expliciet is geactiveerd. Teams kiezen vervolgens wanneer ze de functievlag willen inschakelen, waardoor de code wordt geactiveerd, zodat teams een kwaliteitscontrole kunnen uitvoeren en kunnen controleren of de code zich gedraagt zoals verwacht. Als het team tijdens dit proces een probleem ontdekt, kunnen ze onmiddellijk de functievlag uitschakelen om de nieuwe code uit te schakelen en de blootstelling van gebruikers aan het probleem tot een minimum te beperken.

Risico minimaliseren

Voortbouwend op het hierboven besproken idee van soft rollouts, kunnen ijverige teams gebruikmaken van functievlaggen in combinatie met systeemmonitoring en statistieken als reactie op eventuele problemen die zich af en toe voordoen. Als een toepassing bijvoorbeeld te maken heeft met een piek in het verkeer en het bewakingssysteem een toename van het aantal problemen meldt, kan het team functievlaggen gebruiken om slecht presterende functies uit te schakelen.

Het gedrag van het systeem aanpassen zonder storende veranderingen

Functievlaggen kunnen worden gebruikt om ingewikkelde code-integratie- en implementatiescenario's tot een minimum te beperken. Ingewikkelde nieuwe functies of gevoelig refactorwerk kunnen moeilijk te integreren zijn in de belangrijkste productiebranch van een repository. Dit wordt nog ingewikkelder als meerdere ontwikkelaars werken aan overlappende delen van de codebase.

Functievlaggen kunnen worden gebruikt om nieuwe wijzigingen te isoleren terwijl de bekende en stabiele code op zijn plaats blijft. Dit helpt ontwikkelaars om langlopende functiebranches te vermijden door regelmatig naar de main-branch van een repository achter de functieschakelaar te gaan. Als de nieuwe code klaar is, is er geen storend scenario voor samenvoegen en implementeren nodig; het team kan de functievlag omschakelen om het nieuwe systeem in te schakelen.

Usecases van functievlaggen


Diagram functievlag

Functievlaggen maken diverse creatieve usecases mogelijk voor ijverige teams. De volgende voorbeelden belichten enkele populaire toepassingen van functievlaggen in een agile omgeving.

Testen van producten

Functievlaggen kunnen worden gebruikt om geleidelijk nieuwe productfuncties te releasen. Het kan vooraf onduidelijk zijn of een voorgestelde nieuwe functie door gebruikers zal worden geaccepteerd en het investeringsrendement waard is. Teams kunnen een nieuwe productfunctie of een gedeeltelijk idee van de functie in een functievlag releasen en deze implementeren voor een subgroep van gebruikers om feedback te verzamelen. De subgroep van gebruikers bestaat mogelijk uit vocale ervaren gebruikers die graag een bètatest willen doen en de functie willen beoordelen. Als het idee voor een nieuw product een succes blijkt te zijn, kan het ontwikkelingsteam de functievlag vervolgens uitrollen naar een groter gebruikersbestand. Als het idee voor een nieuw product in plaats daarvan een flop blijkt te zijn, kan het ontwikkelteam de functievlag eenvoudig uitschakelen en later uit de codebase verwijderen.

Experimenten uitvoeren

Experimenten of A/B-tests zijn een belangrijk voorbeeld van een functievlag. In hun eenvoudigste vorm werken functievlaggen als een schakelaar van 'aan' en 'uit' voor een functie. Met geavanceerde functievlaggen worden meerdere vlaggen tegelijk gebruikt om verschillende ervaringen te activeren voor subgroepen van gebruikers. Stel je bijvoorbeeld voor dat je je gebruikersbestand in drie delen verdeeld. Elke derde krijgt zijn unieke vlag en gebruikerservaring. Vervolgens kun je de prestaties van deze drie vlaggen met elkaar vergelijken om te bepalen wat de definitieve versie is.

Migraties

Soms heeft een toepassing een datamigratie nodig waarbij de afhankelijke wijzigingen aan de code van de toepassing nodig zijn. Deze scenario's zijn gevoelige implementatietaken in meerdere fasen. Een databaseveld kan worden gewijzigd, verwijderd of toegevoegd aan een toepassingsdatabase. Als de toepassingscode niet is voorbereid op deze databasewijziging, veroorzaakt dat storingen en fouten. Als dit gebeurt, is een gecoördineerde implementatie vereist tussen de wijzigingen in de database en de toepassingscode.

Functievlaggen helpen om de complexiteit van dit scenario te vereenvoudigen door teams in staat te stellen om van tevoren de wijzigingen van de toepassing voor te bereiden in een functievlag. Zodra het team de wijzigingen in de database heeft aangebracht, kunnen ze onmiddellijk de functievlag in- of uitschakelen zodat deze overeenkomt met de code van de toepassing. Hierdoor wordt het risico weggenomen en hoeft er niet meer gewacht te worden om de nieuwe code van de toepassing te implementeren, waardoor de implementatie mogelijk mislukt en de toepassing niet meer gesynchroniseerd is met de database.

Proefkonijntests

Een proefkonijn verwijst in dit verband naar een oude, ziekelijke praktijk waarbij experimenten uitgevoerd worden op konijnen voor het uittesten van de veiligheid en werkzaamheid van medicijnen en andere producten. De konijnen worden vaak gebruikt omdat ze goedkoop zijn, weinig plaats innemen en ze planten zich snel voort.

Proefkonijntests op het gebied van softwareontwikkeling vinden plaats wanneer een nieuwe functie of codewijziging wordt geïmplementeerd bij een kleine subgroep gebruikers om het gedrag te controleren voordat deze beschikbaar wordt gesteld aan de volledige groep gebruikers. Als de nieuwe functie wijst op fouten of defecten, wordt de functie automatisch teruggedraaid. Functievlaggen zijn essentieel voor dit proces omdat ze het aantal gebruikers beperken en functies gemakkelijk kunnen uitschakelen.

Systeemuitval

Een functievlag kan ook worden gebruikt als tool bij systeemuitval. Een webapplicatie kan een functievlag gebruiken om de hele website 'uit te schakelen' in verband met onderhoud of downtime. De functievlag kan overal in de codebase worden gebruikt om gevoelige transacties te pushen en om informatie over uitval weer te geven aan de eindgebruikers. Dit kan ongelooflijk nuttig zijn bij gevoelige implementaties of als er een onverwacht probleem wordt gevonden dat dringend moet worden opgelost. Het geeft teams het vertrouwen en de mogelijkheid om een gecontroleerde uitval aan te kunnen als dat nodig is.

Continue implementatie

Functievlaggen kunnen gebruikt worden als een integraal component om een systeem voor continue implementatie te bouwen. Continue implementatie is een geautomatiseerde pipeline waarbij nieuwe code van ontwikkelaars wordt gebruikt en deze automatisch wordt geïmplementeerd voor eindgebruikers in de productie. Continue implementatie is afhankelijk van lagen geautomatiseerde tests die verifiëren dat nieuwe code zich gedraagt zoals verwacht op basis van een overeenkomende specificatie naarmate deze verder komt in de pipeline.

Functievlaggen maken het veiliger om continu te implementeren door codewijzigingen te scheiden van het lanceren van functies voor gebruikers. De nieuwe code kan automatisch worden samengevoegd en in productie worden geïmplementeerd en vervolgens achter een functievlag wachten. Het systeem voor continue implementatie kan het gedrag en het verkeer van gebruikers volgen en vervolgens automatisch de functievlag activeren. Omgekeerd kan het systeem voor continue implementatie de nieuwe functievlag code in de gaten houden om te zien of deze werkt zoals verwacht, en de code terugdraaien als dat niet het geval is.

Functiebranches vs. functievlaggen


Hoewel ze gelijksoortige namen hebben, verschillen de functiebranches en functievlaggen nogal van elkaar. Functiebranches zijn een workflowpatroon dat relevant is voor Git-repository's voor bronbeheer. Wanneer ontwikkelaars met een nieuwe productfunctie beginnen, maken ze een nieuwe corresponderende Git-branch aan die afwijkt van de main-branch en alle code voor de nieuwe functie zal bevatten. Als ontwikkelaars klaar zijn met een nieuwe functie, voegen ze de functiebranch weer samen met de main en implementeren ze deze. Functiebranches zijn verschillend en staan apart van functievlaggen.

Functievlaggen kunnen worden gebruikt met functiebranches. Om een functievlag aan te maken, creëert een ontwikkelaar een functiebranch en geeft hij de nieuwe functievlag code toe aan de functiebranch. Eenmaal geïnstrumenteerd, wordt de functiebranch samengevoegd en geïmplementeerd en wordt de functievlag vervolgens tijdens de productie toegankelijk.

Tijdens de ontwikkeling van een functiebranch kan een project van lange duur zijn, of afwijken van de main-branch en talloze commits bevatten. Ontwikkelaars moeten ervoor zorgen dat een functiebranch voortdurend wordt bijgewerkt, zodat er zo min mogelijk conflicten zijn als de functie klaar is voor de samenvoeging. Het kost ontwikkelaars extra moeite om ervoor te zorgen dat een functiebranch continu wordt bijgewerkt, zodat zodra het tijd is om de functiebranch samen te voegen, er zo min mogelijk conflicten zijn. Functievlaggen kunnen worden gebruikt om dit scenario te verhelpen. In plaats van een functiebranch aan te maken met een lange levensduur en een grote samenvoeging uit te voeren wanneer de nieuwe functie klaar is, kan een functievlag worden aangemaakt en onmiddellijk worden samengevoegd naar de main-branch.

Hoe je functievlaggen implementeert


Er zijn veel manieren om functievlaggen te implementeren, met verschillende logistieke overwegingen en met verschillende investeringsrendementen. Welke weg je moet inslaan, hangt af van de behoeften van je team en de doelstellingen van je organisatie.

Functievlaggen hebben een aantal infrastructuurafhankelijkheden waar rekening mee gehouden moet worden. Naarmate teams hun gebruik van functievlaggen opschalen en het in- en uitschakelen van vlaggen een zakelijke beslissing wordt, wordt het van groot belang om te beschikken over een gezaghebbende gegevensopslag en een beheermechanisme voor de vlaggen. Veel services voor functievlaggen van derden zorgen voor deze afhankelijkheid van gegevensopslag.

Functievlaggen die gehost worden door derden zijn vaak de beste oplossing. Ze zorgen voor de zware logistiek en bieden eenvoudig te integreren bibliotheken die het installatieproces versnellen. Hierdoor kunnen teams zich concentreren op hun kerntaken in plaats van op infrastructuurbeheer. Als je team zich echter zorgen maakt over de beveiliging met betrekking tot derden, kan het in je eigen belang zijn om de backend van je vlaggen te beveiligen.

Afzonderlijk moeten engineers een nieuwe codelogica gebruiken om de vlaggenstaat van de service op te halen om de gemarkeerde inhoud te activeren. Dit vereist samenvoegingen van codes en implementaties van de vlaggencode voordat deze wordt geactiveerd. Aangezien veel functievlaggen tijdelijk zijn, moet je niet vergeten de functievlaggen te verwijderen die niet meer nodig zijn.

Conclusie...


Functievlaggen zijn een krachtige aanvulling op een agile ontwikkelingsarsenaal. Er zijn veel creatieve manieren om functievlaggen te gebruiken. Functievlaggen zijn een aanvulling op continue implementatie en Git-versiebeheer. Over het algemeen geven functievlaggen teams meer controle over hun codebase, hun implementatie en de ervaring van de eindgebruiker.

Bekijk ook onze DevOps-tutorials over het markeren van functies, waarin de best practices in een Open DevOps-toolchain worden beschreven.

Ian Buchanan
Ian Buchanan

Hoewel Ian een brede en uitgebreide kennis heeft van zowel Java als .NET, staat hij vooral bekend als expert op het gebied van agile methoden bij grote ondernemingen. Op dit moment richt hij zich op de opkomende DevOps-cultuur en de tools die een betere continue integratie, continue levering en gegevensanalyses mogelijk maken. Tijdens zijn carrière heeft hij met succes enterprise softwareontwikkelingstools beheerd in alle fases van hun levenscyclus. Ook was hij de motor achter organisatiebrede procesverbeteringen resulterend in een hogere productiviteit, kwaliteit en klanttevredenheid. Hij heeft teams met meerdere nationaliteiten onder zijn leden opgericht. Voor deze teams was zelfsturing en zelforganisatie erg belangrijk. Wanneer hij geen presentaties geeft of codeert, is hij bezig met parsing, metaprogrammering en domeinspecifieke talen. Volg Ian via @devpartisan.


Deel dit artikel

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up