Presos del organigrama: cómo la estructura de los equipos condiciona el desarrollo de software

Gabriel Casarini

Gabriel Casarini

¿Cuántas veces hemos escuchado decir: “Eso lo decidió el área de negocio; nosotros estamos aquí solo para implementarlo”? O la gente de negocio y producto diciendo “Pero esos son detalles de la implementación y los ingenieros los esclarecerán“.

Estas expresiones reflejan la gran desconexión y la poca colaboración entre las áreas de la organización—lo que llamamos silos organizacionales. El problema de fondo es la falta de agilidad y de foco en lo que realmente importa: acelerar la entrega de valor a los clientes.

Las novedades tecnológicas de los últimos años para la producción y despliegue de software (la nube, los contenedores, serverless, etc.) han servido para mejorar el trabajo de los equipos y agilizar la entrega de valor a los clientes. Pero en muchos casos, las organizaciones no terminan de cosechar los beneficios porque las estructuras organizativas se han quedado obsoletas y se han convertido en obstáculos que se interponen en la dinámica de los equipos.

En este artículo veremos cómo la estructura de los equipos y la comunicación entre ellos impactan sobre el diseño y la arquitectura de los sistemas de software—y por extensión, en la calidad, el mantenimiento y la agilidad para evolucionar los sistemas.

¿Qué es la Ley de Conway?

La Ley de Conway fue formulada por Melvin Conway hace más de 50 años y ganó fama cuando fue citada por Fred Brooks en su libro “The Mythical Man Month”. La ley señala que “Las organizaciones dedicadas al diseño de sistemas […] están destinadas a producir diseños que son copias de las estructuras de comunicación de estas organizaciones”.

Esta teoría revela que el diseño organizacional y el diseño de software son, en la práctica, dos caras de la misma moneda y están íntimamente relacionadas—aunque comúnmente sean cuestiones que se abordan por separado.

La Ley de Conway postula que los sistemas reflejan fielmente los canales internos de comunicación de los equipos y de la organización.

En el pasado, cuando los equipos se agrupaban en silos por área de tecnología, las aplicaciones tenían arquitecturas que reflejaban esa poca interacción e integración de los equipos (interfaz de usuario, middleware, base de datos, etc.).

Estas arquitecturas, más bien monolíticas, también aumentaban la dificultad para hacer las pruebas, los despliegues y evolucionar las aplicaciones.

Conway no señala qué tipo de arquitectura necesitamos. Pero con su observación explica los problemas de “disonancia” que aparecen si la arquitectura que pretendemos construir no es compatible con la estructura de los equipos ni con sus canales internos de comunicación.

James O. Coplien y Neil Harrison también lo señalan en su libro “Organizational Patterns of Agile Software Development”:

“Si las partes de una organización (por ejemplo, equipos, departamentos o subdivisiones) no reflejan exactamente las partes esenciales del producto, o si las relaciones entre las organizaciones internas no reflejan las relaciones entre las partes del producto, entonces el proyecto tendrá problemas… Hay que asegurar que la organización es compatible con la arquitectura del producto.”

En definitiva, los canales de comunicación e interacción entre los equipos se terminarán imponiendo y dictando la arquitectura del sistema. Concretamente, terminarán influyendo en el grado de acoplamiento y cohesión de las piezas de la arquitectura.

Agile, Lean y DevOps nos demuestran que los equipos pequeños y autónomos, alineados con las necesidades del negocio, son capaces de producir software en ciclos cortos e iterativos que se adaptan rápidamente a los cambios.

Pero ese marco de trabajo también debe apoyarse en una buena arquitectura para agilizar el desarrollo, las pruebas, los despliegues, el mantenimiento y evolución del sistema. Para ello, necesitamos que la arquitectura tenga en cuenta estos dos requerimientos no funcionales:

  • Bajo nivel acoplamiento entre los diferentes módulos y componentes.
  • Alto nivel de cohesión, que cada componente del sistema tenga un conjunto de responsabilidades (API) bien definidas y sus elementos internos estén muy relacionados e integrados entre si. La cohesión es el pegamento de los elementos internos

