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:
- mapy gdzie kluczem jest
string
, a wartościąboolean
:const featureFlags = { secretLink: true, specialFeature: true, modernToast: false, };
- 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/
Powiązane artykuły
- Co to jest runtime?
- compose vs pipe
- Dobre praktyki w JavaScript: $ (dolar) w nazwie zmiennej
- Pytanie rekrutacyjne nr 2: Jak optymalizowałbyś zasoby strony internetowej? — JavaScript Developer
- Pytanie rekrutacyjne nr 1: Stwórz pętle, która będzie wyświetlała liczby od 10 do 0 — JavaScript Developer
- Angular: Krótka historia o tym, jak złamałem system
- Jak zbudować licznik czasu?
- Jak zbudować widget prezentujący testimoniale?
- Angular: Jak zamockować dane do usługi HTTP?
- Jak wyświetlić liczbę osób lajkujących nasz fanpage?
- DeviceLightEvent w ogóle i w szczególe
- Jak przerobić stronę na Progressive Web App?
- Narzędzia Świata: webpack-unused
- Dziedziczenie obiektów w JavaScript (bez użycia klas)
- "JavaScript" to nie to samo co "Java"
- Historia języka JavaScript
- Popularny błąd w obsłudze zdarzeń w JavaScript
- Moja przygoda z monadami w JavaScript
- XMLHttpRequest, czyli natywny AJAX
- Narzędzia Świata: super-event-emitter.js
- Historia loga języka JavaScript
- ECMAScript 6. Dlaczego warto spróbować już dziś?
- Narzędzia Świata: pokemon-picker
- Backbone.js: problem z unikalnymi właściwościami obiektowymi
- Narzędzia Świata: more.js
- eval() czy JSON.parse() - porównanie szybkości
- Uważaj na "use strict", czyli Strict mode w praktyce
- Funkcja to czy obiekt, któż to wie?
- Wykrywanie wersji interpretera JavaScript
- bind() obok call() i apply() jako piękna natura języka
- ECMAScript 5 — kiedy będzie codziennością?
- CoffeeScript + Windows
- Dodawanie metody do obiektu Function poprzez "addMethod"
- Własna biblioteka cross-platform w JavaScript
- Node vs Element