La histórica frase de Satya Nadella que «Todas las empresas son empresas de software» se refiere a la creciente importancia del software para el éxito de las empresas de todos los sectores. En el pasado, las empresas se centraban en la fabricación de productos físicos, pero en la actualidad, las empresas dependen cada vez más del software para sus operaciones. El software se utiliza para automatizar tareas, gestionar datos, interactuar con los clientes y crear nuevos productos y servicios. Por lo tanto, es esencial que todas las empresas entiendan el papel del software y cómo utilizarlo para su beneficio.

Si nos creemos esta frase de Satya Nadella, entenderemos que para las empresas, entregar software de alta calidad de manera rápida y confiable, es esencial. Esta es justamente la idea principal del libro Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations de Nicole Forsgren, Jez Humble y Gene Kim. Las organizaciones que adoptan las prácticas de DevOps y la cultura de aprendizaje continuo pueden mejorar significativamente su capacidad para entregar software de alta calidad de manera rápida y confiable.

El libro se basa en un estudio de más de 2500 organizaciones, gracias al cual, se concluyó que aquellas que adoptaron las prácticas de DevOps tenían un rendimiento significativamente mejor que aquellas que no lo hicieron. En concreto, las organizaciones que adoptaron DevOps fueron más capaces de:

  • Entregar software de manera más rápida y confiable
  • Mejorar la calidad del software
  • Reducir los costos de desarrollo y operaciones
  • Aumentar la satisfacción de los clientes

El libro identifica cuatro prácticas clave de DevOps:

  • Cultura de aprendizaje continuo: Las organizaciones DevOps crean una cultura que fomenta el aprendizaje y la experimentación.
  • Ingeniería de confiabilidad: Las organizaciones DevOps adoptan prácticas de ingeniería de confiabilidad para mejorar la calidad y la confiabilidad del software.
  • Automatización: Las organizaciones DevOps automatizan las tareas de desarrollo y operaciones para reducir la intervención humana y acelerar el flujo de trabajo.
  • Medición y análisis: Las organizaciones DevOps recopilan datos y los utilizan para mejorar sus procesos.

El libro proporciona orientación sobre cómo implementar estas prácticas en cualquier organización.

Principales ideas de Accelerate

  • La entrega continua le permite realizar cambios sin interrumpir tu organización.
  • Los equipos débilmente acoplados no se atascan en los detalles
  • Dotar a los equipos de opciones de herramientas produce un mejor rendimiento
  • La gestión ajustada impulsa la evolución de los equipos de software.
  • Abordar de frente los problemas de implementación aumenta el rendimiento y la moral del equipo

La entrega continua te permite realizar cambios sin interrumpir tu organización

El Manifiesto Ágil se publicó en 2001. En ese momento, la programación extrema (XP para abreviar) era el método ágil elegido por muchos en la industria. A diferencia de scrum, XP era de naturaleza muy técnica. Enfatizó pasos como probar e integrar software continuamente 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 simples? Imagina tener un conjunto de herramientas que te permiten realizar cualquier tipo de cambio en tu software, ya sea agregar nuevas funciones, corregir errores o probar algo nuevo, y luego poder implementarlo sin problemas y rápidamente. 

Hay algunas reglas de oro para esto. 

¿Por primera vez? Comienza con la calidad. La idea es que es más fácil empezar bien que corregir errores más adelante.

En segundo lugar, divide las tareas. Es como armar un rompecabezas, en el que vas armando la imagen paso a paso, lo que te permite comprender qué funciona y hacer ajustes a lo largo del camino.

En tercer lugar, deja que las máquinas hagan la repetición. Dicho de otra manera, utiliza tus recursos sabiamente. Las personas son excelentes para resolver desafíos complejos, así que déjeles hacerlo. ¿Las cosas aburridas? Automatízalas.

Cuarto, apunta siempre más alto. Los mejores equipos siempre buscan formas de mejorar.

Finalmente, el trabajo en equipo hace que el sueño funcione. Todos los involucrados deben trabajar juntos, apuntando a una visión más amplia, no solo a su pieza del rompecabezas.

Ahora bien, para que la entrega continua funcione, se necesitan bases sólidas. También podemos dividir estos fundamentos en tres máximas. 

Primero, ten un plan sólido. Cada paso en la creación, prueba e implementación de software debe automatizarse. Sólo unos pocos pasos, como las aprobaciones finales, deberían necesitar un toque humano.

En segundo lugar, sigue fusionándote. Los equipos deben seguir integrando su trabajo y asegurarse de que funcione para detectar problemas tempranamente.

Por último, pero no menos importante, ¡está siempre probando! Las pruebas no deberían ser una ocurrencia tardía; debería estar sucediendo todo el tiempo. Sólo una vez que un trabajo pasa todas las pruebas se puede considerar “terminado”.

