Código de propiedad con múltiples equipos Scrum

10

Si dos equipos Scrum usan el mismo componente de software, ¿quién es responsable de proporcionar una visión arquitectónica clara de ese componente y mantener / desarrollar esta visión a medida que evoluciona la base del código? En Scrum se supone que tienes un código de propiedad colectivo, entonces, ¿cómo asegurarte de que el desarrollo realizado por el Equipo A no interfiera con el desarrollo realizado por el Equipo B?

Eugene
fuente

Respuestas:

10

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.

Doc Brown
fuente
"¿o el componente compartido pertenece al producto A" o ...?
Joe Z.
6

¡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 .

Sklivvz
fuente
Pero esto no responde directamente a mi pregunta. ¿Qué hacer con los componentes que usan varios equipos? ¿Quién se asegura de que la arquitectura actual sea adecuada? Incluso si la "visión" arquitectónica es para el próximo Sprint o dos, todavía tiene que haber una visión. No desea que los desarrolladores de varios equipos Scrum cambien el componente sin comprender el impacto del cambio en todos los equipos y en la arquitectura general.
Eugene
1
Responde a su pregunta ... cuando digo "todos" me refiero a "entre equipos". No estoy de acuerdo con que permitir que todos cambien un componente compartido lo romperá: los desarrolladores deben ser conscientes del riesgo y confiar en que lo haga correctamente.
Sklivvz
Por lo tanto, supongo que la persona que desea cambiar un componente compartido organizará una reunión con los desarrolladores que estén más familiarizados con este componente y juntos adaptarán el diseño del componente a los nuevos requisitos. ¿Es así como trabajas en tu organización?
Eugene
@Eugene eso no es lo que dije: todos pueden cambiar cosas sin el permiso de un comité. Confiamos en que las personas soliciten ayuda si la necesitan, y arreglamos cosas si la arruinan.
Sklivvz
Entiendo. No digo que este sea un proceso formal y obligatorio. Estoy bastante seguro de que, en muchos casos, la persona que quiere hacer un cambio querrá programar una reunión para comprender el posible impacto de sus cambios.
Eugene
4

Por ejemplo, spotify utiliza un rol llamado "Propietario del sistema" para resolver el problema, directamente desde el documento:

Técnicamente, cualquiera puede editar cualquier sistema. Dado que los escuadrones son equipos con características efectivas, normalmente necesitan actualizar varios sistemas para obtener una nueva característica en producción. El riesgo con este modelo es que la arquitectura de un sistema se estropea si nadie se enfoca en la integridad del sistema en su conjunto.

Para mitigar este riesgo, tenemos un rol llamado "Propietario del sistema". Todos los sistemas tienen un propietario del sistema, o un par de propietarios del sistema (alentamos el emparejamiento). Para sistemas operacionalmente críticos, el propietario del sistema es un par Dev-Ops, es decir, una persona con una perspectiva de desarrollador y una persona con una perspectiva de operaciones.

El propietario del sistema es la (s) persona (s) que se dirige (s) a cualquier problema técnico o arquitectónico relacionado con ese sistema. Es coordinador y guía a las personas que codifican en ese sistema para asegurarse de que no se tropiecen entre sí. Se enfoca en cosas como calidad, documentación, deuda técnica, estabilidad, escalabilidad y proceso de lanzamiento.

El propietario del sistema no es un arquitecto de cuello de botella o torre de marfil. No tiene que tomar personalmente todas las decisiones, ni escribir todo el código, ni hacer todos los lanzamientos. Por lo general, es un miembro del escuadrón o líder de un capítulo que tiene otras responsabilidades diarias además de la propiedad del sistema. Sin embargo, de vez en cuando se tomará un "día del propietario del sistema" y hará el trabajo de limpieza en ese sistema. Normalmente tratamos de mantener la propiedad de este sistema en menos de una décima parte del tiempo de una persona, pero, por supuesto, varía mucho entre sistemas.

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.

AlfredoCasado
fuente
Organización bastante buena e idea interesante sobre los propietarios del sistema
Eugene
En lugar de poner en negrita y cursiva ese bloque de texto para indicar que es una cita, el editor proporciona una característica / estilo de "texto citado". Simplemente seleccione un bloque de texto y use el icono de comillas dobles en la parte superior del editor. Usar eso ayuda a mantener el texto citado para tener un estilo reconocible y consistente en todo el sitio.
Marjan Venema
2

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.

pdr
fuente
1

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.

Karl Bielefeldt
fuente
Cuando dices "decidimos", ¿quieres decir con una decisión de consenso? ¿O la decisión final en estos casos pertenece a un arquitecto / líder tecnológico?
Eugene
Una decisión consensuada, impulsada de alguna manera pero no dictada por los maestros de scrum.
Karl Bielefeldt
1

Me tomaré la libertad de asumir:

  • Las pruebas de aceptación son automatizadas.
  • El componente emplea buenos principios de OOP: bajo acoplamiento y alta cohesión.

Si las suposiciones anteriores son correctas, entonces solo ocasionalmente habrá momentos en que dos equipos interfieran entre sí. Pueden resolverlo de las siguientes maneras:

  • Tan pronto como falle la prueba de aceptación del otro equipo, hable con ellos para comprender si su uso del componente compartido es correcto o suyo. Si ambos usos están bien, entonces vea si parte común de ese uso se eleva (refactoriza) a un componente base común y la variación en el uso se maneja usando clases secundarias o puede ser a través de la composición.
  • Haga que una persona sea responsable del componente mientras está en desarrollo activo. Debe actuar como un recurso compartido entre los equipos.
Asim Ghaffar
fuente