Episodio 15

La primera sesión de pairing

"El control es una alucinación solitaria"
12 min de lectura

Stefan propone pairing y, peor todavía, mob programming. El equipo espera caos. Daniel teme perder la última palanca que todavía mueve: las aprobaciones. Mariana espera teatro. Hassan espera una nueva forma de que lo culpen. En cambio, Stefan lo mantiene brutalmente pequeño: un bug, una rama, una sesión. Mientras tres desarrolladores comparten teclado y discuten en tiempo real, detectan problemas que, de otro modo, habrían explotado días después en producción. La primera sesión de pairing no los hace más rápidos. Los hace menos solos.

Anteriormente: "La documentación que no existe" — Stefan pidió documentos de arquitectura y encontró un wiki vacío. Pidió un runbook de despliegue y recibió la misma respuesta: "Está en la cabeza de alguien." Con la fecha de salida de Tomasz contando hacia atrás, Stefan se sentó a su lado y empezó a escribir el conjunto mínimo de verdades que mantiene vivo a un sistema.

Lunes, 09:26 — Tres sillas, un teclado

[Image: Una sala pequeña de vidrio con tres sillas demasiado cerca de un escritorio. Stefan: camiseta oscura, jeans, mangas arremangadas, cuaderno abierto. Mariana: tank top blanco suelto, shorts de mezclilla, pelo recogido, piernas cruzadas, laptop abierta. Daniel: camisa con mangas dobladas, jeans oscuros, postura tensa, teléfono boca abajo. Hassan visible a través del vidrio en su escritorio: hoodie negro oversized, capucha abajo, ojos cansados. Luz de mañana de mayo, ~18°C.]

Stefan no lo anunció como una iniciativa.

Lo anunció como una restricción.

“Tenemos un sistema y tres puntos únicos de fallo,” dijo.

La mandíbula de Daniel se movió sin abrir la boca. Ese gesto de tragarse palabras.

Mariana se recostó y dejó que la silla chillara. El eye roll ni siquiera fue disimulado.

“¿Quieres que escribamos más documentación?” dijo.

“No,” dijo Stefan. “Eso fue ayer. Quiero que dejen de trabajar solos en cosas peligrosas.”

La risa de Hassan llegó desde el otro lado del vidrio. No fuerte. No amable.

“Suerte,” dijo, mirando sus monitores. “A este lugar le encantan las cosas peligrosas.”

Stefan giró la cabeza hacia él.

“Ya lo noté,” dijo.

Daniel se aclaró la garganta.

“No tenemos tiempo para…” empezó.

“Pairing,” completó Mariana. Como una mala palabra.

Los ojos de Daniel se fueron a ella. No le gustó que lo dijera en voz alta.

Stefan sonrió una vez.

“Pairing,” confirmó. “Y a veces mob programming.”

Las cejas de Mariana subieron.

“Ay, por favor,” dijo. “¿Ahora vamos a hacer la cosa de 2009?”

“Vamos a hacer la cosa de 2026,” dijo Stefan. “Dejar de pagar intereses por el silencio.”

La mano de Daniel apretó un bolígrafo.

“No quiero una sala llena de gente discutiendo mientras no se hace nada,” dijo.

Quería decir: no quiero ver cómo mi autoridad se disuelve en tiempo real.

Stefan asintió.

“No va a pasar,” dijo. “Esto no es democracia. Es gestión de riesgo.”

Mariana resopló.

“Gestión de riesgo suena a PowerPoint,” dijo.

“Entonces mantengámoslo fuera de slides,” dijo Stefan. “Una sesión. Noventa minutos. Un bug que nos duele si sale mal. Una rama. O sacamos valor o paramos.”

Hassan por fin levantó la vista.

“¿Y cuando salga mal?” preguntó.

La voz de Stefan se mantuvo plana.

“Entonces aprendemos con luz,” dijo. “No a las 23:40 con las manos temblando y nadie respondiendo en Slack.”

La boca de Hassan se tensó. Sus dedos se flexionaron una vez, como si tuviera que convencerlos de estar quietos.

Daniel miró la mesa. El vidrio le devolvió su propia cara. Se veía más viejo de lo que quería.

“¿Quién maneja?” preguntó Stefan.

Mariana señaló la silla vacía de Emma como si fuera obvio.

“La nueva desarrolladora de plataforma,” dijo. “Si vamos a romper algo, al menos que sea con estilo.”

Stefan no se rió. Solo escribió una hora en su cuaderno.

“11:00,” dijo. “Traigan la cosa más pequeña y más aterradora que estén tocando esta semana.”

