Feature toggle

En feature toggle är en mekanism som gör det möjligt att fjärrstyra kod och slå den "på" eller "av" utan att behöva göra en driftsättning.

Vad är en feature toggle?

Inom programvaruutveckling är en feature toggle en mekanism som gör det möjligt att fjärrstyra kod och slå den "på" eller "av" utan att behöva göra en driftsättning. Funktionsväxling används ofta av produkt-, ingenjörs- och DevOps-team för canary-releaser, A/B testing, produktexperimentering och kontinuerlig driftsättning.

Även känd som "feature flags", "feature switches" eller "release toggles"; funktionsväxling har en mängd användningsområden i applikationer och infrastruktur, de flesta av vilka syftar till att minska risker.

De kan till exempel användas i applikationer för att gradvis lansera nya funktioner, vilket låter team testa ändringar på en liten delmängd av användare innan de rullas ut till alla. På liknande sätt kan funktionsväxling i infrastrukturen fungera som kretsbrytare, vilket gör det möjligt för ingenjörer att fjärrkonrollera ett driftsatt systems beteende.

Hur feature toggles fungerar

Feature toggles läggs vanligtvis till i kodbaser för att möjliggöra fjärrstyrning av viss logik vid körning. I koden är denna logik inkapslad så att den kan styras av statusen för en feature toggle. Om feature togglens status är "på" körs den inneslutna logiken. Om feature togglens status är "av" hoppas den inneslutna logiken över.

När en applikation vill känna till statusen för en feature toggle vid körning skickar den en förfrågan till en extern datakälla eller en hanterad tjänst som Optimizely Feature Experimentation. Applikationen kan sedan avgöra om den ska köra den inneslutna logiken baserat på den returnerade statusen.

Eftersom applikationen hämtar statusen för feature toggles från en fjärrkälla, gör det möjligt att styra inkapslad logik på distans, helt enkelt genom att slå på eller av flaggan i konfigurationsfilen utan att kräva koddriftsättning. Om till exempel statusen för en feature toggle ändras i Feature Experimentation, ändras den också i applikationen vid körning.

Kodbaser innehåller ofta många feature toggles som styr olika delar av applikationen. På grund av detta tilldelas feature toggles vanligtvis unika namn eller nycklar för att vara urskiljningsbara och beskrivande för den logik de styr. Dessutom kan feature toggles ha olika statuser för olika användare eller målgrupper. Dessa unika nycklar, samt information om användaren eller målgruppen, kan sedan användas för att slå upp statusen för en specifik feature toggle i en extern datakälla eller Feature Experimentation.

Fördelarna med feature toggles

Den primära fördelen med feature flagging är att det minskar de risker som är förknippade med att släppa ändringar i en applikation. Oavsett om det är en ny funktionslansering eller en liten omfaktorisering finns det alltid en inneboende risk att introducera nya regressioner. För att minska detta kan ändringar i en applikation placeras bakom feature toggles, vilket gör det möjligt att slå dem "på" eller "av" i händelse av en nödsituation.

I mer komplexa fall kan feature toggles användas för att testa ändringar på små delmängder av användare. Genom att aktivera en feature toggle för en bråkdel av alla användare kan team samla insikter innan ändringar rullas ut till alla. Denna funktionalitet hos feature toggles används vanligtvis för funktionslanseringar eller canary-releaser, som innebär att validera ändringar i applikationer och infrastruktur genom att testa dem på en delmängd av användare. Dessa metoder gör det möjligt för team att upptäcka regressioner tidigt och rulla tillbaka om det behövs, vilket minskar risken för fel vid körning.

Feature toggle-utvecklingsprocessen

Det första steget i att implementera en feature toggle är att skapa och definiera den i en extern datakälla eller en tjänst som Optimizely. Detta innebär vanligtvis att välja ett unikt namn eller nyckel för feature togglen samt en initial status. När feature togglen är definierad kan applikationer och infrastruktur börja slå upp dess status med hjälp av dess unika nyckel.

När feature togglen har definierats i Optimizely eller på annat håll måste dess status vara tillgänglig för applikationen. Därför måste kod läggas till i kodbasen för att göra det möjligt för applikationen att slå upp statusen för en feature toggle från den externa källan. Optimizely Feature Experimentation tillhandahåller SDK:er för många stora språk och ramverk som ger denna funktionalitet.

Slutligen, när feature toggles är tillgängliga för applikationen, kan de läggas till specifika kodsökvägar för att möjliggöra fjärrstyrning. Kodsökvägar som kräver fjärrstyrning kan kapslas in i villkorsstyrd logik som kontrollerar statusen för feature togglen innan den körs. Sedan, när den kodsökvägen nås vid körning, körs den bara om feature flaggan är i ett visst tillstånd.

