El Caso de Negocio de la Entrega Continua

Publicado en

Autor

¿Qué sientes cuando escuchas la frase “liberación a producción”? ¿Tranquilidad? ¿Emoción? Si tu equipo todavía depende de pruebas manuales e instala en producción manualmente, lo más seguro es que sientas cosas cercanas al miedo y preocupación.

La figura 1 ilustra el ciclo emocional típico de hacer liberación manual de software. Se comienza por un periodo de impasibilidad, que al llegar la fecha original de entrega se convierte en urgencia, después de lograr la entrega se convierte en alivio, luego en celebración y finalmente en complacencia.

Figura 1. Ciclo emocional de la entrega manual

Es por ello que el desarrollo de software se está moviendo hacia la continuidad. El énfasis reciente en la integración continua, pruebas automatizadas, monitoreo constante y analítica todas apuntan a una clara tendencia: aumentar la capacidad para reaccionar. Conforme las organizaciones exploran lo que estos cambios implican para ellas, invariablemente descubren la entrega continua.

Que quede claro: la entrega continua no es algo que solo aplica para empresas “unicornio”. Cualquier equipo puede y debería practicar la entrega continua. Este artículo revisa el caso de negocio alrededor de hacer este cambio. Aborda el trabajo requerido y beneficios que traerá.

Beneficios principales de la entrega continua

Tiempos de reacción más cortos. El beneficio más claro de la entrega continua es que permite reaccionar rápidamente a estímulos; ya sea que el mercado tenga un cambio repentino o el negocio cambie la estrategia. ¿A qué empresa no le gustaría tener esa capacidad de ajustar sus productos digitales rápidamente?

Reducción de riesgo. En la mayoría de las organizaciones, liberar un sistema a producción es todo un logro digno de presumirse. ¿Y por qué no? Se hacen disponibles nuevas capacidades a los usuarios y se corrigen defectos. Todo mundo está feliz, ¿cierto? El problema es que típicamente liberar una nueva versión involucra un gran esfuerzo de parte de los equipos de QA y operaciones. En comparación, bajo un modelo de entrega continua el software se libera constantemente (no necesariamente al usuario final). Así que la ceremonia y riesgo de una nueva versión se reduce. Si confías en tu procedimiento de liberación a diario, encontrarás y corregirás las deficiencias mucho más rápido que si solo lo haces pocas veces al año.

Descubrir ineficiencias y costos. Cualquier organización de software incurre en costos para liberar software, y en la mayoría de los casos, estos costos no están claros. La entrega continua hace este proceso mucho más transparente, no solo al equipo de desarrollo sino también hacia la dirección. Al construir un pipeline, quedará claro donde se involucran actividades manuales, cuáles son los cuellos de botella, y qué actividades se pueden automatizar fácilmente. Una vez implementado, el pipeline crea un ciclo virtuoso; en lugar del procedimiento largo y obscuro se establecen incentivos claros para una dinámica sana de entrega de software.

Flexibilidad para liberar. Moverse a un modelo de entrega continua requiere establecer infraestructura, tanto en un contexto operativo como de arquitectura de software. Pero una vez que se cuenta con ella, provee al negocio más flexibilidad sobre cómo libera nuevas capacidades y correcciones al software. Por ejemplo, es posible liberar funcionalidad específica solamente a un subconjunto de usuarios para asegurar que se comportan de la manera esperada antes de liberarlas a todos los usuarios. La funcionalidad se puede construir y probar, pero dejar escondida para habilitarla en el momento deseado. Por ejemplo, si el equipo de marketing hace un anuncio importante que va acompañado de nueva funcionalidad en el sistema de software, no tienes que liberar una nueva versión en ese momento.

No solo es para unicornios

Ante estos beneficios, parecería que la entrega continua es algo mágico, solo al alcance de pocos. No lo es. Tan solo es un ajuste en la forma en la que pensamos sobre el diseño, construcción y entrega de software, soportado por una inversión enfocada en las iniciativas requeridas para implementarla. La mayoría de las implementaciones fallidas de entrega continua se deben a esta falta de este compromiso.

Dado que la entrega continua requiere cambiar o agregar procesos, herramientas y roles, puede sentirse como un cambio demasiado grande. Esto es agudizado por el hecho de que hay que cambiar áreas que previamente habían sido ignoradas o a las que se les había dado baja prioridad. El lado positivo es que los humanos somos muy adaptables, especialmente si estamos motivados por la expectativa de tener un proceso de liberación que no sea un infierno.

