El Arte de la Activación de Funciones

Rate this content
Bookmark

¿Cansado de conflictos de fusión y fallas del sistema después de un gran lanzamiento? ¡Las banderas de funciones pueden ser tu salvavidas!


Nos esforzamos por poner nuevas funciones en manos de nuestros usuarios lo más rápido posible de manera sostenible. Algunas funciones pueden llevar más tiempo de desarrollo y afectar otras partes del sistema. Si no se manejan con cuidado, este tipo de funciones pueden resultar en conflictos de fusión que mantienen a los desarrolladores despiertos toda la noche, sin mencionar las temidas fallas del sistema después de un gran lanzamiento. Equipados con banderas de funciones, podemos evitar esta pesadilla y desplegar cambios de código de manera segura de forma continua.


Esta charla consiste en consejos prácticos sobre cómo usar las banderas de funciones como interruptores de lanzamiento.

8 min
01 Jul, 2021

Video Summary and Transcription

La activación de funciones es una práctica efectiva en el desarrollo de software para prevenir impactos inesperados de los cambios de código. Virtuflex ofrece una solución para la integración y despliegue continuo, permitiendo a los desarrolladores servir cómics aleatorios con diferentes opciones de aleatoriedad. Las banderas de funciones se utilizan para controlar el comportamiento de los sistemas de IA durante el desarrollo, permitiendo despliegues graduales y pruebas automatizadas. Una vez que una función está completa y probada, el código y la bandera se pueden eliminar de forma segura.

Available in English

1. Introducción a la Funcionalidad de Bandera

Short description:

Hola, mi nombre es Diani Yedono y llevo más de una década desarrollando software. Me gustaría compartir una práctica efectiva llamada funcionalidad de bandera que he estado utilizando para integrar y desplegar mi código. A veces, los cambios en un código no afectarían a ninguna otra parte del sistema de software. Sin embargo, incluso un pequeño cambio puede afectar inesperadamente a otras partes. Hay muchos procesos que las personas utilizan para asegurarse de que el software esté protegido de las migraciones introducidas por cualquier cambio de código. Uno de los procesos es tener ramas de funcionalidad de larga duración.

Hola, mi nombre es Diani Yedono y llevo más de una década desarrollando software. Me gustaría compartir una práctica efectiva llamada funcionalidad de bandera que he estado utilizando para integrar y desplegar mi código.

Comencemos pensando en el pasado. ¿Recuerdas ese momento en que ocurrió una falla del sistema justo después de un gran lanzamiento? Si nunca has experimentado eso, espero que nunca tengas que hacerlo porque es realmente horrible. Este comentario muestra a una persona pidiéndole a otra persona que imagine que desplegaron una nueva versión de su sistema de gestión de clientes y 15 minutos después la tienda en línea se cae.

A veces, los cambios en un código no afectarían a ninguna otra parte del sistema de software. Sin embargo, en muchos casos, incluso un pequeño cambio puede afectar inesperadamente a otras partes. Y eso es bastante normal. Hay muchos procesos que las personas utilizan para asegurarse de que el software esté protegido de las migraciones introducidas por cualquier cambio de código. Uno de los procesos es tener ramas de funcionalidad de larga duración. Cada una de las ramas se revisa y prueba exhaustivamente antes de fusionarse. Sin embargo, esto puede llevar a otro tipo de problema. Este comentario muestra a un desarrollador que intenta fusionar su rama en la principal. Primero, extraen los cambios de la principal a su rama. Una vez que están satisfechos, se preparan para fusionar su rama de vuelta en la principal. Sin embargo, otro desarrollador acaba de fusionar un gran conjunto de cambios en la principal. Fusionar cambios grandes puede generar conflictos de fusión y eso puede mantener a los desarrolladores despiertos por la noche. Y no es una práctica sostenible.

2. Introducción a Virtuflex

Short description:

La integración continua es una práctica popular en el desarrollo de software, pero fusionar código a medio cocinar puede ser un desafío. Afortunadamente, Virtuflex ofrece una solución. Esta charla se centra en el uso de Virtuflex para la integración continua y el despliegue. Exploraremos un ejemplo de aplicación web que utiliza Virtuflex para servir cómics aleatorios a los usuarios, con la capacidad de cambiar entre un generador de números aleatorios matemáticos y un generador de números aleatorios basado en IA.

Estos problemas han llevado a las personas a comenzar a practicar la integración continua, donde los desarrolladores integran continuamente sus cambios de código en la rama principal, poco a poco y de manera regular. Pero, ¿qué sucede si la nueva función tarda mucho tiempo en desarrollarse? ¿Cómo podemos fusionar código a medio cocinar sin afectar a los usuarios o consumidores del software?

Afortunadamente, Virtuflex puede ayudarnos. Virtuflex se ha utilizado para muchos propósitos, algunos de los cuales no forman parte de esta charla. Por lo tanto, esta charla no trata sobre el uso de Virtuflex para lanzamiento canario, pruebas A-B o interruptores Kailh. Pero esta charla trata sobre el uso de Virtuflex para la integración continua, que consiste en fusionar continuamente los cambios de código en la rama principal o tronco, y el despliegue continuo, que consiste en desplegar continuamente los cambios de código de manera segura en producción.

