Przejdź do treści

Feature Flags: Poznaj różnicę między deployem a releasem

Boisz się deployować po długim czasie? Pewnie dlatego, że dawno tego nie robiłeś i przez to, obawiasz się, że gdy zrobisz to teraz, to pewnie coś wybuchnie.

Zmień to! Wdróż mechanizm Feature Flag.

Co to jest mechanizm Feature Flag?

Feature Flagi to konfiguracja, która jest odpowiedzialna za STEROWANIE dostępnymi możliwościami aplikacji oddanej w ręce użytkownika.

Feature Flagi nie powinny być dostępne publicznie do zmiany, z tego powodu, że blokują one dostęp do feature-a, który jeszcze nie jest ukończony.

Jeśli funkcjonalność jest gotowa, to wtedy możemy ją opublikować, ALE nie musimy. W takim przypadku możemy udostępnić użytkownikowi taką Feature Flagę, aby to on sam sobie ją włączył, jeśli chce wejść w tryb posiadania wersji z oprogramowaniem BETA.

Z czego składa się mechanizm Feature Flag?

Feature Flagi to bardzo prosty mechanizm, bazujący na dwóch elementach:

  1. mapy gdzie kluczem jest string, a wartością boolean:
    const featureFlags = {
      secretLink: true,
      specialFeature: true,
      modernToast: false,
    };
    
  2. oraz funkcji sprawdzającej, czy flaga jest włączona:
    const isFeatureEnabled = (name) => featureFlags[name];
    

Jak wykorzystać mechanizm Feature Flag?

Wystarczy, że w miejscu w którym dodajemy nową funkcjonalność, której nie chcemy włączać produkcyjnie, dodamy sprawdzenie:

if (isFeatureEnabled('secretLink')) {
  displaySecretLink();
}

“deploy” vs “release”

“Deploy” to wrzucenie nowego kodu na produkcję. Nie znaczy, że ten kod będzie uruchomiony dla klientów.

“Release” odkrywa funkcjonalność dla użytkownika. Kiedy używamy mechanizmu FF, to de facto release będzie polegał na podmianie feature flagi z false na true.

Dobre praktyki związane z Feature Flagami

Dobrą praktyką jest włączenie nowej funkcjonalności tylko dla określonych użytkowników, po to aby zebrać feedback na jej temat.

Możemy to wykonać bardzo prosto. Otóż dla klientów których sobie wybierzemy, możemy zaktualizować mapę z feature flagami.

Po okresie, w którym otrzymamy feedback od użytkowników nt. ODKRYTEJ funkcjonalności mamy czas, aby ją dopieścić. Następnie możemy wtedy opublikować ją globalnie, czyli dokonać tzw. GENERAL AVAILABILITY.


Gdyby kogoś interesował cykl życia aplikacji, to wiki fajnie to opisuje: https://en.wikipedia.org/wiki/Software_release_life_cycle

Demo 🎉

Stworzyłem bardzo minimalistyczną aplikację, w której jest zaprezentowana istota feature flag: https://piecioshka.github.io/demo-feature-flags/