Con el entorno de staging estable y las réplicas de base de datos sincronizadas, el equipo se prepara para la revisión final de listo para producción del sistema de torneos. Pero cuando Daniel insiste en una checklist manual de regresión que retrasaría el lanzamiento dos semanas, Katja y Stefan tienen que convertir sus compuertas manuales en evidencia automatizada. Stefan ayuda a Daniel a entender que las pruebas automatizadas no amenazan su autoridad, sino que son la mejor herramienta para escalar su experiencia.
Daniel golpeó con el bolígrafo plateado la página abierta de su archivador. El clic-clic seco sonaba como un metrónomo dentro de la oficina pequeña.
—Tengo 147 casos manuales de regresión en este archivador —dijo Daniel, con esa terquedad silenciosa de alguien que llevaba diez años defendiendo las compuertas de la calidad del software—. Todos y cada uno tienen que ejecutarse y quedar aprobados antes de que el sistema de torneos vaya a producción. No es negociable, Katja.
Katja se masajeó las sienes mirando el volumen de papel. —Daniel, tenemos seis semanas para toda la Operational Realism Initiative. Si tu equipo se pasa dos semanas ejecutando manualmente 147 casos de prueba, no vamos a llegar a desplegar las réplicas de base de datos en producción antes del evento de agosto.
—Entonces retrasamos el evento —dijo Daniel, sin drama—. Mi trabajo es asegurar que no liberemos bugs. Si lanzamos este sistema de torneos y se cae como se cayó el evento de verano, a la gente no le va a importar que tuviéramos un staging precioso. Solo le va a importar que el juego está roto.
—Pero ese es justamente el punto, Daniel —dijo Stefan, inclinándose hacia delante con los codos apoyados en las rodillas—. El entorno de staging es estable porque ya automatizamos el 95% de los escenarios que tienes en ese archivador. Las pruebas de caché de Mariana, las pruebas del middleware de consistencia de Sofia y las pruebas de máquina de estados de UI de Anton corren en cada commit. Tardan tres minutos. ¿Por qué vamos a pasar dos semanas ejecutándolas a mano?
Daniel miró a Stefan con los ojos apenas entrecerrados. —Porque una máquina no tiene intuición, Stefan. Una máquina comprueba que la consulta a la base de datos devuelve el resultado esperado. No comprueba si la UI se siente lenta, si la animación de transición se ve rara o si el tamaño de la fuente es demasiado pequeño en un iPhone viejo. Las pruebas automatizadas son una red de seguridad, sí. Pero no sustituyen a una persona tester que sabe cómo debería sentirse un buen juego.
Cerró el archivador con un golpe seco pesado y satisfactorio.
—Yo no firmo una pipeline en verde —dijo Daniel—. Yo firmo evidencia.
Stefan miró a Katja y luego volvió a mirar a Daniel. Entendía el miedo. Durante años, la autoridad de Daniel se había construido sobre su capacidad para decir que no. Sus checklists manuales eran su escudo, y su aprobación era su espada. Si la pipeline se convertía en la fuente de la verdad, ¿qué quedaba de su papel?
—No te estamos pidiendo que confíes ciegamente en una pipeline en verde, Daniel —dijo Stefan en voz baja—. Te estamos pidiendo que nos ayudes a construirla. Si no confías en las pruebas automatizadas, miramos juntos qué están comprobando de verdad. Y si hay un hueco, escribimos una prueba que demuestre tu intuición.
Daniel se quedó mirando el archivador negro, con la mano apoyada sobre la tapa. —No puedes automatizar la intuición, Stefan.
—Quizá no —dijo Stefan—. Pero sí puedes automatizar la evidencia.
—Esta es la suite de regresión del servicio de matchmaking —dijo Mariana, señalando la pantalla donde una ventana de terminal iba mostrando resultados—. Ejecuta cuarenta y dos escenarios distintos, incluyendo simulación de latencia multirregión, agotamiento del pool de conexiones a base de datos y protección contra cache stampede.
Daniel se acercó más, con las gafas deslizándose por la nariz. —¿Y cómo verifica la race condition multirregión? La de cuando la persona jugadora entra desde Singapur antes de que se replique la escritura hecha en Frankfurt.
Mariana pulsó una tecla y abrió un archivo de prueba en C#. —Aquí mismo. Línea cuarenta y cinco. Levantamos un contenedor local de pruebas que representa la réplica de Singapur. Inyectamos un retraso de 1,2 segundos en el flujo de replicación. Después disparamos la API de matchmaking desde un cliente simulado. La prueba comprueba que la API devuelve un estado PendingSync en lugar de un 404 y que la UI del cliente muestra el estado de carga correcto.
Hizo clic en un botón. La prueba se ejecutó. Doce segundos después apareció un check verde junto al nombre: Should_Handle_Replication_Lag_Gracefully.
Daniel se quedó callado. Miró el código, luego el check verde y luego a Mariana.
—Doce segundos —murmuró Daniel—. Mi equipo tarda tres horas en levantar las VPN, configurar las cuentas de prueba y ejecutar manualmente ese escenario. Y solo podemos hacerlo dos veces antes de que la base de datos se quede llena de basura.
—Y esto corre en cada pull request —dijo Mariana—. Si Anton cambia una línea en la UI de Unity y rompe esta transición, la pipeline se pone roja antes de que el código siquiera se fusione a main. No puede mandarlo a staging, mucho menos a producción.
—Es rápido —admitió Daniel, bajando la voz—. Pero sigue comprobando solo datos. ¿Qué pasa con los bugs visuales? La semana pasada tuvimos uno en el que el botón de entrar al torneo quedaba parcialmente tapado por el avatar de la persona jugadora en pantallas pequeñas. Tus pruebas unitarias no detectaron eso.
—No, no lo detectaron —dijo Stefan, dando un paso al frente—. Porque eso es un bug de layout. Y ahí es exactamente donde la experiencia de tu equipo vale oro, Daniel. En lugar de pasar horas verificando manualmente transacciones de base de datos que una máquina puede comprobar en segundos, tu equipo debería centrarse en el pulido visual, el flujo de usuario y los casos límite que la máquina no ve.
Daniel miró los bloques verdes de la pipeline en la pantalla. El escepticismo seguía ahí, pero la actitud defensiva empezaba a romperse.
—Si dejo de ejecutar la regresión manual —dijo Daniel—, ¿cómo sé que ese pulido visual está ocurriendo de verdad?
—Construimos una prueba de regresión visual —dijo Stefan—. Dejamos que la máquina saque capturas de la UI en diez resoluciones distintas y las compare con una línea base. Si un solo píxel está fuera de sitio, la pipeline lo marca para tu revisión. No tienes que buscar el bug. La máquina te trae el bug.
Daniel miró su bolígrafo plateado girando entre los dedos. —Enséñame cómo se construye eso.
—Una prueba de regresión visual está bien para el layout —dijo Daniel, escribiendo Pulido visual en la pizarra—. ¿Pero qué pasa con la “sensación”? ¿Con ese momento en el que la persona jugadora gana una partida y aparece el popup de recompensa? Si la animación se retrasa un poco, o el efecto de sonido no coincide con la señal visual, quien juega siente una desconexión. Una máquina no puede sentir eso, Stefan.
—Estoy de acuerdo —dijo Stefan, acercándose a la mesa—. Y no estamos intentando automatizar la “sensación”. Eso es experiencia humana pura. Pero ¿cuántos de tus 147 casos de prueba tratan realmente de la “sensación”?
Daniel hizo una pausa con el rotulador suspendido sobre la pizarra. Miró la lista.
—Quizá diez —admitió.
—Entonces 137 de tus casos de prueba consisten en verificar que los datos cuadran, que las transacciones no fallan y que la base de datos no se bloquea bajo carga —dijo Katja, con voz suave pero firme—. Estás gastando el 90% del tiempo de tu equipo actuando como un compilador humano, Daniel. Estáis ejecutando comprobaciones repetitivas y mecánicas que la máquina hace más rápido y de forma más fiable que cualquier persona.
—Es seguro —dijo Daniel, apretando la mandíbula—. Las pruebas manuales son seguras. Sé exactamente qué se ha revisado porque mi equipo lo revisó. Cuando una pipeline sale en verde, no sé si la prueba estaba bien escrita de verdad o si alguien puso Assert.IsTrue(true) para saltarse la compuerta.
—Entonces revisamos las pruebas juntos —dijo Stefan—. Igual que revisamos el código. No dejamos que la gente fusione código sin review; tampoco deberíamos dejar que fusione pruebas sin review. Tu equipo debería ser el code reviewer de la suite de pruebas, Daniel. Sois quienes defienden la calidad. Si alguien escribe una prueba débil, tu equipo rechaza el PR.
Daniel se giró hacia ellos, con la espalda apoyada en la pizarra. —Me estáis pidiendo que cambie por completo mi departamento. Llevamos tres años haciendo regresión manual. Así hemos evitado que este juego se desmorone.
—Así evitasteis que se desmoronara cuando el equipo era pequeño —dijo Katja, levantándose y acercándose a la pizarra—. Pero ahora somos 85 personas, Daniel. Tenemos 147 prioridades. Si seguimos usando compuertas manuales, nos vamos a convertir en el cuello de botella. La gente de desarrollo empezará a saltarse QA por completo porque no puede esperar dos semanas una aprobación. Y entonces no tendremos ningún control de calidad.
Le puso una mano en el hombro. —No queremos eliminar QA, Daniel. Queremos escalarte. Queremos que tu experiencia corra en cada commit, 24 horas al día, sin que tengas que perder tus fines de semana.
Daniel miró la pizarra y luego la mano de Katja sobre su hombro. El silencio de la sala pesaba como el momento previo a un salto de fe.
—Vale —dijo Daniel en voz baja—. Pero si se cuela un bug en producción porque automatizamos la comprobación, será culpa vuestra.
—Será responsabilidad de todas las personas aquí —dijo Katja—. Así funciona un equipo.
—Ahora escribe la aserción —dijo Mariana, animándolo—. Queremos verificar que el estado de RewardPopup pasa a “Active” dentro de los 150 milisegundos posteriores al evento MatchWon.
Daniel escribió la aserción despacio. Sus dedos no dominaban la sintaxis, pero su lógica era precisa.
Assert.IsTrue(popupState.TransitionTime <= 150);
—Eso es —dijo Mariana—. Ahora ejecútala.
Daniel hizo clic en el botón de ejecutar. Se abrió una pequeña ventana de prueba de Unity, simuló la victoria de la partida y verificó el tiempo de transición de la animación. En tres segundos apareció un check verde.
—Ha verificado el timing de la animación —dijo Daniel, con un tono de asombro en la voz—. No tuve que abrir la app, jugar una partida, ganarla y contar fotogramas a mano. La prueba lo hizo en tres segundos.
—Y lo hará cada vez que Anton toque el framework de UI —dijo Mariana—. Tu intuición sobre el retraso de la animación ahora está codificada en la pipeline. Es un requisito ejecutable, Daniel. Es permanente.
Daniel se quedó mirando la pantalla, con el bolígrafo plateado quieto sobre el escritorio. Ya no lo hacía girar.
—El mes pasado me pasé tres horas depurando una caída de frames en la pantalla de recompensas —dijo Daniel, levantando la vista hacia Stefan—. Si hubiéramos tenido esta prueba entonces, lo habríamos detectado en el primer commit.
—Exacto —dijo Stefan—. Ya no eres un guardián de compuerta, Daniel. Eres un arquitecto de la calidad. Estás diseñando la red de seguridad que permite a la gente de desarrollo correr tan rápido como quiera, sabiendo que no se va a caer.
Daniel soltó una risa corta y seca. —Se siente… extraño. No tener que pasar la checklist.
—Eso se llama libertad, Daniel —sonrió Mariana mientras volvía a su escritorio—. Acostúmbrate. Tenemos muchas más pruebas que escribir.
Daniel volvió a girarse hacia la pantalla. Sus dedos regresaron al teclado. Ya no estaba mirando el archivador negro. Estaba mirando el código, y su cabeza ya estaba trazando el siguiente escenario que quería convertir en algo ejecutable.
Lukas miró el informe impreso y luego a Daniel.
—Entonces —dijo Lukas, con un punto de diversión en la voz—. ¿Esta vez no hay checklist manual de regresión?
—No —dijo Daniel, tranquilo y seguro—. La checklist manual de regresión ya es obsoleta, Lukas. Hemos codificado 135 de los 147 casos de prueba dentro de la pipeline automatizada. Los doce casos que quedan, los que de verdad necesitan sensibilidad humana, los ejecutó mi equipo esta tarde. Tardamos dos horas en vez de dos semanas.
Señaló el estado en verde de la pipeline en la pantalla.
—El sistema de torneos está listo para producción —dijo Daniel—. La evidencia está justo ahí. Hemos verificado cada commit contra nuestros estándares de calidad. Estamos listos para lanzar.
Lukas miró a Katja con admiración genuina. —Dos horas en lugar de dos semanas. Eso es… increíble, Katja.
—Ese es el poder de la evidencia automatizada —dijo Katja, con una sonrisa cálida y relajada—. No solo construimos un entorno de staging, Lukas. Construimos una cultura de calidad. Ahora desarrollo y QA trabajan juntos, escriben pruebas y verifican el comportamiento antes de que el código siquiera llegue a staging.
Miró a Daniel. —Y no lo habríamos conseguido sin la experiencia de Daniel. No solo nos dejó automatizar su checklist. Nos ayudó a diseñar las pruebas que hacen fiable esta pipeline.
Daniel se ruborizó un poco, pero mantuvo la sonrisa. —Es simplemente buen desarrollo, Katja.
Stefan los observaba desde la ventana, mientras el aire templado de la tarde berlinesa subía desde el patio con risas y el sonido de copas chocando.
La transición estaba completa.
El equipo había dejado de luchar entre sí y había empezado a luchar contra la complejidad de su sistema. Habían convertido sus compuertas manuales en redes automatizadas de seguridad y, con eso, habían desbloqueado un nivel de velocidad y confianza que no veían desde hacía meses.
Afuera, la ciudad estaba oscura y quieta. Adentro, el equipo estaba listo para el lanzamiento.
Navigator — Katja Müller — 10 de julio de 2026, 18:15
Tercera semana de la Operational Realism Initiative.
La restricción más dura a la que nos enfrentamos esta semana no fue física, sino organizativa. Daniel, nuestro QA Lead, insistía en ejecutar sus 147 casos manuales de regresión antes de aprobar el sistema de torneos. Eso habría retrasado nuestro lanzamiento a producción dos semanas.
Stefan y Mariana le ayudaron a ver que las pruebas automatizadas no amenazan a su departamento, sino que son una herramienta para escalar su experiencia. Al demostrar la velocidad y la fiabilidad de la pipeline de CI y ayudarle a escribir su primera prueba de integración ejecutable para el timing de una animación de UI, lograron romper su resistencia.
Daniel ya ha aprobado oficialmente la revisión de listo para producción. Lo hicimos en dos horas en vez de dos semanas, con 135 casos de prueba completamente automatizados y ejecutándose en cada commit.
Señales de Navigator esta semana:
- El 100% de los pull requests revisados por QA incluyó cobertura automatizada de pruebas.
- El ciclo de regresión bajó de 10 días a 3 minutos.
- El sentimiento registrado por Daniel en sus logs diarios pasó de “defensivo” a “colaborativo”.
- La alineación entre equipos alcanzó un máximo histórico, con QA y desarrollo trabajando en pareja sobre el diseño de pruebas.
Estamos listos para producción. El entorno de staging es estable, las réplicas de base de datos están sincronizadas y la pipeline está en verde.
La próxima semana lanzaremos el sistema de torneos en producción para el evento de agosto. El tráfico real pondrá a prueba nuestra arquitectura, nuestro modelo de consistencia y la resiliencia del equipo. Pero, por primera vez, vamos a lanzar con confianza plena.