Feature flags se pot implementa in mai multe feluri, depinde care e scopul tau, poti merge foarte departe, pana la proprietati ale userului sau clientului (profiling/incremental release), reguli executate pe client (daca e cont mai vechi de N zile si nu a intrat de N zile) sau poti fi foarte basic, pui un flag ca sa stii pe ce environment ruleaza codul.
Poti avea feature flags hardcoded (versiunea - va determina ce flag-uri ai activate), poti avea feature flags din environment variables - incarci un JSON/inlocuiesti niste string-uri dupa ce se face build-ul, poti avea un serviciu - al tau sau hosted care furnizeaza fiecare feature flag (e.g. launch darkly), inclusiv prin websockets in timp real.
In numele pattern-ului e “feature flags”, ceea ce inseamna ca fiecare flag ar trebui sa fie numit dupa un feature specific si sa activeze/dezactiveze/modifice un singur feature.
Local se poate realiza un fisier numit default_features.json/js din care incarci default-urile intr-un serviciu/provider (ma refer la cod) si iti da aceste flag-uri. Nu recomand sa le incarci direct, fa-ti o fatada sau foloseste o librarie, e util sa ai o comanda cu care poti face override din client cand testezi precum window.enableFlag(‘flag’), window.disableFlag(‘flag’), window.getFeatureFlags()… (cel putin in dev)
Daca vrei sa le incarci din env variables s-ar putea sa fie necesar sa faci base64 la fisierul JSON, daca ai putine feature-uri sau vrei doar un environment flag mai merge sa faci search and replace la string-uri/valori direct in cod. (pui un placeholder pentru dev si dupa build faci search and replace pe codul minificat si transpilat)
Daca stii ca n-ai trafic si esti spartan poti servi JSON-ul de feature flags cu orice iti returneaza un JSON (e.g. Google Sheets/Notion.so/Github pages/Gitlab)
Avantajul major al feature flag-urilor e ca elimina necesitatea de release branches, in mod ideal permit sa fii mereu gata de release sau sa refacturezi fara sa afectezi ceva existent.
Dezavantajul major e ca dupa un timp feature flag-urile trebuie scoase, trebuie facut refactoring (munca de estimat si facuta periodic), ai de mock-uit mai mult prin teste.