Daniel exhaló por la nariz.

“Vale,” dijo.

No era acuerdo.

Era rendición con formulario.

Lunes, 11:04 — El bug que nunca llegó a producción

[Image: Emma en un escritorio con un monitor externo. Emma: camiseta negra ajustada, jeans rotos, pelo en messy bun, una hoodie fina atada a la cintura. Mariana de pie detrás de su silla: tank top blanco, shorts de mezclilla, descalza, pies metidos bajo la silla. Stefan a un lado: cuaderno abierto, bolígrafo en mano. Daniel en la puerta: brazos cruzados, intentando no estar. Luz cálida interior, vasos de café, ~20°C adentro.]

El ventilador del laptop era la voz más fuerte del cuarto.

Stefan hizo que Emma tecleara.

No porque no confiara en ella.

Porque no quería convertirlo en un show donde la persona senior “enseña” y los demás miran.

“Tú manejas,” dijo. “Tus manos. Tu teclado. Tus errores.”

Los ojos de Emma fueron a Mariana.

“Si rompo producción, me voy del país,” dijo.

“No lo harás,” dijo Mariana. “Lo rompemos juntas. Como familia.”

Hassan se sentó en el borde de la mesa como si no mereciera una silla.

“¿Qué estamos viendo?” preguntó.

Emma abrió un pull request. Pequeño. El tipo de cambio que se ve inocente y se aprueba un viernes.

Un update del runbook.

Una línea en el script de deploy.

“Solo hace que el script imprima el nombre del entorno,” dijo Emma. “Para que no despliegues a producción pensando que es staging.”

Las cejas de Daniel subieron.

“Eso está bien,” dijo, sorprendido de escucharse.

La sonrisa de Mariana fue afilada.

“Está bien porque tenemos miedo,” dijo.

Stefan se inclinó.

“Pruébalo local,” dijo.

Emma lo ejecutó.

El script imprimió: ENV=staging.

“Ahora cambia el flag,” dijo Stefan.

Emma cambió una variable y lo corrió otra vez.

ENV=production.

Los hombros de Daniel se aflojaron un centímetro.

“Ok,” dijo. “Mergeo.”

Stefan no se movió.

“Todavía no,” dijo.

Daniel parpadeó.

“¿Por qué?” preguntó, y la irritación se despertó.

Stefan señaló una línea.

“Ese string viene de un archivo de config,” dijo. “¿Cuál?”

Emma hizo scroll.

config/env.sh,” dijo.

“¿De dónde sale ese archivo en CI?” preguntó Stefan.

Emma dudó.

Mariana no.

“Del laptop de alguien,” dijo.

La risa de Hassan salió como tos.

“Del mío,” corrigió.

La sala se quedó en silencio de ese modo que pasa cuando una verdad es demasiado vergonzosa para discutirla.

Stefan asintió una vez.

“Entonces el script imprime el entorno desde un archivo que quizá no existe en CI,” dijo. “¿Qué pasa si no existe?”

Emma ejecutó el script sin ese archivo.

No imprimió ENV=.

No imprimió nada.

Y luego defaultó a producción.

La cara de Daniel se vació.

“Eso…” empezó.

“Ese es el bug,” dijo Mariana. Su voz se volvió calma. Demasiado calma.

Hassan miró la terminal. Su garganta se movió.

“Ese iba a ser mi martes en la noche,” dijo.

Las manos de Emma quedaron suspendidas sobre el teclado como si no confiara en ellas.

“No vi eso,” susurró.

“Claro que no,” dijo Stefan. No cruel. No amable. Solo verdad. “Estabas sola.”

Daniel descruzó los brazos. Se acercó.

“Arréglalo,” dijo.

Stefan negó con la cabeza.

“No,” dijo. “Emma arregla. Mariana explica. Hassan verifica. Tú apruebas cuando lo entiendas.”

Daniel lo miró.

“Eso es más lento,” dijo.

El bolígrafo de Stefan golpeó una vez el cuaderno.

“Más lento que el pánico,” dijo. “Más rápido que los postmortems.”

Emma tragó saliva.

“Ok,” dijo.

Mariana se inclinó sobre su hombro y señaló.

“Guardrail,” dijo. “Si falta el archivo, falla duro. Sal. Grita. Nada de defaults.”

Hassan asintió.

“Y muestra la fuente de la config,” agregó. “Para saber si viene de CI o de un estado local maldito.”

Emma tecleó.

El script ahora se negaba a continuar si faltaba config/env.sh.

No era elegante.

