Programación en parejas: buenas prácticas y recomendaciones

16 junio
Alexey Mironenko, senior developer & team leader
Programación en parejas: buenas prácticas y recomendaciones
La programación en parejas (o pair programming) es una de las técnicas definidas en la metodología de programación extrema. Se hizo conocida en la década de los ‘80, pero ganó relevancia en este último tiempo debido a un mayor desarrollo de microservicios y a cambios en las comunicaciones entre los desarrolladores.

El autor de este artículo es un experimentado desarrollador Java que ha gestionado equipos distribuidos durante ocho años, basándose en la premisa de que el software une a las personas y los programadores deben controlar tanto los procesos de trabajo como el software que crean. Aquí, compartirá sus pensamientos acerca de cuándo y cómo usar la técnica de programación en parejas para sacarle el máximo provecho.

Algunos conceptos básicos

Hablamos de programación en pareja cuando dos (o a veces incluso más) desarrolladores resuelven simultáneamente un problema común, sentados en la misma computadora. Como hay un único teclado, uno de los dos toma el rol de conductor, mientras que el segundo desempeña el papel de navegador, determinando la dirección del trabajo a un nivel más abstracto y monitoreando constantemente el código escrito por su colega.

A lo largo de mi carrera, he visto a un equipo de hasta seis personas escribir código detrás de un solo monitor. Aunque no sea una situación común, los roles no cambian mucho: solo queda un conductor que usa el teclado y el mouse, mientras que los demás ayudan en la navegación. Por supuesto, las funciones no son permanentes y los miembros del equipo pueden ir turnándose uno a uno el liderazgo.

También existe una variación de la programación en pareja, conocida como ping-pong, que fue adaptada para un desarrollo a través de pruebas. Personalmente, solo he probado la versión clásica.

Pair programming remoto

Este tipo de programación en parejas implica trabajar de forma remota a través de herramientas colaborativas de edición de código. Como no se comparte un espacio físico, aumenta la importancia de las habilidades de comunicación, ya que se vuelve más difícil no perder la fluidez y garantizar que la persona del otro lado reciba el mismo tiempo de interacción directa con el código. Es más fácil incluso si los programadores trabajan compartiendo pantalla, de lo contrario se puede producir una sensación un poco desagradable por el retraso entre el momento en el que se escriben los caracteres y la otra persona los puede ver, así como también fallas en la red pueden causar algunos inconvenientes. Sin embargo, seguir algunas reglas relativamente simples puede evitar la mayoría de estos problemas.

¿Cuándo es útil la programación en parejas?

No puedo mencionar ninguna situación en la que se TENGA que usar la programación en parejas. Sin embargo, la recomiendo enfáticamente cuando sea necesario dominar algún área temática desconocida o la última tecnología que requiere el proyecto. Esta técnica acelera significativamente el intercambio de conocimientos y permite que un miembro del equipo que sepa al menos un poco más que otros, transmita esta información a todos a la vez, en lugar de hablar con cada uno individualmente.

El segundo escenario ideal es cuando se debe crear algo realmente importante. La programación en parejas hace que no sea necesario enviar tantas veces el código a tantas personas para que lo revisen, ni tener que redactar tantas preguntas complejas. Escribir el código en equipo y probarlo juntos es un enfoque muy efectivo a la hora de crear sistemas de gran relevancia.

Está demostrado que el pair programming mejora de forma significativa la calidad del código (aproximandamente un 15%), aunque su éxito dependerá de los desarrolladores y de su experiencia en el uso de esta técnica. Creo que la calidad aumenta principalmente porque no solo se obtiene un mayor volumen de datos para el análisis del código, sino que se consigue en etapas mucho más tempranas del desarrollo.

¿Y cuándo no funciona?

Es poco probable que la programación en pareja sea adecuada para aplicar durante ocho horas de uso continuo. Y en tiempos de crisis, difícilmente funcionará a la velocidad que se necesita. Cuando se está lidiando a las apuradas con la escritura de un código, es bastante conveniente refactorizarlo en pares para pulirlo y que sea aceptable para el equipo, pero definitivamente no será una buena idea escribirlo desde cero en parejas.

El pair progamming es un ejercicio comunicativo complejo que no funciona bien en aquellas situaciones donde las personas están demasiado acostumbradas a la jerarquía. La peculiaridad de la comunicación humana es que, si una de las parejas asume el rol de senior, la segunda asume automáticamente el rol de junior, independientemente de su experiencia y nivel de capacitación. Desde el punto de vista del proyecto esto es contraproducente, por lo que todos los grupos al principio tendrán que ser monitoreados de cerca para que se mantenga la igualdad.

Un efecto secundario positivo

Un efecto menor -pero positivo- de la programación en parejas es la capacidad de minimizar la cantidad de tareas que se realizan simultáneamente. En general, el equipo estará mucho más enfocado porque evitará saltar de una tarea a otra, ahorrando tiempo. La concurrencia será menor, pero las tareas se resolverán mejor y ninguna de ellas quedará trabada para siempre. ¿Alguna vez notaste cómo una tarea que llevaría solo 30 minutos al día se pierde entre tantas cosas urgentes, y termina quedando realmente muy desactualizada?

Estableciendo comunicaciones

