Flagi funkcji

Dzisiaj na blogu o podejściu do zarządzania nowymi funkcjami w aplikacji. W jaki sposób je wdrażać, wycofywać, katalogować w zależności od różnych strategii biznesowych. Z pomocą tutaj przychodzi nam koncepcja flag funkcji (Feature Toggles / Feature Flags). Pozwala ona zmieniać zachowanie aplikacji bez zmian w kodzie. Wprowadzamy tutaj rozróżnienie na punkty przełączania, konfiguracje przełączania, kontekst przełączania i jego routing. Punkty przełączania stanowią rozwidlenia w kodzie przy użyciu instrukcji if lub strategi / polimorfizmu. Konfiguracja to to zbiór zasad określających, które flagi są włączone / wyłączone dla poszczególnych funkcji, ale też w zależności od dostarczonego kontekstu. Możemy ją trzymać w pliku płaskim, w bazie danych czy nawet w zewnętrznych serwisach jak Zookeeper, etcd, Consul. Zalecane jest jednak by konfiguracja była zapisana w kodzie źródłowym, gdzie będzie podlegać ewidencji. Programista będzie wiedział kto i dlaczego włączył daną funkcję, ale też analizując kod z przed kilku miesięcy jakie w danym czasie funkcje były uruchomione. Kolejnym elementem jest kontekst przełączania, określa specyficzne parametry potrzebne do obsługi żądania jak np. posiadanie odpowiedniego ciasteczka w przeglądarce. Ostatnim elementem jest routing, to serce całego systemu. Na podstawie punktów przełączania, dostarczonej konfiguracji i kontekstu odpowiednio prowadzi użytkownika po funkcjach aplikacji. Poniżej przykład implementacji tego wzorca przy użyciu biblioteki flagception-bundle.

Zaleca się by stosować osobne flagi w zależności od czasu ich użycia i częstotliwości. Osobne dla mendażerów a osobne dla działu devops. Flagi powinny być włączone w cały proces CI/CD i testować wszystkie możliwe ścieżki. Należy publikować co wydanie informacje, które funkcje są włączone/wyłączone, w tym również trzeba ewidencjonować kto, co i dlaczego dokonał zmiany. Narzędzie do zarządzania konfiguracją powinno być możliwie proste w obsłudze i łatwo dostępne.

Źródło:
https://martinfowler.com/articles/feature-toggles.html
https://github.com/bestit/flagception-bundle