La programación en parejas, o Pair Programming, es una de las prácticas de desarrollo ágil de software descritas por Kent Beck en su libro Extreme Programming.
¿Qué es Pair Programming?
Por supuesto, el Pair Programming no es sólo escribir código entre dos personas, ya que también se planean estrategias, se diseñan soluciones y se ejecutan desde distintos puntos de vista, todo esto entre dos personas que, a pesar de su evidente formación técnica, pueden llegar a ser muy distintos entre sí.
Formando la pareja
Empezar a trabajar en un proyecto, ya sea desde cero o en fases más avanzadas, es un momento crítico tanto para los nuevos miembros como para el proyecto en sí. El onboarding del programador se puede hacer a varios niveles, pero creo firmemente que la solución más beneficiosa empieza por establecer una pareja de programadores.
Organizar un equipo de trabajo con un programador experimentado facilitará la transferencia de conocimiento necesaria para el nuevo programador. Es quien tiene mayor contexto del pool de trabajo actual, del conocimiento de negocio necesario y, además, puede ayudar a que el aterrizaje técnico sea efectivo: ¿El nuevo miembro tiene bien configurado el IDE? ¿Y el proyecto? ¿Cuenta con todas las credenciales de acceso a los sistemas de terceros?.
Desde el momento en que el programador novato está listo para empezar a programar, ambos programadores podrán elegir la siguiente tarea a cumplir y empezar a plantear las posibles soluciones en reuniones cortas y directas. El programador novato podrá resolver todas las dudas que pueda llegar a tener, incluso podrá explicar a su compañero lo que ha comprendido y tener un feedback directo.
A la hora de afrontar un problema, es beneficioso para ambas partes abrir un debate sobre las distintas soluciones o estrategias para llegar a la solución. En este asunto influyen tanto los trasfondos profesionales como creativos de ambos, y para potenciar el valor de estos debates es necesario asegurar un ambiente libre de críticas y prejuicios, fomentando así la comunicación entre ambos miembros del equipo.
Enfrentándose al HolaMundo juntos
Hay metodologías muy diversas para enfrentarse al código, pero personalmente me decanto por la separación de roles entre conductor y copiloto.
- El conductor es quien tiene el ratón y el teclado, el que escribe el código y comenta lo que va haciendo con el copiloto. Va a ser el encargado de solucionar un pequeño problema a la vez, sin centrarse en el problema general.
- El copiloto se encarga de revisar el código en vivo, de pensar en todas las posibles implicaciones que las acciones del conductor tendrán en la solución general y las apuntará para discutirlas más adelante. Aunque no debe quedarse callado: si sabe de un atajo para la intención del conductor, es su deber comunicarlo.
Lo recomendable en parejas de programador novato/experimentado es que el novato sea el conductor, demostrando que ha entendido el contexto del proyecto, la solución acordada entre la pareja y finalmente manejándose por el proyecto con soltura conforme vaya familiarizándose con el código.
El programador experimentado podrá tener la posibilidad de revisar el código en vivo, sin tener que pasar por herramientas de discusión de código. De esta forma se puede llegar a un estilo de programación homogéneo muy pronto.
A largo plazo se llegará al punto en que cada línea de código ha pasado por varias parejas de ojos a la vez, por lo que la distribución de la propiedad del código es total y, a fin de cuentas, se tendrá la confianza de contar con un código muy pulido y trabajado.
Consejos para una programación en pareja efectiva
En una pareja de programadores la gestión del tiempo es clave. Puede iniciarse con la planificación del día, compartiendo calendarios y fijando el horario de trabajo en pareja. Dicho horario no puede ni debe ocupar todo el día, ya que es una técnica bastante exigente a nivel intelectual, por lo que una media de 4 a 6 horas es más que suficiente para poder reunirse, programar, descansar y atender otros menesteres.
Es altamente recomendable hacer rotación de roles entre la pareja, de tal forma que el copiloto puede sentirse activo en el proyecto y el conductor pueda volver a una perspectiva más observadora. Estas rotaciones también ayudan en la relación interpersonal de ambos miembros, ya que se evita acaparar el control del teclado y caer en la microgestión.
El entorno es muy importante, tanto a nivel técnico como a nivel personal. Un sólo ordenador (a ser posible, el del novato) con un par de pantallas y una mesa amplia donde quepan un teclado, ratón y herramientas de escritura habituales es más que suficiente. No está de más acordar un tamaño de letra, una disposición de pantallas y hasta un nivel de contraste suficiente, por si el compañero tiene necesidades especiales. Finalmente, como recordatorio amistoso, es importante mantener una higiene adecuada y hábitos saludables, evitando de esta forma conflictos y situaciones desagradables para todos.
Como guinda del pastel y recomendación personal, es importante celebrar las pequeñas victorias entre la pareja. Un desayuno especial al entregar un sprint, una partida en la videoconsola o el viejo y confiable choque de manos marca la diferencia lo suficiente para que la pareja vaya buscando el siguiente reto a conseguir.
Juntos pero no revueltos
En este punto del artículo seguro que ya te has reído alguna que otra vez, poniendo en duda que se pueda trabajar de esta forma. Entiendo que es complicado trabajar en un espacio físico tan reducido y en la misma tarea que otra persona que, además, puede tener distinto nivel técnico, trasfondo personal, punto de vista creativo, etcétera… por lo que te recomiendo también unas prácticas a evitar.
La confianza es clave en una pareja, por lo que es recomendable no esconderse nada. Es saludable decir la razón por la que se revisa el teléfono o el correo electrónico (y no es necesario entrar en detalles privados), pero no hacerlo puede dar a entender falta de interés o de compromiso con el proyecto, que a la larga genera roces.
La definición de los roles es bastante clara: el conductor dirige la acción y el copiloto revisa y apunta. Es muy común que el copiloto tome las riendas y se ponga a dar órdenes concretas de lo que tiene que hacer y no el conductor, cayendo en una microgestión nada saludable. Igualmente el conductor puede empezar a divagar al pensar en un nivel de abstracción mucho mayor, consumiendo las tareas (y probablemente la paciencia) del copiloto, que comprobará que no se están cumpliendo los plazos.
No puedo insistir más en el hecho de limitar las horas de trabajo en pareja. Más de 6 horas es poco práctico por no decir imposible, ya que es común encontrar que uno de los miembros de la pareja forma parte de otro proyecto (sobre todo en equipos de programador novato/experimentado) y tendrá tareas como reuniones, documentación o gestión que lo harán abandonar la pareja momentáneamente. Acordar un horario de Pair Programming al inicio del día es tan simple como beneficioso.
Bonus track: Pair Programming en tiempos de COVID-19
Hacer Pair programming no implica que los dos miembros estén en el mismo lugar, y mucho menos en estos tiempos. Hacer Pair Programming remoto es posible, pero si trae una serie de requisitos y recomendaciones adicionales que merece tomar en cuenta:
- Una conexión a internet lo suficientemente estable, tan obvio como importante.
- Una solución para compartir pantalla. Si tiene funcionalidades de control remoto, mucho mejor, aunque no es algo esencial.
- Un ambiente libre de ruidos de fondo y propicio para la comunicación. Unos auriculares lo suficientemente buenos y un micrófono direccional darán la cobertura necesaria para poder comunicarse entre compañeros.
- El lenguaje corporal es importante, por lo que hacer una videollamada ayuda mucho. En algunos casos hay programas que permiten ver la cámara a la vez que la pantalla, pero puede recurrirse a otros programas e incluso otros dispositivos.
- Toneladas de paciencia. A pesar de tener una buena conexión a internet y estar en el mejor de los ambientes, puedes enfrentarte a problemas como el retraso en la entrada o la falta de comprensión cuando se utilizan atajos de teclado, macros, etc.. Ante esto no hay solución mágica, pero es importante mantener la comunicación en todo momento, para expresar tanto lo que se quiere hacer como lo que se desconoce o no se comprende.