¿Qué es un flag de funciones?
Un flag de funciones (también conocido como feature flag) es un enfoque de desarrollo de software que permite activar o desactivar funcionalidades de forma remota sin necesidad de desplegar nuevo código. Gracias al uso de flags de funciones, es posible introducir nuevas características durante la ejecución (runtime) sin modificar ni redistribuir el código original. Al separar el despliegue del lanzamiento, los flags de funciones permiten controlar el ciclo completo de vida de una funcionalidad y realizar pruebas seguras en entornos de producción.
Un flag de funciones puede, por ejemplo, regular el acceso a una nueva funcionalidad si esta se encuentra disponible solo para usuarios internos que la probarán y ofrecerán feedback. En ese caso, dicha funcionalidad solo se mostraría a los empleados que inicien sesión con su correo corporativo.
Los flags de funciones permiten clasificar el riesgo y gestionar componentes. Esto posibilita realizar A/B Testing, lanzar funciones a un subconjunto específico de usuarios, excluir ciertos grupos del acceso a una funcionalidad y muchas otras acciones similares.
Existen distintos tipos de flags de funciones, que se clasifican según su nivel de dinamismo y duración en el sistema, y se utilizan para propósitos diversos. Algunos de los tipos más comunes son:
- De corta duración: Flags diseñados para desplegar cambios nuevos temporalmente y hacer pruebas en producción.
- De larga duración: Flags persistentes, como los interruptores de emergencia, que permanecen activos por más tiempo en el sistema.
- Dinámicos: Permiten cambiar su valor en tiempo de ejecución.
- Estáticos: Solo permiten modificaciones reales mediante cambios en el código o los archivos de configuración.
Ventajas del flag de funciones
En esencia, los flags de funciones permiten desplegar y activar código en producción mientras permanece inactivo. Como resultado, los equipos tienen un mayor control sobre cómo se utiliza la funcionalidad final. Los flags de funciones se han convertido en una herramienta esencial para lanzar nuevas funcionalidades de manera rápida y segura. A continuación, se describen algunas de las formas en que pueden mejorar tus procesos de desarrollo y entrega de software:
Entrega continua
Los flags de funciones permiten a los equipos implementar desarrollo basado en trunk sin preocuparse por crear ramas persistentes o sufrir el temido caos de fusiones. Cuando varios desarrolladores trabajan en áreas superpuestas del código, la integración de nuevas funciones complejas o refactorizaciones delicadas en la rama principal puede volverse complicada. Para reducir estos escenarios complejos de integración y despliegue, los flags de funciones son de gran utilidad.
Gestión de lanzamientos
El uso más común de los flags de funciones es en el proceso de compilación o lanzamiento de funcionalidades. En la gestión de lanzamientos, puedes otorgar acceso anticipado a nuevas funciones a usuarios específicos mediante programas beta o lanzamientos canarios. Comenzar con grupos pequeños e ir ampliando gradualmente permite:
- Observar cómo se comportan los sistemas y servicios bajo una carga creciente.
- Tener en cuenta el feedback del usuario y realizar ajustes si es necesario.
- Asegurarte de que el impacto de posibles fallos sea limitado.
Aumenta la frecuencia de lanzamientos y valida funcionalidades
Usar flags de funciones para realizar soft rollouts permite hacer pruebas continuas y sin riesgos en producción. De esta manera, las funcionalidades nuevas se pueden incluir directamente como parte del lanzamiento previsto. Al verificar regularmente los cambios en una muestra de usuarios, puedes desplegar nuevas funciones más rápido y asegurar lanzamientos de productos de mayor calidad y con menos errores.
Eficiencia operativa
Los flags de funciones permiten activar o desactivar ciertas funcionalidades del sistema para minimizar el impacto de incidentes. Algunos usos de los flags operativos incluyen:
- Activar interruptores de emergencia para evitar que una funcionalidad afecte negativamente la experiencia del usuario o dispare alertas.
- Limitar las solicitudes API para garantizar su fiabilidad.
- Activar una versión más ligera de la funcionalidad en páginas con alta carga.
- Verificar que nuevos microservicios o etiquetas de terceros funcionen correctamente en producción.
- Apoyar el proceso de depuración y ajustar niveles de log según sea necesario.
Experimentación continua del lado del servidor
Mediante el uso de flags de funciones, puedes probar cambios rápidamente en un grupo reducido de usuarios y hacer seguimiento del rendimiento en función de tus KPI. Experimentar mediante A/B Testing te permite descubrir nuevas oportunidades.
Puedes validar o refutar suposiciones probando distintas configuraciones de una funcionalidad con flags de funciones. La experimentación proporciona datos tangibles y métricas útiles para asegurarte de introducir la mejor versión posible de una función que impacte positivamente en los KPI del negocio
Reducción de riesgos
Basándose en el concepto de soft rollouts, los equipos atentos pueden utilizar flags de funciones junto con monitoreo y análisis en tiempo real como solución ante problemas intermitentes que puedan surgir.
Desafíos de los flags de funciones
Aunque el uso de flags de funciones es recomendable y mejora significativamente el flujo de trabajo del equipo, pueden surgir ciertas dificultades, como las siguientes:
Complejidad
El uso de flags de funciones puede volverse complejo con el tiempo y conforme aumentan los casos de uso, especialmente cuando algunas empresas optan por sistemas internos que pueden no ser lo suficientemente sofisticados para soportar sus productos.
Código errático y colaboración difícil
Con el paso del tiempo, la acumulación de flags de funciones en un sistema puede generar código desorganizado. Las declaraciones condicionales dispersas en la base de código pueden alterar el funcionamiento del sistema, y la existencia de múltiples caminos de ejecución complica la identificación de errores durante la depuración.
Deuda técnica
Es importante eliminar los flags una vez que hayan cumplido su propósito. Mantener flags obsoletos o inactivos incrementa la deuda técnica del sistema.
Buenas prácticas para flags de funciones
Al trabajar con flags de funciones, se deben seguir varios procedimientos. A continuación, se presentan algunas buenas prácticas que deberías considerar e implementar para garantizar una experiencia más fluida:
Aplicar una convención de nombres estandarizada
Sin una convención clara de nombres, los miembros del equipo podrían referirse a distintos flags con nombres similares o iguales, lo que puede generar confusión. Esto podría llevar a interrupciones del sistema si alguien activa el flag equivocado.
Gestionar quién tiene acceso a los flags
Implementa registros para controlar quién realiza cambios significativos y cuándo. Esto es esencial para reducir la dependencia entre los equipos de producto e ingeniería y aumentar la eficiencia, ya que aporta transparencia en la implementación de cambios.
Gestionar cada toggle de forma específica
Existen distintos tipos de flags, y cada uno requiere una gestión distinta. Por ejemplo, no es correcto tratar un release toggle de la misma manera que un interruptor de emergencia.
Realizar limpiezas periódicas de flags
Asegúrate de eliminar de forma periódica los flags que ya no se utilizan, especialmente aquellos que fueron creados con un propósito temporal y limitado.
Conclusión
Los flags de funciones son una herramienta eficaz dentro de cualquier estrategia de entrega continua, y pueden usarse de manera muy creativa. En general, los flags permiten a los equipos tener mayor control sobre su base de código, los despliegues y la experiencia del usuario final.