Hva er en feature toggle?
I programvareutvikling er en feature toggle en mekanisme som gjør det mulig å skru kode «på» eller «av» eksternt uten behov for en utrulling. Feature toggles brukes ofte av produkt-, ingeniør- og DevOps-team for canary-utgivelser, A/B testing, produkteksperimentering og kontinuerlig utrulling.
Også kjent som «feature flags», «feature switches» eller «release toggles»; feature toggles har en rekke bruksområder i applikasjoner og infrastruktur, og de fleste av disse handler om å redusere risiko.
For eksempel kan de brukes i applikasjoner til gradvis å rulle ut nye funksjoner, slik at team kan teste endringer på et lite utvalg av brukere før de slippes til alle. På samme måte kan feature toggles i infrastrukturen fungere som sikringsbrytere, slik at ingeniører kan kontrollere oppførselen til et utrullet system eksternt.
Slik fungerer feature toggles
Feature toggles legges vanligvis til kodebaser for å muliggjøre ekstern kontroll av bestemt logikk ved kjøretid. I koden er denne logikken innkapslet slik at den kan kontrolleres av statusen til en feature toggle. Hvis statusen til feature togglen er «på», kjøres den innkapslede logikken. Hvis statusen er «av», hoppes den innkapslede logikken over.
Når en applikasjon ønsker å kjenne statusen til en feature toggle ved kjøretid, sender den en forespørsel til en ekstern datakilde eller en administrert tjeneste som Optimizely Feature Experimentation. Applikasjonen kan deretter avgjøre om den vil kjøre den innkapslede logikken basert på den returnerte statusen.
Fordi applikasjonen henter statusen til feature toggles fra en ekstern kilde, gjør det det mulig å kontrollere innkapslet logikk eksternt, rett og slett ved å slå flagget på eller av i konfigurasjonsfilen uten å kreve kodeutrulling. For eksempel, hvis statusen til en feature toggle endres i Feature Experimentation, endres den også i applikasjonen ved kjøretid.
Kodebaser inneholder ofte mange feature toggles som kontrollerer ulike deler av applikasjonen. På grunn av dette tildeles feature toggles vanligvis unike navn eller nøkler for å kunne skilles fra hverandre og beskrive logikken de kontrollerer. I tillegg kan feature toggles ha ulike statuser for ulike brukere eller målgrupper. Disse unike nøklene, samt detaljer om brukeren eller målgruppen, kan deretter brukes til å slå opp statusen til en bestemt feature toggle i en ekstern datakilde eller Feature Experimentation.
Fordelene med feature toggles
Den primære fordelen med feature flagging er at det reduserer risikoen forbundet med å frigi endringer til en applikasjon. Enten det er en ny funksjonsutgivelse eller en liten omstrukturering, er det alltid en iboende risiko for å innføre nye regresjoner. For å redusere dette kan endringer i en applikasjon plasseres bak feature toggles, slik at de kan slås «på» eller «av» i en nødssituasjon.
I mer komplekse tilfeller kan feature toggles brukes til å teste endringer på små delmengder av brukere. Ved å aktivere en feature toggle for en brøkdel av alle brukere kan team innhente innsikt før endringer rulles ut til alle. Denne funksjonaliteten til feature toggles brukes vanligvis til funksjonsutgivelser eller canary-utgivelser, som innebærer å validere endringer i applikasjoner og infrastruktur ved å teste dem på et utvalg brukere. Disse praksisene gjør det mulig for team å oppdage regresjoner tidlig og rulle tilbake om nødvendig, noe som reduserer risikoen for feil ved kjøretid.
Feature toggle-utviklingsprosessen
Det første trinnet i implementeringen av en feature toggle er å opprette og definere den i en ekstern datakilde eller en tjeneste som Optimizely. Dette innebærer vanligvis å velge et unikt navn eller nøkkel for feature togglen samt en innledende status. Når feature togglen er definert, kan applikasjoner og infrastruktur begynne å slå opp statusen ved hjelp av den unike nøkkelen.
Etter at feature togglen er definert i Optimizely eller andre steder, må statusen være tilgjengelig for applikasjonen. Derfor må kode legges til kodebaser for å gjøre det mulig for applikasjonen å slå opp statusen til en feature toggle fra den eksterne kilden. Optimizely Feature Experimentation tilbyr SDK-er for mange store språk og rammeverk som gir denne funksjonaliteten.
Endelig, når feature toggles er tilgjengelige for applikasjonen, kan de legges til spesifikke kodestier for å gi ekstern kontroll. Kodestier som krever ekstern kontroll kan pakkes inn i betinget logikk som sjekker statusen til feature togglen før den kjøres. Deretter, når den kodestien nås ved kjøretid, vil den bare kjøres hvis feature flagget er i en bestemt tilstand.
Feature toggle-eksempler / brukstilfeller
Canary-utgivelser
Når en ny funksjon lanseres, er det ofte nyttig å teste den blant et lite utvalg brukere før den slippes til alle. Denne praksisen er kjent som en «canary-utgivelse» eller «funksjonsutgivelse», og brukes av team for å redusere risiko ved å legge til eller endre en funksjon. Feature toggles kan brukes til å gjennomføre canary-utgivelser ved å kontrollere om den nye funksjonen skal vises til en bestemt bruker og gi muligheten til å rulle ut eller rulle tilbake eksternt.
Testing i produksjon
På grunn av kompleksiteten i moderne utrullingsystemer kan det være forskjeller mellom test- og produksjonsmiljøer som kan introdusere feil som ikke kan oppdages under enhetstesting. Ved å inkorporere feature toggling i utviklingsprosessen kan programvareutviklingsteam frigi funksjoner i produksjonsmiljøet på en kontrollert måte, og målrette mot et mindre segment av brukergruppen for å redusere risiko, for å teste nye funksjoner i produksjon. Hvis testen mislykkes, kan den enkelt rulles tilbake ved ganske enkelt å justere toggle-konfigurasjonen uten endringer i kildekoden.
A/B testing
A/B-tester brukes av team for å eksperimentere med nye ideer og bekrefte hypoteser ved hjelp av virkelige data. De segmenterer trafikk i en av to variasjoner av en funksjon, slik at beregninger kan fanges opp for hver variasjon side om side. En feature toggle kan brukes til å tilrettelegge for en A/B-test ved å kontrollere variasjonen som hver bruker plasseres i. Hvis en feature toggle er «av» for en bruker, vil de se «A»-variasjonen av testen, mens hvis den er «på», vil de se «B»-variasjonen.
Sikringsbryter
Etter hvert som en applikasjon eller infrastruktur vokser i kompleksitet, kan det bli vanskeligere å vedlikeholde og tregere å stabilisere under en feil. Feature toggles er en god måte å håndtere vedlikeholds- og gjenopprettingsproblemer i et voksende system. Når de brukes som sikringsbrytere eller nødstoppbrytere, kan feature toggles gi team en sentralisert, ekstern måte å kontrollere komponenter i utrullede systemer og reagere på feil.
Trunk-basert utrulling
Fordi feature toggles muliggjør rask utrulling og tilbakerulling av ny kode, kan de brukes til å støtte en trunk-basert utviklingsprosess, der kodeendringer kan gjøres direkte i hovedgrenen i stedet for å ha flere feature branches som deretter må slås sammen og avstemmes i Github eller andre kildeadministrasjonsplattformer. Dette kan føre til raskere utgivelsessykluser og mindre tid brukt på feilsøking.
Feature toggles og kontinuerlig levering
Fremmet av den innflytelsesrike programvareutvikleren Martin Fowler, er kontinuerlig integrasjon og kontinuerlig levering (CI/CD) en programvareutviklingsdisiplin der programvare kan frigis til produksjon når som helst. Det har blitt tatt i bruk av ledende programvareselskaper over hele verden, hvis team nå forventes å raskt levere stabil og feilfri programvare til brukergruppen.
Feature flagging forbedrer CI/CD ved å gjøre «kontinuerlig» mer oppnåelig. Feature flags og feature toggles er en nøkkelkomponent i implementeringen av kontinuerlig levering, og muliggjør separasjon av funksjonsutgivelse fra kodeutrulling. Uferdige funksjoner kan flettes inn i produksjonskodebasen, men skjules bak feature flags.
Med kontinuerlig levering og feature flag-administrasjon kan et team lansere, kontrollere og måle funksjonene sine i stor skala.
Optimizely og feature toggles
Optimizely er en ledende aktør innen Progressive Delivery og eksperimentering, og vi tilbyr en rekke ulike løsninger for feature flag-administrasjon.
Optimizely server-side eksperimentering er vår enterprise feature flagging og eksperimenteringspakke som gjør det mulig for utviklingsteam å administrere funksjoner og kjøre funksjonstester på alle internettilkoblede enheter, med SDK-er tilgjengelig for de mest populære språkene og rammeverkene, inkludert Node, Python, Ruby, Go, React, Swift og C#.
For team som bare vil komme i gang med feature toggles, er Optimizely gratis feature flagging en feature flagging-løsning du kan registrere deg for og rulle ut umiddelbart for å begynne å bruke feature flags uten A/B testing-funksjonaliteten, helt gratis (i motsetning til konkurrenter som LaunchDarkly).
Feature toggles er et kraftig verktøy å ta i bruk i programvareutviklingspraksisen din, og Optimizely Feature Experimentation gjør det enklere enn noensinne å redusere risiko, øke utviklingshastigheten og teste ny funksjonalitet i programvaren din.