Vďaka feature flags testujeme bezpečne priamo v produkčnom prostredí 

V nedávnom blogu na tému CI/CD spomínal môj kolega Martin užitočnú funkcionalitu s názvom feature flags. Ako naznačil, dokážeme vďaka nej nový kód skryť pred určitými používateľmi na produkčnom prostredí. Vývojári, alebo iní vybraní ľudia, k nemu ale môžu naďalej pristupovať, testovať ho a rozvíjať, až kým nebude plne pripravený pre verejnosť.

Ako nám feature flags pomáhajú pri vývoji Crossuite?

1. Dokážeme rýchlejšie reagovať na zmeny požiadaviek klienta

Ak sa rozhodne, že nová funkcionalita by mala byť napríklad z marketingových dôvodov zverejnená až neskôr, môžeme ju okamžite vypnúť a potom sa k nej opäť vrátiť. Klient teda získava nad softvérom lepšiu kontrolu a my zas schopnosť flexibilne reagovať na jeho potreby.

2. Vieme testovať nové funkcionality na malej cieľovej skupine 

Získame tak hodnotnú spätnú väzbu skôr, než sa rozhodneme sprístupniť funkcionalitu pre všetkých používateľov. Týmto spôsobom môžeme skontrolovať, ako budú zákazníci na novinku v aplikácii reagovať, a zistiť, či je pre nich skutočne užitočná.

3. Sme schopní opravovať chyby efektívnejšie

Ak sa v určitej funkcionalite vyskytne chyba, pomocou feature flag ju jednoducho vypneme až do momentu, kým nebude opravená. Takto máme možnosť minimalizovať vplyv chyby na používateľov a zároveň pripraviť nápravu bez toho, aby sme museli vydať novú verziu softvéru.

4. Nové funkcionality môžeme implementovať aj kontrolovať postupne

Namiesto toho, aby sme spustili všetky nové funkcionality naraz a následne strávili niekoľko hodín ich testovaním, môžeme ich zverejniť postupne. Vznikne tak séria malých aktualizácií, ktoré sa dajú efektívne skontrolovať. A navyše, používateľ získa dobrý pocit z toho, že softvér mu ponúka každú chvíľu niečo nové. 

Kde sme už stihli feature flags využiť? 

Od zavedenia feature flags do nášho vývoja sme si sľubovali častejšiu integráciu kódu do hlavnej vetvy a teda vyššiu frekvenciu deployov na produkciu. Odvtedy ich využívame pravidelne a zatiaľ sa nám to veľmi osvedčilo. Ako dôkaz som vybral tri špecifické príklady:

Integrácia Zoom meetingov

Spoločnosť ponúkajúca Zoom vyžaduje, aby bolo použitie a nasadenie platformy skontrolované jej zamestnancami. Až vtedy overí aplikáciu pre použitie na produkcii. Na to, aby mohol pracovník firmy integráciu Zoom-u na Crossuite otestovať, sme využili práve feature flag. Integráciu sme povolili len na jednom účte, do ktorého sa kontrolór prihlásil, nasadenie úspešne otestoval a následne schválil.

Použitie novej technológie pre vyhľadávanie

Doteraz využívaná technológia na vyhľadávanie (SQL) už systému po výkonovej ani výsledkovej stránke nestačila. Rozhodli sme sa ju preto nahradiť novou – Elasticsearch engin. Ten sme implementovali cez feature flag, ktorý umožňoval medzi týmito technológiami prepínať a sledovať ich efektívnosť. Zároveň sme Elasticsearch povolili len vybranej skupine používateľov, čo nám umožnilo otestovať ho skôr, ako sme ho sprístupnili všetkým.

(Ne)úspešný release diary printing funkcionality

Aj keď sa snažíme čo najviac kódu pokryť automatickými testami, a následne novú funkcionalitu aj manuálne pretestovať, vždy sa môže po nasadení objaviť nejaký problém, ktorý sa nám nepodarilo počas vývoja a testingu odchytiť. Stalo sa nám to napríklad aj po zverejnení functionality diary printing, ktorá ponúka klinikám možnosť vytlačiť si v rôznych konfiguráciách kalendár s udalosťami. Jednému používateľovi funkcionalita vôbec nefungovala. Namiesto toho, aby sme celú verziu revertli, rozhodli sme sa printing dočasne vypnúť feature flagom. Následne sme v priebehu jedného dňa chybu opravili, releasli a printing opätovne povolili.

Ako featured flags implementujeme?

Momentálne nastavujeme funkciu ručne v databáze pre každý environment. Radi by sme však čoskoro pripravili na správu feature flags jednoduché UI, prípadne implementovali hotové riešenie, aby sme proces optimalizovali. O výsledkoch našej práce vás budeme určite informovať v každomesačných digitálnych inšpiráciách, preto nás nezabudnite sledovať aj naďalej.