La inversión inicial más grande es lograr un acuerdo de que la transición a la entrega continua es una meta de negocio digna de perseguirse, que solo se puede lograr por medio de la participación y compromiso de la organización de software y la dirección de negocio.

“Durante los próximos meses no vamos a agregar nueva funcionalidad al sistema y mejor nos dedicaremos a trabajar en automatizar pruebas y construir infraestructura para integrar y liberar versiones”, dijo ningún gerente de producto nunca. La forma de conseguir que los gerentes y usuarios de negocio apoyen este esfuerzo es mostrarles qué tan rápido podrán liberar nuevas capacidades una vez que los esfuerzos de la entrega continua comiencen a rendir frutos. Imagina un mundo en el que un gerente de producto tiene una nueva idea para incorporar en un software y en cuestión de días ésta es liberada a un subconjunto de usuarios, instrumentada con analítica de eventos para evaluar la reacción de los usuarios; esta es la promesa de la entrega continua.

En realidad, no es necesario detener por completo la construcción de nuevas características hasta que se implante entrega continua. Simplemente es cuestión de que todas las áreas del negocio estén convencidos de los beneficios a largo plazo. Esto no suena tan difícil, pero se requiere bastante disciplina para mantener este compromiso durante un periodo largo de tiempo, de manera que la iniciativa de implementación de entrega continua no quede en segundo plano o se termine abandonando.

Áreas que requieren inversión

Adoptar una práctica de entrega continua va mucho más allá de adquirir herramientas de software. Hay diversas áreas en las que se debe invertir para obtener los beneficios de la entrega continua.

Pruebas automatizadas. Todas las capacidades del sistema deben poder ser probadas de forma automatizada. Esto incluye no sólo pruebas unitarias, sino también de integración y sistema. Las pruebas deben ser coordinadas de forma automatizada, usando una herramienta para ello. Adoptar una práctica de pruebas automatizadas desde cero, puede tomarle a una organización de software de 6 a 18 meses.

Cambios en arquitectura aplicativa. Es necesario evolucionar la arquitectura de las aplicaciones hacia servicios. En el caso de software que no es SaaS, es necesario establecer una arquitectura de componentes y control de configuración que permita que cada componente se pueda liberar de manera independiente. De esta manera podemos habilitar capacidades como feature flagging y versiones canario. Aunque este cambio puede parecer demasiado complicado o costoso, brinda beneficios más allá de la entrega continua ya que al desacoplar sistemas complejos en componentes o servicios bien definidos y con bajo acoplamiento es más fácil tanto desarrollarlos como reutilizarlos de forma independiente. A la mayoría de los equipos les toma entre 4 y 8 iteraciones cambiar la arquitectura de una aplicación hacia servicios.

Granja de integración y prueba. Cada que se genera una nueva versión del código del navegador Firefox se disparan automáticamente miles de pruebas que requieren más de 200 horas de CPU. Poder soportar esto requiere una inversión significativa en hardware, ya sea interno o en la nube. Tu granja de integración y prueba requiere suficiente capacidad para soportar entrega continua, lo cual acelerará tu ciclo de retroalimentación de desarrollo y facilitará probar contra distintos sistemas operativos, navegadores, etcétera. Ajustar la capacidad de tu granja es un proceso continuo, por lo que típicamente lo más conveniente es utilizar servicios de cómputo en la nube para este propósito.

Cambio cultural. La entrega continua requiere un cambio cultural, ya que en esencia se están reemplazando controles humanos por un flujo continuo y automatizado. Inevitablemente, esto provocará que se eliminen silos y habrá personas que se sientan amenazadas ante el prospecto de perder el control. Aunque esto es un proceso continuo, el periodo más intenso durará entre 2 y 6 meses.

Reclutamiento enfocado. Para avanzar de manera sostenida en la adopción de entrega continua puede ser necesario contratar personas que se dediquen solamente a trabajar en la infraestructura requerida para la entrega continua. La duración de estos contratos típicamente será de 2 a 6 meses.

Este texto es una versión traducida y editada del artículo “The business case for continuous delivery” publicado por la empresa Atlassian en https://www.atlassian.com/continuous-delivery/business-case-for-continuous-delivery