Tabla de Contenidos

Spec-driven development

Spec-driven development (SDD) es escribir qué tiene que hacer el software, y en qué consiste estar hecho, antes de que se escriba el código, y dejarlo escrito en un documento que vive en el repositorio y del que se deriva todo lo demás.

El cambio respecto a lo de siempre no está en que haya un documento: está en quién lo usa. Una especificación clásica se escribía, se aprobaba y se olvidaba, y la verdad acababa estando en el código. En SDD la especificación es la entrada de trabajo del agente: si no está escrita, no se implementa; y cuando el código y la especificación no concuerdan, se corrige la especificación primero.


1. El problema que intenta resolver

Con agentes de código, escribir código ha dejado de ser lo caro. Lo caro es decir bien qué hay que hacer. El cuello de botella se ha movido, y las prácticas de trabajo todavía no.

Los síntomas son siempre los mismos:

Todo eso es la misma causa: la ambigüedad sobrevive hasta el código, y en el código cuesta mil veces más quitarla.

Dónde se descubre el error Lo que cuesta corregirlo
En los requisitos Cambiar una frase
En el diseño Cambiar un párrafo y un diagrama
En las tareas Reordenar una lista
En el código Rehacer el trabajo, y normalmente también los tests
En producción Lo anterior, más el incidente

SDD no inventa nada de esto: es la misma vieja lección de que el error es más barato cuanto antes se pilla. Lo que cambia es que antes no compensaba escribirlo todo —escribir la especificación costaba una parte importante de lo que costaba programarlo— y ahora sí, porque implementar se ha vuelto barato y especificar es lo único que sigue costando lo mismo.


2. En qué consiste

El trabajo se parte en fases, cada una produce un documento, y entre fase y fase hay una persona que aprueba.

peticion, normalmente una fraserequisitos: el QUEaprobacion humanadiseno: el COMOaprobacion humanatareas: el plan de ejecucionimplementacionverificacionnola implementacion desmiente la specsicorregir la especificacionentregado

Documento Qué contesta Lo que no lleva
requirements.md Qué tiene que pasar, para quién y cómo se comprueba Soluciones técnicas. Aquí no se elige base de datos
design.md Cómo se va a hacer: arquitectura, modelo de datos, contratos, decisiones y las alternativas descartadas Requisitos nuevos colados por la puerta de atrás
tasks.md El plan: pasos pequeños, ordenados y verificables uno a uno Nada que no salga de los dos documentos anteriores

A esos tres se añade la memoria del proyecto —lo que vale para todas las funcionalidades y no para una: convenciones, arquitectura, reglas del negocio—, que es lo que evita repetir el mismo contexto en cada especificación.

La separación entre el QUÉ y el CÓMO es la que más se incumple y la que más rinde: mezclar la solución en los requisitos cierra el abanico antes de haber mirado, y es lo que convierte una revisión de requisitos en una discusión de implementación.


3. Por qué encaja tan bien con los agentes

Y una consecuencia que no es evidente: la especificación es reutilizable. El mismo documento sirve para volver a generar el código con otro modelo, para reconstruir una parte que salió mal o para retomar dentro de seis meses. Lo que se ha capturado es la intención, y la intención no caduca cuando cambias de herramienta.

4. Lo que SDD no es


5. Cuándo compensa

Compensa No compensa
Funcionalidad que toca varios ficheros Un arreglo de una línea
Trabajo que dura más de una sesión Un script de usar y tirar
Más de una persona implicada Un prototipo que se va a tirar
Dominio con reglas de negocio que no se deducen del código Cambios mecánicos y evidentes
Código que va a vivir años Explorar: cuando todavía no sabes qué quieres

La regla corta: si el encargo cabe en una frase sin ambigüedad, escribirlo dos veces es ceremonia. Y si no sabes lo que quieres, primero se explora —a mano, con prototipos que se tiran— y se especifica después, con lo aprendido; especificar no es un método para averiguar qué quieres.


6. Un ejemplo de por qué hace falta

La petición, tal y como llega:

hay que poder exportar los pedidos

Ahí hay cinco decisiones escondidas, y el agente va a tomar las cinco por su cuenta sin avisar:

Contestarlas cuesta cinco minutos por delante. Descubrirlas por detrás cuesta rehacer la funcionalidad, y encima con la sensación de que el agente «ha hecho algo raro» cuando lo que hizo fue rellenar los huecos que le dejamos.

Escrito como requisito queda comprobable, que es lo único que le pedimos:

Cuando un usuario solicita la exportación de pedidos, el sistema DEBERÁ
generar un fichero CSV con los pedidos visibles para su rol.
Si la consulta supera los 10.000 pedidos, el sistema DEBERÁ generarlo
en segundo plano y avisar por correo al terminar.
Si no hay ningún pedido, el sistema DEBERÁ informar de ello y no
generar ningún fichero.

Esa forma de escribir —cuando pasa esto, el sistema deberá hacer esto otro— es el formato EARS, y no es un capricho de estilo: obliga a nombrar la condición que dispara cada comportamiento, que es exactamente donde se esconden los casos que nadie había pensado. Se ve en detalle en el tema 11.


7. Resumen

Cómo se hace esto con herramientas concretas —OpenSpec, GitHub Spec Kit, BMAD y Kiro— es el tema 11.