Cómo controlar la expansión del software
Tres señales de que no controlas la expansión del software y qué puedes hacer al respecto
Andrew Boyagi
Divulgador sénior
Las arquitecturas monolíticas están desapareciendo a pasos agigantados. Un gran número de empresas de todo el mundo están adoptando una arquitectura poco vinculada para desarrollar software. Los equipos autónomos y distribuidos están dividiendo las aplicaciones monolíticas en colecciones de componentes, como microservicios.
No faltan razones. Una arquitectura poco vinculada facilita la escalación del rendimiento y de la resiliencia del software, a la vez que reduce el riesgo y el plazo de entrega de nuevas funciones de aplicaciones. Además, las ventajas no se reducen al software. Una arquitectura poco vinculada permite a los equipos moverse de forma independiente y publicar con frecuencia cambios que benefician a los usuarios. Los equipos autónomos que compilan software en una arquitectura poco vinculada tienen niveles más altos de felicidad, compromiso y productividad.
Sin embargo, las nuevas formas de trabajar conllevan nuevos retos. Al crear un entorno dinámico y escalable en el que los componentes individuales se crean de forma independiente unos de otros, la complejidad aumenta y da lugar a un nuevo tipo de desafío: la expansión descontrolada del software.
Prueba Compass gratis
Mejora tu experiencia de desarrollador, cataloga todos los servicios y mejora el estado del software.
¿Qué es la expansión descontrolada del software?
La expansión descontrolada del software se produce cuando la cantidad de aplicaciones o componentes de software de un entorno crece y cambia rápidamente, lo que aumenta significativamente la complejidad y provoca el fracaso de los métodos tradicionales de gestión del software. Esta situación se produce normalmente a medida que aumenta el ritmo en una arquitectura distribuida de software.
Modernizar incluso una sola aplicación monolítica probablemente dé como resultado cientos de microservicios gestionados por varios equipos que, de forma independiente y frecuente, publiquen nuevas funciones para la producción. Expandirlo a una cartera de aplicaciones podría significar la introducción de miles de microservicios en varios equipos de desarrollo. No es ninguna sorpresa que las formas tradicionales de gestionar incluso una cartera de aplicaciones pequeña no conduzcan al éxito a largo plazo. Durante la trayectoria de Atlassian hacia los miles de microservicios que sustentan nuestros productos en la actualidad, nos dimos cuenta de que poner freno a la expansión descontrolada del software era clave para aprovechar el potencial de una arquitectura poco vinculada y de equipos autónomos.
Material relacionado
Comparación entre la arquitectura monolítica y la arquitectura de microservicios
VER LA SOLUCIÓN
Mejora tu experiencia de desarrollador con Compass
Puede que los síntomas de la expansión del software no se reconozcan al principio. Pueden aparecer como pequeñas molestias que se van dejando a un lado en favor de otras prioridades más importantes. Sin embargo, si no se controla, la expansión del software puede paralizar a los equipos de desarrollo generando una mayor carga cognitiva, reducir la implicación del equipo y anular las ventajas asociadas con una arquitectura poco vinculada. Como dice el refrán: «el mejor momento para plantar un árbol fue hace 20 años; el segundo mejor momento es ahora». El éxito futuro pasa por controlar la expansión del software antes de que se convierta en un problema.
A continuación, te explicamos tres indicadores de la expansión descontrolada del software, y te contamos lo que puedes hacer para dominar el caos y crear un entorno innovador y dinámico en el que cada equipo pueda dar rienda suelta a su potencial.
Las revisiones posteriores a los incidentes identifican los cambios en un nivel superior como causa principal
Uno de los primeros síntomas de la expansión descontrolada del software es que varias revisiones posteriores a los incidentes (PIR) indiquen que los cambios en un nivel superior han sido la causa principal de un incidente. Un número creciente de microservicios y un mayor volumen de cambios en un entorno pueden poner a prueba las normas existentes de colaboración entre desarrolladores y coordinación de cambios. Incluso un pequeño aumento en la frecuencia de los cambios en una aplicación modernizada, de mensual a semanal, puede multiplicar por 100 el número de publicaciones al mes. No es ninguna sorpresa que los desarrolladores tengan que adaptar su forma de colaborar. Es más probable que se produzcan incidentes en la producción cuando las normas de colaboración entre desarrolladores no se escalan en un entorno rápido y dinámico.
Ofrecer a los desarrolladores una forma no intrusiva para que estén al tanto de los cambios en niveles superiores e inferiores es una excelente manera de controlar el impacto de la expansión descontrolada del software. En Atlassian utilizamos Compass, un portal para desarrolladores que ayuda a los equipos a navegar por las arquitecturas distribuidas, para enviar una notificación dentro de la aplicación a los equipos de desarrollo sobre los cambios importantes en los servicios de nivel superior e inferior. Confirmar la recepción de esta notificación indica al iniciador del cambio que los equipos responsables de los servicios dependientes están al corriente del cambio. Esto brinda la oportunidad de colaborar en el cambio si se espera alguna incidencia, lo que reduce la probabilidad de que se produzcan impactos no deseados en la producción. Dado que los incidentes suelen ocurrir en un entorno dinámico, la colaboración entre desarrolladores durante un incidente es fundamental para restablecer los servicios rápidamente.
En las revisiones posteriores a los incidentes, en las que los cambios en niveles superiores son la causa principal, es común que el tiempo de restauración de los servicios se vea afectado por el tiempo que se tarda en identificar el cambio que ha provocado el problema, junto con el equipo o la persona propietaria del servicio. Lógicamente, reducir el tiempo que se tarda en identificar dicho cambio reduce el tiempo medio de restauración (MTTR) a lo largo del tiempo. Esto resulta más difícil en una arquitectura poco vinculada, en la que los servicios tienen una jerarquía de dependencias compleja y la causa principal de un incidente puede estar en cualquier parte de la pila. Tradicionalmente, las personas encargadas del incidente consultan los logs o los registros de cambios para identificar un cambio que pueda haber provocado un incidente. En un entorno dinámico, es como desmantelar un hormiguero para encontrar a la hormiga que te ha mordido.
En Atlassian utilizamos la fuente de actividades de Compass para reducir el MTTR. La fuente muestra todos los eventos de los sistemas de nivel superior junto con los detalles del equipo propietario. Esto reduce significativamente el tiempo de clasificación al facilitar la colaboración entre desarrolladores durante un incidente. Seguirán produciéndose incidentes, pero identificar de manera oportuna un cambio en un nivel superior como causa principal de un incidente es fundamental para minimizar el impacto y restablecer los servicios rápidamente.
La fuente de actividades de Compass muestra todos los eventos de los sistemas de nivel superior, lo que reduce el tiempo de clasificación en caso de incidente.
La producción del equipo es alta, pero no se alcanzan los objetivos
Uno de los ingredientes clave para la productividad y la felicidad del equipo es avanzar hacia una arquitectura poco vinculada: la capacidad de moverse de forma independiente con altos niveles de autonomía. Si no se le pone freno, la expansión descontrolada del software puede anular algunos de estos beneficios y resultar en un equipo ocupado pero poco productivo e infeliz. Una queja habitual de los equipos de desarrollo es que "todo funciona bien hasta que necesitamos colaborar con otro equipo". Esto empeora cuando la expansión descontrolada del software se convierte en un problema. Si el entorno se expande y cambia rápidamente, los desarrolladores lo tienen más difícil para saber a quién deben contactar para las dependencias de nivel superior o posterior, lo que se traduce en una ralentización y en una acumulación de frustración a largo plazo para los equipos que intentan entregar de forma dinámica.
Hipotéticamente, digamos que el equipo Alfa y el equipo Beta pasan a "listo" un número idéntico de incidencias y puntos de historia en Jira cada semana. El equipo Alfa dedica el 90 % de su esfuerzo a enviar nuevas funciones a producción, mientras que el equipo Beta dedica el 30 % a nuevas funciones y el 70 % a averiguar cómo interactuar con los numerosos servicios de nivel superior de los que depende. Ambos equipos tienen el mismo nivel de producción, pero es probable que solo el equipo Alfa se considere productivo. La expansión descontrolada del software aumenta la necesidad de colaboración entre los equipos. Identificar formas inteligentes para que los equipos autónomos colaboren cuando sea necesario es clave para aprovechar el potencial de un entorno poco vinculado.
En un entorno dinámico y de rápido crecimiento, la capacidad de autogestionar la información es importante para la productividad y la felicidad del equipo. Una forma de lograrlo es implementar un catálogo centralizado de componentes de software con una gestión descentralizada, en el que cada equipo es responsable de crear y actualizar los servicios de su propiedad. Los entornos tradicionales suelen tener un catálogo centralizado gestionado por un equipo o función específicos. Sin embargo, esto no basta para seguir el ritmo de los cambios en un entorno distribuido, lo que hace que los equipos creen wikis paralelas que recojan cómo y con quién deben colaborar. En Atlassian descubrimos que un enfoque descentralizado reduce el esfuerzo invisible e inútil en los equipos, mejora las capacidades de autoservicio y crea un entorno de colaboración bajo demanda. Una excelente manera de mejorar la productividad, felicidad y participación del equipo es dominar la expansión descontrolada del software habilitando la información de autoservicio sobre las dependencias de nivel superior e inferior.
Compass proporciona una ubicación central para obtener información específica para desarrolladores sobre los componentes de software que son de su propiedad y de los que dependen.
La gestión de cambios se convierte en el cuello de botella
Otro síntoma clave de la expansión descontrolada del software es cuando las funciones de gobernanza, como la gestión de cambios y la ciberseguridad, se convierten cada vez más en un obstáculo a la hora de introducir cambios en los sistemas de producción. Estas funciones desempeñan un papel fundamental a la hora de conseguir que se cumplan las normas y expectativas de la organización antes de que se implementen los cambios en producción. Sin embargo, se vuelven menos eficaces a medida que entra en juego la expansión descontrolada del software. En un entorno caracterizado por la expansión descontrolada del software, las funciones de gobernanza se ven abrumadas gradualmente a medida que aumenta el ritmo de los cambios, lo que crea un backlog de cambios y solicitudes de revisión y retrasa las implementaciones en producción. El informe sobre el estado de DevOps de 2022 reveló que el 56 % de los encuestados consideraban que los procesos de seguridad del software de su organización ralentizan el proceso de desarrollo.
Lo ideal sería que las prácticas de seguridad estuvieran integradas en los procesos de desarrollo, pero en realidad muchas organizaciones hacen que se revisen los cambios de forma manual antes de la implementación en producción. Esto no es eficaz a la escala requerida en un entorno distribuido. Además de ralentizar la capacidad de la organización para generar cambios, puede provocar fricción entre los equipos de desarrollo y los responsables de velar por el cumplimiento de las normas organizativas.
En un entorno afectado por la expansión descontrolada del software, es fundamental permitir la alta velocidad y, al mismo tiempo, lograr los estándares organizativos deseados a gran escala. Los cuadros de mandos automatizados (o semiautomatizados) son una excelente forma de comunicar los estándares organizativos y ofrecen una forma no intrusiva de inspeccionar el cumplimiento en todo el entorno. En Atlassian, usamos Compass para establecer estándares y expectativas de calidad para la organización. El cuadro de mandos de cada componente del software proporciona a la organización transparencia en cuanto al cumplimiento. Los equipos y los responsables de ingeniería pueden añadir normas específicas del producto a los cuadros de mandos, lo que ofrece una visión completa de las expectativas y estados de calidad de la organización para que los consulte cualquier miembro de la organización. Supone un cambio importante respecto a las comprobaciones de gobernanza y cumplimiento al final del ciclo de entrega; en su lugar, se fijan las expectativas con antelación para que los equipos las cumplan durante todo el proceso de desarrollo. Los equipos de gobernanza pueden establecer expectativas en un entorno dinámico, mientras que los equipos de entrega pueden conocer y cumplir los requisitos durante el ciclo de entrega. Dado que el impacto de la expansión descontrolada del software puede ser perjudicial tanto para los equipos de entrega de software como para los de gobernanza, los cuadros de mandos brindan la oportunidad de poner freno a la expansión descontrolada.
El cuadro de mandos de Compass se utiliza para consultar el estado de los componentes de software respecto a un conjunto de expectativas definidas.
Conclusión
No existe una solución milagrosa para poner freno a la expansión descontrolada del software. El éxito a largo plazo se basa en identificar y abordar sus impactos desde el principio. Algunos de los primeros indicadores de la expansión descontrolada del software pueden ser: múltiples incidentes causados por cambios en niveles superiores o inferiores, equipos ocupados que no alcanzan sus objetivos y cuellos de botella de gobernanza. La mejor manera de identificar la expansión descontrolada del software es hablar con los desarrolladores y entender los desafíos a los que se enfrentan.
Atlassian ha desarrollado Compass para ayudar a poner freno a la expansión descontrolada del software mediante la gestión de la complejidad de las arquitecturas distribuidas a medida que se escalan. Es una plataforma de experiencia extensible para desarrolladores que reúne la información suelta sobre todos los procesos de ingeniería y colaboración en equipo en un lugar centralizado que permite hacer búsquedas.
Compartir este artículo
Tema siguiente
Lecturas recomendadas
Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.