Era sobrevivible.

Daniel miró el diff como si estuviera viendo magia.

“Eso se habría ido,” dijo.

“Se habría ido porque lo habrías aprobado un viernes,” dijo Mariana.

Daniel se encogió.

“Sí,” admitió.

Stefan cerró su cuaderno.

“Primera sesión de pairing,” dijo. “Un bug muerto antes de nacer.”

Nadie sonrió.

Ese era el punto.

Martes, 14:38 — El test de Mariana, el silencio de Tomasz

[Image: Mariana ahora al teclado, postura hacia delante, concentración afilada. Mariana: top deportivo negro bajo una camisa de lino abierta, shorts de mezclilla, tatuaje Tupi-Guaraní visible, pelo recogido fuerte. Tomasz a su lado: hoodie gris desabrochada, ojos cansados, dedos marcando un ritmo en la rodilla. Stefan detrás: camiseta oscura, cuaderno bajo el brazo. Daniel más atrás con el laptop cerrado, mirando. Luz de tarde, ~22°C afuera.]

Mariana eligió la siguiente “cosita pequeña y aterradora” con una sonrisa que decía: ya se acabó la diplomacia.

“Rewards,” dijo.

Los ojos de Daniel se estrecharon.

“Eso lo tiene product,” dijo.

“Todo es de product hasta que se rompe,” dijo Mariana. “Después es de Hassan.”

Hassan pasó por la puerta sin detenerse.

“Hechos,” dijo, sin mirar.

Mariana abrió un reporte de live ops.

Jugadores diciendo que habían recibido el mismo reward dos veces.

No pasaba mucho.

Lo cual lo hacía peor.

Los bugs raros no se arreglan.

Los bugs raros se explican.

“No lo puedo reproducir,” dijo Daniel.

“Porque lo estás haciendo bonito,” dijo Mariana.

Escribió un test.

No un unit test que demuestra que una función devuelve el número correcto.

Un test sucio que simula a un jugador abriendo la app cruzando la frontera de medianoche.

Stefan no interrumpió.

Miró a Tomasz.

Tomasz miró a Mariana como alguien mirando a otra persona tocar una mina que él lleva dos años rodeando.

El test falló.

No con una aserción prolija.

Con un crash.

Los labios de Mariana se abrieron.

“Oh,” dijo.

Los hombros de Tomasz se tensaron.

“Por eso nunca toqué ese código,” murmuró.

Stefan giró la cabeza.

“Dilo otra vez,” dijo.

Tomasz lo miró.

“Por eso nunca toqué ese código,” repitió, más fuerte, irritación tapando vergüenza.

Daniel parpadeó.

“¿Nunca lo tocaste?” preguntó.

La risa de Tomasz fue seca.

“Querías que estuviera estable,” dijo. “Así que aprendí qué partes había que temer.”

Mariana no pidió permiso.

Siguió el crash hasta un helper de parseo de fechas que asumía que la zona horaria local era igual a la del servidor.

No lo era.

Nunca lo fue.

Hora de Berlín.

UTC.

Jugadores en Brasil.

Jugadores en Turquía.

La medianoche ocurre en momentos distintos para gente distinta.

La voz de Mariana cambió.

Dejó de actuar seguridad.

“Llevamos dando rewards duplicados porque no sabemos qué día es,” dijo.

La cara de Daniel hizo algo parecido a dolor.

“¿Qué tan grave?” preguntó.

Mariana encogió los hombros.

“No catastrófico,” dijo. “Pero humillante. Y caro. Y el tipo de bug que hace que un jugador piense que lo estás cagando.”

Tomasz se inclinó.

“Si lo arreglas mal, puedes bloquearle a la gente los rewards diarios,” dijo.

“Bien,” dijo Stefan.

Todos lo miraron.

“¿Bien?” dijo Daniel.

“Bien,” repitió Stefan. “Ahora el riesgo está visible. Sigan.”

Mariana reescribió el helper.

No sola.

Tomasz aportó la historia. El incidente raro de 2024 cuando soporte se inundó. El workaround que nadie documentó.

Stefan hizo la pregunta que lo volvió seguro.

“¿Qué harías a las 02:00 cuando el test falla y odias a tu yo del pasado?”

Tomasz exhaló.

“Pondría la conversión de timezone en un solo lugar,” dijo. “Y lo escribiría.”

Los dedos de Mariana se detuvieron.

“Te vas,” dijo, sin acusar. Solo afirmando.

Tomasz no respondió.

Su silencio era respuesta.

Mariana asintió una vez y tecleó más rápido.

