¿Qué es "enjambre"?

42

He escuchado que se menciona el enjambre en el contexto de la programación ágil o extrema. Parece ser un complemento para el emparejamiento.

¿Qué es exactamente? ¿Cuándo se debe aplicar? ¿Cómo lo haces bien?

Jay Bazuzi
fuente
@CodeWorks: Mis búsquedas en Google produjeron pocos resultados relevantes, y ninguno con una respuesta clara a mi pregunta. Si hay una respuesta canónica, entonces, por supuesto, publíquela aquí.
Jay Bazuzi
Hay una línea de voz en off en el videojuego de estrategia "Sword of the Stars", donde la gente hormiga / mantis / colmena dice sobre ti emitiendo un comando de investigación "Estamos invadiendo el laboratorio de su majestad". Siempre supuse que estaba destinado a aterrizar con una sensación de ironía dramática.
Erik Reppen

Respuestas:

43

La idea es que todos en su equipo trabajen en la misma historia al mismo tiempo. En lugar de que todos se centren en diferentes tareas, todos se centran en una tarea a la vez hasta que se complete. Luego pasan a lo siguiente, donde todos trabajan juntos en ello.

Esto ayuda a los equipos que luchan para completar historias antes del final del sprint. A menudo, los equipos terminan el 80% de todas las historias, pero ninguna está completa. Esto es menos útil que terminar completamente el 80% de las historias, ya que las historias no terminadas (efectivamente) no tienen ningún valor para el usuario final. Es más fácil completar las historias cuando todos en el equipo se centran en una historia a la vez. Esta es la motivación detrás del enjambre.

Hay algunas dificultades aquí. Por ejemplo, el control de calidad no siempre puede probar cosas antes de que se construyan (o incluso se diseñen). En este caso, debe establecer un diseño juntos desde el principio, y luego el control de calidad puede escribir pruebas (inicialmente fallidas) contra el diseño y no la implementación real.

Oleksi
fuente
+1. Interesante. ¿Has visto este trabajo en la práctica?
CodeART
2
Otra forma de decirlo es "tener la menor cantidad de trabajos en progreso posible", ¿verdad?
Jay Bazuzi
1
@CodeWorks Sí. Lo hemos usado donde actualmente trabajo con cierto éxito. Es una forma bastante divertida de desarrollarse, porque está orientada a funciones. Todos están trabajando hacia el mismo objetivo al mismo tiempo, así que descubrí que fomenta el trabajo en equipo realmente bien.
Oleksi
1
@ JayBazuzi Sí, más o menos. Sin embargo, contar con el apoyo de todo el equipo también es importante.
Oleksi
99
@CodeWorks, en absoluto. De hecho, probablemente lo aumentó. Como todos trabajaban tan juntos, surgieron menos bloqueadores. Cuando surgió algo, al menos alguien en el equipo sabía cómo resolverlo, y pudieron hacerlo de inmediato ya que tenía toda su atención. Además, el cambio de contexto es generalmente malo para su productividad. Solo pregúntale a tu CPU. : P
Oleksi
10

El enjambre solo se refiere al hecho de que varias personas trabajan juntas para completar una tarea o historia. En mi experiencia, esto no es algo que haces a menudo.

Por lo general, cada miembro de mi equipo trabaja en una tarea diferente y / o una historia diferente. Si alguien se está quedando atrás, o si hay un deseo de terminar una tarea o historia antes, otras personas dejarán de trabajar en otras tareas y "enjambrarán" para completar la tarea, lo que significa que todos trabajan juntos en una sola tarea o historia hasta que esta completado.

Recientemente tuvimos una pequeña cantidad de historias que fueron un trabajo bastante aburrido y poco interesante. Le di al equipo un pequeño incentivo (pizza) y una fecha límite (al final del día) para terminar el trabajo, por lo que se apiñaron en la historia y eliminaron al menos un par de días de trabajo en una tarde. Terminaron el trabajo y salieron temprano, luego cada miembro del equipo volvió a lo que sea que estuvieran trabajando. Consiguieron un almuerzo gratis, terminé el trabajo temprano que podría haberse prolongado debido a su naturaleza aburrida, y el equipo se adelantó a su carrera. Ganar ganar ganar.

