¿QUÉ ES EL SPEC DRIVEN DEVELOPMENT (SDD)?

El Spec Driven Development, o Specification-Driven Development, es una metodología de desarrollo de software que consiste en escribir primero una especificación detallada, el "spec" antes de generar código, y usar esa especificación como fuente principal de verdad (source of truth). Es popular desde 2025 con el auge de los agentes de IA como Claude Code, GitHub Copilot, Cursor, etc..

Idea principal

En lugar de hacer Vibe Coding, escribir código directamente con IA de forma improvisada, se crea un documento claro y estructurado que describe qué debe hacer el sistema, y luego se deja que la IA genere el código basado en esa spec. El specmanda. El código es un derivado.

¿Qué debe contener un buen Spec?

Un buen spec suele incluir:
  • Objetivo y motivación del feature
  • Requisitos funcionales
  • Comportamiento esperado (happy path + edge cases)
  • Constraints técnicas
  • Criterios de aceptación / verificación
  • Desglose de tareas
  • Ejemplos concretos (inputs → outputs)
Normalmente se escribe en Markdown.

Ejemplo de un fichero con las especificaciones

Normalmente este fichero se suele llamar "AGENTS.md" y es el documento que detalla exclusivamente los roles, objetivos y herramientas de los agentes de IA del sistema.
# agents.md - Sistema de Gestión de Tareas (TaskFlow)

## 1. Descripción del Proyecto
TaskFlow es una API REST + panel simple para gestión de tareas personales y de equipo.
Los usuarios pueden registrarse, crear proyectos, asignar tareas, cambiar estados y recibir notificaciones básicas.

Objetivo principal: Aprender y aplicar buenas prácticas de PHP moderno, arquitectura limpia y desarrollo con IA.

## 2. Stack Tecnológico
- PHP 8.3+
- Composer
- MySQL 8
- PDO (sin ORM)
- JWT para autenticación
- PHPUnit para testing
- Estructura tipo MVC + Services
- Servidor: PHP built-in o Apache/Nginx
- Frontend: Ninguno por ahora (solo API). Más adelante se podrá añadir.

## 3. Estructura de Carpetas
taskflow/
├── public/
│   └── index.php
├── src/
│   ├── Controllers/
│   ├── Models/
│   ├── Services/
│   ├── Middleware/
│   └── Helpers/
├── config/
│   └── database.php
├── database/
│   └── migrations/
├── tests/
├── vendor/
├── .env
├── composer.json
└── agents.md

## 4. Convenciones de Código
- PSR-12
- Tipado estricto (`declare(strict_types=1);`)
- Nombres en inglés para clases, métodos y variables
- Comentarios en español solo cuando sea necesario
- Un controlador por recurso
- Toda la lógica de negocio va en Services
- Nunca lógica de negocio en Controllers ni Models
- Usar prepared statements siempre
- Respuestas JSON estandarizadas:
  json
  {
    "success": true|false,
    "message": "...",
    "data": {}
  }

Plan de ejecución o Artifacts

Decirle a la IA que lea las reglas del juego del fichero "AGENTS.md". Antes de escribir una sola línea de código la IA genera un plan de ejecución. En proyhects grandes se suele pedir que vaya desarrollando el código por las fases especificadas en el fichero "AGENTS.md".

Tool Calling

Con el plan de ejecución aprobado, el agente se pone a trabajar en segundo plano.

Código Generado y Desplegado

El código ya está generado y es funcional. Los archivos quedan listos en el espacio de trabajo, por ejemplo, con arquitectura MVC, código limpio y comentarios. La IA presenta el código final junto con instrucciones de cómo ejecutarlo o testearlo. El documento "AGENTS.md" original se ha materializado en proyecto real.

Ventajas del Spec Driven Development

  • Mejor calidad y menos errores
  • Código más mantenible
  • Fácil onboarding de nuevos desarrolladores
  • La documentación nunca se queda obsoleta (porque el spec es la documentación)
  • Ideal para proyectos medianos y grandes
  • Funciona muy bien combinado con PHPUnit, PHPSpec, Laravel, etc.

En PHP / Laravel

Se puedes aplicar SDD perfectamente
  • :Escribir el spec de un nuevo feature (ej: sistema de facturación con IA)
  • Se pasa a Claude o Grok
  • Genera controladores, servicios, tests, etc.
  • Revisar y ajustar el spec cuando el requisito cambia
Usar PHPSpec para PHP