¿Qué es una "bandera de función"?

Respuestas:

104

Un 'indicador de funciones' (o alternancia de funciones) es la capacidad de activar o desactivar funciones (subsecciones) de su aplicación fácilmente:

  • quizás a través de una re-implementación, o
  • alguna página interna donde las páginas / características se pueden alternar en vivo.

Supongo que el ejemplo fue que es útil tener el control para reducir un poco el conjunto de características si necesita, por ejemplo, reducir las consultas de base de datos si la carga es demasiado alta.

Sin embargo, hay muchas otras razones por las que querría usar esto, una de las principales es habilitar la Entrega continua : llevar las cosas a producción / en vivo pero tener la función desactivada / activada hasta que se complete. A menudo usamos lo que llamamos una 'cookie de desarrollo' para mostrar funciones incompletas solo al equipo de desarrollo. De esta manera, podemos probar el trabajo parcialmente completado en producción (¡oh, sí! ¿Hay una mejor integración?) En múltiples lanzamientos / implementaciones antes de que lo "desactivemos" (lo completemos) y se vuelva visible para el público.

Aquí hay un paquete simple que lo ayuda a hacer esto en ASP.NET MVC land: https://github.com/cottsak/DevCookie (divulgación completa: soy el autor)

Fowler también tiene un artículo mucho más largo que el vinculado anteriormente con muchos más detalles .

Esta publicación (en el sitio de Fowler también) explica los diversos tipos de estrategias de alternancia . DevCookie es compatible con la estrategia de línea principal / troncal y se denomina " Alternancia de lanzamiento " en el artículo.

La respuesta de Adil destaca que hay muchos términos y razones por las que es posible que desee parte de esta infraestructura. Tenga en cuenta que es posible que solo necesite algunas de estas cosas. Por ejemplo, es posible que solo desee habilitar un flujo de trabajo de implementación / entrega simple y ágil, por lo que una infraestructura simple será suficiente. Si luego elige que desea pasar a la experimentación completa de #leanstartup con A / B, pruebas de cohortes y cosas como implementación controlada, debe considerar una herramienta de análisis (por ejemplo, Heap ) que facilite esas metodologías de desarrollo basadas en datos como una solución distinta . Una infraestructura de alternancia que hace todo lo anterior conducirá a una complejidad innecesaria y abultada.

Si llegaste tan lejos, entonces te gustaría ver algunos de mis otros pensamientos sobre Mainline Development, alternancia de funciones y otras ideas tontas como TEST, QA, SIT, STAND, CROUCH .

Matt Kocaj
fuente
1
Curiosamente, siempre he imaginado lo mismo en todo lo que construyo. Esa puede ser una característica tan efectiva.
GurdeepS
7
A menudo, encontrará cosas como esta que parecen obvias. Resulta que a alguien siempre se le ha ocurrido un nombre.
Matt Kocaj
27

Feature Flag es una técnica para desactivar algunas funciones de su aplicación, a través de la configuración, sin implementar código nuevo.

Los indicadores de características juegan un papel clave en el esquema de CI donde las características se implementan constantemente pero no necesariamente se "lanzan" a la producción.

Más info aquí:

- EDITAR:

Implementación java de Feature Flags .

Maxim Veksler
fuente
3
Esto está bien descrito en 'Implementación continua' y es prácticamente un requisito para el desarrollo 'principal'. En lugar de ramificarse en SCM para las funciones, las funciones se activan o desactivan, lo que le permite publicar código con funciones que aún no deberían estar habilitadas.
Chip McCormick
Solo una nota sobre "a través de la configuración, sin implementar código nuevo": parece que la declaración significa cambiar una configuración y luego implementar la aplicación nuevamente (aunque quizás no haya cambiado ningún código). Esto puede llevar de segundos a minutos, dependiendo de su canal de implementación. Es posible que un indicador de función o un cambio de función no persista en la configuración. Podría estar en una tienda / base de datos en algún lugar y comportarse de manera "en vivo", es decir, navegando a alguna página de administración donde presionas un botón para habilitar algún comportamiento en todo el sitio al instante (sin implementación, sin cambios de configuración).
Matt Kocaj
1
Trabajo para ConfigCat.com y la forma en que lo veo "cambiar una configuración, sin implementar un nuevo código" significa que las configuraciones son servidas por el servicio de marca de características y su aplicación accede a los valores extrayendo ese archivo de configuración. De esta manera, puede estar seguro de que cambiar un valor no necesita ningún tipo de re-implementación de la aplicación. Además de eso, te permite crear reglas para que ofrezcas un valor a un usuario y otro diferente a otro. Lo bueno es que la evaluación del indicador de características está en el lado del cliente y toda esta lógica funciona sin la necesidad de enviar ningún dato al servicio de indicadores de características.
sige
techblog.outbrain.com/tag/feature-flags - Url no funciona
Sathish
19

