18 de desembre de 2024
Estratègia de desplegament: Desenvolupament amb Feature Flags
La gestió de versions és clau per assegurar que les versions d'una app estiguin preparades per ser llançades a l'entorn de producció i ser utilitzades de manera eficient. No es tracta només de garantir la qualitat del producte final, sinó també de complir amb les expectatives tant dels equips interns com dels usuaris finals. Aquest procés va més enllà de la simple verificació abans del llançament, ja que abasta tot el cicle de vida de la versió, des del desenvolupament fins a les proves i el seu desplegament en producció.
Una gestió de versions ben executada permet no només assegurar productes d'alta qualitat, sinó també llançaments més freqüents sense augmentar els riscos. En incorporar un enfocament flexible, basat en l'ús de feature flags, és possible reduir el temps de comercialització i fer que el teu producte sigui més competitiu al mercat.
Feature flags
Les feature flags (també anomenades feature toggle) són una tècnica utilitzada en el desenvolupament de programari que permet activar o desactivar funcionalitats específiques dins d'una aplicació sense necessitat de desplegar noves versions del codi. Essencialment, actuen com a interruptors que permeten habilitar o deshabilitar característiques en temps real, de manera controlada i segmentada.
Per què utilitzar-les?
Atorguen als equips de desenvolupament una gran flexibilitat, minimitzen el risc d'interrupcions i permeten un enfocament més dinàmic i adaptatiu per gestionar el cicle de vida de les funcionalitats d'una aplicació.
- Desplegament continu sense riscos: Pots desplegar codi nou en producció sense necessitat d'activar-lo immediatament per a tots els usuaris. Això permet als equips de desenvolupament alliberar noves funcionalitats de manera segura i activar o desactivar característiques segons sigui necessari, reduint el risc d'errors crítics en producció.
- Facilita l'experimentació: Són una eina ideal per realitzar experiments, ja que et permeten provar diferents versions d'una funcionalitat amb subconjunts d'usuaris. Això t'ajuda a prendre decisions basades en dades reals sobre quina versió ofereix millors resultats abans de fer un llançament global.
- Control en migracions i canvis d'infraestructura: En projectes de migració o refactorització, permeten activar parts específiques d'una nova arquitectura (com un nou sistema o servei) sense interrompre el funcionament general de l'aplicació. Això facilita una transició gradual i controlada, amb la possibilitat de realitzar rollbacks immediats si alguna cosa surt malament.
Tipus de feature flags
A continuació, es detallen alguns tipus de feature flags:
- A/B testing: Podem realitzar proves A/B en temps real, mostrant a diferents usuaris diverses versions d'una funció per determinar quina té millor acceptació o rendiment, podem anomenar-ho també un executor d'experiments. Per exemple, podríem provar diferents dissenys o fluxos de UX per a la secció determinada de l'app.
- Desplegaments Canary: Abans de llançar una nova característica a tota la base d'usuaris, podem fer un llançament gradual per a un petit percentatge. Això ens permet recollir feedback i detectar possibles problemes abans d'un llançament massiu.
- Funcionalitats específiques per a segments d'usuaris: Les feature flags ens permeten oferir funcions específiques a determinats segments d'usuaris. Per exemple, podríem llançar funcions avançades només per a usuaris premium o certes característiques de l'app perquè només estiguin disponibles en determinades regions geogràfiques o en funció del dispositiu.
Bones pràctiques
A continuació, s'enumeren algunes bones pràctiques recomanades a l'hora de fer ús de Feature flag en un projecte:
- Convenció de noms assenyada: És essencial adoptar una convenció de nomenclatura per evitar confusions i possibles interrupcions del sistema. Aquesta convenció ha de ser descriptiva, incorporant aspectes com el nom de l'equip, la data de creació, la descripció del comportament del flag i la seva categoria (temporal o permanent).
- Control d'accés: Cada flag ha de tenir un propietari responsable de justificar la seva existència i d'eliminar-la quan sigui necessari. Sense un propietari definit, el flag pot esdevenir obsolet i contribuir al deute tècnic.
- Vida Limitada: A menys que una flag sigui una part permanent del sistema (com les flags d'actualitzacions o versions), és vital recordar eliminar les flags que ja no estan en ús o la funció de les quals ha canviat.
- Precaució amb flags dependents i conflictives: A mesura que creix l'equip de desenvolupament, pot sorgir el problema de flags que són dependents entre si o que entren en conflicte. És crucial identificar i mapar aquestes dependències per evitar problemes durant el desplegament. Per exemple, si dos equips desenvolupen característiques darrere de diferents flags, però no proven la seva interacció, podria trencar-se una part de l'aplicació en activar ambdós flags simultàniament. La planificació i el mapatge detallat de les dependències de les flags són essencials per prevenir aquests problemes.
Exemples d'ús
A continuació, s'exposen alguns casos en què es mostra la versatilitat dels feature flags.
Desenvolupament continu
A causa de la manera en què funcionen les feature flags, ens permet desenvolupar les funcionalitats per parts sense preocupar-nos per haver de crear un branch per a aquesta funcionalitat i després fer el merge amb tot el que això comporta i els possibles conflictes.
Imaginem que tenim una classe que té molta lògica legacy i complexa, per exemple, validar una sèrie de dades. Volem afegir més validacions, però el codi legacy és difícil de modificar. Es decideix reescriure el validor perquè sigui més clar i fàcil de mantenir. Com que això pot trigar una mica, el que es pot fer és crear un feature flag per integrar el codi del nou validador com més aviat millor reduint sobreesforços a l'hora de mergear, a més podem obrir aquest nou validador quan ho necessitem per provar quan sapiguem que hi ha poc trànsit o en algun entorn controlat.
Desactivar funcionalitats
També podem utilitzar feature flag per desactivar funcionalitats en moments d'alta demanda. Imaginem que tenim una secció de comentaris i per alguna raó, la demanda d'aquesta funcionalitat augmenta massa comprometent el sistema. Es pot optar per desactivar els comentaris temporalment.
Prova A/B
A/B testing orientada als diversos canvis que es poden aplicar en les versions d'apps mòbils de les diferents pàgines web. Influeixen factors com el reemplaçament de grans quantitats de text per símbols o canviar la forma dels botons. Per exemple, les cadenes de roba. En les apps, es pot simplificar els textos col·locant un carret de compra en lloc del literal “Comprar” i estudiar el comportament dels usuaris.
Un altre exemple, relacionat amb un sistema de ressenyes. Validar el comportament permetent qualificar els usuaris en una escala de l'1 al 10, en lloc d'un anterior sistema de qualificació de 5 estrelles.
Conclusió
L'ús de feature flags en el desenvolupament d'aplicacions ofereix un avantatge estratègic en permetre un major control sobre l'activació de funcionalitats sense necessitat de dependre del cicle de desplegament. Aquesta capacitat d'activar o desactivar característiques de manera granular facilita el testatge en entorns reals, redueix el risc d'introduir errors en producció i permet als equips de desenvolupament moure's amb més agilitat. No obstant això, és fonamental gestionar correctament aquesta eina, ja que la seva mala implementació pot incrementar la complexitat tècnica i dificultar el manteniment del codi.
Malgrat això, quan s'utilitza de manera adequada, els beneficis superen els desafiaments, aportant als equips una flexibilitat significativa per iterar més ràpid i adaptar-se millor a les necessitats del negoci.
Share
Potser et pot interessar
Servihabitat | Snowflake
Servihabitat necessitava disposar d'una plataforma que els permetés realitzar un seguiment end-to-end dels seus actius per guanyar agilitat en la seva comercialització massiva. Per a això, es posa en marxa un projecte de modernització tecnològica global, amb la implantació de Snowflake Cloud.