Ključne teze (Key Takeaways)
-
Tradicionalno spajanje tehničkog slanja koda na server i njegovog puštanja krajnjim korisnicima stvara nepotreban rizik, usporava timove i nameće stresne noćne i vikend deplojmente.
-
Razdvajanjem deployment i release faza postiže se nezavisnost: inženjeri šalju testiran kod u produkciju svakodnevno, dok biznis odlučuje u kom tačno trenutku se funkcionalnost pali za korisnike.
-
Feature flags (funkcionalni prekidači) omogućavaju postepena puštanja (canary releases), ciljano testiranje na produkciji (dark launching) i trenutno gašenje neispravnih delova sistema (kill switch) bez potrebe za novim git commit-om ili rizičnim hotfix-om.
-
Nekontrolisano uvođenje zastavica bez strogog upravljanja stvara masivan tehnički dug i kombinatornu eksploziju stanja, što može dovesti do katastrofalnih sistemskih propusta.
-
Budućnost donosi automatizovano upravljanje flag-ovima pomoću telemetrije i mašinskog učenja, gde sistemi sami gase nestabilne opcije pre nego što korisnici uopšte primete problem.
Petak je, 16:45. Poslednji pul rikvest (pull request) je spojen u glavnu granu. Skripta za bildovanje prolazi zeleno, a vođa tima na sleku šalje poruku: „Možemo li ovo brzo da pustimo pre vikenda, klijent insistira?“
Svako ko je proveo makar šest meseci u industriji razvoja softvera zna šta sledi. Hladan znoj, nervozno praćenje logova u terminalu, preopterećenje baze podataka zbog neočekivane migracije i panični poziv u 19:30 jer se pola korisničkog interfejsa srušilo. Vikend je uništen, a ponedeljak počinje kriznim sastankom i traženjem krivca.
Iako se većina kompanija danas ponosno kune u agilnost, skram ceremonije i neprekidnu integraciju, surova istina sa terena pokazuje suprotno. Mnogi timovi i dalje žive u iluziji agilnosti, vezani za arhaičan model gde je slanje koda na server istovremeno i trenutak istine kada ga svi korisnici vide.
Rešenje ovog problema ne leži u još rigoroznijim procedurama odobravanja koda niti u višenedeljnim QA fazama koje parališu inovacije. Pravo rešenje leži u fundamentalnoj promeni načina razmišljanja: kroz feature flags u agilnom razvoju i svesno, hirurški precizno razdvajanje tehničkog čina deploymenta od poslovnog čina release-a.
Terminološki jaz koji košta milione: deployment naspram release procesa
U mnogim inženjerskim timovima reči deployment i release koriste se kao sinonimi. To je jedna od najskupljih zabluda modernog softverskog inženjeringa. Izjednačavanje ova dva pojma stvara veštačko usko grlo u kome inženjeri moraju da čekaju odobrenje marketinga, prodaje ili pravne službe da bi poslali kod na server, dok poslovni timovi moraju da trpe tehničke zastoje ako infrastruktura zakaže.
Da bismo razumeli modernu arhitekturu isporuke, ove pojmove moramo razdvojiti:
-
Deployment (tehničko postavljanje): Predstavlja isključivo tehnički proces instalacije koda, kontejnera, binarnih paketa i pratećih resursa na ciljanu infrastrukturu (produkciono okruženje). U zrelom sistemu, deployment je potpuno dosadna, automatizovana radnja. Kod se nalazi na produkcionom serveru, izvršava se, troši memoriju i procesorsko vreme, ali krajnji korisnik ne mora biti svestan njegovog prisustva.
-
Release (poslovno izlaganje): Predstavlja trenutak kada određena funkcionalnost, opcija ili korisničko iskustvo postaje vidljivo i dostupno korisnicima. To je strateška poslovna odluka koja zavisi od marketinških kampanja, ugovornih obaveza, sezone, poslovnih modela ili operativne spremnosti korisničke podrške.
+-------------------------------------------------------+
| TRADICIONALNI PRISTUP |
| [Pisanje koda] ---> [Deployment = Release] (Rizik!) |
+-------------------------------------------------------+
+-------------------------------------------------------------------------+
| MODERAN AGILNI PRISTUP |
| [Pisanje koda] ---> [Deployment na produkciju] ---> [Feature Flag] |
| (Kod je "tih") | |
| v |
| [Release za korisnike] |
+-------------------------------------------------------------------------+
Kada se ove dve radnje spoje, svaka promena nosi maksimalan rizik. Ako nova funkcionalnost ima bag, jedini način da zaštitite korisnike jeste hitan rollback (vraćanje stare verzije koda) ili brzopleti hotfix (zakrpa na živo). Obe opcije su rizične, usporavaju ceo tim i zahtevaju novo pokretanje kompletnog CI/CD pajplajna.
Kada se deployment odvoji od release-a, nova funkcionalnost se šalje na server sakrivena iza uslovne logike. Kod je već tamo, spreman i testiran, ali spava. U trenutku kada biznis odluči da je pravo vreme, prekidač se okreće bez ijednog restarta servera, bez rekonfiguracije kontejnera i bez mešanja inženjera u rad operativnog sistema.
Na portalima koji se bave naprednim inženjerskim praksama, kao što je ITNetwork, često govorimo o tome da je stabilna osnova preduslov za brzu isporuku. Bez jasne demarkacione linije između tehničke i poslovne isporuke, svaka priča o skalabilnosti ostaje samo spisak lepih želja.
Šta su zapravo feature flags i kako rade pod haubom
Feature flags (poznati i kao feature toggles, feature switches, feature flippers ili funkcionalni prekidači) u svojoj najprostijoj definiciji predstavljaju softversku tehniku koja omogućava promenu ponašanja sistema tokom rada (runtime) bez potrebe za ponovnim bilodovanjem ili slanjem koda na produkciju.
U osnovi, to je uslovni blok u kodu:
# Naivni primer koncepta
if feature_flags.is_enabled("redizajnirani_checkout", current_user):
prikazi_novi_checkout_proces(current_user)
else:
prikazi_stari_checkout_proces(current_user)
Ipak, svesti moderan sistem prekidača na puku if/else granu u kodu isto je što i nazvati modernu distribuiranu bazu podataka običnim tekstualnim fajlom. U ozbiljnim sistemima, logika odlučivanja je dinamička, centralizovana i evaluira se u milisekundama na osnovu konteksta zahteva.
Taksonomija funkcionalnih prekidača
U svom pionirskom radu o arhitekturi softvera, poznati autor Martin Fowler na svom zvaničnom blogu podelio je prekidače prema dve ključne dimenzije: dužini životnog veka i dinamičnosti evaluacije.
Na osnovu toga razlikujemo četiri glavne kategorije:
-
Release Toggles (Prekidači za puštanje): Koriste se da omoguće rad na dugotrajnim funkcionalnostima na glavnoj grani koda (Trunk-Based Development). Inženjeri svakog dana spajaju svoj kod sa glavnom granom, ali je funkcionalnost isključena za javnost. Kada je funkcionalnost spremna i testirana, prekidač se uključuje, a kod prekidača se ubrzo briše iz baze koda.
-
Experimentation Toggles (Prekidači za eksperimentisanje): Koriste se za A/B ili multivarijantno testiranje. Svakom korisniku se na osnovu njegovog ID-ja ili sesije dodeljuje određena putanja kroz aplikaciju, a sistem beleži ponašanje kako bi se statistički utvrdilo koje rešenje donosi veći prihod ili bolje korisničko iskustvo.
-
Ops Toggles / Kill Switches (Operativni prekidači): Ovi prekidači se postavljaju oko resursno zahtevnih operacija. Na primer, ako tokom velikih sezonskih rasprodaja baza podataka počne da se pregreva, inženjeri mogu u sekundi da ugase preporučivanje sličnih proizvoda ili generisanje kompleksnih PDF faktura, bez obaranja sajta. Sistem nastavlja da radi u „degradiranom“, ali potpuno funkcionalnom stanju.
-
Permission Toggles (Prekidači za prava pristupa): Omogućavaju da se određene funkcionalnosti selektivno otvore specifičnim grupama korisnika – na primer, samo zaposlenima unutar kompanije (dogfooding), korisnicima na premijum pretplatničkim paketima ili pilot-korisnicima u okviru rane beta faze.
Inženjerska arhitektura: od naivnog if-a do čistog dizajna
Ako samo ubacite desetine if/else blokova direktno u svoje kontrolere ili poslovnu logiku, vaš kod će za nekoliko meseci postati nečitljiv i neodrživ. Pisanje koda sa funkcionalnim prekidačima zahteva disciplinu i primenu proverenih obrazaca dizajna (design patterns).
Zašto je direktno grananje opasno
Pogledajmo primer loše prakse:
// Loša praksa: zagađivanje poslovne logike uslovima
class OrderProcessor {
async processOrder(order: Order, user: User) {
if (featureFlags.isEnabled('novi_obracun_poreza', user)) {
// 20 linija novog koda
const tax = await this.calculateNewTax(order);
order.applyTax(tax);
} else {
// 15 linija starog koda
const tax = await this.calculateLegacyTax(order);
order.applyTax(tax);
}
// Dalji koraci obrade...
}
}
Ovakav pristup otežava pisanje jediničnih testova (unit tests), tera inženjere da razmišljaju o oba stanja unutar jedne funkcije i dramatično povećava šansu da se prilikom brisanja starog koda slučajno obriše nešto važno.
Primena obrasca strategije (Strategy Pattern)
Zreli timovi primenjuju apstrakciju. Poslovna logika ne bi trebalo da zna da li prekidač uopšte postoji; nju zanima samo interfejs.
// Dobra praksa: Korišćenje Strategy i Factory obrazaca
interface TaxCalculator {
calculate(order: Order): Promise<number>;
}
class LegacyTaxCalculator implements TaxCalculator {
async calculate(order: Order): Promise<number> {
// Stari, provereni algoritam
return order.subtotal * 0.20;
}
}
class AdvancedTaxCalculator implements TaxCalculator {
async calculate(order: Order): Promise<number> {
// Novi mikroservis sa geografskim prilagođavanjem
return await externalTaxService.fetchRate(order.destination);
}
}
class TaxCalculatorFactory {
constructor(private flagClient: FeatureFlagClient) {}
getCalculator(user: User): TaxCalculator {
if (this.flagClient.isEnabled('napredni_obracun_poreza', user)) {
return new AdvancedTaxCalculator();
}
return new LegacyTaxCalculator();
}
}
U ovom slučaju, vaša glavna klasa OrderProcessor radi sa interfejsom TaxCalculator. Kada dođe vreme da se ukloni stari kod, vi ne dirate poslovnu logiku, već samo brišete staru implementaciju LegacyTaxCalculator i uklanjate proveru iz fabrike.
+-----------------------+
| Klijentski kod |
| (Poslovna logika) |
+-----------+-----------+
|
| Poziva interfejs
v
+-----------------------+
| TaxCalculator | <--------------------+
| (Interface) | |
+-----------+-----------+ |
^ |
| Implementira |
+---------+---------+ |
| | |
+--------+--------+ +--------+--------+ |
| LegacyCalculator| | AdvancedCalc. | |
| (Stari kod) | | (Novi pod flag) | |
+-----------------+ +-----------------+ |
^ |
| Bira implementaciju |
+---------+---------+ |
| Factory Klasa |--------------+
| (Čita Feature Flag|
+-------------------+
Prilikom projektovanja modernih digitalnih proizvoda, timovi koji grade kompleksna veb rešenja, poput ekipe iz agencije Joombooz, uveliko primenjuju ovakve principe modularnosti kako bi osigurali da nadogradnje softvera teku glatko i bez prekida rada za klijente.
Kako to rade vodeći tehnološki giganti: strategije puštanja u produkciju
Kada jednom uspostavite kontrolu nad flags sistemom, otvaraju vam se mogućnosti koje dramatično menjaju način na koji vaš tim posmatra rizik. Više ne postoji pojam „velikog prasaka“ (big bang release), gde se nova verzija pušta svim korisnicima odjednom. Umesto toga, prelazite na fazne strategije isporuke.
1. Tiho lansiranje (Dark Launching)
Pre nego što korisnicima uopšte prikažete novi korisnički interfejs, možete testirati pozadinsku logiku (backend). Na primer, pravite novi sistem za pretragu proizvoda. Možete podesiti da svaka pretraga koju korisnik izvrši ode na stari sistem (čiji rezultat korisnik vidi), ali da se asinhrono, u pozadini, isti upit pošalje i novom servisu.
Na taj način merite performanse novog servisa, opterećenje baze i tačnost rezultata pod stvarnim produkcionim opterećenjem, a da korisnici nemaju pojma da novi sistem uopšte postoji. Ako novi servis zakaže ili se uspori, korisnik to ne oseća, a inženjeri dobijaju dragocene podatke bez ikakvog rizika po ugled kompanije.
2. Kanarinac izdanja (Canary Releases)
Termin potiče iz rudarske prakse gde su rudari nosili kanarinca pod zemlju; ako ptica prestane da peva, to je znak da se pojavio otrovan gas i da treba bežati pre nego što ljudi stradaju.
U softverskom svetu, nova funkcionalnost se uključuje samo za mali procenat korisnika, na primer za 1%:
[Svi korisnici (100%)]
|
+---> 99% korisnika -------------> Stara stabilna verzija v1
|
+---> 1% korisnika (Canary) ----> Nova verzija pod zastavicom v2
Sistem za nadzor (monitoring) prati ključne parametre: broj serverskih grešaka (5xx HTTP statusi), latenciju odziva, upotrebu memorije i poslovne metrike (stopu napuštanja korpe). Ako se u periodu od sat vremena ne pojavi nijedna anomalija, procenat se podiže na 5%, zatim na 25%, pa na 50%, sve do 100%. Ako u bilo kom trenutku procenat grešaka pređe definisani prag, automatizacija vraća flag na nulu. Problem je osetio minimalan broj korisnika, a incident je rešen pre nego što je eskalirao.
3. Ciljano puštanje prema geografiji i segmentima korisnika
U savremenim sistemima zastavice se mogu konfigurisati prema bilo kom parametru koji sesija nosi: geografskoj lokaciji (GEO targetiranje), tipu pretplate, operativnom sistemu, pa čak i mrežnom provajderu.
Možete, na primer, omogućiti novo plaćanje karticama samo za korisnike iz Srbije, ili aktivirati novi algoritam samo za iOS korisnike u određenom gradu. Ova fleksibilnost omogućava timovima da rešavaju lokalne regulatorne zahteve ili specifičnosti lokalnog tržišta bez grananja same baze koda.
Mračna strana funkcionalnih prekidača: tehnički dug i katastrofa vredna 440 miliona dolara
Bilo bi nepošteno i neprofesionalno predstaviti feature flags kao magični štapić koji nema svoje mane. Uvođenje funkcionalnih prekidača nosi visoku cenu ako se ne primenjuje rigorozna higijena koda. Zastavice su oblik tehničkog duga koji dospeva na naplatu onog trenutka kada je kod napisan.
Zamka kombinatorne eksplozije
Svaki put kada dodate novu zastavicu, uvodite dva moguća stanja aplikacije: uključeno i isključeno. Ako imate dve zastavice, to su 4 stanja (222^2). Ako imate deset zastavica, to su 1.024 moguća stanja sistema (2102^{10}). Ako u sistemu zaboravite 30 starih zastavica, dobijate više od milijardu kombinacija!
Nemoguće je napisati automatizovane testove koji pokrivaju sve ove kombinacije. Pitanje je vremena kada će se desiti da kombinacija tri naizgled nepovezana flag-a dovede do stanja koje nikada nije testirano u razvojnom okruženju, stvarajući bizarne i teško uhvatljive bagove na produkciji.
Broj zastavica (n) Moguće kombinacije stanja (2^n)
------------------------------------------------------
1 2
2 4
5 32
10 1,024
20 1,048,576
30 1,073,741,824 (Preko jedne milijarde!)
Pouka iz istorije: propast kompanije Knight Capital
Najstrašniji primer zloupotrebe i lošeg upravljanja funkcionalnim prekidačima u istoriji računarstva dogodio se 1. avgusta 2012. godine kompaniji Knight Capital Group, vodećoj američkoj finansijskoj kući za visokofrekventno trgovanje na berzi.
Prilikom postavljanja novog softvera, inženjer je zaboravio da instalira novi kod na jedan od osam produkcionih servera. Na tom osmom serveru ostao je stari kod, ali je neko iskoristio stari, zaboravljeni feature flag koji je godinama bio neaktivan. Taj flag je u starom kodu aktivirao eksperimentalnu, neproverenu rutinu pod nazivom „Power Peg“, koja je bila namenjena brzom slanju naloga bez provere cene.
Kada je berza otvorena, sistem je počeo mahnito da kupuje akcije po visokim cenama i odmah ih prodaje po niskim. Za samo 45 minuta, pre nego što su inženjeri uspeli da shvate šta se događa i ugase sistem, kompanija je izgubila 440 miliona dolara. Knight Capital se nikada nije oporavio od ovog udarca i ubrzo je prodat konkurenciji.
Ova katastrofa je postala večna opomena celoj IT industriji: zaboravljeni prekidač u produkciji je napunjena puška uperena u sopstveni biznis.
Pravila inženjerske higijene: kako bezbedno upravljati sistemom prekidača
Da biste izbegli sudbinu zagušenih i opasnih sistema, timovi moraju uvesti jasna operativna pravila i kulturu brisanja koda:
-
Definišite rok trajanja (TTL – Time to Live): Za svaki release toggle mora postojati definisan datum isteka. Release flag ne sme da živi u kodu duže od nekoliko sprintova. Onog trenutka kada je opcija uključena na 100% korisnika i sistem je stabilan, u prvom sledećem sprintu se otvara zadatak u Džiri (Jira) za fizičko uklanjanje uslovnog bloka i brisanje starog koda.
-
Razdvojite konfiguraciju od koda: Nemojte držati stanja zastavica u lokalnim konfiguracionim fajlovima ili promenljivim okruženja (environment variables) koji zahtevaju ponovni deployment aplikacije da bi se promenili. Koristite namenske sisteme za upravljanje prekidačima, bilo da su u pitanju rešenja otvorenog koda (kao što su Unleash ili Flagsmith) ili vodeća enterprise rešenja poput LaunchDarkly-ja.
-
Imenujte zastavice smisleno i konvencionalno: Zastavica ne sme da se zove
test_flag_2ilinova_funkcija. Ime mora jasno opisivati šta radi, ko ju je kreirao i kada ističe, na primer:rel_checkout_v2_exp_2026_12_01. -
Semantičko testiranje podrazumevanih vrednosti (Default Values): Uvek definišite bezbednu rezervnu vrednost (fallback value). Ako se veza između vaše aplikacije i servera sa zastavicama prekine ili baza sa konfiguracijom padne, aplikacija mora znati kako da nastavi sa radom u stabilnom, konzervativnom stanju (obično tako što se sve nove opcije automatski tretiraju kao isključene).
-
Automatizovana detekcija zastarelih prekidača: U modernim CI/CD pajplajnima postoje skripte i linteri koji upozoravaju programere kada je neki flag u kodu stariji od 30 dana, sprečavajući spajanje novog koda dok se stari dug ne vrati.
Uticaj na agilnost i DORA metrike
Uvođenje prakse odvajanja tehničkog od poslovnog plasiranja koda ima direktan, merljiv uticaj na efikasnost inženjerskih timova. Rezultati istraživanja koja sprovodi tim DORA (DevOps Research and Assessment), u okviru platforme Google Cloud DORA metrics, jasno pokazuju da vrhunski timovi drastično nadmašuju konkurenciju u četiri ključna parametra:
-
Deployment Frequency (Učestalost slanja koda): Prelazak sa mesečnih na višestruke dnevne isporuke. Pošto je rizik izolovan iza zastavica, inženjeri bez straha šalju kod u produkciju čim završe zadatak.
-
Lead Time for Changes (Vreme od ideje do produkcije): Vreme potrebno da kod stigne na server skraćuje se sa nekoliko nedelja na svega nekoliko sati.
-
Change Failure Rate (Učestalost neuspešnih promena): Drastično opada, jer se svaka promena može postepeno testirati na malim uzorcima korisnika.
-
Time to Restore Service (Vreme oporavka od incidenta): Umesto višečasovnog traženja greške, kompajliranja i novog deploymenta, vreme oporavka se meri u sekundama – onoliko koliko je administratoru potrebno da klikne na dugme i ugasi problematični prekidač na kontrolnoj tabli.
Metrika Tradicionalni timovi Timovi sa Feature Flags
--------------------------------------------------------------------------
Frekvencija isporuke Jednom mesečno / kvartalno Više puta dnevno
Vreme izrade (Lead) Nekoliko nedelja Nekoliko sati
Oporavak od pada Sati ili dani (hotfix) Nekoliko sekundi (kill switch)
Nivo stresa u timu Izuzetno visok (vikendi) Minimalan (radno vreme)
Ovo menja i unutrašnju dinamiku tima. Programeri više ne moraju da drže dugoživuće grane (feature branches) u git-u, koje dovode do pakla pri spajanju koda (merge hell). Svi inženjeri rade na glavnoj grani (Trunk-Based Development), spajaju svoj kod više puta dnevno, a nedovršene celine jednostavno ostaju ugašene za korisnike.
Budućnost: veštačka inteligencija i autonomni release ciklusi
Kako softverski sistemi postaju sve distribuiraniji i kompleksniji, manuelno upravljanje prekidačima postaće preusko grlo za ljudske operatore. U godinama koje su pred nama, integracija telemetrije, monitoringa i veštačke inteligencije dovešće do pojave autonomnog upravljanja isporukom.
Samoizlečivi sistemi (Self-Healing Deployments)
Tradicionalni sistemi zahtevaju da inženjer sedi pored grafika i prati promene. Budući modeli upravljanja povezuju sisteme za zastavice direktno sa platformama za posmatranje sistema (observability platforms kao što su Datadog, Prometheus ili New Relic) i modelima mašinskog učenja.
Zamislite scenario u kome algoritam automatski pokreće postepeno uvođenje nove funkcionalnosti. U toku tog procesa, AI model u realnom vremenu prati hiljade metrika: od vremena odziva mikroservisa, preko broja bačenih grešaka, pa sve do suptilnih promena u ponašanju korisnika na stranici (npr. smanjenje broja uspešnih klikova za 0.5%).
Ukoliko algoritam prepozna statistički značajnu anomaliju, sistem samostalno zaustavlja širenje, vraća flag na nulu, automatski kreira incident tiket u sistemu sa priloženim logovima i obaveštava inženjera šta se tačno dogodilo. Sve to se odvija bez buđenja dežurnih inženjera u gluvo doba noći i bez ugrožavanja šire baze korisnika.
Hiperpersonalizacija poslovnih pravila
Pored tehničke kontrole, veštačka inteligencija će omogućiti da se release proces dinamički prilagođava pojedinačnom profilu korisnika. Sistemi više neće evaluirati samo jednostavna pravila („ako je korisnik iz Srbije“), već će uzimati u obzir kompletan istorijat interakcija, sklonost ka promenama interfejsa, tehničku pismenost i nivo aktivnosti, servirajući idealnu kombinaciju funkcionalnosti svakom korisniku u realnom vremenu.
Balans između kontrole i discipline
Uvođenje funkcionalnih prekidača nije samo tehnička nadogradnja arhitekture; to je duboka kulturološka transformacija celokupne organizacije. Ono zahteva prenos moći: inženjeri dobijaju slobodu da kod šalju kad god žele bez straha od rušenja sistema, dok poslovni menadžeri, marketing i operacije preuzimaju volan u odlučivanju kome, kada i pod kojim uslovima se ta vrednost isporučuje.
Ipak, sa velikom moći dolazi i velika inženjerska odgovornost. Svaki novi flag mora se posmatrati kao privremeni most koji se mora srušiti onog trenutka kada pređemo na drugu obalu. Timovi koji uspeju da uspostave balans između brzine eksperimentisanja i stroge higijene uklanjanja starog koda, prestaju da strahuju od petka popodne.
Produkcija za njih više nije bojno polje na kome se lome koplja i gube živci, već mirno, predvidivo okruženje u kome se inovacije isporučuju svakodnevno, sigurno i bez ijednog podignutog tona.
Često postavljana pitanja (FAQ)
Da li korišćenje feature flags tehnike usporava rad same aplikacije?
Uticaj na performanse je minimalan ukoliko se arhitektura pravilno postavi. Većina savremenih SDK biblioteka za upravljanje prekidačima čuva celokupnu konfiguraciju lokalno u radnoj memoriji (in-memory cache) aplikacionog servera. Evaluacija pravila se ne vrši pozivanjem udaljenog servera pri svakom korisničkom zahtevu, već se računa lokalno, u mikrosekundama.
Jedino o čemu treba voditi računa jeste prekomerno preuzimanje velikih konfiguracionih fajlova na klijentskoj strani (u mobilnim aplikacijama ili Single Page aplikacijama u pretraživaču), što se rešava slanjem samo onih zastavica koje su relevantne za tog konkretnog korisnika.
Koja je razlika između Feature Flags i Canary Deployment pristupa na nivou infrastrukture?
Infrastrukturni canary deployment (npr. pomoću alata kao što su Kubernetes, Istio ili AWS Route 53) usmerava određeni procenat ukupnog mrežnog saobraćaja na potpuno odvojene instance ili kontejnere sa novom verzijom koda.
Sa druge strane, feature flags rade unutar same aplikacije na nivou koda. To znači da možete imati identične servere sa istim kodom, ali omogućiti novu funkcionalnost samo specifičnim korisnicima na osnovu njihovog korisničkog ID-ja, role ili ponašanja, bez obzira na to na koji server njihov mrežni zahtev sleti. Najzreliji timovi često kombinuju oba pristupa radi maksimalne bezbednosti.
Kako testirati kod koji je sakriven iza funkcionalnog prekidača?
Jedinični testovi (unit tests) moraju testirati obe grane koda: ponašanje sistema kada je zastavica uključena i kada je isključena. U integracionim testovima preporučuje se postavljanje podrazumevanog stanja sistema za produkciju, dok se specifični scenariji testiraju simuliranjem (mocking) klijenta za zastavice. Izuzetno je važno ne dozvoliti gomilanje starih zastavica, jer višestruko preklapanje prekidača eksponencijalno otežava pisanje stabilnih automatizovanih testova.
Da li nam je potreban skup komercijalni servis da bismo počeli sa korišćenjem ove tehnike?
Ne. Za manje timove ili projekte u ranoj fazi sasvim je dovoljno početi sa jednostavnim konfiguracijama u bazi podataka uz odgovarajuće keširanje u memoriji (npr. preko Redis-a) ili korišćenjem biblioteka otvorenog koda (open source) kao što su Unleash ili Flagsmith koje možete samostalno hostovati. Tek kada potrebe za naprednim segmentiranjem, A/B testiranjem i nivoom kontrole od strane biznis korisnika prevaziđu kapacitete internog alata, ima smisla razmatrati enterprise SaaS platforme poput LaunchDarkly-ja.