Los indicadores de funciones, los cambios de funciones, los experimentos y las implementaciones controladas son sinónimos de una idea simple pero poderosa: implementaciones de código separadas de las implementaciones de funciones. En pocas palabras, es la capacidad de impulsar los compromisos de sus funciones con la producción mientras elige quién entre sus clientes, si es que hay alguien, puede ver esa función.

Fueron popularizados en parte por Gatekeeper de Facebook . LiX de LinkedIn es otro buen ejemplo.

Adoptar esta simple idea sienta las bases para muchas mejores prácticas, que incluyen:

Implementación / entrega continua : múltiples impulsos de código a producción en un día.

Desarrollo de línea principal / troncal : las ramas de características deben crearse solo para solicitudes de extracción, no para el desarrollo de características de larga duración.

No más trenes de lanzamiento para empantanar las cosas.

Pruebas de calidad / rendimiento en producción: las pruebas de calidad y rendimiento reales se realizan en la infraestructura de producción con tráfico de producción. No pierda el tiempo en la creación de amplios laboratorios de rendimiento y entornos de ensayo.

Experimentación : sepa cómo una nueva función mueve la aguja en sus KPI.

Evitar revisiones o reversiones de código cuando surgen problemas : tanto las revisiones como las reversiones de código son estresantes, toman mucho tiempo y generan más problemas de los necesarios. En su lugar, desactive la función o bájela.

Otros han mencionado bibliotecas de código abierto. Un buen ejemplo de una solución completa, como Gatekeeper y LiX, es Split . Trabajo para Split.

Adil Aijaz
fuente
Creo que es importante no combinar los indicadores de características únicamente para respaldar los experimentos de CI versus AB / cohorte / lean; los objetivos son diferentes. Por ejemplo, usar un cambio de función para obtener algo en Prod para QA / aceptación podría ser una herramienta simple para ayudar a CI / CD y, en tal caso, Split podría ser excesivo. Por otra parte, si desea realizar experimentos ajustados o pruebas A / B, es posible que necesite una buena herramienta de análisis como Heap con herramientas adicionales e informes de telemetría integrados. No me gusta la idea de fusionar estos dos objetivos, parece que usted podría hincharse muy fácilmente.
Matt Kocaj
14

Aquí hay muchas respuestas excelentes, todas conduciendo a la importante definición básica popularizada en la publicación de Martin Fowler :

Son fragmentos de código que "[permiten] a los equipos modificar el comportamiento del sistema sin cambiar el código".

Así que históricamente hemos pensado en ellos como representados por el pseudocódigo:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();

Esa es una forma totalmente precisa de pensar en ello, y tanto Matt como Adil lo amplían muy bien con una variedad de casos de uso táctico para la bandera de funciones.

Pero me gustaría ofrecer una definición revisada que refleje cómo la realidad ha evolucionado en los seis años y ha cambiado desde que dotnetdev hizo la pregunta original. Trabajo para Rollout.io , una plataforma de bandera de características, así que tuve un asiento de primera fila para esta evolución.

En pocas palabras, los indicadores de funciones ya no son solo una forma de activar y desactivar partes de la funcionalidad en su aplicación. Es como responder "qué es una línea de pedido de factura" diciendo "es una descripción y una cantidad de moneda". Es cierto, pero no se maneja en el punto más amplio de la propia factura.