Ahora veamos un ejemplo de aplicación web que va a utilizar Virtuflex. Esta es una aplicación web que almacena una colección de cómics digitales. Tiene una función, que es servir un cómic aleatorio al usuario. Inicialmente, el sitio web utiliza un generador de números aleatorios matemáticos. Luego se decide tener una nueva función y utilizar IA para servir un cómic aleatorio a los usuarios. Y esta IA puede servir el cómic aleatorio dependiendo del clima, por ejemplo, o dependiendo de las tendencias en el mundo. Solo estoy inventando algunas nuevas funciones aquí. El generador de números aleatorios necesita ser cambiado para utilizar IA. Y eso puede llevar un tiempo.

3. Uso de Feature Flags para el Desarrollo de Sistemas de IA

Short description:

Durante el desarrollo, utilizamos feature flags para controlar el comportamiento del sistema de IA. Al introducir un feature flag llamado 'AI randomizer', podemos alternar entre el uso del generador de números aleatorios matemáticos o el generador de números aleatorios basado en IA según el entorno. El flag se almacena como una variable de entorno, lo que nos permite construir y desplegar de manera segura el código del generador de números aleatorios basado en IA poco a poco. También se implementan pruebas automatizadas creando pruebas para ambos estados del flag. Una vez que la función está completa y probada en el entorno de producción, podemos eliminar el código y el flag.

Durante el desarrollo ascendente, queremos mostrar el progreso del sistema de IA. Por ejemplo, en un entorno de desarrollo, UAT o QA. Sin embargo, aún no queremos lanzar esta función a medio cocinar a producción. Por lo tanto, necesitamos una forma de utilizar tanto el generador de números aleatorios matemáticos como el generador de números aleatorios basado en IA, dependiendo del entorno.

Este es el código inicial que utiliza un generador de números aleatorios matemáticos para servir un cómic aleatorio. Ahora, veamos cómo el feature flag puede hacer que la aplicación web sirva un cómic tanto del generador de números aleatorios matemáticos como del generador de números aleatorios basado en IA. En la línea seis, verificamos un feature flag llamado feature flag AI randomizer. Cuando está activado, utilizamos el generador de números aleatorios basado en IA para servir el cómic. Cuando está desactivado, utilizamos el generador de números aleatorios matemáticos en su lugar. El feature flag se almacena como una variable de entorno. En el entorno de desarrollo, el valor se establece en activado, mientras que en producción, el valor se establece en desactivado. De esta manera, podemos construir y desplegar de manera segura el código del generador de números aleatorios basado en IA poco a poco y de manera regular tanto en desarrollo como en producción. Se puede probar continuamente en desarrollo sin afectar a los usuarios de producción. Una vez que la función del generador de números aleatorios basado en IA está completa, podemos activar el flag en producción. Ahí es cuando lanzamos la función. Sin embargo, el código en sí ha estado inactivo en producción durante un tiempo. Así es como se utiliza el feature flagging. Este ejemplo es para el feature flagging del backend. Una ventaja de esta técnica es que es muy versátil y se puede utilizar en otras partes del software. Por ejemplo, en el código del front-end de una aplicación web o una aplicación móvil.

Bien, ¿qué hay de las pruebas automatizadas? ¿Cómo vamos a probar las funciones con flags? Veamos la prueba para este código. Esta es la prueba inicial cuando la aplicación web solo utiliza el generador de números aleatorios matemáticos. Cuando se llama a la API de números aleatorios, debe devolver un cómic falso, que es el único cómic almacenado en el almacenamiento de datos de prueba. Cuando se introduce el flag, establecemos explícitamente el flag en desactivado para la prueba existente. Luego agregamos una prueba cuando el flag está activado. De esta manera, tenemos pruebas automatizadas tanto cuando el flag está activado como cuando está desactivado. Para este ejemplo en particular, la prueba es similar. Devuelven el cómic falso tanto cuando el flag está activado como cuando está desactivado. Esto se debe a que solo tenemos un cómic falso en nuestro almacenamiento de datos de prueba. En muchos casos, una nueva función tiene un comportamiento diferente y, por lo tanto, pruebas diferentes cuando el flag está activado y desactivado.

