Mob Programming como forma de auto-organizacin de un equipo Agile Oscar Amelunge Scrum Coach AgilEbanist Santa Cruz, Bolivia +591-75520286 Email: [email protected] Abstract—El presente paper tiene como objetivo revisar e introducir al lector en lo que es considerado la técnica de trabajo en equipo Ágil llamada Mob-Programming. Veremos que este estilo de trabajo fue planteado ya hace tiempo atrás y que hoy en dı́a se está masificando y volviéndose popular entre las personas, equipos y empresas que utilizan marcos de trabajo como Scrum, Kanban y XP. Keywords—MobProgramming, Scrum, XP. II. M OB P ROGRAMMING MobProgramming es un enfoque ágil, extensión y evolución del pair programming, planteado por Woody Sully en su experience report del Agile Alliance 2014[2] , tiene como premisa aprovechar todo el potencial, experiencia y conocimiento de un equipo trabajando en el mismo lugar, al mismo tiempo y sobre el mismo código usando una sola computadora. A. Principios del Mob Programming I. I NTRODUCI ÓN Robert Brooks en su ensayo The mithical man month de 1975 [1] , plantea una serie de buenas y malas prácticas adoptadas en la gestión de proyectos de software, este compendio de conocimiento escrito de forma poética (de echo es un ensayo y no un tutorial o manual) es el fruto de alrededor de 30 años de experiencia del autor en el desarrollo de sistemas altamente complejos como sistemas operativos, compiladores,etc en IBM. Entre las buenas prácticas recomendadas en el ensayo de Brooks se plantea la necesidad de organizar los equipos de desarrollo de software de la misma forma que los equipos de cirugı́a ”En lugar de que cada miembro haga cortes sobre el problema, uno sólo hace el corte y los demás le dan todo el soporte posible, lo que mejorará la eficiencia y productividad de toda la actividad”[1]. Todas y cada una de las llamadas Metodologı́as y/o Práticas ágiles estn basadas en principios, los cuales establecen las reglas del juego y ayudan a dictar una especie de pacto de convivencia entre las personas que se desenvuelven en un equipo, MobProgramming no es la excepción: Amabilidad, Consideración y Respeto.- Todo equipo requiere interacción de personas, algunas con mayor grado de experiencia y o conocimiento que otros, por ende es aquı́ donde surgen los conflictos en las interacciones, diferencias de opiniones y niveles de conocimiento, es imprescindible para interactuar en MobProgramming hacer sentir a todos sin miramientos parte del equipo ya sea que estos aporten poco, con el tiempo las personas nuevas o con menos experiencia aprenderán. B. Espacio Fı́sico La idea suena descabellada desde el punto de vista del Project Management tradicional y las horas hombre. Ahora supongamos que tenemos un equipo Scrum de 7 personas, las cuales significan como recurso 56 horas hombres diarias, y que este total de recurso sea destinado solamente a atacar 1 tarea de un total de 7 tareas pendientes, lo más lógico serı́a asignar a cada miembro del equipo una tarea, esta es una hipótesis verdadera siempre y cuando las tareas a trabajar sean mecánicas y repetitivas como por ejemplo: sembrar caña, pintar una pared, asfaltar una calle, etc. Podremos notar que este tipo de trabajos tienen la caracterı́stica der ser manuales y ejecutados sobre Entes Fı́sicos; por otro lado la idea de 1 tarea para 7 personas no es tan mala si hablamos de Software ya que por su naturaleza no fsica y compleja (Accidental y Esencial) (brooks) involucra la ejecución un trabajo que es mitad arte y mitad ciencia, donde 2 mentes trabajan mejor que una, 3 mejor que 2 y ası́ sucesivamente, por ende Mob Programming podrı́a ser una herramienta interesante para afrontar el ”Mounstro” del software. Es recomendable un espacio compartido, al estilo de una sala de reuniones (una mesa para todos), tratando de evitar la separación entre las personas (cubı́culos o escritorios individuales), mientras más libre sea el espacio entre persona, mejor fluirá la comunicación entre estas. C. Proyectores Lo ideal es trabajar con 2 proyectores, para minimizar los cambios de pantalla, tal como tpicamente trabajan los programadores. D. Computadoras Solo una computadora. Todo el código que se trabaja es escrito a través de esta computadora, lo cual es una ventaja ya que reduce duplicidad de código, sobre escrituras de código (muy tı́pico cuando se trabaja con control versioning o sin él). En la empresa en la que trabajamos tenemos 2 salas de reuniones que tı́picamente se utilizan para hacer MobProgrammin, nuestro lugar no es fijo, por lo que la computadora que usamos es una laptop, no siempre es la misma por ende es importante tener un sistema de control de versiones (GIT mejor si es GitHub o Bitbucket) que te de libertad de movimiento, de esta manera la sesión de MobProgramming no queda amarrada al espacio fı́sico, pude moverse de sala de reunión, de edificio o hacerse remota utilizando algún software tipo GoogleHangOut o ScreenHero. E. Teclado y Mouse Woody Sully [2] recomienda el uso e 2 teclados y dos mouse, un par ergonómico y otro de los normales, en la práctica hemos tenido la limitación de trabajar solo con un teclado y un mouse y la única dificultad que hasta ahora encontramos es la configuración del teclado para los Idiomas Espaol o Ingles (estamos en proceso de estandarizar la configuración del teclado para todos). III. P R ÁCTICAS Es recomendable para el MobProgramming trabajar en equipos de +- 7 personas, como lo instruyen la mayorı́a de las metodologı́as ágiles, ademá existen ciertas condiciones de espacio y equipamiento que son recomendables pero no obligatorias, cada equipo deberı́a acomodar su ambiente de trabajo de la forma que más le convenga o le sea factible. problema. Cuando se esta formando un equipo posiblemente los miembros no vean sentido al MobProgramming por ende el proceso de inducción es necesario, no solo del MobProgramming si no tambien del Manifiesto Ágil. D. Reflexionar, Mejorar y Ajustar Como toda practica ágil se recomienda al final de toda sesión de MobProgramming hacer una retrospectiva para analizar los aspectos a mejorar y tratar de resaltar y repetir las cosas que salieron bien, en el libro Agile Retrospective de Esther Derby[3], se sugiern varias retrospectivas que pueden ser de utilidad, en lo personal recomendados la Retrospectiva del Speed Boat. IV. MobProgramming es una práctica ágil que tienen un gran potencial para escribir software de calidad, apoyado en la fuerza e inteligencia colectiva del equipo, siempre y cuan cuando las personas se respeten, colaboren y estén dispuestas a aprender y ensear. No es una SilverBullet, posiblemente no funcione en todos los equipos ni en todos los ambientes de trabajo y necesariamente hay que ajustar para ponerla en marcha y mejorar, siempre respetando las practicas básicas y los valores. R EFERENCES [1] A. Driver/Navigator Exactamente igual que el pair programming, solamente uno de los integrantes del equipo tiene el control del teclado y el mouse y a este se lo denomina Driver, es el único que tiene la responsabilidad de escribir código, los demás miembros del equipo hace de Navigators, lo cual significa que están atentos a todos lo que escribe el driver y además aportan con revisión de código e ideas para solucionar el problema. B. Rotación del Driver Como recomendación en la experiencia del equipo de Woddy Sully el Driver deberı́a rotar cada 15 minutos y este tiempo se controla con un timer. En nuestra experiencia práctica este tiempo puede ser un poco más largo inclusive hasta 30 minutos, esta extensión se debe a que cuando empiezas a hacer MobProgramming el driver posiblemente no este acostumbrado a procesar y escribir con mucha velocidad las ideas que le dan los Navigator, por ende tampoco es recomendable tener un driver trabajando más de 30 minutos ya que por la experiencia vivida ese se ve agobiado por el equipo. El Driver debe imaginarse como un salida de agua que si recibe mucha presión durante mucho tiempo puede colapsar. C. Todo el Equipo Es imprescindible y necesario que todo el equipo este enfocado y participe de manera activa, aqu el rol de lder de equipo es fundamental (Scrum Master, Coach o Agile Project Manager) l debe crear el ambiente necesario y motivar al equipo para que todos participen del MobProgramming. Los equipos ágiles normalmente adoptan esa práctica sin ningún C ONCLUSIONES Brooks, Frederick P, The mythical man-month, Addison-Wesley Reading, MA, 1975. [2] Woody Zuill, Mob Programming A Whole Team Approach, AgileAlliance, http://www.agilealliance.org/files/6214/0509/9357/ExperienceReport.2014.Zuill.pdf, 2014. [3] Larsen, Diana and Derby, Esther, Agile Retrospectives, Pragmatic Bookshelf, 2006.