Si bien la comunicación en el pair programming puede ser un asunto complejo, una correcta configuración del proceso ayuda a establecer un ambiente de equipo mucho mejor al que se obtiene cuando se trabaja con revisiones de código tradicionales. Mi experiencia muestra que, cuando desarrolladores experimentados se unen a un nuevo equipo, a menudo toman los comentarios sobre el código que ellos escriben como si fuera un ataque personal. En cambio, cuando se trabaja de forma interactiva, se evitan este tipo de conflictos, porque al comunicarse cara a cara las personas son menos propensas a interpretar de forma hostil los comentarios del interlocutor.

La programación en parejas te recuerda constantemente que tu colega entiende la tarea de la misma manera que vos. Cualquier duda sobre esto puede expresarse al instante y resolverse sin demora. La confianza que se genera fácilmente con un contacto cercano, permite no sentir miedo de que un comentario parezca tonto, o de que la respuesta a una pregunta sea demasiado simple. Al mismo tiempo, en esos momentos que parecen ser completamente obvios para uno de los desarrolladores, es donde generalmente hay espacio para los errores.

Reglas de comunicación

Para trabajar en parejas no existen reglas de comunicación estrictas, sino recomendaciones generales que incluso pueden parecer extremadamente simples:

  • No tengas miedo de hablar en voz alta;
  • Sé ​​cortés y amigable;
  • No caigas en un tono instructivo.

Recomiendo un truco muy simple: si ves que la persona sentada a tu lado está haciendo algo mal, mantené una actitud positiva y contá hasta 10, ya que una reacción inmediata a un error puede generar una gran frustración en tu colega. Es muy posible que, una vez alcanzado el final de la línea, se dé cuenta de su equivocación y vuelva al principio, corrigiendo la inexactitud. Si no es así, entonces no dudes en señalar el error.

Si interrumpís el hilo de pensamiento de la otra persona, se corre el riesgo de perder algo de inmediato. Si esto ya sucedió, lo principal es volver a la comunicación normal lo antes posible. Por ejemplo, pueden discutir rápidamente el problema que ha surgido y después retomar una conversación para entender de qué forma a tu colega le gusta recibir comentarios. Este tema va más allá de la programación en parejas, resulta vital en cualquier equipo y entorno. Generalmente, el enfoque más productivo sea aceptar cualquier feedback como un regalo, aunque para que esto suceda uno debe aprender a hacer comentarios de forma constructiva. Es importante recordar que, cualquier persona que decida criticar a otra, pone en riesgo su propio trabajo conjunto y genera conflicto, algo que a nadie le gusta.

Abandonar supuestos innecesarios es otra de las habilidades difíciles de desarrollar. Cuando hablamos con otras personas, a menudo cometemos un gran error de comunicación: creemos que sabemos lo que intentan hacer o decir, y tal especulación oscurece los hechos que deberían servir como punto de partida para una conversación constructiva. Por ejemplo, si vos fueras interrumpido, probablemente no le dirías a tu colega: "Oh ¿realmente te considerás tan inteligente?". Sería mucho más apropiado y útil decir algo como: “Iba a corregir esta línea en dos segundos. Es cierto que notaste un error importante, pero ¿estás de acuerdo en que me interrumpiste? Hechos objetivos para corregir la comunicación en el futuro.

Perspectiva de crecimiento

En mi opinión, una capacitación continua en habilidades de comunicación hace que el desarrollador involucrado en la programación en parejas se convierta en un buen líder técnico. Sin mencionar el hecho de que un intercambio intensivo de conocimiento es una gran oportunidad para crecer técnicamente y de forma muy rápida. Adicionalmente, es posible que nunca sepamos sobre fallas menores en la revisión de código tradicional.

Por cierto, los primeros programadores que trabajaron en la máquina Eniac lo hicieron en parejas porque decidieron que era la única forma de aprenderlo rápidamente.

Perspectiva de los clientes

Si la actividad principal del cliente no es IT, puede que tenga dificultad a la hora de convencerse de que la calidad del código (algo muy difícil de medir) hace que valga la pena un esfuerzo adicional. El concepto de “calidad” en general es abstracto y esta nueva metodología promete ventajas que en principio pueden parecer vagas.

Pero si uno está seguro de que la programación en parejas está justificada para el proyecto, se deben ofrecer al cliente métricas claras para que pueda tomar una decisión. Lo más probable es que el análisis de código estático y, si es posible, una auditoría externa, puedan ayudar. La codificación en parejas puede ser muy útil si, en el futuro, el producto contará con menos recursos de soporte o agregará nuevas funciones. Pero es uno quien deberá traducir la solicitud de "queremos escribir un código más elegante" a "queremos reducir su costo de servicio anual". Porque desde el punto de vista empresarial, la pregunta de por qué dos personas están haciendo una única tarea, que cualquiera de ellas podría hacer por su cuenta, parece bastante razonable.

La forma más fácil de ofrecer la programación en parejas es cuando se trabaja en sistemas críticos, áreas de alto riesgo o que son monitoreadas de cerca por reguladores. Si el cliente está interesado en una perspectiva a largo plazo del proyecto, será más fácil convencerlo. Una de las ventajas es que la implementación de esta técnica no significa inversión, sino confianza en el equipo. La programación en parejas reduce la cantidad de tareas que se realizan paralelamente en el equipo, pero por lo general no cuesta más y no es más lenta que los métodos de desarrollo más populares. Lo más difícil es explicar por qué dos cabezas detrás de un solo monitor son buenas en microgestión. Pero, afortunadamente, la investigación y los datos medibles pueden ir al rescate, por ejemplo, la cantidad de defectos del sistema detectados por el cliente.