8 min lectura • Guide 103 of 877
Implementando Pair Programming Efectivo
El pair programming combina dos desarrolladores trabajando en el mismo código simultáneamente, con uno manejando (typing) y otro navegando (revisando y pensando adelante). Las features de asignación de GitScrum, time tracking, y herramientas de colaboración ayudan a equipos a coordinar sesiones de pairing, trackear la inversión, medir resultados, y construir pairing en su flujo de trabajo regular para mejorar calidad de código, acelerar aprendizaje, y reducir silos de conocimiento.
Cuándo Hacer Pair Program
Escenarios de Alto Valor
MEJORES CASOS DE USO:
┌─────────────────────────────────────────────────────────────┐
│ CUÁNDO PAIRING ENTREGA MÁS VALOR │
├─────────────────────────────────────────────────────────────┤
│ │
│ PROBLEMAS COMPLEJOS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Decisiones arquitecturales ││
│ │ ✅ Algoritmos complejos ││
│ │ ✅ Desafíos de integración ││
│ │ ✅ Optimización de rendimiento ││
│ │ ✅ Código sensible a seguridad ││
│ │ ││
│ │ Valor: Dos mentes > una para problemas difíciles ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TRANSFERENCIA CONOCIMIENTO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Onboarding nuevos miembros equipo ││
│ │ ✅ Trabajar en áreas desconocidas del código ││
│ │ ✅ Aprender nuevas tecnologías/frameworks ││
│ │ ✅ Cross-training para reducir factor bus ││
│ │ ✅ Mentorear desarrolladores junior ││
│ │ ││
│ │ Valor: Conocimiento se esparce, silos se reducen ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CALIDAD CRÍTICA: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✅ Hotfixes producción bajo presión ││
│ │ ✅ Código de pagos/financiero ││
│ │ ✅ Scripts migración datos ││
│ │ ✅ Cambios infraestructura core ││
│ │ ✅ Refactoring alto impacto ││
│ │ ││
│ │ Valor: Review tiempo real atrapa bugs costosos ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CUÁNDO NO PAREAR: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ❌ Tareas simples, rutinarias (CRUD, config) ││
│ │ ❌ Trabajo bien entendido en código familiar ││
│ │ ❌ Investigación/exploración (mejor mob, o solo) ││
│ │ ❌ Cuando cualquier persona está agotada ││
│ │ ❌ Tareas administrativas ││
│ │ ││
│ │ Desperdicio: Dos personas para trabajo de una ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Trackeando en GitScrum
WORKFLOW PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ CONFIGURANDO PARA PAIRING │
├─────────────────────────────────────────────────────────────┤
│ │
│ ASIGNACIÓN TAREAS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Asignar AMBOS desarrolladores a tarea: ││
│ │ ││
│ │ Tarea: "Implementar lógica retry pagos" ││
│ │ Asignados: @maria, @carlos ││
│ │ Label: workflow/pairing ││
│ │ ││
│ │ Por qué ambos nombres: ││
│ │ • Ambos visibles en carga trabajo ││
│ │ • Ambos acreditados por entrega ││
│ │ • Notificaciones van a ambos ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TIME TRACKING: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Ambos trackean tiempo simultáneamente: ││
│ │ ││
│ │ Maria: 3h en "Lógica retry pagos" ││
│ │ Carlos: 3h en "Lógica retry pagos" ││
│ │ ││
│ │ Total: 6 persona-horas (preciso para planificación) ││
│ │ ││
│ │ Alternativa: Uno trackea como "pair" con multiplicador ││
│ │ 2x en cálculos de estimación ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ LABELS PARA VISIBILIDAD: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Crear labels dedicados: ││
│ │ ││
│ │ 🟢 workflow/pairing - Destinado a pair programming ││
│ │ 🔵 workflow/paired - Completado como pair ││
│ │ 🟣 workflow/mobbing - Mob programming equipo ││
│ │ ││
│ │ Filtrar por labels para ver: ││
│ │ • Trabajo pairing actual ││
│ │ • Ratio pairing histórico ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Estilos de Pairing
Driver-Navigator
EL MODELO CLÁSICO:
┌─────────────────────────────────────────────────────────────┐
│ DINÁMICAS DRIVER-NAVIGATOR │
├─────────────────────────────────────────────────────────────┤
│ │
│ DRIVER (Quien tiene el teclado): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Responsabilidades: ││
│ │ • Escribe el código ││
│ │ • Se enfoca en sintaxis e implementación inmediata ││
│ │ • Explica qué está haciendo ││
│ │ • Hace preguntas cuando está atorado ││
│ │ ││
│ │ Mindset: "Estoy implementando el paso actual" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ NAVIGATOR (Observador): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Responsabilidades: ││
│ │ • Revisa código mientras se escribe ││
│ │ • Piensa en el panorama mayor ││
│ │ • Atrapa bugs y typos ││
│ │ • Sugiere alternativas y mejoras ││
│ │ • Mantiene track de qué sigue ││
│ │ ││
│ │ Mindset: "Estoy guiando estrategia y atrapando issues" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ RITMO DE CAMBIO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Opciones: ││
│ │ ││
│ │ BASADO EN TIEMPO: ││
│ │ • Pomodoros 25 minutos, cambiar cada ronda ││
│ │ • Fuerza rotación regular ││
│ │ • Previene que una persona domine ││
│ │ ││
│ │ BASADO EN TAREA: ││
│ │ • Cambiar después de completar cada subtarea ││
│ │ • Puntos de corte naturales ││
│ │ • Ambos experimentan diferentes partes ││
│ │ ││
│ │ PING-PONG (para TDD): ││
│ │ • A escribe test fallando, B lo hace pasar ││
│ │ • B escribe siguiente test fallando, A lo hace pasar ││
│ │ • Cambio continuo ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Haciendo Funcionar el Pairing
Configuración Ambiente
ESTACIÓN DE PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ SETUP FÍSICO Y REMOTO │
├─────────────────────────────────────────────────────────────┤
│ │
│ SETUP PRESENCIAL: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Equipo: ││
│ │ ☐ Monitor grande (27"+) o monitores duales ││
│ │ ☐ Dos teclados ││
│ │ ☐ Dos ratones ││
│ │ ☐ Asientos cómodos para dos ││
│ │ ││
│ │ Ambiente: ││
│ │ ☐ Espacio tranquilo o setup cancelación ruido ││
│ │ ☐ Pizarra cerca para sketching ││
│ │ ☐ Timer visible ││
│ │ ☐ Agua/snacks accesibles ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ SETUP REMOTO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Herramientas: ││
│ │ ☐ Compartir pantalla con audio (Zoom, Meet, Teams) ││
│ │ ☐ VS Code Live Share o similar ││
│ │ ☐ Conexión internet estable ││
│ │ ☐ Buen micrófono y auriculares ││
│ │ ││
│ │ Beneficios Live Share: ││
│ │ • Ambos pueden escribir simultáneamente ││
│ │ • Ambos cursores visibles ││
│ │ • Terminal compartido ││
│ │ • Sin latencia para typing ││
│ │ ││
│ │ Tips: ││
│ │ • Cámara encendida construye conexión ││
│ │ • Verbalizar más que en persona ││
│ │ • Tomar breaks más frecuentes (fatiga pantalla) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Estructura Sesión
FLUJO SESIÓN PAIRING:
┌─────────────────────────────────────────────────────────────┐
│ SESIÓN PAIRING ESTRUCTURADA │
├─────────────────────────────────────────────────────────────┤
│ │
│ ANTES DE SESIÓN (5 min): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ☐ Alinear en objetivo: "¿Qué lograremos?" ││
│ │ ☐ Revisar contexto: Descripción tarea, código relac. ││
│ │ ☐ Acordar enfoque: "¿Cómo lo abordaremos?" ││
│ │ ☐ Setear timer para primera rotación ││
│ │ ☐ Iniciar time tracking en GitScrum ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DURANTE SESIÓN: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Estructura (sesión 2 horas): ││
│ │ ││
│ │ 0:00-0:25 │ Primer turno driving (Persona A) ││
│ │ 0:25-0:30 │ BREAK - estirar, agua ││
│ │ 0:30-0:55 │ Segundo turno driving (Persona B) ││
│ │ 0:55-1:00 │ BREAK - estirar, revisar mensajes ││
│ │ 1:00-1:25 │ Tercer turno driving (Persona A) ││
│ │ 1:25-1:30 │ BREAK ││
│ │ 1:30-1:55 │ Cuarto turno driving (Persona B) ││
│ │ 1:55-2:00 │ CIERRE ││
│ │ ││
│ │ Comportamientos clave: ││
│ │ • Pensar en voz alta ││
│ │ • Hacer preguntas libremente ││
│ │ • Celebrar pequeños logros ││
│ │ • Anotar items parking lot ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DESPUÉS DE SESIÓN (5 min): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ☐ Commit progreso actual ││
│ │ ☐ Actualizar tarea en GitScrum (comentarios, estado) ││
│ │ ☐ Capturar aprendizajes: "¿Qué descubrimos?" ││
│ │ ☐ Anotar seguimientos: "¿Qué sigue?" ││
│ │ ☐ Retro rápida: "¿Qué funcionó? ¿Qué cambiar?" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