por Nicole Forsgren, Jez Humble y Gene Kim
En un tweet
Desbloquea el futuro de la excelencia del software con la entrega continua, los principios lean y un enfoque en el bienestar del equipo. No se trata sólo de código, sino de crear una sinfonía de innovación, adaptabilidad y diseño centrado en el ser humano.
¿De qué trata?
"Accelerate (2018)" explora la intersección entre el desarrollo de software y el rendimiento organizativo. Basándose en una investigación rigurosa, revela las prácticas y capacidades que permiten a las empresas de alto rendimiento impulsadas por la tecnología sobresalir y lograr una ventaja competitiva en la vertiginosa era digital.
Sobre los autores
Nicole Forsgren es socia de Microsoft Research, donde dirige el Developer Velocity Lab, un esfuerzo interorganizativo para amplificar la productividad, la comunidad y el bienestar. Ha sido ampliamente reconocida por su trabajo sobre la comprensión del rendimiento de la entrega de software.
Jez Humble trabaja en SRE en Google y es profesor en la UC Berkeley. También es coautor de libros como Continuous Delivery y Lean Enterprise.
Gene Kim es un galardonado CTO, investigador y autor más conocido por El Proyecto Phoenix, El Manual DevOps y El Proyecto Unicornio.
Una guía para dominar el arte de la entrega eficiente de software.
Imagina que estás en una panadería. Tienes una larga cola de clientes, cada uno de los cuales quiere una tarta decorada de forma única y entregada rápidamente. Los métodos tradicionales te llevarían a hornear cada tarta desde cero, lenta y metódicamente. Pero, ¿y si hubiera una forma de servir a cada cliente rápidamente, con tartas personalizadas que no sólo tuvieran un aspecto fantástico, sino también un sabor divino?
Esa es la magia de la entrega continua en el mundo del software.
Este resumen para Acelerar desentraña la esencia del desarrollo moderno de software, permitiendo a las empresas servir a sus clientes más rápido y mejor. Proporciona una hoja de ruta para transformar tu "panadería", garantizando que tu equipo pueda crear obras maestras con eficacia y alegría.
¿Listo para sumergirte en el arte y la ciencia que hay detrás de la entrega de software de primer nivel?
La entrega continua te permite hacer cambios sin perturbar tu organización
El Manifiesto Ágil se publicó en 2001. Por aquel entonces, la programación extrema (abreviada XP) era el método ágil al que recurrían muchos en el sector. A diferencia de scrum, XP era de naturaleza muy técnica. Hacía hincapié en pasos como probar e integrar continuamente el software durante el desarrollo. La entrega continua lleva esta idea aún más lejos. Es como decir: "Necesitamos tener una buena receta y los ingredientes adecuados desde el principio si queremos hornear un gran pastel".
Entonces, ¿qué es la entrega continua en términos sencillos? Imagina que dispones de un conjunto de herramientas que te permiten realizar cualquier tipo de cambio en tu software -ya sea añadir nuevas funciones, corregir errores o probar algo nuevo- y luego poder desplegarlo sin problemas y con rapidez.
Hay algunas reglas de oro para ello.
¿La primera? Empieza por la calidad. La idea es que es más fácil empezar bien que corregir errores más tarde.
En segundo lugar, divide las tareas. Es como montar un rompecabezas, en el que vas recomponiendo la imagen paso a paso, lo que te permite captar lo que funciona y hacer ajustes por el camino.
Tercero, deja que las máquinas se encarguen de la repetición. Dicho de otro modo, utiliza tus recursos sabiamente. Las personas son geniales para resolver retos complejos, así que déjalas que lo hagan. ¿Las cosas aburridas? ¡Automatiza!
Cuarto, apunta siempre más alto. Los mejores equipos siempre buscan formas de mejorar.
Por último, el trabajo en equipo hace que el sueño funcione. Todos los implicados deben trabajar juntos, con la vista puesta en el conjunto, no sólo en su pieza del rompecabezas.
Ahora bien, para que la entrega continua funcione, necesitas unos cimientos sólidos. También podemos dividir estos cimientos en tres máximas.
En primer lugar, tener un proyecto sólido. Cada paso en la construcción, prueba y despliegue del software debe automatizarse. Sólo unos pocos pasos, como las aprobaciones finales, deberían necesitar un toque humano.
Segundo, sigue fusionando. Los equipos deben seguir integrando su trabajo y asegurarse de que funciona para detectar los problemas a tiempo.
Por último, pero no por ello menos importante, ¡hay que probar siempre! Las pruebas no deben ser una ocurrencia tardía; deben estar ocurriendo todo el tiempo. Sólo cuando un trabajo supera todas sus pruebas puede considerarse "hecho".
En resumen, la entrega continua consiste en sacar al mercado software de buena calidad de forma regular y fiable. Es como una máquina bien engrasada en la que todos, desde el programador al diseñador, pasando por el probador, trabajan juntos a la perfección. ¿Y los beneficios? Las investigaciones dicen que no sólo mejora la entrega del software, sino que también mejora el espíritu de equipo y reduce el estrés y los problemas de despliegue. Pero como cualquier gran cambio, necesita inversión en tiempo, herramientas y voluntad de adaptación.
Si profundizamos, vemos que integrarlo en el panorama general de los sistemas y estructuras de software de la empresa puede ser un reto. Y eso es lo que veremos a continuación.
Los equipos poco acoplados no se atascan en los detalles
Las prácticas de entrega continua pueden aumentar la eficacia con la que el software llega a los usuarios, mejorar la moral en el trabajo y simplificar el proceso de actualización del software. Pero hay un inconveniente: la propia estructura del software a veces puede ralentizar las cosas.
Imagina que el motor de un coche estuviera calibrado con tanta sensibilidad que hacer un pequeño cambio perturbara todo lo demás. En software, queremos lo contrario. Aspiramos a un diseño "débilmente acoplado", en el que los cambios en una parte no perturben el resto. De ese modo, a medida que una empresa crece, puede seguir mejorando sin muchos contratiempos.
Entonces, ¿cómo es una gran estructura de software? Destacan dos cosas: poder probar los cambios sin perturbar todo el sistema, y poder actualizar partes del software sin esperar a otras. En las mejores configuraciones, los equipos pueden hacer grandes cambios sin necesidad de pedir permiso ni causar trabajo extra a los demás. Además, pueden poner en marcha estos cambios en cualquier momento, incluso durante las horas de más trabajo, sin causar tiempos de inactividad.
He aquí otra parte genial: en las organizaciones con este diseño flexible, los equipos no necesitan charlar todo el tiempo. Pueden trabajar independientemente, como chefs en una gran cocina. Cada uno es responsable de su propio puesto y componente del menú, pero todos trabajan para conseguir una comida completa. Eso no significa que los equipos no deban hablar; sólo significa que deben reservar sus conversaciones para los objetivos generales en lugar de para los pequeños detalles. Los chefs se reúnen para hablar de cómo quieren que se sienta el comensal, no de cómo cocinar las gambas o aliñar la ensalada.
Algunos podrían argumentar que una mayor comunicación siempre es buena, especialmente en el mundo tecnológico de DevOps, que gira en torno al trabajo en equipo. Pero piénsalo de este modo: si intentas planificar un gran acontecimiento, es más eficaz discutir ideas generales que cada detalle. Del mismo modo, en el software, queremos que los canales de comunicación se centren en objetivos generales.
Para que el software sea eficiente y responda a las necesidades empresariales, su estructura debe ser flexible, permitiendo a los equipos trabajar tanto de forma independiente como en colaboración cuando sea necesario. Este equilibrio garantiza que, a medida que las empresas crecen y cambian, su software pueda seguir el ritmo sin esfuerzo.
Empoderar a los equipos con opciones de herramientas produce un mejor rendimiento
Piensa en el rendimiento de una empresa. Las imágenes inmediatas que pueden venir a la mente son gráficos de ventas o reuniones en la sala de juntas. Pero debajo de todo eso, hay una base crucial: las herramientas y los sistemas que utilizan los equipos para hacer su trabajo.
Toda empresa suele tener un libro de jugadas. Los ingenieros y los equipos técnicos tienen un menú fijo de herramientas y marcos de trabajo de los que pueden elegir. ¿Por qué? Bueno, se cree que este método mantiene el entorno sencillo, garantiza que todos los miembros del equipo hablen el mismo lenguaje técnico y permite obtener mejores ofertas de los proveedores de tecnología. Por no mencionar que garantiza que todas las herramientas están legalmente autorizadas para su uso.
Pero aquí está el giro. Al dar a los equipos un carril tan estrecho, puedes estar poniendo topes en su camino. Restringir la elección de herramientas puede ahogar la innovación e impedir que los equipos adopten formas nuevas, quizá más eficientes, de afrontar los retos. Los datos lo corroboran. Cuando los equipos tienen las riendas para elegir sus herramientas, tienden a ofrecer mejores resultados, y la organización en general avanza más deprisa. Esto tiene sentido. ¿Quién sabe mejor lo que se necesita que los expertos en tecnología metidos hasta las rodillas en el ajetreo diario de la creación de software y la gestión de la tecnología?
Ahora bien, algunos podrían argumentar que un poco de estandarización no hace daño. Y no se equivocan. Especialmente cuando hablamos de la estructura de los sistemas. Tener una base común garantiza menos contratiempos a la hora de diagnosticar y resolver problemas. Además, un enfoque estandarizado de la seguridad puede garantizar que la seguridad se entreteja en el tejido mismo de los proyectos. Pero estas herramientas y protocolos de seguridad deben ser fáciles de usar. Si encajan de forma natural, los equipos los adoptarán sin problemas. Si se sienten forzados, no lo harán.
Al fin y al cabo, es como cualquier producto de consumo. Si está centrado en el usuario, es un éxito. Las herramientas para equipos internos no son diferentes. Si son buenas, se utilizarán.
Aunque el mundo empresarial a menudo bulle con debates sobre qué tecnología o herramienta es la próxima gran novedad, el verdadero foco de atención debería estar en otra parte. Debería estar en cómo estas herramientas hacen sentir a los usuarios y en los resultados que consiguen. En lugar de dictar la elección de las herramientas, lo más inteligente es fomentar la colaboración. Escucha a los ingenieros. Comprende sus necesidades. Luego, entrégales las herramientas que hagan posible sus tareas y que sea un placer llevarlas a cabo.
La gestión ágil impulsa la evolución en los equipos de software
Ágil se ha convertido en una palabra de moda en el desarrollo de software. Pero muchas empresas apenas arañan la superficie, por no hablar de explorar todo su potencial. Se aferran a viejos hábitos, tardan años en presupuestar y planificar, rara vez lanzan grandes actualizaciones y dejan de lado las opiniones de los clientes.
Entra el lean. Inspirado en los principios del movimiento "lean startup", se trata de obtener información continua de los usuarios. El emprendedor Americano Eric Ries, en su libro The Lean Startup, dio una nueva perspectiva: empieza con un prototipo, mantén tus proyectos pequeños y manejables, y estate preparado para adaptar tu producto e incluso tus planes de negocio en función de lo que te diga el mundo real.
Muchos equipos afirman ser ágiles, pero se quedan atascados siguiendo normas y requisitos ajenos a su equipo. La verdadera agilidad implica al cliente desde el principio. Si los desarrolladores no pueden ajustar y cambiar su trabajo basándose en información en tiempo real sin que alguien de más arriba les dé su aprobación, se les impide crear algo realmente asombroso.
Los estudios demuestran las ventajas de dar a los equipos un poco de libertad y permitirles experimentar y cambiar las cosas durante el desarrollo. Cuando pueden obtener y utilizar los comentarios de los clientes desde las primeras fases, la empresa prospera en áreas como los beneficios, la captación del mercado y la eficacia.
Pero no se trata de dejar que los desarrolladores hagan lo que quieran. Hay un equilibrio. La salsa secreta consiste en combinar la libertad con prácticas como trabajar en trozos del tamaño de un bocado, mantener a todo el mundo al tanto de los progresos y escuchar constantemente a los clientes. Este enfoque garantiza que las decisiones sean inteligentes, estratégicas y beneficiosas para todos los implicados.
Cuando las prácticas genuinamente ágiles se combinan con la entrega de software, los equipos se sienten más motivados y menos estresados. Cambiando de perspectiva, cuando la entrega de software es correcta, se potencian las técnicas de gestión ágil del producto. Es un bucle beneficioso. Cuanto más mejoras, más aumentan también los demás beneficios. Este ciclo conduce al crecimiento y al éxito.
¿La gran lección? Trabajar en pequeños trozos, teniendo en cuenta al usuario y adoptando un enfoque de prueba-prueba-adaptación es el futuro del desarrollo de software de éxito.
Abordar de frente los problemas de despliegue aumenta el rendimiento y la moral del equipo
El bienestar y el rendimiento de tu equipo de software están estrechamente relacionados. El sector tecnológico conoce los elevados costes, tanto monetarios como humanos, del agotamiento y los procesos de despliegue estresantes. Terminemos, pues, echando un vistazo al "dolor del despliegue".
Imagina la aprensión que sienten los ingenieros cuando están a punto de lanzar un nuevo código al mundo real. Esta ansiedad es un poderoso indicador de la capacidad de entrega de software del equipo. El origen de este dolor se encuentra en la intersección entre el desarrollo de software y las operaciones de TI. Es como dos mundos que chocan, con diferencias de entorno, mentalidad, procesos e incluso terminología. Cuanto más grave es este dolor, más indicadores hay de mala entrega de software, cultura organizativa y rendimiento general.
Considera la experiencia de Microsoft. Sus equipos de ingeniería empezaron a adoptar la entrega continua y vieron resultados transformadores. Antes de adoptar estos modernos métodos de entrega, la satisfacción de los ingenieros con respecto al equilibrio entre trabajo y vida personal era de apenas el 38%. Tras la implantación, se disparó al 75%. Esto se debe a que los ingenieros pudieron gestionar sus tareas de forma más eficaz dentro del horario laboral, minimizar los despliegues manuales y mantener el estrés laboral contenido dentro de las paredes de la oficina.
Pero no es sólo el dolor de la implantación lo que debería preocupar a los empresarios. Una señal igualmente preocupante es cuando los equipos de desarrollo son totalmente ajenos al proceso de despliegue. Si les preguntas por las implantaciones y responden: "Nunca he pensado en ello", deberían saltar las alarmas. Esta falta de visibilidad suele implicar barreras ocultas, y estas barreras mantienen a los desarrolladores en la oscuridad sobre las ramificaciones de su trabajo.
Muchos en el ámbito tecnológico se preguntan cómo aliviar el dolor del despliegue y mejorar la experiencia laboral de su personal técnico. Una investigación exhaustiva ha demostrado que ciertas capacidades técnicas pueden reducir este dolor. Es fundamental introducir pruebas y despliegues automatizados, emplear la integración continua, centrarse en la seguridad desde el principio, gestionar eficazmente los datos de las pruebas, utilizar arquitecturas flexibles, capacitar a los equipos para que funcionen de forma independiente y garantizar el control de las versiones.
En esencia, las medidas técnicas que aumentan nuestra capacidad de entregar software de forma rápida y fiable también desempeñan un papel importante a la hora de mitigar el estrés ligado al despliegue de código. Contar con estas medidas garantiza no sólo un sistema de entrega de software robusto, sino un equipo satisfecho y de alto rendimiento.
Conclusiones finales
El Manifiesto Ágil y la programación extrema hacen hincapié en los métodos ágiles y las pruebas continuas en el desarrollo de software. La entrega continua se centra en actualizar regularmente el software utilizando principios clave como la calidad, el desglose de tareas, la automatización y el trabajo en equipo. El diseño flexible del software permite actualizaciones continuas. Las organizaciones deben equilibrar las herramientas estándar con la autonomía del equipo.
Los principios Lean abogan por la retroalimentación del usuario y la adaptabilidad. Y abordar el "dolor del despliegue", la ansiedad que se siente durante la liberación del código, es vital.
Adoptando estos métodos, el desarrollo de software puede ser eficiente y sin estrés.