En resumen, la entrega continua consiste en ofrecer software de buena calidad de forma regular y fiable. Es como una máquina bien engrasada donde todos, desde el codificador hasta el diseñador y el evaluador, trabajan juntos a la perfección. ¿Y los beneficios? Las investigaciones dicen que no sólo mejora la entrega de software, sino que también mejora el espíritu de equipo y reduce el estrés y los problemas de implementación. Pero como cualquier gran cambio, requiere inversión en tiempo, herramientas y voluntad de adaptarse. 

Si profundizamos más, vemos que combinar esto con el panorama más amplio de los sistemas y estructuras de software de la empresa puede ser un desafío. Y eso es lo que veremos a continuación. 

Los equipos débilmente acoplados no se atascan en los detalles

Las prácticas de entrega continua pueden aumentar la eficiencia con la que el software llega a los usuarios, mejorar la moral en el lugar de trabajo y simplificar el proceso de actualización de software. Pero hay un problema: la propia estructura del software a veces puede ralentizar las cosas.

Imagínese si el motor de un automóvil estuviera calibrado con tanta sensibilidad que un pequeño cambio alterara todo lo demás. En software queremos lo contrario. Nuestro objetivo es lograr un diseño “débilmente acoplado”, donde los cambios en una parte no perturben el resto. De esa manera, a medida que una empresa crece, puede seguir mejorando sin muchos contratiempos.

Entonces, ¿cómo es una gran estructura de software? Se destacan dos cosas: poder probar cambios sin interrumpir todo el sistema y poder actualizar partes del software sin esperar a otras. En las mejores configuraciones, los equipos pueden realizar grandes cambios sin necesidad de pedir permiso ni generar trabajo adicional para los demás. Además, pueden implementar estos cambios en cualquier momento, incluso durante las horas de mayor actividad, sin provocar tiempos de inactividad.

Aquí hay otra parte interesante: en organizaciones con este diseño flexible, los equipos no necesitan chatear todo el tiempo. Pueden trabajar de forma independiente, como chefs en una gran cocina. Cada uno es responsable de su propia estación y componente del menú, pero todos trabajan para lograr una comida completa. Eso no significa que los equipos no deban hablar; simplemente significa que deben guardar sus conversaciones para objetivos más amplios en lugar de pequeños detalles. Los chefs se reúnen para hablar de cómo quieren que se sienta el comensal, no de cómo cocinar camarones 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énselo de esta manera: si está tratando de planificar un gran evento, es más eficiente discutir ideas amplias que cada detalle minucioso. De manera similar, 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 de forma independiente y colaborativa cuando sea necesario. Este equilibrio garantiza que a medida que las empresas crecen y cambian, su software pueda seguir el ritmo sin esfuerzo.

Dotar a los equipos de opciones de herramientas produce un mejor rendimiento

Piensa en el desempeño de una empresa. Las imágenes inmediatas que pueden venir a la mente son gráficos de ventas o reuniones de juntas directivas. Pero debajo de todo eso, hay una base crucial: las herramientas y sistemas que utilizan los equipos para realizar el trabajo.

Normalmente, cada empresa tiene un manual de estrategias. Los ingenieros y equipos tecnológicos tienen un menú fijo de herramientas y marcos entre 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 tecnológico y conduce a mejores ofertas por parte de los proveedores de tecnología. Sin mencionar que se asegura de que todas las herramientas estén legalmente autorizadas para su uso.

Pero aquí está el giro. Al darles a los equipos un carril tan estrecho, es posible que estés poniendo obstáculos en su camino. Restringir la elección de herramientas puede sofocar la innovación e impedir que los equipos adopten formas más nuevas, quizás más eficientes, de abordar los desafíos. Los datos respaldan esto. Cuando los equipos tienen las riendas para elegir sus herramientas, tienden a ofrecer mejores resultados y la organización en general avanza más rápido. Esto tiene sentido. ¿Quién sabe mejor acerca de lo que se necesita que los expertos en tecnología sumergidos hasta las rodillas en la rutina diaria de la creación de software y la gestión de 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 un terreno común garantiza menos contratiempos al diagnosticar y resolver problemas. Además, un enfoque estandarizado de la seguridad puede garantizar que la seguridad esté integrada en la estructura misma de los proyectos. Pero estas herramientas y protocolos de seguridad deberían ser muy fáciles de usar. Si encajan de forma natural, los equipos los aceptarán sin ningún empujón. Si se sienten obligados, 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 buenos, se usarán.

Si bien el mundo empresarial a menudo está lleno de debates sobre qué tecnología o herramienta será la próxima gran novedad, el verdadero foco debería estar en otra parte. Debería centrarse en cómo estas herramientas hacen sentir a los usuarios y en los resultados que obtienen. En lugar de dictar la elección de herramientas, la medida más inteligente es fomentar la colaboración. Escuche a los ingenieros. Comprender sus necesidades. Luego, entrégueles las herramientas que harán posible sus tareas y harán que sea un placer realizarlas.

