miércoles, 24 de diciembre de 2014

Mob programming


Mob Programming

Hace unos días leí un artículo que hablaba sobre Mob Programming, lo que atrajo mi atención ya que era la primera vez que leía algo sobre algo llamado así. ¿Y qué es eso? ¿Una nueva metodología? ¿Una nueva técnica?

Mob Programming es el hecho de que un grupo de programadores se sientan juntos, preferentemente en una habitación, con un único ordenador y un trozo de código. Así todo el grupo junto puede discutir, diseñar, programar un trozo de código del proyecto. Y, por lo tanto, todo el equipo está concentrado en solucionar el mismo problema. Sería algo así como el pair programming pero con más de dos personas involucradas.

A simple vista podría parecer que es una de las formas de trabajo más ineficientes. Todo el equipo trabajando sólo en una tarea, perdiendo su tiempo en sólo una cosa cuando podría estar trabajando en tareas diferentes (como de costumbre). Pero, por el contrario, es una forma muy útil y eficiente de trabajo. Naturalmente, usada con moderación.

En mi días trabajando en Papa Pear, solíamos usar esta técnica, aunque nosotros lo llamábamos PapaDojo (Papa de Papa Pear y Dojo por los Coding Dojos). Solíamos hacerlo una vez por semana, todo el equipo de desarrolladores en una sala de reuniones, un único ordenador y un único problema a discutir. Unos cuantos días antes se escogía un tema, una persona lo preparaba y avisaba al resto del equipo, así la gente interesada podía decidir si asistir o no y prepararse el tema.

¿Qué tenía esto de interesante? Nuestra idea era, una vez por semana, todo el equipo compartía código y tecnologías que se usaban. Con varios objetivos: conseguir conocimiento compartido de las tareas que se estaban implementando, ser capaces de conocer otras tecnologías o lenguajes con los que no tratabas en tu día a día (IoC, C++, Action Script, Unit Testing,...), afrontar todos juntos un refactor de código importante,... Y, así, a largo plazo conseguir beneficios como: todo el equipo tener conocimiento (en profundidad o superficial) de todo el proyecto (no sólo de la parte en la que cada uno estaba trabajando), todas las tecnologías y lenguajes usados en el proyecto (facilitando el cross-development de nuevas implementaciones), afrontar un refactor/mejora importante de código que podría ser grande para sólo una persona,... y, naturalmente, team building.

No pienses que Mob Programming es algo ineficiente ya que, a largo plazo, es una técnica que ofrece grandes beneficios tanto para el equipo como para el proyecto.
A few days ago I read this article regarding Mob Programming (sorry, it's in spanish) which get my interest because it was the first time I read about a thing with that name. What was that about? A new methodology? a new technique?

Mob Programming is the fact that a group of programmers sit all together, preferably in a room, with only one computer, with only one piece of code. All the group can discuss, can design, can program a piece of code of the project. Therefore, everybody is completely focused in solving the same problem. Something like pair programming but with more than two people involved.

One first impression might be that it is one of the most inefficient ways of work. All the team working in the same task, wasting their times in only one thing while they could be working in different tasks (as usual). But, on the contrary, it's a very useful and efficient (in long term) way of work. Used with moderation, of course.

In my days in Papa Pear we used to use this thing but we called it PapaDojo (Papa for Papa Pear, and Dojo because of the Coding Dojos). We used to do it once a week, the whole developers team in a meeting room, one computer and only one problem to discuss. A few days in advance we picked one topic, one person prepared it, notify to the rest of the team so the people interested could decide to attend or not and prepare the topic.

And, why was this very interesting? Our idea was to, once a week, all the team shared the code and the technologies to use. The aims were multiple: reach share knowledge of the tasks being implemented, being able to know other technologies or languages you don't deal with in your daily basis (IoC, C++, Action Script, Unit Testing, ...), face all together an important refactor to do, ... And in a long term the benefits are multiple, as well: the team may have a knowledge (in deep or superficial) of all the project (not only the parts each one is working on), all the technologies and languages used in the project (easing the cross-development of features), face a refactor/improvement of code that for only one person can be huge,... and, of course, team building.

Don't think Mob Programming is inefficient, in long term will provide you lot of benefits for the team and the project.