Cuando el test por fin quedó verde, nadie celebró.

La voz de Daniel fue baja.

“Eso nos habría tomado días,” dijo.

Mariana no se giró.

“Días para ti,” dijo. “Semanas para el backlog. Un año para la realidad.”

Stefan escribió una frase en su cuaderno y la subrayó.

Pensar juntos es más barato que arreglar solos.

Jueves, 18:03 — Aprobar no es seguridad

[Image: Daniel y Stefan en la cocina cerca de la máquina de café. Daniel: mangas dobladas, ojos cansados, teléfono vibrando en la mesada. Stefan: camiseta oscura, chaqueta en el brazo, listo para irse. Al fondo, Mariana y Emma se ríen en voz baja frente a una pantalla, relajadas. Luz de tarde de primavera, ~19°C.]

Daniel alcanzó a Stefan cuando ya estaba guardando cosas.

“Lo hiciste a propósito,” dijo Daniel.

Stefan no fingió no entender.

“Sí,” dijo.

“Elegiste cambios que se ven seguros,” dijo Daniel. “Para que mi aprobación fuera lo que casi nos mata.”

Stefan asintió.

“Tu aprobación nunca fue el mecanismo de seguridad,” dijo.

Las fosas nasales de Daniel se tensaron.

“Entonces, ¿qué hago yo?” preguntó.

Quería decir: ¿qué valgo si no soy la puerta?

La voz de Stefan se mantuvo suave sin volverse blanda.

“Intentas que la gente no se ahogue,” dijo. “Pero no puedes hacer eso desde una checklist.”

Los hombros de Daniel se hundieron.

“Si no apruebo, se despliega mal,” dijo.

“Se despliega mal con tu aprobación,” dijo Stefan. “Eso es lo que mostró hoy.”

Daniel miró la máquina de café como si tuviera respuestas.

“Odio las reuniones,” dijo.

“Yo también,” dijo Stefan.

La risa de Daniel fue cansada.

“Entonces, ¿por qué esto funciona?” preguntó.

Stefan se encogió.

“Porque no es una reunión,” dijo. “Es trabajo. Trabajo compartido. Feedback en tiempo real. Un code review humano.”

Daniel tragó saliva.

“Yo pensé que mob programming era…” buscó la palabra.

“Cringe,” dijo Mariana desde atrás sin levantar la vista.

Emma se rió.

Stefan sonrió.

“Puede serlo,” dijo. “Si lo haces como teatro. Esto no es teatro. Esto es quitarle presión a la persona que siempre paga.”

El teléfono de Daniel vibró otra vez.

No lo agarró.

Eso solo ya era un milagro.

“Ok,” dijo Daniel. “Otra más la semana que viene.”

Stefan se puso la chaqueta.

“Pregúntale al equipo,” dijo.

Daniel frunció el ceño.

“Soy Head of Engineering,” dijo.

Las cejas de Stefan subieron.

“Entonces actúa como tal,” dijo. “Lidera. No controles.”

Se fue a las 18:10.

Daniel se quedó ahí, mirando la máquina de café, como si fuera un confesionario.

Detrás, volvió la risa de Mariana.

No cruel.

Aliviada.

Navigator — Daniel Weber — 15 May 2026, 18:22

Aprobé un cambio el lunes que habría dejado un deploy defaultando a producción.

Se veía seguro.

Ese es el punto.

Me repito que mis aprobaciones son seguridad. Pero las aprobaciones son papeleo. Se sienten como control porque son visibles. Crean la ilusión de que alguien es responsable.

Hoy, tres personas se sentaron en una sala y mataron un bug antes de que existiera. Sin héroes. Sin noche larga. Sin pánico. Solo cerebros en el mismo lugar al mismo tiempo.

Mariana dijo que era cringe. No se equivoca. Es cringe cuando es forzado.

Pero cuando Emma tecleó y Hassan verificó y Tomasz dijo la verdad sobre las minas y Stefan siguió haciendo preguntas lentas, no se sintió como proceso.

Se sintió como un equipo.

Me aterra perder el control.

Me aterra más quedármelo.

Próximo Episodio: "El code review que no es un review" Stefan hace una pregunta simple que cae como un insulto: ¿por qué se aprueban pull requests sin que nadie los lea? Daniel insiste en que las revisiones ocurren. Mariana se ríe. Hassan muestra las reacciones con emojis que cuentan como ‘proceso’. Stefan se sienta con ellos y convierte el code review en lo que se suponía que era: entendimiento compartido, no un sello.
×
×