⚡ 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.
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.
Herramienta
Rol en el flujo SDD
GitHub Spec Kit
Genera proposal, spec, plan y tasks en Markdown
AWS Kiro
IDE con specs y “project constitution”
BMAD
Framework multi-agente con roles y documentos
OpenSpec
Especificaciones 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
Regreso a Cascada (Waterfall): se decide toda la arquitectura al inicio, justo cuando menos se conoce el problema.
Desarrollo por capas horizontales: primero toda la base de datos, luego la API, luego el frontend, al final los scripts de carga.
Nada funciona hasta el final: sin capas completas no hay nada interactivo que validar.
Revisión solo leyendo texto: se auditan miles de líneas estáticas en vez de probar software real.
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)
Rol
Quién
Responsabilidad
Driver
IA
Escribe código rápido siguiendo el plan
Navigator
Humano
Diseñ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
Red: se escribe el test que falla.
Green: la IA escribe el código mínimo para pasarlo.
Commit: se congela el estado en Git.
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).
Skill
Función
/backlog
Convierte una idea en historias de usuario atómicas
/story
Selecciona una historia y define criterios de aceptación (Given/When/Then) + plan mínimo
/pair
Ejecuta 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
Escenario
Por qué SDD aporta
Contra el vibe coding caótico
Un Project Constitution o doc de arquitectura funciona como ancla de memoria entre sesiones y evita contratos de API rotos
Specs vivas
Bien aplicado, SDD no es contrato estático: la especificación evoluciona con la implementación (postura de Martin Fowler / Kiro)
Agentes asíncronos
Background agents que resuelven issues de noche no pueden hacer pair programming en tiempo real; necesitan criterios de aceptación estrictos
Proyectos medianos/grandes
La 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.