En nuestra empresa, varios equipos trabajarán en diferentes componentes de varios proyectos al mismo tiempo. Por ejemplo, un equipo puede hacer que los tipos específicos de software (o hardware) para algunos proyectos, otro equipo, otro tipo específico de software. Usamos proyectos de Jira para albergar problemas para proyectos específicos y tableros de Jira para sprints para diferentes equipos.
Nos enfrentamos al problema de evitar la duplicación de código en todos los proyectos, y hemos desarrollado un conjunto de bibliotecas principales que usamos en esos proyectos. Mientras trabaja en un proyecto, algunos desarrolladores se darán cuenta de que una pieza de código que han escrito es de mayor interés y debe extraerse en una biblioteca central, o que algún código central que están utilizando tiene un error, necesita más parametrización o un nueva característica ... lo que sea.
Por lo tanto, crean un problema de la biblioteca central que entra en la cartera del proyecto central. Todos estos problemas se revisan, priorizan y estiman en una reunión de la biblioteca central (una vez por semana), y se abordarán de acuerdo con su prioridad (junto con problemas específicos del proyecto) en algunos sprints futuros.
La priorización se realiza ordenando los problemas, y ponemos una sorted
etiqueta en los problemas ordenados (para que podamos buscar los que no están ordenados). Luego, colocamos manualmente un problema por componente principal en la parte superior de la cartera de pedidos para que se aborden primero. Cuando algún equipo pone un problema de este tipo en su sprint, tienen que arrastrar manualmente otro elemento a la parte superior de la cartera de pedidos.
Esto es bastante propenso a errores. Básicamente, lo que tenemos son los estados de problemas adicionales "ordenados" y "estimados" entre "abierto" y "en progreso". Reflejar esto a través de la sorted
etiqueta y su posición en el tablero es bastante engorroso y propenso a errores. (Por ejemplo, si alguien mueve un problema en algún sprint arriba y abajo, esto se reflejará en el tablero central, revolviendo en silencio el orden de los problemas que el equipo podría haber decidido en una extensa discusión semanas antes).
Entonces, ¿cuál sería una mejor manera de implementar esto?
Respuestas:
Si desea seguir esto en JIRA, lo seguiría como si fuera una tarea nueva.
Así por ejemplo:
Digamos que tienes la historia CORE-75: Foo the Bar .
Una vez que se decide qué equipo tomará la tarea, pueden crear una nueva tarea: APOYO-123: Foo the Bar en Core .
Luego puede bloquear CORE-75 con SUPPORT-123 . Una vez que SUPPORT-123 haya finalizado, puede volver a CORE-75 . Puede fusionar las revisiones o revisar el código dos veces (una vez por el equipo designado, una vez por un equipo más específico del núcleo).
Esto es realmente lo que está haciendo de todos modos: considere la biblioteca principal como su propio producto / cliente, no vaya a la mitad.
fuente
+1
de mi parte.Un enfoque es que el equipo cree un nuevo problema para su sprint que se vincule con el problema principal de la biblioteca. Es como si estuviera haciendo una subtarea para una tarea pero en todos los ámbitos / atrasos.
Otro enfoque es solo rastrear esto por separado fuera de JIRA. Exporte la cartera de pedidos existente como CSV u hoja de cálculo y organícela.
Al separar los problemas de JIRA, tiene flexibilidad para definir la prioridad en la reunión de planificación y no tiene que preocuparse por el algoritmo de clasificación de JIRA en los tableros y tampoco tendrá que usar etiquetas.
En la reunión de planificación de priorización para la biblioteca central, puede crear una lista corta de tareas para completar para la biblioteca central y quien sea responsable / responsable de la biblioteca central puede asegurarse de que estas tareas sean iniciadas por los diferentes equipos del proyecto y completadas.
fuente
Existe la opinión de que las bibliotecas principales que encapsulan una gran cantidad de funcionalidades comunes, pero no relacionadas, son una "cosa mala" (tm)
Hay algunas razones para esto.
En su caso, creo que su división de tareas por la aplicación a la que se realizaría el cambio es la raíz del problema. Una especie de ley inversa de Conway.
Creo que la mejor solución para usted sería alejarse de tener 'Bibliotecas principales' Las bibliotecas deberían tener un conjunto específico (pequeño) de funcionalidad agrupada lógicamente. Debería ser posible completarlos. es decir, JsonParser, LogWriter, etc., rara vez debería tener sentido agregar una nueva función.
Sin embargo, suponiendo que esta sería una tarea larga y difícil, como solución secundaria, simplemente mantendría las tareas principales de la biblioteca con el equipo que necesita la funcionalidad. es decir.
Tarea: agregar la función X al producto Y
Dev: hmm, parte del código para la función X debería ir en una biblioteca compartida. Lo pondré allí como parte de esta tarea
fuente