La ansiedad que generan los despliegues es real. Tratemos de comprender las emociones humanas relacionadas con los despliegues y aprendamos las mejores prácticas para minimizar el miedo.
Una reciente interrupción del servicio que afectó a CrowdStrike afectó a 8,5 millones de sistemas operativos Windows, lo que provocó interrupciones en varios servicios globales, incluidos aerolíneas y hospitales. Múltiples análisis han examinado la causa raíz de este incidente.
Sin embargo, como ingeniero de software, creo que nos estamos olvidando del aspecto de las emociones humanas relacionadas con las implementaciones, en concreto, el miedo a interrumpir la producción. Eso es lo que intentaremos abordar en este artículo. Trataremos lo siguiente:
Antes de profundizar en el miedo a las implementaciones desde la perspectiva de un ingeniero de software, primero comprendamos el papel de un ingeniero de lanzamiento. La ingeniería de lanzamiento ha evolucionado considerablemente en los últimos años, gracias a las herramientas modernas de CI y CD y la estandarización de Kubernetes. A pesar de estos avances, las responsabilidades principales siguen siendo las mismas:
A diferencia de los ingenieros de lanzamiento, como ingenieros de software que trabajan en el equipo de producto, es posible que solo nos interesen ciertos aspectos de las implementaciones:
Si bien hay cosas que nos importan, también hay otras que no:
Entonces, ¿qué tiene que ver el miedo con las implementaciones continuas?
Mucho.
Los estudios han demostrado [varios beneficios](https://dora.dev/capabilities/continuous-delivery/#:~:text=DevOps%20Research%20and%20Assessment%20(DORA,as%20higher%20levels%20of%20availability) de la implementación continua (CD), y, como era de esperar, muchos de ellos son de naturaleza psicológica . Las implementaciones continuas eliminan la “intervención humana”, por lo tanto, requieren una fuerte confianza en la infraestructura de prueba.
En otras palabras, las pruebas automatizadas no solo garantizan la confiabilidad de la producción, sino que también brindan seguridad psicológica , a veces de manera irracional, reduciendo el miedo a las implementaciones. Como desarrollador, me siento más cómodo haciendo cambios en un proceso de CD que si me piden que verifique los cambios manualmente.
Sin embargo, a pesar de la popularidad de estas estrategias de CD, muchas empresas aún activan las implementaciones de forma manual (tienen un humano en el circuito), lo que indica un enfoque cauteloso en las implementaciones de CD. Este comportamiento sugiere que los equipos prefieren mantener la supervisión del proceso de lanzamiento e intervenir cuando sea necesario.
Es importante entender esto desde una perspectiva de seguridad psicológica. Las implementaciones manuales implican que alguien supervisa el proceso y se encarga de los problemas cuando las cosas salen mal. Si bien esto brinda una sensación de seguridad, también puede inducir miedo en la persona que realiza la implementación y es propenso a errores humanos.
A pesar de los inconvenientes, la mayoría de los equipos gestionan las implementaciones de forma manual. Una implementación manual típica puede incluir algunos pasos:
Alguien supervisa todo el proceso de implementación antes de que se publique un lanzamiento. Esta persona tiene la tarea de intervenir cuando hay señales de problemas. Los equipos mantienen una persona de guardia que administra sus implementaciones y se ocupa de los problemas cuando surgen.
Algunos equipos cuentan con un equipo de ingeniería de lanzamiento dedicado, que garantiza que los lanzamientos se realicen sin problemas. Como esto implica un alto grado de especialización, el proceso de implementación podría ser más eficiente y confiable.
Algunas empresas mantienen una hoja de cálculo para validar los cambios realizados. Esto les permite revisar y aprobar sistemáticamente estos cambios, asegurándose de que cumplen con los estándares de calidad predefinidos.
Además de las hojas de cálculo, el control de calidad manual es otra capa que las empresas añaden. El control de calidad manual prueba las nuevas versiones en entornos de prueba antes de implementarlas en producción. Sin embargo, un entorno de prueba no es infalible, por lo que no se tendrán en cuenta algunos escenarios de la vida real.
Muchas cosas pueden salir mal para cualquier equipo de desarrollo de software que dependa únicamente de implementaciones manuales:
Esto puede generar cuellos de botella que, en algunos casos, provoquen retrasos en la publicación y errores humanos. Además, un equipo podría tener problemas si esa persona en particular se va o no puede realizar las tareas requeridas.
No existe una estrategia para dar seguimiento a un incidente de producción desfavorable. Cuando ocurre un incidente, el equipo de lanzamiento debe esforzarse para encontrar a las partes interesadas relevantes para ayudar a resolverlo y tomar decisiones.
Errores tipográficos en comandos o scripts, u olvido de ejecutar los pasos previos o posteriores a la implementación.
Dado que las implementaciones requieren supervisión, se convierte en un esfuerzo que consume mucho tiempo. Además, hace que la frecuencia de las implementaciones disminuya significativamente. Por ejemplo, si se requiere una hora para supervisar toda la implementación, el equipo de lanzamiento puede decidir omitir las implementaciones en los días con cambios menores para ahorrar ese tiempo.
Los equipos de productos no tienen claro cuál es el estado de las versiones ni cuándo sus cambios entrarán en producción.
Al observar estos desafíos, es fácil entender por qué los ingenieros temen las implementaciones. El riesgo de fallas en las implementaciones, los altos riesgos y la presión para mantener el tiempo de inactividad bajo también contribuyen a este temor.
Estos fallos se pueden minimizar aumentando la automatización de las pruebas. Sin embargo, dado que estas pruebas se llevan a cabo en un entorno de prueba, no se debe esperar que una prueba automatizada detecte todos los errores posibles. Es de esperar que se produzcan fallos, pero a una tasa reducida.
¿Simplemente configurar implementaciones continuas? Es más fácil decirlo que hacerlo. A pesar de las desventajas, las implementaciones manuales siguen siendo aceptables si se gestionan bien. Los objetivos deberían ser:
Las estrategias Canary y Rollback pueden ayudar a reducir el impacto de una interrupción y en muchos casos evitar la crisis automáticamente.
Una versión Canary expone su nueva versión a una pequeña parte del tráfico del entorno de producción. Esto brinda a los equipos información sobre problemas que podrían no haber surgido durante las pruebas.
Por otro lado, una estrategia de reversión ayuda a los ingenieros a revertir una versión a su estado estable anterior. Se lleva a cabo cuando surgen nuevos problemas después de las implementaciones en el entorno de producción.
Definir metodologías de implementación estándar que resulten en eficiencia, consistencia, confiabilidad y alta calidad de software. En su informe sobre el estado de DevOps , DORA muestra que la confiabilidad predice un mejor rendimiento operativo. Además, tener un proceso estandarizado permite la repetibilidad en los procesos de lanzamiento, que se pueden automatizar. La automatización de este proceso ayuda a un equipo a mantener bajos los costos de producción.
Democratizar el proceso de implementación elimina la dependencia de individuos específicos. Si le damos poder a cualquier ingeniero de software para que implemente, poco a poco se reduce el miedo. “Si cualquiera puede implementar, no debería ser demasiado difícil”. ¡Comparte tus legos!
Para reducir la ansiedad por la implementación, debemos implementar con mayor frecuencia, no con menos frecuencia. El informe de DORA también destaca que las implementaciones en lotes más pequeños tienen menos probabilidades de causar problemas y ayudan a reducir la barrera psicológica para los desarrolladores.
Aclarar qué se está implementando mejora la experiencia del desarrollador. Facilite a los desarrolladores saber cuándo se realizan las implementaciones y qué cambios se incluyen. Esta transparencia ayuda a los desarrolladores a realizar un seguimiento de cuándo se implementan sus cambios y simplifica las investigaciones de incidentes.
Deben definirse los pasos a seguir para las reversiones y las correcciones urgentes, ya que esto ayuda a eliminar cualquier indecisión con los incidentes de producción. Por ejemplo, debe haber pasos de compilación e implementación separados que los equipos deben seguir para realizar reversiones sencillas.
De manera similar, estandarizar la forma de abordar las revisiones urgentes y las selecciones selectivas puede simplificar la operación cuando hay mucho en juego.
Los indicadores de características son como interruptores de seguridad que pueden desactivar una nueva característica que haya provocado un incidente en la producción. Esto puede permitir a los ingenieros resolver los incidentes de producción rápidamente.
Los equipos de software deben tratar la ingeniería de lanzamiento como una prioridad desde el comienzo del desarrollo del producto para evitar errores costosos. Y no debemos permitir que incidentes como la interrupción del servicio de Crowdstrike paralicen nuestras prácticas de desarrollo. Para abordar el miedo a la implementación y prevenir incidentes de producción se requieren varias estrategias clave:
En Aviator, estamos creando herramientas de productividad para desarrolladores a partir de principios básicos para permitirles crear más rápido y mejor. Para conocer una forma moderna de gestionar las implementaciones, consulte Aviator Releases .