¿Qué es la entrega continua? - Continuous Delivery
Nota: Este post es una traduccion de What is Continuous Delivery? bajo la licencia: CC BY-SA 3.0 US.
La entrega continua es la capacidad de tener cambios de todo tipo (incluidas nuevas funcionalidades, cambios de configuración, correcciones de errores y experimentos) en producción o en manos de los usuarios, de forma segura, rápida y sostenible.
Nuestro objetivo es hacer que los despliegues (ya sea de un sistema distribuido a gran escala, un entorno de producción complejo, un sistema integrado o una aplicación) sean asuntos rutinarios y predecibles que se puedan realizar a pedido.
Logramos todo esto garantizando que nuestro código esté siempre listo para desplegar, incluso con equipos de miles de desarrolladores que realizan cambios a diario. De esta forma, eliminamos por completo las fases de integración, pruebas y bastionado1 que tradicionalmente seguían al “desarrollo completo”, así como las pausas de desarrollo2.
¿Por qué entrega continua?#
A menudo se asume que, si queremos implementar software con mayor frecuencia, debemos aceptar niveles más bajos de estabilidad y confiabilidad en nuestros sistemas. De hecho, investigaciones revisadas por pares demuestran que esto no es así: los equipos de alto rendimiento ofrecen servicios consistentemente con mayor rapidez y confiabilidad que sus competidores de bajo rendimiento. Esto es cierto incluso en sectores altamente regulados, como los servicios financieros y la administración pública. Esta capacidad proporciona una increíble ventaja competitiva a las organizaciones dispuestas a invertir el esfuerzo necesario para lograrla.
Las prácticas que fundamentan la entrega continua nos ayudan a lograr varios beneficios importantes:
-
Lanzamientos de bajo riesgo. El objetivo principal de la entrega continua es que las implementaciones de software sean sencillas y de bajo riesgo, y que puedan ejecutarse en cualquier momento y bajo demanda. Aplicando patrones como los despliegues blue-green, es relativamente sencillo lograr despliegues sin tiempo de inactividad e imperceptibles para los usuarios.
-
Tiempo de comercialización más rápido. No es raro que la fase de integración y pruebas/corrección del ciclo de vida tradicional de entrega de software por fases dure semanas o incluso meses. Cuando los equipos trabajan juntos para automatizar los procesos de compilación y despliegue, aprovisionamiento del entorno y pruebas de regresión, los desarrolladores pueden incorporar las pruebas de integración y regresión a su trabajo diario y eliminar por completo estas fases. Además, evitamos la gran cantidad de repeticiones de trabajo que conlleva el enfoque por fases.
-
Mayor calidad. Cuando los desarrolladores cuentan con herramientas automatizadas que detectan regresiones en minutos, los equipos pueden concentrarse en la investigación de usuarios y en actividades de prueba de alto nivel, como pruebas exploratorias, de usabilidad y de rendimiento y seguridad. Al crear un flujo de despliegue automatizado, estas actividades pueden realizarse de forma continua durante todo el proceso de entrega, garantizando así la calidad integrada en los productos y servicios desde el principio.
-
Costos más bajos. Cualquier producto o servicio de software exitoso evolucionará significativamente a lo largo de su ciclo de vida. Al invertir en la creación, prueba, despliegue y automatización del entorno, reducimos sustancialmente el costo de implementar y entregar cambios incrementales al software, eliminando muchos de los costos fijos asociados con el proceso de despliegue.
-
Mejores productos. La entrega continua permite trabajar con lotes pequeños de forma económica. Esto significa que podemos obtener retroalimentación de los usuarios durante todo el ciclo de entrega, basándonos en el software en funcionamiento. Técnicas como las pruebas A/B nos permiten adoptar un enfoque basado en hipótesis para el desarrollo de productos, lo que nos permite probar ideas con los usuarios antes de desarrollar funcionalidades completas. Esto significa que podemos evitar que dos tercios de las funcionalidades que desarrollamos aporten valor nulo o negativo a nuestros negocios.
-
Equipos más felices. Investigaciones revisadas por pares han demostrado que la entrega continua simplifica los despliegues y reduce el agotamiento del equipo. Además, al desplegar con mayor frecuencia, los equipos de entrega de software pueden interactuar más activamente con los usuarios, comprender qué ideas funcionan y cuáles no, y observar de primera mano los resultados del trabajo realizado. Al eliminar las actividades tediosas y de bajo valor asociadas con la entrega de software, podemos centrarnos en lo que más nos importa: deleitar continuamente a nuestros usuarios.
Si esto suena demasiado bueno para ser verdad, tenga en cuenta que la entrega continua no es magia. Se trata de la mejora continua y diaria: la disciplina constante de buscar un mayor rendimiento siguiendo la heurística “si duele, hazlo más a menudo y deja que el dolor avance”.