Feature toggle-exempel / användningsfall

Canary-releaser

När en ny funktion lanseras är det ofta användbart att testa den bland ett litet urval av användare innan den släpps till alla. Denna metod kallas en "canary-release" eller "funktionslansering" och används av team för att minska risker vid tillägg eller ändring av en funktion. Feature toggles kan användas för att genomföra canary-releaser genom att styra om den nya funktionen ska visas för en specifik användare och ge möjligheten att fjärrstyra lansering eller återtagning.

Testning i produktion

På grund av komplexiteten hos moderna driftsättningssystem kan det finnas skillnader mellan test- och produktionsmiljöer som kan introducera fel som inte kan upptäckas under enhetstestning. Genom att integrera funktionsväxling i sin utvecklingsprocess kan programvaruutvecklingsteam lansera funktioner i sin produktionsmiljö på ett kontrollerat sätt, riktat mot ett mindre segment av sin användarbas för att minska risker, för att testa nya funktioner i produktion. Om testet misslyckas kan det enkelt rullas tillbaka genom att helt enkelt justera toggle-konfigurationen utan några ändringar i källkoden.

A/B testing

A/B-tester används av team för att experimentera med nya idéer och bekräfta hypoteser med hjälp av verkliga data. De segmenterar trafik i en av två varianter av en funktion, vilket gör det möjligt att samla in mätvärden för varje variant sida vid sida. En feature toggle kan användas för att underlätta ett A/B-test genom att styra vilken variant varje användare placeras i. Om en feature toggle är "av" för en användare skulle de se "A"-varianten av testet, medan de om den är "på" skulle se "B"-varianten.

Kretsbrytare

När en applikation eller infrastruktur växer i komplexitet kan det bli svårare att underhålla och långsammare att stabilisera vid ett fel. Feature toggles är ett utmärkt sätt att hantera underhålls- och återhämtningsproblem i ett växande system. När de används som kretsbrytare eller nödstoppsmekanism kan feature toggles ge team ett centraliserat, fjärrstyrt sätt att kontrollera komponenter i driftsatta system och reagera på fel.

Trunk-baserad driftsättning

Eftersom feature toggles möjliggör snabb driftsättning och återtagning av ny kod kan de användas för att stödja en trunk-baserad utvecklingsprocess, där kodändringar kan göras direkt i huvudgrenen istället för att ha flera feature branches som sedan behöver slås samman och avstämmas i Github eller andra källkodshanteringsplattformar. Detta kan leda till snabbare releasecykler och mindre tid på felsökning.

Feature toggles och kontinuerlig leverans

Med stöd av den inflytelserika programvaruutvecklaren Martin Fowler, är kontinuerlig integration och kontinuerlig leverans (CI/CD) en programvaruutvecklingsdisciplin där programvara kan släppas till produktion när som helst. Det har antagits av ledande programvaruföretag runt om i världen vars team nu förväntas snabbt leverera stabil och felfri programvara till användarbasen.

Feature flagging förbättrar CI/CD genom att göra "kontinuerlig" mer uppnåeligt. Feature flags och feature toggles är en nyckelkomponent i implementeringen av kontinuerlig leverans, vilket möjliggör separering av funktionslansering från koddriftsättning. Ofärdiga funktioner kan slås samman i produktionskodbasen men döljas bakom feature flags.

Med kontinuerlig leverans och feature flag-hantering kan ett team lansera, styra och mäta sina funktioner i stor skala.

Optimizely och feature toggles

Optimizely är en ledare inom Progressive Delivery och experimentering, och vi erbjuder ett antal olika lösningar för feature flag-hantering.

Optimizely server-side experimentering är vår enterprise feature flagging och experimenteringssvit som gör det möjligt för utvecklingsteam att hantera funktioner och köra funktionstester på alla internetanslutna enheter, med SDK:er tillgängliga för de mest populära språken och ramverken inklusive Node, Python, Ruby, Go, React, Swift och C#.

För team som bara vill komma igång med feature toggles är Optimizely gratis feature flagging en feature flagging-lösning du kan registrera dig för och driftsätta direkt för att börja använda feature flags utan A/B testing-funktionaliteten, helt gratis (till skillnad från konkurrenter som LaunchDarkly).

Feature toggles är ett kraftfullt verktyg att använda i din programvaruutvecklingspraktik, och Optimizely Feature Experimentation gör det enklare än någonsin att driftsätta, minska risker, öka utvecklingshastigheten och testa ny funktionalitet i din programvara.