No soy un experto en Scrum, pero AFAIK "propiedad de código colectivo" está destinado a ser por equipo y por producto (y creo que su pregunta no es específica de Scrum, podría aplicarse a cualquier proceso de desarrollo de "código compartido").
Si tiene dos equipos A, B, dos productos A, B y un componente compartido C, existen diferentes escenarios posibles. Quizás el componente compartido pertenece principalmente al producto A (y el equipo simplemente lo reutiliza, pero no lo desarrolla, para el producto B). En esta situación, el equipo A es claramente responsable de la visión arquitectónica. O viceversa: pertenece claramente al producto B, por lo que la responsabilidad está ahí. Si el equipo A es responsable, el equipo B podría usar una bifurcación del componente para permitir correcciones de errores urgentes (también debería haber una manera de reintegrarlos en la línea principal de C), pero B debería evitar una mayor evolución del componente.
Sin embargo, si ambos productos A y B tienen muchos "requisitos de conducción" para C, debe administrar C como un producto completamente separado, con versiones propias, administración de versiones, administración de cambios, pruebas unitarias, etc., y un equipo separado que tenga responsabilidad por ese componente. Ese equipo podría ser solo un "equipo virtual", compuesto por desarrolladores separados del equipo A, B o ambos. Este equipo tiene la "propiedad del código compartido" para C y la responsabilidad de la "visión arquitectónica". Solo piense en C siendo un componente entregado por un proveedor externo.
¡No hay un concepto de "visión arquitectónica clara" en Scrum o ágil!
Durante mucho tiempo he sido arquitecto, y para mí está claro que para tener una visión arquitectónica es necesario tener una visión clara de los requisitos futuros. Dado que en la mayoría de los casos los requisitos no son claros, no tiene sentido tener una visión fija.
Lo que es necesario es tener una arquitectura que sea lo suficientemente adaptable a los requisitos cambiantes. En otras palabras, las cosas cambian y la arquitectura cambia: no estoy abogando por una arquitectura "blanda" que pueda reconfigurarse. Estoy hablando de aceptar que la arquitectura que uno tiene hoy será obsoleta pronto y tendrá que ser cambiada, por lo que nadie debería "casarse" con ella.
La propiedad del código colectivo significa que todos deberían, en teoría, ser capaces de cambiar cualquier cosa. Esto debe entenderse como el "opuesto de los silos". En otras palabras, puede haber una barrera de habilidades, lo cual es normal y esperado, no todos son un DBA experimentado que pueda ajustar las consultas SQL, por poner un ejemplo, pero de esto no se deduce que solo un DBA puede Mano optimiza consultas. Habrá un "experto en el dominio de características" que puede ayudar a otras personas a ser competentes, pero las tareas aún deberían recaer en todos.
Por ejemplo: si soy el experto en dominios en la función "A", entonces todavía espero que alguien más trabaje en la función "A", pero es probable que me consulten cuando necesiten cambios importantes o la gente necesite ayuda. La característica "A" ciertamente no sería mi característica. Será una característica que conozco bien. Será mi interés conocer muchas más funciones, y el interés de otras personas para conocer esta función.
En síntesis: los desarrolladores diseñan y rediseñan la arquitectura varias veces a medida que surgen y cambian los requisitos. Se espera que todos hagan los cambios necesarios de acuerdo con sus habilidades y sepan cuándo pedir ayuda. No existe una visión a largo plazo sobre la arquitectura porque confiamos en las personas y no confiamos en los requisitos .
fuente
Por ejemplo, spotify utiliza un rol llamado "Propietario del sistema" para resolver el problema, directamente desde el documento:
Realmente me gusta esta idea, tener los beneficios o la propiedad del código colectivo a nivel de empresa (no solo a nivel de equipo) sino con los propietarios de este sistema tratando de garantizar cierta integridad arquitectónica.
Un enlace al documento completo: https://dl.dropboxusercontent.com/u/1018963/Articles/SpotifyScaling.pdf , es un documento corto pero muy, muy interesante basado en la experiencia real sobre el escalado ágil.
fuente
Es un problema difícil de resolver, y ciertamente no lo resuelve Scrum, que es una metodología de gestión de proyectos, no una metodología de desarrollo.
La solución más efectiva que he encontrado es una buena administración de paquetes (nuget / gem / etc) y versiones. Nunca imponga un cambio en otro equipo hasta que estén listos para consumirlo. Deja que sigan usando la versión anterior, mientras te mueves a la nueva.
Asegúrese de tener una estrategia de versiones que deje en claro qué cambios se están rompiendo y cuáles son extensiones.
Además, cuando realice un cambio, envíe una revisión de código a alguien EN CADA EQUIPO. Permítales ver cómo es probable que los afecte, mucho antes de que se vean obligados a consumirlo para que puedan implementar sus propios cambios en la parte superior.
Y, cuando las cosas se ponen realmente desordenadas; cuando un equipo necesita hacer un cambio y no puede consumir otro cambio fácilmente (esto DEBERÍA ser un caso realmente raro), bifurcar el código, convertirlo en un paquete completamente diferente, pero priorizar volver al código común tan pronto como sea posible permite.
fuente
La respuesta que no siempre es tan obvia como podría ser es dejar que los equipos decidan cómo van a compartir cualquier componente dado.
Por ejemplo, mi equipo recientemente comenzó a desarrollar una nueva línea de productos que comparte mucho código en común con otros dos equipos que han estado desarrollando productos similares durante mucho tiempo. Nuestro producto es diferente en algunos aspectos, por lo que ocasionalmente tenemos que encontrar formas de agregar puntos de personalización al código común.
Hemos tenido algunos conflictos sobre ese código, y hemos intentado algunas formas diferentes de tratar con la propiedad común. Luego, con una gran característica nueva, decidimos que necesitábamos reunir a todos los equipos para estar en la misma página, lo que resultó en un grupo más pequeño compuesto por un par de miembros de cada equipo que están trabajando en los detalles.
La solución que se les ocurrió a nuestros equipos podría no funcionar en otra situación. Es posible que necesite algo más simple o algo mucho más formal. El punto es que tomas la propiedad colectiva y descubres lo que funciona para ti.
fuente
Me tomaré la libertad de asumir:
Si las suposiciones anteriores son correctas, entonces solo ocasionalmente habrá momentos en que dos equipos interfieran entre sí. Pueden resolverlo de las siguientes maneras:
fuente