¿Cómo crear soluciones de software innovadoras?

13 Apr 2022

Codurance Insights

See author's bio and posts

SM_Innovation-Clusterpages-illu-1 – 1La innovación continua sólo es posible cuando se apoya en un software bien diseñado y flexible. Para innovar, las empresas necesitan poder experimentar. Por lo tanto, para conseguir experimentos aptos para la innovación, tienen que ser relativamente fáciles de hacer a un bajo coste. Los sistemas deben diseñarse de forma que los experimentos puedan ser autónomos y completarse con un impacto mínimo en la actividad habitual.

Las empresas necesitan contar con un software que les permita innovar para satisfacer las demandas de los consumidores y asegurarse de que pueden competir en un mercado exigente. El siguiente blog destaca cómo una empresa puede impulsar la creación de un software bien diseñado y flexible para la innovación, a través del producto, los procesos y la implementación.

SM_Innovation-Clusterpages-banner_thin – 1

Producto

Creación de una mentalidad de start-up para utilizar ciclos de feedback rápidos 

SM_Innovation-Clusterpages-3 – 1

Lean start-up es una metodología para el desarrollo de empresas y productos cuyo objetivo es acortar los ciclos de desarrollo de productos. Esta metodología hace énfasis en las opiniones de los clientes por encima de la intuición y en la flexibilidad por encima de la planificación. Al utilizarlo, las empresas pueden recuperarse de los fracasos con mayor facilidad que en las formas tradicionales de desarrollo de productos, reduciendo el riesgo de mercado y eludiendo la necesidad de costosos lanzamientos y deficiencias financieras. 

La mentalidad Lean start-up refuerza el uso de bucles de feedback rápidos. Uno de los puntos más críticos para crear un buen software es la comunicación, y los bucles de feedback se utilizan para obtener información sobre el proceso de desarrollo del software. El feedback no se limita a los puntos positivos, sino también a los negativos que no se ajustan a las necesidades del negocio. Completar un ciclo de feedback lo más rápido posible acelera y mejora el proceso general de desarrollo. 

Lo más importante para crear un buen software es la comunicación. Los bucles de feedback son mecanismos que se utilizan para validar y obtener feedback sobre el proceso de desarrollo del software. El objetivo es que los equipos dispongan al instante el feedback positivo y negativo. Hacer esto lo más rápido posible acelera y mejora el desarrollo general.

Procesos

Uso de feature flags para permitir la innovación 

Las feature flags son una técnica de desarrollo de software que activa y desactiva funcionalidades durante el tiempo de actividad sin la necesidad de desplegar nuevo código. Permite un mejor control y un mayor grado de experimentación a lo largo del ciclo de vida. 

SM_Innovation-Clusterpages-illu – 5