Los indicadores de funciones son las partes tácticas de una solución estratégica general en el software moderno. Son el medio por el cual pospone la lógica de decisión importante en su código hasta el tiempo de ejecución cuando tiene más información. Y, quizás lo más importante, ya no se producen de forma aislada, con una única comprobación para ver si el número de versión es mayor que 2.7 o no; las organizaciones que los utilizan normalmente los incluyen como parte de un enfoque de producto integral para todo el sistema.

Como han mencionado otros, Facebook y LinkedIn fueron pioneros en esto, pero en 2018, muchas organizaciones lo están haciendo. Están aplazando las preguntas de lógica de decisión para el tiempo de ejecución como parte de la estrategia de desarrollo, la estrategia de operaciones (o estrategia DevOps, si lo desea) y la estrategia del producto. A continuación se muestran ejemplos de tales preguntas.

  • ¿Quién debería ver la nueva pantalla de administración que estamos implementando y cuándo?
  • ¿Qué nivel de membresía se requiere para desbloquear este huevo de Pascua?
  • ¿Cuándo deberíamos pasar a la nueva base de datos?
  • ¿Deberíamos poner una imagen de un guepardo o un águila en el botón de pago para mejorar las conversiones?

Para tener una aplicación que pospone un número significativo de decisiones de este tipo hasta el tiempo de ejecución, no puede colocar indicadores de características en su aplicación de manera ad-hoc o se hundirá en una deuda técnica. En estos días, necesita tener una estrategia integral de gestión de indicadores de características, que incluya algunos componentes diferentes.

  • Los puntos de alternancia se utilizan para cambiar el comportamiento de las nuevas funciones.
  • Múltiples puntos de palanca se unen para formar un enrutador de palanca . Un enrutador de palanca determina el estado de una característica.
  • El contexto de alternancia proporciona al enrutador de alternancia la información contextual necesaria (por ejemplo, un usuario específico).
  • La configuración de alternancia proporciona la información del enrutador de alternancia sobre el entorno.

Entonces, al final, ¿qué son las banderas de características?

Bueno, son una parte importante de una estrategia más amplia para tener una aplicación que se adapte a las necesidades técnicas y del mercado.

Erez Rosovsky
fuente
9

Una marca de función (también conocida como cambio de función o alternancia de función ) es un interruptor para habilitar o deshabilitar una función potencialmente cara según sea necesario (como, por ejemplo, cuando un sitio está siendo golpeado con tráfico inesperado). Esto le dará un poco de tiempo hasta que aumente la escala o hasta que desaparezca el pico de carga.

Aquí hay un ejemplo de la documentación de SWIG .

Michael Petrotta
fuente
6
Ese es uno de los usos de los indicadores de funciones, sí, pero el gran concepto que hay que entender es que desacoplan el lanzamiento de funciones y la implementación del código, de modo que pueda lanzar funciones cuando lo desee, en lugar de cuando se envíe el código. Es una piedra angular de la integración continua.
Eric Elliott
6

En mi empresa solíamos tener una solución propia para eso. Creamos un servicio que proporciona un .jsonarchivo config ( ) descargable para cada aplicación. En esa configuración, almacenamos las banderas para las características. Según esa configuración, la aplicación puede mostrar u ocultar la función actual. (Por ejemplo, mostrar u ocultar un elemento de menú en la barra lateral).

También creamos una página de administración interna donde podemos configurar los indicadores de características. Funcionó bastante bien durante un tiempo, pero después de eso nos hubiera gustado hacer una orientación de usuario y pruebas A / B. Desarrollar por cuenta propia nos pareció demasiado esfuerzo, por lo que optamos por una solución de terceros. Como ya se mencionó aquí, hay muchas soluciones para eso.

Elegimos ConfigCat porque admite grupos objetivo personalizados y despliegue basado en porcentajes a la vez. Puede consultar los sdks de código abierto compatibles en github .

Lun
fuente
4

Los indicadores de funciones (o alternancia de funciones) le permiten habilitar funciones de forma remota en una aplicación sin necesidad de reconstruir / volver a implementar la aplicación. Esto le permite implementar el código en producción, pero no lanzar la función hasta que esté listo. Puede dirigirse a usuarios específicos, por lo que podría habilitar una nueva función para que sus usuarios beta la prueben.