"Enjambre" no es más que un término elegante para "oye, déjanos ayudarte con eso".

Bryan Oakley
fuente
Esto parece bastante diferente de la otra respuesta. Estás diciendo "cuando hay una necesidad inusual y urgente, haz que todos participen". @Oleksi dijo "cuando planifique un ciclo de desarrollo, es mejor poner a todos en una tarea a la vez que hacer que cada persona trabaje en una tarea separada en paralelo". Cualquiera de las definiciones es plausible, y ambas son prácticas útiles, pero la suya tiene 4 veces más votos, por lo que supongo que su respuesta refleja la definición más ampliamente aceptada.
Jay Bazuzi
@ Jay Bazuzu: Ya sea que todos se pongan en una sola tarea como parte de la planificación del sprint, o si ocurre orgánicamente a medida que surjan las necesidades, la definición sigue siendo la misma: todos trabajan juntos en una sola tarea.
Bryan Oakley
Creo que tu respuesta es muy clave aquí. La otra respuesta que es 'aceptada' es el "qué". Pero el tuyo parece abordar el cómo.
Ape-inago
2

El enjambre es en realidad un concepto central para la agilidad. No es algo que se hace "cuando hay problemas". El enjambre, en su forma más simple, significa que los equipos trabajan en colaboración en artículos (historias) y los trabajan hasta su finalización. El concepto central es "dejar de comenzar y comenzar a terminar". En otras palabras, en lugar de que cada desarrollador trabaje de manera independiente en una historia, el equipo se enfoca en un conjunto más limitado de historias / tareas juntas y hace que cada elemento se realice antes. Piense en ello como la diferencia entre un sistema de un solo subproceso y un subproceso múltiple. Si una historia de usuario tiene 10 tareas que deben hacerse, y cada una es de 8 horas, suponiendo que no haya complicaciones, un desarrollador podría trabajar cada tarea secuencialmente y completar la historia en 80 horas, o aproximadamente dos semanas (dado 10 días de sprint de 8 horas de desarrollo por día). ¿Qué pasa si dos desarrolladores dividen las tareas y las trabajan simultáneamente? Las mismas 80 horas de trabajo se pueden completar de esta manera en una semana. Agregue un tercero, y puede ver que ahora se puede hacer en 3 a 4 días.

El enjambre se puede hacer de varias maneras:

  1. Programación por pares (dos desarrolladores sentados uno al lado del otro para trabajar en el código, uno es el "conductor" que escribe el código, el otro es el navegador, teniendo en cuenta la dirección a más largo plazo y ayudando a la revisión del código simultáneamente.
    1. Trabajo en pareja: un desarrollador y un probador trabajan simultáneamente en el mismo trabajo, una codificación y otra prueba, automatización de escritura, etc.
    2. Enjambre como mencioné anteriormente, lo cual es muy común. Por lo general, los miembros del equipo pululan una historia, pero cada uno posee tareas individuales en este método.
    3. Programación de multitudes: todo el equipo se centra en una historia (o incluso una tarea) a la vez.

Los equipos que cuentan una historia a cada desarrollador tienden a tener demasiado "trabajo en progreso" o WIP, y a menudo muchas historias comienzan pero no se hacen. Este es un ANTI-PATRÓN, y NO son las mejores prácticas.

Los equipos que pululan tienden a tener menos WIP y completar más historias, y al terminar, me refiero a Desarrollado, Probado, Aprobado, listo para desplegar. Por lo tanto, esta es una práctica que es el núcleo de la agilidad.

Curtis Reed
fuente
1

El siguiente artículo sobre InfoQ describe un enfoque para el enjambre:

  • El equipo usa la programación de la mafia para la mayoría de sus tareas de codificación
  • Las partes del equipo o los miembros individuales del equipo a menudo se dividen y se unen al equipo en intervalos cortos.
  • Todo el mundo hace todo (sin roles)
  • El equipo no usa estimaciones, WIP es siempre uno, no hay necesidad de standups o ceremonias similares

Lea el artículo para la explicación detallada.

Dan
fuente