¿Qué hace falta para que la arquitectura sea más desacoplada y podamos acelerar los despliegues? ¿Qué podemos hacer para que las APIs estén mejor diseñadas, con más cohesión?

La respuesta es aplicar La Ley de Conway a la inversa.

Recorriendo el camino inverso de manera intencional

La Maniobra Inversa de Conway (Inverse Conway Manoeuvre, en inglés) propone influir intencionalmente en la configuración de los equipos para obtener una determinada arquitectura en el sistema.

Es decir, partiendo de las características de la arquitectura de software que queremos construir—desacoplada, más modular—podemos ajustar y evolucionar explícitamente las estructuras de comunicación de los equipos de la organización, de tal forman que eso se refleje también en el diseño técnico del sistema.

En otras palabras, si queremos que nuestra organización descubra y adopte ciertos diseños y arquitecturas—aquellos que se adaptan mejor a cómo queremos entregar valor al cliente—entonces podemos remodelar la organización para ayudar a que eso suceda. Por supuesto, no hay garantías de que la organización adopte los diseños que queremos, pero al moldear las vías de comunicación, es más probable que ocurra—según Conway.

No deberíamos abordar la arquitectura del software como un concepto aislado y sin tener en cuenta la estructura de los equipos. El motivo por el cual las arquitecturas de microservicios han tenido tanto éxito es que encajan a la perfección con equipos multidisciplinares y autónomos, capaces de asumir el desarrollo de módulos independientes, de principio a fin, con un diseño desacoplado del resto del sistema. Esto es más productivo que tener a varios equipos interactuando para desarrollar un sistema monolítico.

Conclusión

Conway observó que las estructuras de comunicación de las organizaciones influyen directamente en el diseño de los sistemas. La Ley de Conway señala las implicaciones estratégicas del diseño organizacional—la estructura e interacción de los equipos—sobre la arquitectura de los sistemas de software.

Revisar y remodelar la organización puede ayudar a mejorar la entrega de valor a los clientes a través de soluciones más modulares, fáciles de desplegar y de evolucionar y construidas por equipos más motivados.

En un próximo artículo abordaremos el diseño organizacional desde otro ángulo: la gestión de las dependencias entre los equipos.

Forma parte de la comunidad #AlwaysLearning

Sobre el autor

Gabriel Casarini

Gabriel Casarini

Gabriel Casarini, Netmind Lead Expert, SAFe Program Consultant y Software Architect, siente pasión por desarrollar y liderar equipos. Se dedica a racionalizar equipos y organizaciones, impartir experiencia, motivar y enseñar qué es la agilidad y cómo hacer que los equipos de desarrollo sean altamente productivos. Su experiencia profesional se basa en la creencia de que la mejora continua y la adaptación son las únicas formas de optimizar verdaderamente los procesos de desarrollo, aumentar la calidad y ofrecer un mayor valor al cliente. Gabriel es un ferviente defensor y practicante de marcos ágiles, TDD y Lean Startup. También aporta una amplia experiencia técnica con la plataforma JEE y la integración de componentes, herramientas y marcos de código abierto. La combinación única de pasión y experiencia de Gabriel contribuye a su capacidad como formador, mentor, consultor y Scrum Master ágil para ayudar a los equipos a adoptar una visión integral y un enfoque de gestión ágil que supere el desafío en cuestión. Conecta con Gabriel en LinkedIn y consulta su blog personal , donde comparte su visión sobre el software y temas de ingeniería!
Insights relacionados

SOLICITAR FORMACIÓN A MEDIDA

Por favor, proporciona la siguiente información para ayudarnos a personalizar la solución.

CONTÁCTANOS

Netmind España
Barcelona +34 933 041 720
Madrid +34 914 427 703

Nos puedes encontrar de:
Lunes – Viernes, 9:00-18:00 (GMT+1)

¡Te ayudamos!
[email protected]

¿Dudas sobre servicios/formaciones?
[email protected]

Solicitar Información