Feature flags
Innehållsförteckning
Vad är feature flags?
Feature flags kallas ibland feature toggles eller feature switches och kan översättas till funktionsflaggor är en teknik för programvaruutveckling och produktexperimentering som slår på och av viss funktionalitet under körtid, utan att distribuera ny kod. Detta möjliggör bättre kontroll och mer experimentering över funktionernas hela livscykel.
Tanken bakom feature flags är att bygga in villkorliga feature branches i koden för att göra logik tillgänglig endast för vissa grupper av användare åt gången. Om flaggan är "on" exekveras ny kod, om flaggan är "off" hoppas koden över.
Feature flags kallas även för "release toggles" och är bästa praxis inom DevOps och förekommer ofta i distribuerade versionskontrollsystem.
Hur fungerar feature flags?
Feature flags är i huvudsak villkorliga uttalanden i din kod som styr om specifika funktioner eller kodblock ska köras. Här är en enkel uppdelning:
- Villkorliga grenar: Utvecklare lägger till if/else-satser i koden där nya funktioner implementeras.
- Flaggstatus: Varje feature flag har en status (på eller av) som kan styras externt, ofta via en konfigurationsfil eller ett hanteringsgränssnitt.
- Exekvering avkod: Koden för den nya funktionen exekveras om flaggstatusen är på. Om flaggan är "av" förbigås koden och det gamla beteendet (eller inget beteende) kvarstår.
Detta gör det möjligt för team att distribuera ny kod till produktion men hålla funktioner dolda tills de är redo att släppas, allt utan ytterligare koddistributioner.
Funderar du på strategi för utrullning av funktioner med feature flags? Varje strategi för utrullning av funktioner med feature flags har olika syften och kan kombineras efter behov.
- Fasade utrullningar: Gradvis lansering för att öka andelen användare
- Canary testing: Begränsad lansering till en liten, representativ grupp
- Målgruppsinriktade utrullningar: Lansering till specifika användarsegment (t.ex. efter plats)
- Beta-testning: Lansering till användare som valt att delta för att få feedback
- Mörka lanseringar: Aktivera i produktion men dölj för användarna
- Procentuella utrullningar: Öka användarnas exponering stegvis
Användningsfall och fördelar med feature flags
Det finns många fördelar med att införliva produktexperimentering och funktionsväxlingar i din lanseringsprocess. Följande är några vanliga användningsfall:
-
Testning i produktion
Feature flags gör det möjligt för utvecklingsteam att testa nya funktioner i produktion, samtidigt som risken för en dålig release minskas genom att tillhandahålla ett sätt att snabbt rulla tillbaka funktionen om det behövs via en kill switch. Eftersom det ofta är omöjligt att helt simulera produktionsmiljön i staging, gör funktionsväxlingar det möjligt att validera funktionaliteten i nya funktionsversioner i den verkliga världen samtidigt som risken minimeras. Feature flags uppmuntrar också till trunk-based development, vilket hjälper till att förhindra sammanfogningskonflikter från olika kodvägar. -
Kanariefåglar som släpps
Ett annat användningsfall för funktionsväxlingar är att låta ett team testa en ny funktion på en undergrupp av slutanvändare för att se hur den fungerar innan den rullas ut till en bredare publik. Canary testing hjälper till att begränsa risken med att lansera en funktion till hela användarbasen och gör att du snabbt kan rulla tillbaka en funktion genom att helt enkelt slå på eller av den, istället för att behöva gå igenom en ny deploy-cykel. -
Snabbare lanseringscykler
Med hjälp av feature flags kan ett team ändra ett systems beteende utan att göra störande kodändringar i livekoden. En stor fördel med feature flags är därför att de är enkla att distribuera i utvecklingsprocessen. Feature flags frikopplar funktionshanteringen från koddistributionen, vilket gör att ingenjörsteamet kan ägna sig åt andra uppgifter. -
Återställning / dödsbrytare
Att aktivera eller inaktivera nya funktioner med hjälp av feature flags är lika enkelt som att funktionsväxla eller redigera en konfigurationsfil jämfört med att behöva göra en ominstallation och gå igenom en långdragen code push. Om en bugg upptäcks i en ny funktion kan den rullas tillbaka direkt utan att du behöver röra källkoden. Detta kan vara särskilt kraftfullt för utvecklare av mobilappar, som kan använda feature flags för att släppa eller rulla tillbaka nya funktioner utan att behöva gå igenom den långa granskningsprocessen i appbutiken. -
A/B-testning på serversidan
Utvecklare kan implementera A/B-testning med hjälp av feature flags genom att aktivera en funktion för hälften av ett segment av användare och inaktivera funktionen för den andra hälften, och se hur de två presterar mot varandra för ett visst mått (t.ex. app-användning eller köp). Eftersom testet implementeras i backend genom kod finns det ingen latens, jämfört med vad man kan uppleva med ett test som implementeras via JavaScript på klientsidan.
Feature flags gör det också möjligt för produktchefer och andra icke-ingenjörer att A/B-testa olika funktioner inom produkter eller system utan att behöva en koddistribution. Tester kan också målgruppsinriktas mot specifika segmenteringar av din användarbas, till exempel användare som bor i ett visst land eller som passar in i en viss användarprofil. Ledande teknikföretag som Google, Facebook, Amazon och Netflix använder ofta A/B-testning av nya funktioner innan de distribueras till hela användarbasen. -
Gating av funktioner
Feature flags kan användas för att genomföra riktade utrullningar av funktioner till en specifik delmängd av dina användare. Detta kan vara bra för A/B-testning av funktioner med specifika segmenteringar av din publik, men det kan också användas för att släppa funktioner till endast en delmängd av dina användare, till exempel att ge användare i din företagsnivå tillgång till funktioner som inte är tillgängliga i lägre nivåer. Genom att implementera feature gating med hjälp av flaggor kan du enkelt utrullning av funktioner till fler av dina användare i framtiden när din produkt utvecklas. -
Kontinuerlig driftsättning
En annan stor fördel med feature flags är deras förmåga att möjliggöra snabb inlärning. Feature flags gör det möjligt för företag att kontinuerligt leverera och distribuera programvara till sina användare på ett snabbare sätt. Användningen av feature flags gör det möjligt för företag att utföra gradvisa utrullningar av funktioner, åtgärda buggar i koden utan att omplacera, uppleva en mer strömlinjeformad utvecklingscykel och göra rollbacks av kod enklare. -
Utvecklingsprocessen för feature flags
Att implementera feature flags i din kod behöver inte vara en komplicerad process. Med en feature flags-tjänst som Optimizely behöver du bara installera SDK, skapa flaggorna inom feature flags-plattformen och sedan lägga in nya funktioner eller kodvägar i din kod inom flaggorna.
Det är allt som krävs för att aktivera feature flags, och nu kan den nya funktionen slås på eller av via en konfigurationsfil, eller till och med via ett visuellt gränssnitt inom feature flagging-plattformen. Detta kan göra det möjligt för icke-tekniska användare, till exempel Product Managers, att köra experiment på nya funktioner eller stänga av funktioner utan att behöva förlita sig enbart på utvecklingsteamet.
När feature flags är live är funktionshanteringen en annan viktig faktor att ta hänsyn till. För att undvika den tekniska skuld som det innebär att ha feature flags kvar i koden efter att de har tjänat sitt syfte, är det viktigt att granska flaggorna regelbundet och ta bort dem som inte längre är nödvändiga. Denna process kan automatiseras inom många plattformar för feature flags. -
Feature flags och kontinuerlig leverans
Kontinuerlig leverans, som förespråkades av den inflytelserika programvaruutvecklaren Martin Fowler, är en disciplin inom programvaruutveckling där programvara kan släppas till produktion när som helst. Den har anammats av ledande programvaruföretag runt om i världen vars team nu förväntas att snabbt leverera programvara som är stabil och buggfri till din användarbas.
Feature flags förbättrar CI/CD genom att göra "kontinuerlig" mer uppnåelig. Feature flags och feature toggles är en huvudkomponent i implementeringen av kontinuerlig leverans, vilket gör det möjligt att separera utrullning av funktioner från koddistribution. Ofullständiga funktioner kan slås samman i produktionskodbasen men döljas bakom feature flags.
Med kontinuerlig leverans och feature flags-hantering kan ett team lansera, kontrollera och mäta sina funktioner i stor skala.
Livscykel för feature flags
1. Skapa och konfigurera feature flags:
- Definiera flaggan i din kodbas
- Konfigurera flaggan i ditt system för funktionshantering
- Konfigurera initiala regler och kriterier för målgruppsinriktning
2. Distribuera och aktivera flaggor i produktion:
- Släpp kod med den nya feature flaggen till produktion
- Aktivera flaggan för inledande målgruppsinriktning eller procentandel av användarna
3. Övervaka prestanda och samla in analyser:
- Spåra användarnas interaktioner med den nya funktionen
- Analysera effekterna på nyckeltal (t.ex. konverteringsgrad, användarengagemang)
- Samla in feedback från användare som exponerats för funktionen
4. Släck och ta bort flaggor när de inte längre behövs:
- Ta bort flaggan när en funktion har släppts helt eller är utdaterad
- Städa upp relaterad kod för att förhindra teknisk skuld
- Uppdatera dokumentationen för att återspegla ändringar
Feature flags i Optimizely Feature Experimentation
Produkt- och ingenjörsteam kan nu använda Optimizely Feature Experimentation ' s funktionshantering för att implementera feature flags. Detta ger samma flexibilitet som produktteam har förlitat sig på med sina experimenteringsprogram för att validera hypoteser innan de lanserar nya produkter, funktioner och upplevelser för alla.
Båda teasmerna kan fungera sömlöst med kontinuerlig integration och kontinuerlig leverans. Hela företag - kommer att kunna dra nytta av de snabbare utvecklingscyklerna och funktionshanteringsmetoder som flaggor eller funktionsväxlingar för att minska risken.
Kunder som använderOptimizely Feature Experimentation på serversidan kan följa i fotspåren av världens främsta programvaruföretag (som Amazon, Google och Facebook) för att utveckla sina användarupplevelser, A/B-testning för att hitta den bästa möjliga upplevelsen och sedan använda utrullning av funktioner för att kontrollera utrullningen.
Genom att först köra A/B-testning på ett litet segment av trafiken kan alla team bestämma den bästa versionen av en ny funktion eller mäta om den nya funktionen verkligen är en förbättring.
Optimizely erbjuder också gratis feature flags genom Optimizely Rollouts, en helt gratis lösning (till skillnad från konkurrenter som LaunchDarkly) för kontrollerade utrullningar av funktioner i din produkt eller app. Rollouts erbjuder ett antal SDK:er på Github för några av de mest populära programmeringsspråken och ramverken, inklusive Node, Python, Ruby, Go, React, Swift och C#.