TDD is dead. Long live testing. (Une contre-argumentation point à point à l'article phare de David Heinemeier Hansson, détracteur du Test-driven development)
Mathieu Eveillard publica en su blog personal el 7 de diciembre de 2022 (última actualización el 17 de marzo de 2025) una contraargumentación punto por punto al célebre ensayo de David Heinemeier Hansson (DHH) *"TDD is dead.
#Mathieu Eveillard#TDD#Test-driven development#contraargumentación a DHH#David Heinemeier Hansson#TDD is dead long live testing 2014#distinción Test-first vs Test-driven development#tests unitarios de bajo nivel
Mathieu Eveillard publica el 7 de diciembre de 2022 (última actualización el 17 de marzo de 2025) en su blog personal una contraargumentación punto por punto al célebre ensayo de David Heinemeier Hansson (DHH) "TDD is dead. Long live testing." (2014). Artículo categorizado craft / best-of.
Distinción crucial que a DHH se le escapa según Eveillard: Test-first (escribir todos los tests antes de cualquier código) frente a Test-Driven Development (los tests me guían en la escritura del código, cada vez escribo un fragmento de código en reacción a un nuevo test). DHH en realidad critica el Test-first llamándolo TDD — una confusión que "oculta una forma de programar completamente distinta".
Tres refutaciones: (1) TDD as hammer to beat down the nonbelievers — Eveillard concede el punto deontológico pero redefine el "buen código" como tests unitarios de grano fino, ubicados junto al código, una red de seguridad; (2) Rebalance from unit to system — TDD no dice nada sobre los tests de sistema y no dice que no haya nada fuera de TDD; los tests de sistema no sustituyen a los tests unitarios (una declaración de la renta probada de extremo a extremo = absurdo); pirámide de tests — los tests unitarios para un feedback de milisegundos + detección temprana de bugs; (3) Horrendous monstrosities of architecture (service objects, command patterns) — Eveillard no observa estos efectos en programación funcional, por lo que es atribuible a la POO, no al TDD.
Conclusión equilibrada: "TDD is not a religion, it's a tool." TDD es especialmente adecuado para el código de dominio (el núcleo funcional de un bounded context, el core del hexágono) — motores de cálculo, reglas de negocio de grano fino, casos límite por doquier — es decir "30% del código base como máximo". Menciona la Law of the Instrument (si la herramienta no ayuda, es porque has caído en la trampa del martillo).
Relevancia para el corpus de veille de IA: un artículo de craft ajeno al corpus de IA en sentido estricto pero que resuena con Kent Beck (Vibe Coding vs TDD 2024-10 + Augmented Coding 2025-06), la atrofia del músculo de la escritura de Frizzo, la Cognitive Surrender de Osmani (PRs limitados a 100 líneas + tiempo de teclado en solitario), Lattice (grano fino átomos/moléculas). Convergencia ética en torno a "herramienta, no religión" con Karpathy (jagged intelligence), DORA ("all models are wrong but useful"), Talisman ("the work cannot be skipped"). Convergencia de alcance limitado con el 35-40% greenfield vs ≤10% brownfield de Stanford y el Frontend > Backend > Infra > Research de Ng.
Para usar en sesiones internas de formación en craft, debates de equipo sobre TDD, articulación con el corpus de agentes de codificación 2026, fuente de un aforismo sintético.
Puntos clave
Fecha / fuente.7 de diciembre de 2022 (inicial), 17 de marzo de 2025 (última actualización). Blog personal mathieueveillard.com. Categorías: craft, best-of.
Objetivo. DHH, "TDD is dead. Long live testing." (RailsConf 2014, publicación de Signal v Noise).
Tesis crucial.TDD is not a religion, it's a tool. Y DHH en realidad critica el Test-first, no el TDD. ### La distinción crucial de Eveillard | Concepto | Definición | |---------|-----------| | Test-first | Escribo todos los tests antes de escribir una sola línea de código | | Test-Driven Development | Los tests me guían en la escritura del código — cada vez escribo un fragmento de código en reacción a un nuevo test | > "Es una lástima que esta confusión nunca se aclare, porque oculta una forma de programar completamente distinta." ### Las 3 refutaciones punto por punto #### (1) "TDD as a hammer to beat down the nonbelievers"DHH: TDD usado como un martillo para señalar a los no creyentes, para declararlos poco profesionales. Eveillard concede: no tiene sentido señalar con el dedo, contrasta con la humildad del artesano. Pero redefine el "buen código":
Más allá de la ausencia de bugs;
Tests unitarios. que documentan el comportamiento en el nivel más bajo;
Ubicados junto al. código;
Red de seguridad. — "Cuanto más fina es la malla, mejor se evitan las regresiones". #### (2) "Rebalance the testing spectrum from unit to system"DHH: desplazamiento de los tests unitarios (con mocks) hacia los tests de sistema. Eveillard responde:
TDD no prohíbe nada más allá de los tests unitarios.
Los tests de sistema no sustituyen a los tests unitarios (una declaración de la renta probada de extremo a extremo = absurdo).
Pirámide de tests. — cada tipo aporta su propio valor:
Tests unitarios = feedback de milisegundos → guía la escritura del código mediante TDD;
Detección temprana de bugs → menor coste. Sobre la arquitectura: "horrendous monstrosities (service objects, command patterns)" — Eveillard no observa estos efectos en programación funcional, por lo que es atribuible a la POO, no al TDD. #### (3) "I do not write software test-first"DHH: utiliza "Test first" aunque el título anuncia TDD. Eveillard señala la confusión semántica entre Test-first y TDD como el fallo fundamental del argumento de DHH. ### El alcance razonable del TDD > "TDD es especialmente adecuado para el código de dominio, el núcleo funcional de un bounded context. El core del hexágono, el core del reactor. Un motor de cálculo, reglas de negocio de grano fino, casos límite por doquier. Ahí, no sé cómo hacerlo si no es con TDD. Pero, al final, esto solo representa una pequeña parte del código base, un 30% como máximo." | Código | ¿TDD relevante? | |------|----------------| | Dominio / reglas de negocio / motor de cálculo | CLARAMENTE SÍ | | Código pegamento / orquestación / IO | Menos | | UI / boilerplate de framework | No es necesario | | Estimación de Eveillard | 30% del código base como máximo | ### Conexión con el corpus de veille #### Relevancia para el corpus de IA / agentes de codificación 2025-2026 El artículo es de 2022 (por tanto, anterior a la explosión de los agentes de codificación) pero resuena con los debates actuales:
Kent Beck — Vibe Coding vs TDD. (2024-10-17): Beck observa que el vibe coding y el TDD no son mutuamente excluyentes — TDD sigue siendo relevante para el código de dominio, exactamente la postura de Eveillard.
Beck — Augmented Coding Beyond Vibes. (2025-06-25): la postura del "augmented coding" se apoya en guardrails (tests) que el TDD proporciona de forma natural.
Frizzo.Year With Claude Code (2026-05-05): "writing muscle atrophy" — mantener una práctica de TDD es precisamente un antídoto contra la atrofia de la práctica manual.
Osmani Cognitive Surrender. (2026-05-05): "PRs de ~100 líneas como máximo", tiempo de teclado en solitario — converge con la idea de Eveillard de que el TDD mantiene al desarrollador dentro de la práctica metodológica del oficio.
Lattice. (2026-05-05): Átomos / Moléculas / Refiners — grano fino, exactamente lo que fomenta el TDD. #### Convergencia "herramienta, no religión"
Eveillard."TDD is not a religion, it's a tool."
Karpathy. (2026-04-29): "jagged intelligence" — una herramienta con límites de eficacia.
DORA ROI 2026. (2026-04-21): "all models are wrong but useful" — humildad metodológica.
Talisman Ontology Pipeline Refresh. (2026-05-04): "the work cannot be skipped" — la metodología como herramienta disciplinaria.
→ Convergencia ética: rechazo tanto del dogmatismo COMO del rechazo de una herramienta metodológica. #### Convergencia "alcance limitado"
Eveillard. TDD = 30% del código base como máximo (código de dominio).
Stanford. (citado por DORA): 35-40% de productividad greenfield vs ≤10% brownfield — distribución desigual según el contexto.
Ng The Batch #350. (2026-04-24): Frontend > Backend > Infra > Research — aceleración diferencial según el contexto.
→ Convergencia: ninguna herramienta metodológica es universalmente aplicable — siempre hay que evaluar el alcance pertinente. ### Limitaciones a señalar
Artículo ajeno al corpus de IA. en sentido estricto — centrado en craft / TDD histórico. Relevante de forma indirecta.
Sin cifras empíricas. — argumentación conceptual, no un estudio.
Sin conexión con los agentes de codificación. en la versión de 2025 (la actualización de marzo de 2025 no parece haber incorporado el debate sobre IA/agentes).
El alcance del 30% es una estimación no fundamentada por Eveillard — discutible según el contexto (un compilador podría ser 80% dominio).
Marco fuertemente orientado hacia FP/hexagonal. — puede parecer dogmático para desarrolladores muy arraigados en POO/Rails.
No aborda. el debate sobre el impacto de CI/CD en la estrategia de testing que otros autores (DORA en particular) consideran crítico. ### Para usar en
Sesiones internas de formación en craft / TDD. material didáctico de referencia en francés.
Debates de equipo sobre TDD. argumentación estructurada para aclarar Test-first vs TDD.
Conexión con el corpus de agentes de codificación 2026. situar los debates actuales (vibe coding, agentes, IA aumentada) dentro de la continuidad histórica de los debates de craft.
Fuente. el aforismo "TDD is not a religion, it's a tool" — una fórmula sintética utilizable.
Afirmaciones atribuidas
el TDD no es una religión, es una herramienta
— Mathieu Eveillard
DHH critica Test-first llamándolo TDD
— Mathieu Eveillard
las pruebas de sistema no reemplazan las pruebas unitarias
— Mathieu Eveillard
el código de dominio relevante para TDD representa como máximo el 30% del codebase
— Mathieu Eveillard
El grafo de conocimiento extraído de esta ficha — 12 entidades, 16 relaciones.
En este grafo :Mathieu Eveillard · David Heinemeier Hansson (DHH) · Test-Driven Development · Test-first · "Le TDD n'est pas une religion, c'est un outil" · Pyramide de tests · Code domaine / bounded context / cœur hexagone · Loi de l'Instrument · 30% codebase max TDD · Article DHH 2014 "TDD is dead" · craft / artisanat logiciel · Articulation TDD / coding agents 2026