Entonces, acabamos de repasar el arte secreto del feature flagging. En resumen, comenzamos introduciendo el flag, probamos tanto cuando el flag está activado como cuando está desactivado, y luego escribimos el código de implementación tanto cuando el flag está activado como cuando está desactivado. Nos aseguramos de que el flag esté activado en DEV y desactivado en PROD. Luego desplegamos el código en DEV y también lo desplegamos en producción, y estará inactivo en producción porque el flag está desactivado. Una vez que la función está completa y queremos lanzarla, activamos el flag en PROD. Y una vez que estamos seguros de que la función ha estado comportándose de manera esperada en PROD durante un tiempo, podemos eliminar el código de implementación cuando el flag está desactivado, eliminar la prueba cuando el flag está desactivado. Y una vez que estamos seguros de que el flag no se utiliza en ningún lugar, lo eliminamos. Así es el arte secreto del feature flagging. Muchas gracias por su tiempo, y comencemos con el feature flagging.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2021React Advanced Conference 2021
19 min
Automating All the Code & Testing Things with GitHub Actions
Top Content
Code tasks like linting and testing are critical pieces of a developer’s workflow that help keep us sane like preventing syntax or style issues and hardening our core business logic. We’ll talk about how we can use GitHub Actions to automate these tasks and help keep our projects running smoothly.
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Fine-tuning DevOps for People over Perfection
Top Content
Demand for DevOps has increased in recent years as more organizations adopt cloud native technologies. Complexity has also increased and a "zero to hero" mentality leaves many people chasing perfection and FOMO. This session focusses instead on why maybe we shouldn't adopt a technology practice and how sometimes teams can achieve the same results prioritizing people over ops automation & controls. Let's look at amounts of and fine-tuning everything as code, pull requests, DevSecOps, Monitoring and more to prioritize developer well-being over optimization perfection. It can be a valid decision to deploy less and sleep better. And finally we'll examine how manual practice and discipline can be the key to superb products and experiences.
DevOps.js Conf 2022DevOps.js Conf 2022
27 min
Why is CI so Damn Slow?
We've all asked ourselves this while waiting an eternity for our CI job to finish. Slow CI not only wrecks developer productivity breaking our focus, it costs money in cloud computing fees, and wastes enormous amounts of electricity. Let’s take a dive into why this is the case and how we can solve it with better, faster tools.
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
The Zen of Yarn
In the past years Yarn took a spot as one of the most common tools used to develop JavaScript projects, in no small part thanks to an opinionated set of guiding principles. But what are they? How do they apply to Yarn in practice? And just as important: how do they benefit you and your projects?
In this talk we won't dive into benchmarks or feature sets: instead, you'll learn how we approach Yarn’s development, how we explore new paths, how we keep our codebase healthy, and generally why we think Yarn will remain firmly set in our ecosystem for the years to come.
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Atomic Deployment for JS Hipsters
Deploying an app is all but an easy process. You will encounter a lot of glitches and pain points to solve to have it working properly. The worst is: that now that you can deploy your app in production, how can't you also deploy all branches in the project to get access to live previews? And be able to do a fast-revert on-demand?Fortunately, the classic DevOps toolkit has all you need to achieve it without compromising your mental health. By expertly mixing Git, Unix tools, and API calls, and orchestrating all of them with JavaScript, you'll master the secret of safe atomic deployments.No more need to rely on commercial services: become the perfect tool master and netlifize your app right at home!

Workshops on related topic

React Summit 2023React Summit 2023
88 min
Deploying React Native Apps in the Cloud
WorkshopFree
Deploying React Native apps manually on a local machine can be complex. The differences between Android and iOS require developers to use specific tools and processes for each platform, including hardware requirements for iOS. Manual deployments also make it difficult to manage signing credentials, environment configurations, track releases, and to collaborate as a team.
Appflow is the cloud mobile DevOps platform built by Ionic. Using a service like Appflow to build React Native apps not only provides access to powerful computing resources, it can simplify the deployment process by providing a centralized environment for managing and distributing your app to multiple platforms. This can save time and resources, enable collaboration, as well as improve the overall reliability and scalability of an app.
In this workshop, you’ll deploy a React Native application for delivery to Android and iOS test devices using Appflow. You’ll also learn the steps for publishing to Google Play and Apple App Stores. No previous experience with deploying native applications is required, and you’ll come away with a deeper understanding of the mobile deployment process and best practices for how to use a cloud mobile DevOps platform to ship quickly at scale.
DevOps.js Conf 2022DevOps.js Conf 2022
152 min
MERN Stack Application Deployment in Kubernetes
Workshop
Deploying and managing JavaScript applications in Kubernetes can get tricky. Especially when a database also has to be part of the deployment. MongoDB Atlas has made developers' lives much easier, however, how do you take a SaaS product and integrate it with your existing Kubernetes cluster? This is where the MongoDB Atlas Operator comes into play. In this workshop, the attendees will learn about how to create a MERN (MongoDB, Express, React, Node.js) application locally, and how to deploy everything into a Kubernetes cluster with the Atlas Operator.
DevOps.js Conf 2022DevOps.js Conf 2022
13 min
Azure Static Web Apps (SWA) with Azure DevOps
WorkshopFree
Azure Static Web Apps were launched earlier in 2021, and out of the box, they could integrate your existing repository and deploy your Static Web App from Azure DevOps. This workshop demonstrates how to publish an Azure Static Web App with Azure DevOps.
DevOps.js Conf 2022DevOps.js Conf 2022
163 min
How to develop, build, and deploy Node.js microservices with Pulumi and Azure DevOps
Workshop
The workshop gives a practical perspective of key principles needed to develop, build, and maintain a set of microservices in the Node.js stack. It covers specifics of creating isolated TypeScript services using the monorepo approach with lerna and yarn workspaces. The workshop includes an overview and a live exercise to create cloud environment with Pulumi framework and Azure services. The sessions fits the best developers who want to learn and practice build and deploy techniques using Azure stack and Pulumi for Node.js.