El propósito de esta técnica es construir características condicionales en el código para hacer que la lógica esté disponible para ciertos grupos de usuarios a la vez. Si la bandera está activada, se ejecuta el nuevo código - Si la bandera está desactivada, se puede omitir el código. 
Los beneficios del uso de las feature flags pueden ser los siguientes. 


  • Testing
    Las feature flags permiten a los equipos de desarrollo probar nuevas características durante la producción, a la vez que mitigan el riesgo de un mal lanzamiento inicial, ya que la característica puede ser revertida rápidamente si es necesario. Este proceso permite validar la funcionalidad de las nuevas versiones en el mundo real con pruebas de usuario precisas y minimizando el riesgo. 
  • Ciclos de lanzamiento más rápidos
    Los equipos pueden modificar el comportamiento de un sistema sin realizar cambios perjudiciales para el código activo, por lo que no afectan a otros equipos. Además, las feature flags simplifican el despliegue en el proceso de desarrollo, ahorrando tiempo. 
  • Despliegue continuo
    Las feature flags tienen la capacidad de permitir un aprendizaje rápido. Esto permitirá a las empresas ofrecer y desplegar software a sus usuarios de forma más rápida. Las organizaciones suelen utilizar las feature flags para realizar despliegues graduales de funcionalidades, corregir errores en el código sin tener que volver a desplegarlo y experimentar un ciclo de desarrollo más ágil. 
  • Feature Gating
    Las feature flags se pueden utilizar para implementar lanzamientos específicos de una funcionalidad a un subgrupo de usuarios. Esta característica puede ser genial para las pruebas A/B, pero también se puede utilizar para lanzar funciones sólo a un subconjunto de clientes. 

    Pruebas A/B 

    Los experimentos son necesarios para crear software innovador. Tomar el feedback y los datos del público real ayuda a comprender las prioridades y necesidades. Mediante las pruebas A/B, los equipos pueden generar estos datos. Las pruebas A/B pueden llevarse a cabo utilizando feature flags, como se ha mencionado anteriormente, así como de otras maneras, como el uso de pasarelas de API que dirigen condicionalmente el tráfico a diferentes despliegues. Al habilitar una función para la mitad de un segmento de usuarios y deshabilitar la función para la otra mitad, la empresa puede entender cómo se comportan los dos grupos frente a una determinada métrica. 

    Las pruebas A/B pueden aplicarse a segmentos específicos de audiencia, por ejemplo, usuarios que viven en un país concreto o que se ajustan a un perfil específico.

    La infraestructura como código

    SM_Innovation-Clusterpagesillu-4

    "La infraestructura como código (IaC) es la gestión y el aprovisionamiento de la infraestructura a través del código en lugar de mediante procesos manuales".

    La gestión de la infraestructura informática es un proceso manual. Esto incluye elevados costes operativos y complejidad en las comunicaciones, lo cual crea barreras a la innovación sin una inversión significativa debido al compromiso, como la construcción y el mantenimiento de los centros de datos. Esto también afecta a la escalabilidad; al ser necesaria una configuración manual, se crean problemas en las horas punta.

    ¿Cómo resuelve la infraestructura como código estos problemas, creando un espacio para la innovación? El uso de la computación en nube libera a la empresa de tener que construir y mantener centros de datos (y sus elevados costes asociados). Antes de la IaC, los equipos de IT tenían que cambiar manualmente las configuraciones para gestionar la infraestructura. Mientras que IaC permite que la configuración de la infraestructura tome la forma del archivo de código. Esto genera ventajas como:

    • Velocidad
    • Coherencia
    • Responsabilidad
    • Eficiencia
    • Reducción de costes 

    Beneficios que pueden traducirse en una mayor flexibilidad y adaptación a los cambios en las necesidades de los consumidores y los cambios en el mercado. 

    Escalado elástico

    El escalado elástico es la habilidad de ajustar la capacidad para mantener un rendimiento constante y predecible al menor coste posible. Como se ha mencionado anteriormente, se trata de un proceso manual con la infraestructura local que implica compromiso y una importante inversión de tiempo. Con la nube, se puede automatizar este proceso para ajustar la capacidad según se necesite. Por ejemplo, para la industria del comercio electrónico, implicaría grandes picos en temporadas altas como el Black Friday o la Navidad.

    Permite a las empresas mantener automáticamente el rendimiento según su diseño, creando disponibilidad en momentos imprevisibles. Además, hay una eficiencia de costes al pagar sólo por los recursos que se necesitan. A medida que la demanda disminuye, también lo hace el exceso de capacidad de recursos para evitar un gasto excesivo.

    La visibilidad es un beneficio adicional, ya que la empresa puede utilizar los datos para comprender sus necesidades de rendimiento. Esto ayuda a comprender en qué fase es posible la innovación y proporciona información valiosa para destacar en un mercado saturado.

    Diseño/Implementación

    Arquitectura modular - experimentos localizados 

    SM_Innovation-Clusterpages-illu – 5

    La arquitectura modular es una forma de gestionar la complejidad de un problema al descomponerlo en módulos más pequeños y manejables. La arquitectura modular es un estilo que ayuda a ver el sistema, no sólo en capas o servicios, sino que va un nivel por debajo, ya que las partes se dividen en módulos físicos más pequeños. Estos módulos se circunscriben al contexto que se les proporciona.  

    Este estilo sirve para crear un entorno propicio para las pruebas y los experimentos. Los equipos pueden trabajar dentro de módulos cerrados para garantizar que los experimentos se limiten a un entorno y no afecten a la actividad habitual de la empresa, ni cambien el código que otro equipo pueda necesitar para su sistema.

    La recopilación de datos está integrada en la arquitectura y el diseño. 


    La observabilidad permite a los desarrolladores utilizar un enfoque basado en los datos obtenidos a lo largo del ciclo de vida del software. Esto les permite planificar, construir y desplegar software que proporcione buenas experiencias para el usuario. 

    ¿Qué significa esto en la práctica y cómo ayuda a la innovación? La observabilidad ayuda a mejorar los tiempos de los ciclos de planificación, a disminuir los índices de fracaso de las modificaciones y a aumentar la frecuencia de los lanzamientos. Para que una empresa tenga éxito en la innovación, y en su rendimiento frente a los competidores, es imprescindible ser los primeros en entregar actualizaciones a los consumidores.

    Con un enfoque basado en datos, los desarrolladores y las empresas son capaces de ir más allá del qué, para descubrir el porqué. Esto significa que pueden centrarse en el código de mayor prioridad y con mayor impacto para el negocio, para llegar a la solución más rápidamente. 

    El uso de datos y herramientas para observar el comportamiento de un sistema, antes, durante y después del desarrollo, para conocer sus patrones, ayuda a entender cómo se comportará frente a su usuario. Esto puede mejorar y repercutir en la forma en que el software se comporta con los usuarios. Por ejemplo, la arquitectura basada en eventos es aquella en la que un cambio de estado desencadena la creación de un evento. Estos eventos son detectados por uno o varios consumidores de eventos que reaccionan en consecuencia. Por ejemplo, cuando se añade un artículo al carrito de un cliente en una plataforma de comercio electrónico, un productor de eventos podría desencadenar un evento que detallara esa acción. Un consumidor de eventos, por su parte, podría suscribirse a este productor y actualizar el inventario para reflejar el cambio en la disponibilidad del producto. 

    SM_Innovation-Clusterpages-3 – 1

    Los productores y los consumidores se gestionan de forma independiente, lo que significa que esta naturaleza desacoplada permite que el desarrollo logre beneficios de resiliencia, escalabilidad y mantenimiento. 

    La capacidad de reunir esta inteligencia a partir de una serie de experimentos rápidos permite la toma de decisiones basada en datos, reduciendo la ineficacia y la especulación y, como se ha mencionado previamente, siendo más eficiente. 

SM_Innovation-Clusterpages-banner_thin-2 – 1

Aprovechar las técnicas que existen para hacer que el software sea más evolucionable, flexible y fácil de cambiar, significa que los cambios a través de la experimentación y los datos son más fáciles de llevar a cabo con éxito y de forma más segura. Experimentar con el software no debería afectar al negocio, sino que debería apoyarlo. Entender cómo tu público quiere comportarse con tu software es una buena razón para impulsar la innovación continua.