Vad är en feature flag?

Av Weapp · Uppdaterad

En feature flag är en strömbrytare i koden som slår på eller av en funktion utan att man behöver släppa en ny version. Den används för gradvis utrullning, för att testa mot utvalda kunder och som panikknapp om något går fel. Flaggan skiljer driftsättning från lansering, men oanvända flaggor blir teknisk skuld om de aldrig städas.

Feature flags är ett av de knep som skiljer ett moget utvecklingsteam från ett som släpper nya funktioner med korsade fingrar. Begreppet låter tekniskt, men idén är vardaglig: en strömbrytare. Här är vad en feature flag är, vad den används till, och varför den är värd att känna till även som beställare.

Definitionen

En feature flag – ibland kallad feature toggle – är en strömbrytare inbyggd i koden som slår på eller av en funktion utan att en ny version behöver släppas. Funktionen finns på plats i mjukvaran, men flaggan avgör om den är synlig och aktiv eller inte.

Det låter enkelt, och det är det. Men effekten är stor: det bryter kopplingen mellan att koden finns och att funktionen är tänd. I stället för att en ny funktion oundvikligen går live i samma sekund som den släpps ut, kan teamet bestämma exakt när, för vem och hur snabbt den ska rullas ut – och släcka den lika enkelt.

De tre huvudanvändningarna

Feature flags används framför allt till tre saker, och alla tre minskar risk.

  1. Gradvis utrullning. I stället för att tända en ny funktion för alla på en gång släpps den på för en liten andel av användarna först. Ser allt bra ut breddas den stegvis. Dyker problem upp har bara en bråkdel berörts, och funktionen kan släckas innan den når fler.
  2. Test mot utvalda kunder. En funktion kan tändas bara för en pilotgrupp – ett par utvalda kunder eller den egna personalen – som får prova den skarpt och ge återkoppling innan den öppnas för alla. Man testar i verkligheten, men i kontrollerad skala.
  3. Panikknapp vid fel. Visar sig en nyligen släppt funktion strula kan den släckas omedelbart med ett klick. Man slipper stressa fram en nödrättning och släppa ny kod under press – funktionen bara stängs av tills felet är utrett i lugn och ro.

Ett konkret scenario

Säg att en betaltjänst ska lägga till ett nytt betalsätt. Koden driftsätts, men bakom en släckt feature flag – ingen användare ser något ännu. Teamet tänder den först för sin egen personal, som testar hela flödet skarpt. Allt fungerar.

Sedan tänds den för fem procent av kunderna. Statistiken ser bra ut, och andelen ökas stegvis till alla. Hade något gått snett på vägen hade flaggan släckts på sekunden, utan panik och utan nytt släpp. Samma funktion, men utrullad med kontroll i varje steg i stället för ett stort och oåterkalleligt hopp.

Skillnaden mellan att driftsätta och att lansera

Det scenariot visar den kanske viktigaste poängen: feature flags skiljer driftsättning från lansering.

Att driftsätta är att lägga ut den nya koden i den skarpa miljön. Att lansera är att göra funktionen tillgänglig för användarna. Utan flaggor är det samma händelse – koden ut, funktionen live, i samma ögonblick, ofta sent på kvällen för att minimera skadan om något går fel. Med flaggor kan koden driftsättas släckt när som helst, och funktionen tändas senare vid en vald tidpunkt. Det gör varje förändring lugnare och mindre riskfylld, vilket är en stor del av värdet.

Skötselvarningen: städa gamla flaggor

Det finns en baksida att känna till. Varje feature flag är en förgrening i koden – ett “om flaggan är på, gör så här, annars så här”. Så länge flaggan behövs är det bra. Men när en funktion väl är fullt utrullad till alla har flaggan gjort sitt, och blir den kvar ändå skräpar den ner koden.

Många glömda flaggor gör koden svårare att läsa och lättare att göra fel i – en form av teknisk skuld som byggs upp tyst. Ett ansvarsfullt team städar därför bort flaggor som spelat ut sin roll, så att bara de aktiva finns kvar. Det är inget att oroa sig för, men det är en av de saker som skiljer disciplinerad utveckling från slarvig. Vill ni ha ett neutralt omdöme om hur ert system sköts på den här sortens punkter, hör av er.

Vanliga frågor

Vad är en feature flag, enkelt förklarat?

Det är en strömbrytare inbyggd i mjukvaran som styr om en viss funktion är på eller av. I stället för att en ny funktion aktiveras för alla i samma stund den släpps, kan man med en flagga slå på den för vem man vill, när man vill – utan att röra koden på nytt. Funktionen finns redan där; flaggan avgör bara om den är tänd.

Vad används feature flags till?

Framför allt tre saker. Gradvis utrullning: en ny funktion släpps på för några procent av användarna först och breddas om allt ser bra ut. Test mot utvalda kunder: en funktion tänds bara för en pilotgrupp. Och som panikknapp: går något fel kan funktionen släckas direkt, utan att man behöver skynda fram en nödrättning. Allt sker med en enkel omställning i stället för ett nytt släpp.

Vad är skillnaden mellan driftsättning och lansering?

Driftsättning är att lägga ut ny kod i den skarpa miljön. Lansering är att göra funktionen tillgänglig för användarna. Utan feature flags sker de samtidigt. Med flaggor kan man driftsätta koden släckt och tända den senare – till exempel vid en bestämd tidpunkt eller efter en test. Det tar bort stressen i att kod och synlig funktion inte längre måste hända i exakt samma ögonblick.

Kan feature flags orsaka problem?

Ja, om de inte sköts. Varje flagga är en förgrening i koden, och en flagga som blir kvar långt efter att funktionen rullats ut fullt gör koden mer svårläst och skör. Många glömda flaggor blir en form av teknisk skuld. Lösningen är enkel men kräver disciplin: städa bort flaggor som gjort sitt, så att bara de som verkligen behövs finns kvar.

Är feature flags något jag som beställare behöver bry mig om?

Inte i detaljerna, men det är bra att känna till. Att ett team använder feature flags är oftast ett gott tecken – det betyder att de kan släppa nytt försiktigt och snabbt släcka något som strular, vilket sänker risken vid varje förändring. Det du kan efterfråga är hur nya funktioner rullas ut och hur snabbt en trasig funktion kan stängas av om det behövs.