En nuestra empresa, hemos utilizado anteriormente LaunchDarkly y otras sugerencias de FeatureFlags.io . También hemos intentado usar la configuración remota de Firebase para intentar que esto funcione, sin embargo, descubrimos que no era realmente adecuado para este propósito.

Terminamos desarrollando nuestra propia versión llamada Bullet Train , que hemos abierto. Combina tanto Feature Flags / Toggles como Remote Config.

TStu
fuente
4

Los indicadores de características se utilizan para varios propósitos. La idea general es delegar el control sobre qué usuario ve qué característica a algún tablero remoto o back-office de algún tipo.

Una vez que una función está marcada en el código, ahora puede usar varios métodos para determinar qué usuario la ve en su aplicación: 1. Activado / Desactivado : muestra la función a todos o ninguno de sus usuarios. 2. Lanzamiento gradual : muestre la función solo a un porcentaje de sus usuarios, luego muéstrela gradualmente a todos los usuarios. 3. Segmentación : muestra la función a usuarios específicos según las propiedades o características de ese usuario.

Las herramientas que ayudan a controlar los indicadores de características (booleanos) y las configuraciones de características (cadenas, números, etc.) generalmente se denominan plataformas de administración de características. Existe un gran servicio para la administración de características llamado Configz.io

Las mónadas son como ...
fuente
3

Desde el punto de vista de la codificación, un indicador de función puede ser tan simple como una ifdeclaración que envuelve una nueva pieza de código que está escribiendo. Cuando la ifdeclaración se evalúa como verdadera (el indicador de función está activado), se ejecutará el nuevo código.

En un ejemplo del mundo real de entrega de software, la ifdeclaración descrita anteriormente se evaluaría de manera diferente según el entorno en el que se esté ejecutando el software. Por ejemplo, si la aplicación se está ejecutando en su servidor de control de calidad, el indicador de función se volverá verdadero y la nueva función será visto. Si se está ejecutando en su servidor de producción, el indicador de función volverá falso y la función se ocultará.

Desde mi experiencia personal durante mi carrera, he utilizado banderas de características de las siguientes maneras:

  1. Desacoplar las implementaciones de código de la liberación de funciones a los clientes. Este fue mi primer uso inicial de indicadores de funciones en nuestro proceso de desarrollo. Lo usamos para eliminar la dependencia entre nuestro equipo de marketing y producto y el equipo de ingeniería que estaba haciendo el desarrollo y las versiones. Los indicadores de características nos permitieron implementar nuestro código semanas antes de un lanzamiento, mientras que anteriormente estábamos implementando el código la noche anterior a un lanzamiento.

  2. Pruebas en producción. Antes de que usáramos indicadores de funciones cuando lanzamos nuestro código, era un evento de todo o nada, o todos nuestros clientes obtuvieron la función o ninguno de ellos. Usamos indicadores de funciones para permitirnos implementar una nueva función para un pequeño porcentaje de usuarios a la vez. Esto nos permitió recopilar comentarios y datos valiosos sobre una nueva función sin arriesgarnos a problemas potenciales para toda la base de clientes.

  3. Habilitar / deshabilitar una función por entorno en el ciclo de vida del desarrollo. Usamos esto ampliamente en el desarrollo para permitir un proceso de implementación mucho más fluido; tenemos una canalización de CI / CD en la que el uso de indicadores de funciones es vital.

  4. Creando un interruptor de apagado. Hemos envuelto ciertas características de nuestra aplicación con un indicador de características que nos permite 'eliminar' esa característica en caso de que tengamos algún problema con la aplicación en ese momento. Por ejemplo, si nos encontramos bajo una gran carga, podemos desactivar ciertas funciones no esenciales del sitio web para ayudar con el problema.

Puede leer más sobre las banderas de funciones aquí.

Puede agregar indicadores de funciones a su código de varias maneras.

  1. Puede crear la suya propia o utilizar una biblioteca de indicadores de características de terceros y agregar los datos de su indicador de características en un archivo de configuración que se puede incluir en su paquete de implementación.
  2. Puede crear la suya propia o utilizar una biblioteca de indicadores de características de terceros y agregar los datos de su indicador de características en un archivo de configuración que se puede cargar en tiempo de ejecución.
  3. Puede utilizar un servicio de gestión de marcas de funciones basado en la nube para gestionar todas sus necesidades de marcas de funciones por usted.

