18 de diciembre de 2024
Estrategia de despliegue: Desarrollo con Feature Flags
La gestión de versiones es clave para asegurar que las versiones de una app estén preparadas para ser lanzadas al entorno de producción y ser utilizadas de manera eficiente. No se trata solo de garantizar la calidad del producto final, sino también de cumplir con las expectativas tanto de los equipos internos como de los usuarios finales. Este proceso va más allá de la simple verificación antes del lanzamiento, ya que abarca todo el ciclo de vida de la versión, desde el desarrollo hasta las pruebas y su despliegue en producción.
Una gestión de versiones bien ejecutada permite no solo asegurar productos de alta calidad, sino también lanzamientos más frecuentes sin aumentar los riesgos. Al incorporar un enfoque flexible, basado en el uso de feature flags, es posible reducir el tiempo de comercialización y hacer que tu producto sea más competitivo en el mercado.
Feature flags
Las feature flags (también llamadas feature toggle) son una técnica utilizada en el desarrollo de software que permite activar o desactivar funcionalidades específicas dentro de una aplicación sin necesidad de desplegar nuevas versiones del código. Esencialmente, actúan como interruptores que permiten habilitar o deshabilitar características en tiempo real, de manera controlada y segmentada.
¿Por qué usarlas?
Otorgan a los equipos de desarrollo una gran flexibilidad, minimizan el riesgo de interrupciones y permiten un enfoque más dinámico y adaptativo para gestionar el ciclo de vida de las funcionalidades de una aplicación.
- Despliegue continuo sin riesgos: Puedes desplegar código nuevo en producción sin necesidad de activarlo inmediatamente para todos los usuarios. Esto permite a los equipos de desarrollo liberar nuevas funcionalidades de manera segura y activar o desactivar características según sea necesario, reduciendo el riesgo de errores críticos en producción.
- Facilita la experimentación: Son una herramienta ideal para realizar experimentos, ya que te permiten probar diferentes versiones de una funcionalidad con subconjuntos de usuarios. Esto te ayuda a tomar decisiones basadas en datos reales sobre qué versión ofrece mejores resultados antes de hacer un lanzamiento global.
- Control en migraciones y cambios de infraestructura: En proyectos de migración o refactorización, permiten activar partes específicas de una nueva arquitectura (como un nuevo sistema o servicio) sin interrumpir el funcionamiento general de la aplicación. Esto facilita una transición gradual y controlada, con la posibilidad de realizar rollbacks inmediatos si algo sale mal.
Tipos de feature flags
A continuación, se enumera algunos tipos de feature flags:
- A/B testing: Podemos realizar pruebas A/B en tiempo real, mostrando a diferentes usuarios distintas versiones de una función para determinar cuál tiene mejor aceptación o rendimiento, podemos llamarlo también un ejecutor de experimentos. Por ejemplo, podríamos probar diferentes diseños o flujos de UX para la sección de determinada de la app.
- Despliegues Canary: Antes de lanzar una nueva característica a toda la base de usuarios, podemos hacer un lanzamiento gradual para un pequeño porcentaje. Esto nos permite recoger feedback y detectar posibles problemas antes de un lanzamiento masivo.
- Funcionalidades específicas para segmentos de usuarios: Las feature flags nos permiten ofrecer funciones específicas a determinados segmentos de usuarios. Por ejemplo, podríamos lanzar funciones avanzadas sólo para usuarios premium o ciertas características de la app para que solo estén disponibles en determinadas regiones geográficas o en función del dispositivo.
Buenas prácticas
A continuación, se enumeran algunas buenas prácticas recomendadas a la hora de hacer uso de Feature flag en un proyecto:
- Convención de nombres sensata: Es esencial adoptar una convención de nomenclatura para evitar confusiones y posibles interrupciones del sistema. Esta convención debe ser descriptiva, incorporando aspectos como el nombre del equipo, la fecha de creación, la descripción del comportamiento del flag y su categoría (temporal o permanente).
- Control de acceso: Cada flag debe tener un propietario responsable de justificar su existencia y de eliminarla cuando sea necesario. Sin un propietario definido, el flag puede volverse obsoleto y contribuir a la deuda técnica.
- Vida Limitada: A menos que un flag sea una parte permanente del sistema (como las flags de actualizaciones o versiones), es vital recordar eliminar las flags que ya no están en uso o cuya función ha cambiado.
- Precaución con flags dependientes y conflictivas: A medida que crece el equipo de desarrollo, puede surgir el problema de flags que son dependientes entre sí o que entran en conflicto. Es crucial identificar y mapear estas dependencias para evitar problemas durante el despliegue. Por ejemplo, si dos equipos desarrollan características detrás de diferentes flags, pero no prueban su interacción, podría romperse una parte de la aplicación al activar ambos flags simultáneamente. La planificación y mapeo detallado de las dependencias de las flags son esenciales para prevenir estos problemas.
Ejemplos de uso
A continuación, se exponen algunos casos en los que se muestra la versatilidad de los feature flags.
Desarrollo continuo
Debido a manera en la que funcionan las feature flags, nos permite desarrollar las funcionalidades por partes sin preocuparnos por tener que crear un branch para esa funcionalidad y luego hacer el merge con todo lo que ello conlleva y los posibles conflictos.
Imaginemos que tenemos una clase que tiene mucha lógica legacy y compleja, por ejemplo, validar una serie de datos. Queremos añadir más validaciones, pero el código legacy es difícil de modificar. Se Decide reescribir el validador para que sea más claro y fácil de mantener. Como esto puede tardar un poco, lo que se puede hacer es crear un feature flag para integrar el código del nuevo validador lo antes posible reduciendo sobresfuerzos a la hora de mergear, además podemos abrir este nuevo validador cuando lo necesitemos para probar cuando sepamos que hay poco tráfico o en algún entorno controlado.
Desactivar funcionalidades
También podemos utilizar feature flag para desactivar funcionalidades en momentos de alta demanda. Imaginemos que tenemos una sección de comentarios y por alguna razón, la demanda de esa funcionalidad aumenta demasiado comprometiendo el sistema. Se puede optar por desactivar los cometarios temporalmente.
A/B testing
A/B testing orientada a los diversos cambios que se pueden aplicar en las versiones de apps móviles de las distintas páginas web. Influyen factores como el reemplazo de grandes cantidades de texto por símbolos o cambiar la forma de los botones. Por ejemplo, las cadenas de ropa. En las apps, se puede simplificar los textos colocando un carrito de compra en lugar del literal “Comprar” y estudiar el comportamiento de los usuarios.
Otro ejemplo, relacionado con un sistema de reseñas. Validar el comportamiento permitiendo calificar a los usuarios en una escala del 1 al 10, en lugar de un anterior sistema de calificación de 5 estrellas.
Conclusión
El uso de feature flags en el desarrollo de aplicaciones ofrece una ventaja estratégica al permitir un mayor control sobre la activación de funcionalidades sin necesidad de depender del ciclo de despliegue. Esta capacidad de activar o desactivar características de manera granular facilita el testeo en entornos reales, reduce el riesgo de introducir errores en producción y permite a los equipos de desarrollo moverse con mayor agilidad. Sin embargo, es fundamental gestionar correctamente esta herramienta, ya que su mala implementación puede incrementar la complejidad técnica y dificultar el mantenimiento del código.
A pesar de ello, cuando se utiliza de manera adecuada, los beneficios superan los desafíos, aportando a los equipos una flexibilidad significativa para iterar más rápido y adaptarse mejor a las necesidades del negocio.
Share
Quizá te puede interesar
Servihabitat | Snowflake
Servihabitat necesitaba disponer de una plataforma que les permitiera realizar un seguimiento end-to-end de sus activos para ganar agilidad en su comercialización masiva. Para ello, se pone en marcha un proyecto de modernización tecnológica global, con la implantación de Snowflake Cloud.