
[29/06/2020] Las arquitecturas de aplicaciones en la nube, los microservicios, los pipelines de CI/CD (integración continua, desarrollo continuo), la automatización de pruebas y la infraestructura como código, son todas tecnologías que permiten a los equipos de DevOps un desarrollo ágil y una frecuencia mayor de entrega de código a producción. Han llevado el desarrollo de software desde los días de los lanzamientos trimestrales e integraciones complejas a una era moderna de desarrollo continuo.
Los desarrolladores siempre han estado preocupados sobre cómo administrar la base de código para soportar lanzamientos frecuentes, la productividad del desarrollador, el desarrollo de funciones y la refactorización del código para abordar la deuda tecnológica. GitHub permite diferentes paradigmas de desarrollo y ramificación, donde se incluyen las ramas de funciones, las ramas de lanzamiento, desarrollo basado en trunk, y flujo de trabajo de Gitflow. Las estrategias de ramificación estructuran el código que entra en las compilaciones y, por lo tanto, se pueden usar para controlar qué funciones se implementan para los usuarios finales.
A pesar de una discusión en curso sobre los enfoques de ramificación, existe un fuerte consenso de que los equipos de desarrollo deben evitar el uso de ramas de funciones de larga duración. Las ramas de funciones de larga duración a menudo crean combinaciones de código complejas cuando la función está lista para integrarse en la rama principal.
¿Qué es el feature flag?
La ramificación controla la implementación del código y puede regular si una función se implementa. Pero esto es solo un control binario bruto que puede activar y desactivar la disponibilidad de la función. El uso de solo ramificaciones para controlar las implementaciones de funciones limita la capacidad de un equipo para controlar cuándo se implementa el código, en comparación con cuándo los líderes de productos lo habilitan para los usuarios finales.
Existen momentos en que los propietarios de los productos y los equipos de desarrollo deben implementar funciones y controlar el acceso a ellos en tiempo de ejecución. Por ejemplo, es útil experimentar y probar funciones con segmentos específicos de clientes, o con una parte de la base de usuarios. El feature flag es una capacidad y un conjunto de herramientas que permiten a los desarrolladores ajustar funciones con flags de control. Una vez que los desarrolladores implementan el código de la función, los flags les permiten alternar, probar y desplegar gradualmente la función con herramientas para controlar si los usuarios finales se muestran y cómo lo hacen.
El feature flag permite la producción progresiva activando una función de forma lenta y controlada. También impulsa la experimentación. Las funciones se pueden probar con los usuarios finales para validar el impacto y la experiencia. Jon Noronha, vicepresidente de productos de Optimizely, afirma: "Los equipos de desarrollo deben moverse rápidamente sin romper las cosas. La entrega progresiva ayuda a aislar las roturas en pedazos pequeños y a reducir el radio de explosión que puede eliminar aplicaciones completas”.
Revisemos varias formas en que los equipos de desarrollo pueden impulsar la experimentación de metodología ágil utilizando indicadores de funciones.
1. Funciones de control en ambientes de desarrollo y prueba
¿Cuántas veces las aplicaciones en ambientes de desarrollo o prueba enviaron correos electrónicos accidentalmente a usuarios internos -o peor, a clientes externos- debido a una configuración incorrecta? ¿Se ejecutó un trabajo por lotes cuando no se suponía, o una aplicación procesó tarjetas de crédito cuando los pruebas beta estaban probando nuevas capacidades?
Estos pueden ser ajustes de configuración que son fáciles de habilitar o deshabilitar si solo existen unos pocos ambientes. Pero ¿qué sucede si, además de los ambientes de desarrollo y prueba, también existen ambientes de demostración para las pruebas de los clientes? ¿Qué sucede si desea que las aplicaciones en ambientes de demostración envíen correos electrónicos a una lista específica de dominios, o si desea probar transacciones de pago específicas?
Además, ¿qué pasa si los desarrolladores o los ingenieros de sistemas no deberían tener estos controles, pero desea exponerlos a los gerentes de negocios que pueden operar ambientes para diferentes necesidades comerciales?
No podrá realizar este nivel de configuración en las pruebas de nivel de código o de sistema una vez que existen muchas variables, configuraciones y propietarios fuera de TI necesarios para controlarlos. El feature flag es una forma de habilitar estos controles y puede ser más fácil que las herramientas administrativas de codificación personalizadas.
2. Pruebas A/B de la experiencia del usuario, el diseño y el lenguaje
Los diseñadores a menudo quieren probar las interfaces de usuario y los diseños de funciones con los usuarios finales para evaluar su facilidad de uso e impacto. Los desarrolladores y diseñadores pueden probar diferentes diseños de varias maneras para validar cuáles obtienen más tracción.
* Imagine implementar una llamada a la acción "comprar ahora” con diferentes gráficos, estilos de botones y texto para ver qué enfoque genera la mayor cantidad de clics.
* Digamos que su aplicación permite a los usuarios ordenar los resultados de búsqueda de acuerdo con varias dimensiones. Un diseñador puede probar diferentes controles para soportar la clasificación multinivel y ver qué enfoque les gusta más a los usuarios de prueba.
* Permitir que los usuarios establezcan controles de privacidad y configurar aplicaciones puede ser complicado, especialmente decidir sobre los niveles de granularidad, idioma y controles. Probar varios enfoques es una forma de permitir a los usuarios expresar qué enfoque es más fácil de entender, y controlar, según sus necesidades.
3. Nueva tecnología de prueba alfa y beta
En ocasiones, los desarrolladores necesitan probar nuevos servicios, bibliotecas o kits de desarrollo de software. Otras veces, una actualización disponible incluye nuevas capacidades. ¿Cómo deben saber los propietarios de productos ágiles y los equipos de desarrollo qué componentes y capacidades están listas para aplicaciones críticas?
Una forma de eliminar las conjeturas es implementar funciones, controlarlas con feature flags y liberarlas como funciones alfa. Los desarrolladores pueden habilitar funciones alfa para un pequeño grupo de empleados internos para proporcionar comentarios sobre las nuevas capacidades. Una vez que el equipo de desarrollo aborda cualquier problema o riesgo, el propietario del producto puede habilitar la función para probadores beta internos y externos.
4. Valide el rendimiento aumentando lentamente el acceso a nuevas capacidades
Una variante de las pruebas alfa y beta es cuando los equipos de desarrollo aumentan lentamente el acceso a una nueva capacidad para garantizar su fiabilidad, rendimiento y solidez.
Dependiendo de las herramientas de marcado de funciones utilizadas, puede haber diferentes niveles de información y controles disponibles para administrar un despliegue incremental. Algunos casos de uso anticipados incluyen:
* Si se detectan errores, disminuya el número de usuarios que ven la nueva capacidad hasta que se resuelvan los problemas. Los errores pueden provenir de inputs del usuario que no están suficientemente validadas o errores de servicios, microservicios y bases de datos de terceros nuevos o actualizados.
* Si el tiempo de respuesta aumenta por encima de un umbral definido, reduzca la disponibilidad de la función. Un enfoque relacionado para cuando los equipos no pueden cargar adecuadamente la prueba incluye aumentar lentamente la disponibilidad de una nueva función hasta que se valide el rendimiento.
* Otro caso de uso emergente es validar la respuesta al aprendizaje automático y los algoritmos de inteligencia artificial, como chatbots, interfaces de lenguaje natural, algoritmos de reconocimiento de imágenes y controles de voz. Las aplicaciones se pueden programar con indicadores de funciones avanzadas para controlar qué casos de uso se habilitan a medida que se prueban y mejoran los algoritmos.
5. Despliegue funciones de acuerdo con geografía, idioma u otros segmentos de clientes
Una consideración importante es activar las funciones para segmentos específicos de clientes. Por ejemplo, una función puede estar lista para exponerse a usuarios en los Estados Unidos, pero la regulación impide que se use en la Unión Europea. Otro ejemplo son las funciones que requieren implementaciones específicas del idioma; las feature flags pueden habilitar los idiomas seleccionados. Los propietarios de productos pueden querer habilitar nuevas funciones para usuarios nuevos, clientes de bajo riesgo u otros datos demográficos.
Aunque las feature flags ofrecen varias opciones para implementar o configurar lentamente la disponibilidad de las funciones, es importante usarlas para estos fines. El uso de feature flags como un sustituto barato para implementar la lógica empresarial y los parámetros relacionados puede crear problemas de soporte de aplicaciones. Además, es importante catalogar las flags y retirarlas cuando ya no se necesiten.
Dado que los desarrolladores de hoy deben probar nuevas capacidades más rápido, las feature flags proporcionan las herramientas para permitir la experimentación e implementar nuevas capacidades con menos riesgos.
Isaac Sacolick, InfoWorld
Crédito foto: Caesararum, Licencia: CC BY 2.0