
Es viernes a las siete de la tarde. El equipo ya estaba cerrando la semana cuando salta una alerta en producción: un bug crítico en el flujo de pago. Toca montar un hotfix de emergencia, coordinar despliegue, avisar a soporte y rezar para que no haya más daños colaterales. Tres horas después, el parche está en producción y el equipo está agotado. Lo peor es que alguien recuerda haber visto algo raro en los requisitos hace dos meses, pero nadie le dio importancia. Ese bug de viernes por la noche podría haberse resuelto en quince minutos durante una revisión de requisitos. Este es el tercer principio del testing según ISTQB, y probablemente el que más dinero puede ahorrarte.
ISTQB lo formula así: “Early testing saves time and money”. La idea es que las actividades de testing deben comenzar lo antes posible en el ciclo de desarrollo, no esperar a que haya código ejecutable. Cuanto más tarde se detecta un defecto, más cuesta corregirlo, porque el error ya se ha propagado a más capas del sistema y hay más código construido sobre una base defectuosa.
Este principio no es nuevo. Barry Boehm ya lo documentó en los años 80 con sus estudios sobre el coste de los defectos en distintas fases del desarrollo. Lo que él encontró se ha confirmado una y otra vez en proyectos reales: un error detectado en la fase de requisitos puede costar unas pocas horas de trabajo. Ese mismo error, detectado en producción, puede multiplicar su coste por cien o más.
Esta proporción aparece constantemente en la literatura de ingeniería de software y es una buena forma de visualizar el impacto. Si corregir un defecto en la fase de requisitos cuesta 1 unidad de esfuerzo, corregirlo durante el desarrollo cuesta aproximadamente 10 y corregirlo en producción cuesta 100 o más.
Los números exactos varían según el contexto, pero la tendencia es consistente. No se trata solo del tiempo de un desarrollador arreglando código. Hay que sumar el coste de investigar el problema, reproducirlo, diseñar la corrección, testearla, desplegarla y, en muchos casos, gestionar el impacto en los usuarios que ya se han visto afectados.
En mi experiencia, el coste oculto más grande no es técnico sino organizativo. Un bug en producción genera reuniones de emergencia, interrumpe el trabajo planificado del sprint, obliga a priorizar sobre la marcha y desgasta al equipo. Todo eso no aparece en ninguna métrica de bugs, pero lo notas en la velocidad del equipo durante las semanas siguientes.
Cuando hablamos de testing temprano no nos referimos solo a escribir tests unitarios antes. El concepto es más amplio: se trata de aplicar pensamiento de testing en todas las fases del desarrollo, empezando por las más tempranas.
Esto incluye actividades que muchos equipos no consideran testing pero que lo son:
En la industria se ha popularizado el término shift-left testing para describir este desplazamiento de las actividades de testing hacia la izquierda del timeline del proyecto. La idea es simple: no esperes a que el código esté listo para empezar a buscar problemas.
Hay escenarios que se repiten en prácticamente todos los equipos de desarrollo.
El primero es el requisito mal definido que nadie cuestiona. El product owner escribe una historia de usuario, el equipo la implementa, QA la prueba contra la historia y todo pasa. Pero cuando llega a producción, los usuarios se quejan porque el comportamiento no es el que esperaban. El requisito era técnicamente correcto pero funcionalmente incompleto. Si alguien con mentalidad de testing hubiera revisado ese requisito antes del desarrollo, habría detectado la ambigüedad en minutos.
El segundo es el bug que se descubre en la integración. Dos equipos desarrollan sus módulos por separado, cada uno con sus tests unitarios pasando al 100 %. Cuando integran, descubren que ambos asumieron cosas distintas sobre el formato de un campo. Semana y media de retrabajo. Una sesión de revisión del contrato de la API durante la fase de diseño habría costado una hora.
Y luego está el clásico: el hotfix de viernes. Producción se rompe, hay que parchear a toda prisa, el parche introduce una regresión que se descubre el lunes, y la semana empieza con otro hotfix. He visto esta cadena demasiadas veces. Casi siempre se puede rastrear hasta una decisión o un requisito que nadie validó a tiempo.
El error más frecuente es tratar el testing como una fase que viene después del desarrollo, no como una actividad que lo acompaña desde el principio. Cuando el testing solo empieza cuando el código está “listo”, ya llegas tarde. Los defectos que podrían haberse evitado con una revisión de requisitos ahora requieren cambios de código, actualizaciones de tests y posiblemente migraciones de datos.
Otro error habitual es confundir testing temprano con tests unitarios. Los tests unitarios son valiosos, pero son solo una parte. Puedes tener una cobertura unitaria excelente y seguir descubriendo defectos graves en producción si nadie revisó los requisitos, si no hay tests de integración o si el testing exploratorio brilla por su ausencia.
También nos encontramos con equipos que excluyen a QA de las fases tempranas porque “aún no hay nada que probar”. Esta mentalidad es costosa. QA no necesita código para empezar a aportar valor, ya que puede revisar documentación, identificar riesgos, preparar estrategias de testing y cuestionar supuestos antes de que se conviertan en código.
Por último, hay equipos que subestiman el coste de los defectos tardíos porque no lo miden. Si no llevas un registro de cuánto tiempo dedicáis a hotfixes, investigación de bugs en producción y retrabajo, es fácil pensar que no es tanto. Cuando empiezas a medirlo, los números suelen asustar.
La medida con mayor impacto inmediato es invitar a QA a las sesiones de refinamiento y planificación. No como oyente, sino como participante activo que cuestiona los requisitos, identifica escenarios no contemplados y propone criterios de aceptación concretos. En equipos donde he visto esta práctica bien implementada, la tasa de defectos que llegan a producción baja de forma notable en pocas semanas.
Herramientas como ESLint, SonarQube o los linters específicos de cada lenguaje detectan categorías enteras de bugs antes de que el código se ejecute por primera vez. Configúralas en el pipeline de CI para que se ejecuten en cada pull request. No sustituyen a los tests, pero eliminan una capa de errores triviales que no deberían consumir tiempo de revisión humana.
No hace falta ser un purista del TDD para beneficiarse de escribir tests pronto. Incluso si no sigues el ciclo rojo-verde-refactor al pie de la letra, escribir al menos los tests de los caminos críticos antes de dar una tarea por completada cambia la forma en que piensas sobre el código. Te obliga a considerar los edge cases mientras aún tienes el contexto fresco, no dos semanas después cuando ya has pasado a otra cosa.
Antes de empezar a implementar una funcionalidad compleja, dedica treinta minutos a revisar el diseño técnico con una checklist básica de riesgos: puntos de fallo, dependencias externas, volúmenes de datos esperados, casos límite. No es necesario un documento formal, ya que una pizarra y la checklist bastan. He visto sesiones de media hora evitar semanas de retrabajo.
Si tu proyecto no tiene un pipeline de CI ejecutando tests automáticamente en cada push, esa es la primera inversión que deberías hacer. No necesitas una suite completa para empezar: incluso un smoke test que verifique que la aplicación arranca correctamente ya aporta valor. A partir de ahí, cada test que añadas refuerza la red de seguridad.
La clave es que los tests se ejecuten de forma automática y que un fallo bloquee el merge. Si los tests existen pero nadie los mira, es como tener una alarma de incendios desconectada.
El testing temprano no es un coste adicional, es una inversión que reduce el coste total del desarrollo. Cada hora dedicada a revisar requisitos, cuestionar diseños y escribir tests pronto son muchas horas ahorradas en debugging, hotfixes y retrabajo posterior.
El cambio de mentalidad es sencillo pero potente: deja de tratar el testing como la última parada antes de producción y empieza a tratarlo como una actividad continua que acompaña al desarrollo desde la primera conversación sobre una funcionalidad.
Si tuviera que elegir una sola acción para esta semana, sería esta: revisa la próxima historia de usuario que entre en tu sprint antes de que empiece el desarrollo. Léela con ojos de QA, busca lo que no dice, lo que asume y lo que podría salir mal. Ese ejercicio de treinta minutos puede ahorrarte días de trabajo después.
Los scripts E2E necesitan datos sensibles —tokens de API, credenciales, URLs privadas— sin que aparezcan en el código. En JMO Labs hemos añadido variables de script con modo privado: se inyectan automáticamente, se enmascaran en los logs y se acceden con una sintaxis limpia.

Los tests E2E se rompen con cada cambio de interfaz. En JMO Labs construimos un pipeline de 5 fases con IA que planifica, ejecuta, repara selectores, diagnostica fallos y verifica resultados de forma autónoma. La caché de selectores hace que cada ejecución sea más rápida que la anterior.

Playwright no es solo para tests E2E. En JMO Labs lo usamos como motor completo: 9 fases de comprobación, localizador de 9 estrategias con self-healing, grabación de vídeo, testing responsive con viewports reales y accesibilidad con axe-core.