En resumen, todos estos conceptos, tanto las topologías fundamentales como los modos de interacción, terminan siendo una regla general cuando se trata de pensar en equipos con acoplamiento suelto y alta cohesión que trabajan juntos en un flujo adecuado de cambios. En este punto, hemos comprendido la importancia de tener una visión clara para el diseño de la arquitectura de software y luego ajustar los equipos como organismos tan efectivos como los límites que se les asignan y las estrategias de comunicación que aplican. También hemos discutido los modos de interacción que mejoran la comunicación, pero ¿qué pasa con la carga cognitiva? ¿Qué pasa con los límites y responsabilidades del equipo? Bueno, Eric Evans, que es un conocido arquitecto de software y autor del libro Diseño Dirigido por Dominios, coincide con la observación de que es difícil lograr un flujo cuando cada equipo depende de una complicada red de interacciones con muchos otros equipos. Cuando los límites de responsabilidad asignados a los equipos no son viables o están mal definidos, resulta en falta de propiedad, desvinculación y una baja tasa de entrega. ¿Hay una solución? ¡Sí! Explorar y validar los límites de responsabilidad, teniendo en cuenta primero al equipo, es lo que discutiremos a continuación. La investigación realizada por Accelerate encontró que las arquitecturas fuertemente acopladas influyen negativamente en la capacidad de tener equipos autónomos con responsabilidades claras. Muchos problemas en la entrega de software provienen de límites poco claros entre equipos y sus responsabilidades, lo cual a menudo se ve opacado por una arquitectura de software con alto acoplamiento entre sus diferentes partes, algo en lo que las arquitecturas monolíticas se complacen. El objetivo final de cada arquitectura es apoyar la capacidad de los equipos para realizar su trabajo con un alto rendimiento, desde el diseño hasta el desarrollo, sin requerir una comunicación de alta capacidad entre equipos, lo cual es más difícil de lograr en una arquitectura monolítica. Pero en el proceso de alejarse del software monolítico, ¿cómo consideramos las necesidades de los equipos? ¿Cómo tenemos en cuenta su perspectiva? Pensamos en los dominios, aplicando una estrategia bien conocida que permite la plena propiedad de los equipos. Exploramos y discutimos el diseño dirigido por dominios y luego evaluamos cómo los equipos se ajustarán a eso. Esto significa, nuevamente, aunque parezca que me estoy repitiendo, pero esto es realmente importante, que la organización debe comprender qué arquitectura de software se requiere antes de organizar los equipos. De lo contrario, como ya se mencionó, los caminos de comunicación y los incentivos en la organización terminarán dictando la arquitectura de software. Pero primero, retrocediendo un paso, ¿qué es un dominio? Sabemos que los buenos límites minimizan la carga cognitiva, ¿verdad? Pero, ¿qué son estos límites? Los límites son líneas conceptuales que envuelven a los dominios, y los dominios son conceptos más amplios que los sitios de software, lo que nos ayuda a pensar en general y utilizar heurísticas comunes. El hecho de que proporcionen una visión del problema que se está resolviendo también facilita asignar complejidad a un dominio, lo que a su vez facilita asignarla a los equipos según su carga cognitiva disponible. Esto permite el diseño dirigido por dominios, proporcionando técnicas de desarrollo de software que abordan tanto la planificación estratégica como el diseño estratégico y técnico, manteniendo la alineación con el negocio, fomentando un lenguaje común y una evaluación adecuada de la complejidad, lo cual en última instancia proporciona beneficios claros, propiedad del equipo, compromiso y un flujo rápido de entrega. Dicho todo esto, pasemos a un escenario de caso real, y hablaré sobre mi ejemplo personal en LX. Entonces, cada empresa necesita una estructura organizativa, especialmente las grandes corporaciones que actúan en varios tipos de mercados en todo el mundo. El negocio de clasificados en línea no es una excepción, y en el grupo OLX hay una unidad de clientes específica para representar el mercado de compra y venta de automóviles, que es la unidad de clientes de motores. Esta unidad representa a compradores y vendedores individuales, con el objetivo de unirlos para realizar negocios. Como puedes imaginar, lo que comenzó pequeño ahora es un gran negocio, donde las personas tienen el poder de tomar decisiones más rápidas y mejores y ofrecer mejores funciones de manera más rápida, con bajos índices de problemas para los usuarios. Con más equipos, mercado y competencia, la arquitectura de software de motores llegó al punto en el que el monolito que sirvió y llevó a la unidad hasta este punto ya no funciona. En algún momento, el monolito obstaculizó nuestra eficiencia para ser aún más rápidos y mejores, y, por ejemplo, el alto acoplamiento y los límites difusos constantemente ponían a nuestros equipos en el camino de los demás, lo que exigía un fuerte compromiso de alineación en todo momento. El progreso de las funciones comerciales también se vio afectado, ya que cada cambio provoca impactos en otros equipos, lo que ralentiza la entrega e incluso la calidad, ya que los impactos de estos cambios llevaban a pequeños pasos de entrega o incluso a un compromiso entre las partes. Por todo esto, el ritmo de entrega también se veía afectado por el monolito, ya que cada implementación tenía una alta probabilidad de detener el flujo debido al alto número de cambios que afectaban a todos los que necesitaban entregar. Reconociendo todo esto y en un esfuerzo por mejorar la independencia y la excelencia, el grupo de equipos que trabajan para impulsar el crecimiento del negocio de los vendedores profesionales a través de la adquisición, gestión y venta de vehículos, decidió poner en marcha un plan para alejarse del monolito reuniendo a un grupo de expertos en diseño dirigido por dominios para ayudar a los equipos a tener una mejor comprensión de los límites de responsabilidad y identificar las necesidades para pasar a una arquitectura desacoplada, permitiendo la autonomía, el trabajo independiente y las responsabilidades definidas. Pero una vez tomada esa decisión, ¿por dónde empezar? Bueno, la planificación estratégica ayuda a comprender cuáles son las inversiones de software más importantes que se deben realizar, qué activos de software existentes se deben aprovechar para llegar más rápido y de manera más segura, y quiénes deben estar involucrados. Esta planificación estratégica implica revisar los dominios actuales, utilizar sesiones de event-storming para definir contextos acotados y mapas de contexto, utilizar entidades, agregados y eventos de dominio para redefinir la arquitectura actual y alinear las responsabilidades de cada dominio con la carga cognitiva actual de los recursos del equipo. Basándonos en este trabajo de DDD, estamos logrando una base sólida para revisar nuestra arquitectura actual alineada con los bloques de construcción de DDD y los principios de modularidad, alta cohesión, bajo acoplamiento y ocultamiento de información. Y al final, reorganizamos nuestros gráficos de tribus de acuerdo con los dominios de los equipos y los modos de interacción, de modo que logremos una baja sobrecarga de comunicación, una toma de decisiones más rápida, una entrega más rápida y de calidad, y permitamos que nuestros equipos tengan autonomía, capacidades de salud mental sólidas y experiencia en los dominios de los que son responsables. En definitiva, nuestro objetivo es escalar y reorganizar nuestro gráfico de abajo hacia arriba, teniendo en cuenta nuestros dominios empresariales y sus relaciones de agregados, para establecer nuestra arquitectura del sistema, que a su vez da forma al panorama de los equipos, que a su vez construye una estructura organizativa que valida los principios de la ley de Conway, para influir positivamente en la velocidad de entrega, la calidad del trabajo y la autonomía, y luego impactar directamente en el software que estamos produciendo. Y eso es todo. Gracias por escuchar.
Comments