Escribir su propia biblioteca puede parecer una buena idea al principio y, por lo general, puede comenzar de esa manera. Sin embargo, pronto puede tener problemas cuando desee implementar los casos de uso más avanzados de marcas de funciones, como la implementación a un porcentaje de usuarios o la orientación a grupos de usuarios específicos. Otro problema con la creación de su propia implementación de marcas de características es que si está utilizando varios idiomas, deberá implementar su código varias veces.

La forma mejor y más fácil de utilizar los indicadores de características es utilizar un servicio de gestión de indicadores de características en línea, como Floodgate . De esta manera, puede aprovechar la plataforma para todo el trabajo pesado, lo que le permite concentrarse en crear la función para su aplicación.

A continuación, se muestra un ejemplo de cómo agregar una marca de característica de Floodgate a una aplicación usando el SDK de .NET.

using FloodGate.SDK;

var floodgateClient = new FloodGateClient("API-KEY");

var flag = floodgateClient.GetValue("a-new-feature", false);

if (flag)
{
  // Execute the code for my new feature here...
}

Si está trabajando en un equipo de desarrollo y no está utilizando marcas de funciones y está experimentando problemas en las implementaciones y la administración de código dentro del equipo. El uso de indicadores de funciones puede ser una excelente manera de resolver estos problemas. También hay un buen efecto secundario de que los indicadores de características aceleran la velocidad de desarrollo de sus equipos.

Martin Fowler ofrece una descripción muy detallada de los indicadores de características aquí que le recomiendo que lea.

Eugenio
fuente
2

Tengo entendido que los indicadores de funciones le ayudan a controlar la funcionalidad al decidir qué usuarios reciben determinadas funciones.

Por ejemplo, supongamos que solo desea que sus usuarios beta vean una nueva función. "Activaría" esa función para los usuarios beta y el resto de sus usuarios no la verían.

LDUser user = new LDUser("[email protected]");

boolean showFeature = ldClient.toggle("your.feature.key", user, false);

if (showFeature) {
     // application code to show the feature 
 }
else {
     // the code to run if the feature is off
 }

Estoy probando los indicadores de características de LaunchDarkly para algunas pruebas de front-end JS A / B; parece que funciona bien. También puede consultar este sitio para alternar funciones y bibliotecas de marcas de funciones .

Hbitspark
fuente
1

Feature Flags básicamente le brinda la capacidad de activar y desactivar una función sin realizar ningún cambio en el código o lanzar una nueva versión. Es una solución importante especialmente para los desarrolladores de aplicaciones móviles, ya que no tienen control sobre los usuarios para actualizar su aplicación a una nueva versión.

Hay varias empresas que ofrecen este servicio para desarrolladores de aplicaciones móviles.

OFK
fuente
Tenga cuidado con estos. No es necesario que integre uno de estos servicios para crear un interruptor simple que se pueda usar para ocultar múltiples funciones de la visibilidad / integración de PROD. También no necesariamente necesita hacer esto en vivo - como en, a la espera de un despliegue no es un gran problema cuando un despliegue PROD está a pocos minutos (que debe ser la optimización de para muchas otras razones).
Matt Kocaj
2
Como una adición aquí es una comparación de los mejores servicios de indicador de la función actual: featureflagservices.io
sige
1

En mi empresa utilizamos indicadores de funciones para cada función nueva que presentamos en nuestra aplicación SaaS. Además de los beneficios para el rendimiento, también nos permite implementar nuevas funciones gradualmente, introduciendo nuevas funciones a los usuarios avanzados primero, obteniendo comentarios de ellos e improvisándolas antes de que podamos implementarlas para todos los usuarios.

También nos permite personalizar la oferta para usuarios individuales: los usuarios avanzados quieren todas las funciones; los usuarios simples pueden querer lo básico y pueden confundirse con todas las poderosas funciones complejas. También permite a nuestro equipo de ventas realizar ventas adicionales.

Y, por supuesto, como han señalado otros, si encontramos que una característica está causando una degradación del rendimiento, podemos simplemente desactivar esa característica (ya sea para todos los clientes o para el cliente que está causando el problema).

Dharmendar Kumar 'DK'
fuente