La gestión ajustada impulsa la evolución de los equipos de software

Agile se ha convertido en una palabra de moda en el desarrollo de software. Pero muchas empresas apenas tocan la superficie, y mucho menos exploran todo su potencial. Se apegan a viejos hábitos, tardan mucho en presupuestar y planificar, rara vez publican actualizaciones importantes y dejan los comentarios de los clientes en un segundo plano.

Introduzca magra. Inspirado en los principios del movimiento Lean Startup, se trata de comentarios continuos de los usuarios. El empresario estadounidense Eric Ries, en su libro The Lean Startup, dio una nueva perspectiva: comience con un prototipo, mantenga sus proyectos pequeños y manejables y esté preparado para adaptar su producto e incluso sus planes de negocio en función de lo que le dice el mundo real.

Muchos equipos afirman ser ágiles, pero están estancados en seguir reglas y requisitos externos a su equipo. La auténtica agilidad involucra al cliente desde el principio. Si los desarrolladores no pueden modificar y cambiar su trabajo basándose en información en tiempo real sin recibir el visto bueno de alguien superior, no podrán crear algo realmente sorprendente.

Las investigaciones muestran los beneficios de darles a los equipos un poco de libertad y permitirles experimentar y cambiar cosas durante el desarrollo. Cuando pueden obtener y utilizar los comentarios de los clientes desde las primeras etapas, el negocio prospera en áreas como ganancias, captura de mercado y eficiencia. 

Pero no se trata de dejar que los desarrolladores hagan lo que quieran. Hay un equilibrio. Combinar la libertad con prácticas como trabajar en trozos pequeños, mantener a todos informados sobre el progreso y escuchar constantemente a los clientes es la salsa secreta. Este enfoque garantiza que las decisiones sean inteligentes, estratégicas y beneficiosas para todos los involucrados.

Cuando se combinan prácticas genuinamente ágiles con la entrega de software, los equipos se sintieron más motivados y menos estresados. Cambiando la perspectiva, cuando la entrega de software es correcta, se impulsan las técnicas de gestión eficiente de productos. Es un circuito beneficioso. Cuanto más mejoras, más aumentan también los demás beneficios. Este ciclo conduce al crecimiento y al éxito. 

¿La gran conclusión? Trabajar en pequeños fragmentos, tener en cuenta al usuario y adoptar un enfoque de prueba y adaptación es el futuro del desarrollo de software exitoso.

Abordar de frente los problemas de implementación aumenta el rendimiento y la moral del equipo

El bienestar y el rendimiento de su equipo de software están estrechamente vinculados. La industria tecnológica conoce los altos costos, tanto monetarios como humanos, del agotamiento y los procesos de implementación estresantes. Entonces, resumamos las cosas echando un vistazo a los «dolor de implementación».

Imagine 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 del desarrollo de software y las operaciones de TI. Es como dos mundos chocando, con diferencias en el entorno, la mentalidad, los procesos e incluso la terminología. Cuanto más grave es este problema, más indicadores hay de una entrega de software, una cultura organizacional y un desempeño general deficientes.

Considere la experiencia de Microsoft. Sus equipos de ingeniería comenzaron a adoptar la entrega continua y observaron resultados transformadores. Antes de adoptar estos métodos de entrega modernos, la satisfacción de los ingenieros con el equilibrio entre vida personal y laboral era apenas del 38 por ciento. Después de la implementación, se disparó al 75 por ciento. Esto se debe a que los ingenieros pudieron gestionar sus tareas de manera más eficiente dentro del horario laboral, minimizar las implementaciones manuales y mantener el estrés relacionado con el trabajo contenido dentro de las paredes de la oficina.

Pero no es sólo el dolor de la implementación lo que debería preocupar a los dueños de negocios. Una señal igualmente preocupante es cuando los equipos de desarrollo ignoran por completo el proceso de implementación. Si les pregunta sobre los despliegues y responden: «Nunca había pensado en eso», deberían sonar las alarmas. Esta falta de visibilidad generalmente implica barreras ocultas, y estas barreras mantienen a los desarrolladores ignorantes sobre las ramificaciones de su trabajo.

Muchos en el ámbito tecnológico se preguntan cómo aliviar los problemas de implementación 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. Introducir pruebas e implementación automatizadas, emplear integración continua, centrarse en la seguridad desde el principio, gestionar de manera eficiente los datos de prueba, utilizar arquitecturas flexibles, capacitar a los equipos para operar de forma independiente y garantizar el control de versiones son fundamentales.

En esencia, las medidas técnicas que aumentan nuestra capacidad para entregar software de manera rápida y confiable también desempeñan un papel importante en la mitigación del estrés relacionado con la implementación del código. Tener estas medidas implementadas garantiza no solo un sistema de entrega de software sólido, sino también un equipo satisfecho y de alto rendimiento.

Foto de RealToughCandy.com