⚡ SDD vs AI Pair Programming — La Crítica de Nicolás Schürmann

Tesis central

SDD no está hecho para programar; está hecho para delegar. Nicolás Schürmann (HolaMundo) sostiene que redactar especificaciones extensas antes de tocar código reintroduce el modelo Cascada, produce sobreingeniería y genera PRs imposibles de revisar.

Su alternativa: agilidad + rebanadas verticales + AI Pair Programming con TDD estricto, donde el humano navega y la IA conduce.


1. Qué es Spec-Driven Development (SDD)

Práctica donde el humano redacta o aprueba documentos Markdown extensos —propuesta, requerimientos, diseño técnico y lista de tareas— y después entrega el paquete completo a un agente autónomo para que genere el código.

HerramientaRol en el flujo SDD
GitHub Spec KitGenera proposal, spec, plan y tasks en Markdown
AWS KiroIDE con specs y “project constitution”
BMADFramework multi-agente con roles y documentos
OpenSpecEspecificaciones versionadas antes de implementar

2. La experiencia negativa que motiva la crítica

El patrón que se repite

Pides un login y recibes 3 páginas de especificación, 27 tareas y capas de abstracción —controladores, servicios, repositorios, factories— antes de tener una sola pantalla funcional.

Síntomas concretos reportados en el video:

  • Alucinación de alcance: el agente agrega campos que nadie pidió (loyalty_points, last_login_ip) e inventa funcionalidades (sistema de puntos, exportación CSV).
  • Restricciones ignoradas: el spec dice una cosa y el código hace otra.
  • Fatiga cognitiva: 15 minutos generando código contra 3 horas revisando un PR de +3.000 líneas, hasta aprobar a ciegas con un “LGTM”.

3. Los 5 problemas centrales de SDD

  1. Regreso a Cascada (Waterfall): se decide toda la arquitectura al inicio, justo cuando menos se conoce el problema.
  2. Desarrollo por capas horizontales: primero toda la base de datos, luego la API, luego el frontend, al final los scripts de carga.
  3. Nada funciona hasta el final: sin capas completas no hay nada interactivo que validar.
  4. Revisión solo leyendo texto: se auditan miles de líneas estáticas en vez de probar software real.
  5. El software evoluciona: al cerrar el ciclo, la especificación original ya no responde a lo que el usuario necesita.

La frase que resume el diagnóstico

«SDD no está hecho para programar; está hecho para delegar». Trata a la IA como un contratista al que le lanzas un pliego de requisitos, en lugar de colaborar con ella.


4. La alternativa: agilidad, rebanadas verticales y pair programming

4.1 Rebanadas verticales

En vez de completar una capa entera, se toma una funcionalidad diminuta pero completa que atraviesa DB + API + UI y entrega valor inmediato.

❌ Horizontal:  [ DB completa ] → [ API completa ] → [ UI completa ] → probar
✅ Vertical:    login (DB + API + UI) → probar → commit → siguiente historia

4.2 Historias de usuario y backlog ligero

Formato clásico: «Como [usuario], quiero [acción] para [beneficio]». Historias de 1–2 días en equipos humanos, o de pocos minutos con IA. Reordenar o descartar una línea no cuesta nada.

4.3 AI Pair Programming (Driver / Navigator)

RolQuiénResponsabilidad
DriverIAEscribe código rápido siguiendo el plan
NavigatorHumanoDiseña, decide arquitectura, vigila límites, detecta bucles y evita que la IA haga trampa en los tests

4.4 TDD estricto: Rojo → Verde → Refactor

  1. Red: se escribe el test que falla.
  2. Green: la IA escribe el código mínimo para pasarlo.
  3. Commit: se congela el estado en Git.
  4. Refactor: solo cuando hace falta (mover validación a middleware con Zod, separar rutas en archivos propios).

Control de versiones atómico

# Cada paso del ciclo deja un commit pequeño (LazyGit)
git add .
git commit -m "green: login valida credenciales"

Si la IA toca un test o alucina, salta a la vista al instante.

4.5 hola-ai: las tres skills del flujo

Repositorio: github.com/nschurmann/hola-ai — skills de agente para construir software con IA “sin soltar el timón” (XP-style).

SkillFunción
/backlogConvierte una idea en historias de usuario atómicas
/storySelecciona una historia y define criterios de aceptación (Given/When/Then) + plan mínimo
/pairEjecuta el ciclo de pair programming con TDD paso a paso

Stack de la demo: Deno + Hono + Drizzle + Zod, con tests locales.


5. ¿Tiene razón? Análisis técnico

5.1 Donde acierta de lleno

  • El “nuevo Cascada”: Kent Beck lo formuló al criticar SDD rígido — «codifica la asunción bizarra de que no vas a aprender nada durante la implementación que cambie la especificación».
  • Fatiga de revisión: PRs de 2.000–4.000 líneas superan la capacidad humana de revisión rigurosa; aparece el “LGTM” por agotamiento y con él deuda técnica oculta.
  • Sesgo de sobrearquitectura de los LLM: entrenados con repos empresariales llenos de DTOs, DAOs, repositorios y factories. Sin la restricción de «la solución más simple que pase este test», sobrediseñan por defecto.
  • Bucles cortos con TDD: driver/navigator, tests que obligan a mantenerse en verde y commits atómicos son la forma más segura de conservar la autoría intelectual del sistema.

5.2 Donde SDD sí tiene sentido

EscenarioPor qué SDD aporta
Contra el vibe coding caóticoUn Project Constitution o doc de arquitectura funciona como ancla de memoria entre sesiones y evita contratos de API rotos
Specs vivasBien aplicado, SDD no es contrato estático: la especificación evoluciona con la implementación (postura de Martin Fowler / Kiro)
Agentes asíncronosBackground agents que resuelven issues de noche no pueden hacer pair programming en tiempo real; necesitan criterios de aceptación estrictos
Proyectos medianos/grandesLa coherencia entre múltiples módulos y sesiones exige una fuente de verdad explícita

6. Conclusión

Veredicto

El diagnóstico es correcto: delegar todo el pensamiento a un agente autónomo y planificar por capas horizontales produce software inflado, caro de auditar y propenso a errores.

La propuesta —humano como Navigator, historias pequeñas, rebanadas verticales y TDD paso a paso— es una de las metodologías más maduras y sostenibles para construir con IA sin perder el control del código.

Regla práctica que se desprende: spec corta y viva para dar contexto, rebanada vertical para validar rápido, test primero para mantener el control. Ni pliego de 3.000 líneas, ni vibe coding sin freno.


7. Enlaces