Introducción a Spec-Driven Development
🎓 Spec-Driven Development: La Metodología
👨🏫 Del Investigador: Como investigador en desarrollo de software, he analizado múltiples metodologías de desarrollo. La evidencia empírica sugiere que SDD no es burocracia, sino ingeniería sistemática aplicada a la generación de código con IA.
💭 Mentalidad de Investigador: “Según los principios de ingeniería de software establecidos, la especificación precede a la implementación. La literatura académica respalda este enfoque.”
🤔 El Problema con la IA
El Patrón Típico (Incorrecto)
Usuario: "Agrega autenticación a mi app"
IA: [genera 500 líneas de código]
Usuario: "Eso no es lo que quería..."
IA: [genera otras 500 líneas]
Usuario: "Ahora está mejor pero falta..."
Problemas:
- ❌ Sin contexto claro → interpretaciones múltiples
- ❌ Sin trazabilidad → ¿por qué esta decisión?
- ❌ Sin verificación → ¿cumple los requisitos?
- ❌ Sin rollback → ¿cómo deshacer?
El Patrón SDD (Correcto)
Usuario: /sdd:new add-user-authentication
IA: [crea propuesta.md con intent, scope, approach]
Usuario: [revisa y aprueba propuesta]
IA: [crea spec.delta.md con requisitos]
Usuario: [revisa y aprueba specs]
IA: [crea design.md con arquitectura]
Usuario: [revisa y aprueba diseño]
IA: [crea tasks.md desglosado]
Usuario: [aprueba tareas]
IA: [implementa tarea por tarea, verificando]
🧠 ¿Qué es SDD?
Spec-Driven Development es una metodología donde:
- Las especificaciones son primero-clase: Tan importantes como el código
- El workflow es estructurado: Fases definidas con artefactos
- La trazabilidad es automática: Cada cambio tiene historial
- La IA es guiada: Contexto claro en cada interacción
Analogía: Arquitectura de Edificios
| Fase | Arquitectura | SDD |
|---|---|---|
| Concepto | Boceto inicial | proposal.md |
| Planos | Blueprints detallados | spec.delta.md |
| Ingeniería | Cálculos estructurales | design.md |
| Construcción | Lista de tareas | tasks.md |
| Ejecución | Obra | Implementación |
| Inspección | Certificación | verification.md |
| Archivo | Planos finales | specs/*.spec.md |
🔄 Las 8 Fases de SDD
1. INIT - Inicialización
Propósito: Preparar el proyecto para SDD
Artefacto: openspec/config.yaml
schema: spec-driven
context: |
Tech stack: Node.js, Express
Architecture: REST API
Testing: Jest
rules:
specs:
- Use Given/When/Then format
- Use RFC 2119 keywords (MUST, SHALL)Comando: /sdd:init
2. EXPLORE - Exploración (Opcional)
Propósito: Investigar antes de comprometerse
Artefacto: Exploración inline o exploration.md
Cuándo usar:
- Requisitos poco claros
- Múltiples opciones de implementación
- Necesitas entender código existente
Comando: /sdd:explore <topic>
3. PROPOSE - Propuesta
Propósito: Definir QUÉ y POR QUÉ
Artefacto: openspec/changes/NNN-name/proposal.md
# Proposal: Add Health Endpoint
## Intent
Add /health for Kubernetes health checks
## Scope
In scope: GET /health, JSON response
Out of scope: Database checks, auth
## Approach
Add route in app.js, minimal implementation
## Risks
Low - simple endpoint, no side effects
## Rollback
Remove route if issues ariseComando: /sdd:new <name>
4. SPEC - Especificaciones
Propósito: Definir comportamientos esperados
Artefacto: openspec/changes/NNN-name/spec.delta.md
# Spec Delta: Add Health Endpoint
## Requirements
### REQ-1: Endpoint Availability
The system SHALL provide GET /health.
MUST respond within 100ms.
## Scenarios
### SCENARIO-1: Healthy Response
**Given** the API is running
**When** GET /health is requested
**Then** response is 200 OK
**And** body contains { "status": "ok" }Comando: /sdd:spec
Keywords RFC 2119:
| Keyword | Significado |
|---|---|
| MUST | Requisito obligatorio |
| SHALL | Comportamiento requerido |
| SHOULD | Recomendado |
| MAY | Opcional |
5. DESIGN - Diseño Técnico
Propósito: Definir CÓMO implementar
Artefacto: openspec/changes/NNN-name/design.md
# Design: Add Health Endpoint
## Architecture Decisions
### ADR-1: Inline Route
**Context**: Health check is simple
**Decision**: Add directly in app.js
**Consequences**: Minimal change, easy to test
## Technical Approach
### Components Affected
- src/app.js: Add health route
### Sequence Diagram
Client -> API: GET /health
API -> Client: 200 { status, timestamp }Comando: /sdd:plan o /sdd:design
6. TASKS - Tareas
Propósito: Desglosar en unidades completables
Artefacto: openspec/changes/NNN-name/tasks.md
# Tasks: Add Health Endpoint
## Phase 1: Implementation
- [ ] 1.1 Add GET /health route
- [ ] 1.2 Return JSON with status
## Phase 2: Testing
- [ ] 2.1 Add Jest test
- [ ] 2.2 Test 200 response
- [ ] 2.3 Test JSON formatReglas de tareas:
- ✅ Completable en una sesión
- ✅ Número jerárquico (1.1, 1.2)
- ✅ Agrupadas por fase
- ✅ Incluyen testing
Comando: /sdd:tasks
7. APPLY - Implementación
Propósito: Ejecutar las tareas
Comando: /sdd:implement [task-number]
Proceso:
- Lee specs y design
- Carga skills relevantes (react-19, typescript, etc.)
- Implementa siguiendo el diseño
- Marca tarea completada
- Continúa con siguiente tarea
8. VERIFY - Verificación
Propósito: Validar contra especificaciones
Artefacto: openspec/changes/NNN-name/verification.md
# Verification: Add Health Endpoint
## Requirements Coverage
| Requirement | Status | Notes |
|-------------|--------|-------|
| REQ-1 | ✅ PASS | Implemented |
## Scenario Results
| Scenario | Status | Evidence |
|----------|--------|----------|
| SCENARIO-1 | ✅ PASS | tests/health.test.js |
## Test Results
All 3 tests passingComando: /sdd:verify
9. ARCHIVE - Archivado
Propósito: Completar y merge specs
Comando: /sdd:archive
Proceso:
- Verifica tareas completas
- Merge spec.delta.md → specs/*.spec.md
- Mueve cambio a archive/
- Guarda aprendizajes en Engram
📁 Estructura de Directorios
project/
├── openspec/
│ ├── config.yaml # Config del proyecto
│ ├── specs/ # Source of truth
│ │ ├── core/
│ │ │ └── auth.spec.md
│ │ └── features/
│ │ └── health.spec.md
│ └── changes/ # Cambios activos
│ ├── 001-add-health/
│ │ ├── proposal.md
│ │ ├── spec.delta.md
│ │ ├── design.md
│ │ ├── tasks.md
│ │ └── verification.md
│ └── archive/ # Completados
│ └── 001-add-health/
└── src/ # Código
🎯 Beneficios de SDD
Para Desarrolladores
| Beneficio | Descripción |
|---|---|
| Claridad | Sabes exactamente qué construir |
| Trazabilidad | Historial de decisiones |
| Consistencia | IA sigue patrones definidos |
| Revisibilidad | Specs como contrato |
Para Equipos
| Beneficio | Descripción |
|---|---|
| Onboarding | Nuevos miembros leen specs |
| Code Review | Verificar contra specs |
| Conocimiento | Specs como documentación viva |
| Calidad | Tests derivados de scenarios |
Para Proyectos
| Beneficio | Descripción |
|---|---|
| Mantenibilidad | Specs actualizan con código |
| Onboarding | Contexto preservado |
| Rollback | Cambios documentados |
| Compliance | Auditoría disponible |
🎭 Escenario Real: Sin SDD vs Con SDD
Sin SDD
Dev: "Agrega login"
Agente: [genera código]
Dev: "No, quería OAuth"
Agente: [regenera]
Dev: "Pero falta el logout"
Agente: [agrega más código]
Dev: "Ahora hay bugs..."
[Loop infinito de correcciones]
Con SDD
Dev: /sdd:new add-oauth-auth
Agente: [crea propuesta con opciones OAuth]
Dev: [revisa, ajusta scope]
Agente: [crea specs con escenarios]
Dev: [aprueba specs]
Agente: [crea diseño con bibliotecas]
Dev: [aprueba diseño]
Agente: [implementa paso a paso]
Dev: [verifica, archiva]
[Resultado: código correcto primera vez]
🎓 Síntesis de la Investigación
- SDD es una metodología donde las especificaciones son artefactos de primera clase
- 8 fases estructuran el trabajo con IA de manera sistemática
- Cada fase produce artefactos específicos documentados
- Trazabilidad automática en cada cambio del sistema
- IA guiada reduce alucinaciones y aumenta calidad según estudios [1]
🚀 Siguiente Paso
Continúa con Módulo 1B: Context Architecture para profundizar en la arquitectura de contexto.
Módulo 1.0 | Duración: 30 min | Dificultad: 🟢 Básico
📊 Los 3 Niveles de SDD
Birgitta Böckeler (Thoughtworks) identificó tres niveles de implementación [1]:
Nivel 1: Spec-First
Spec → Implementación → Spec descartada
Características: - Specs se escriben antes del código - Sirven como guía durante la implementación - Se descartan o archivan después
Cuándo usar: - Features nuevas - Proyectos greenfield - Cambios aislados
Nivel 2: Spec-Anchored
Spec → Implementación → Spec persiste → Actualizaciones
Características: - Specs viven junto al código - Se actualizan cuando cambia la funcionalidad - Son “source of truth” persistente
Cuándo usar: - Features críticas del sistema - APIs públicas - Componentes compartidos
Nivel 3: Spec-as-Source
Spec (editado por humanos) → Código generado
Características: - Humanos SOLO editan specs - Código es generado automáticamente - Código lleva comentario // GENERATED FROM SPEC - DO NOT EDIT
Cuándo usar: - Componentes bien definidos - APIs con contratos estables - Experimental (todavía madurando)
Comparación de Niveles
| Nivel | Edición Humana | Trazabilidad | Mantenibilidad | Madurez |
|---|---|---|---|---|
| Spec-First | Código + Spec | Temporal | Media | Alta |
| Spec-Anchored | Código + Spec | Permanente | Alta | Media |
| Spec-as-Source | Solo Spec | Total | Variable | Baja |
📝 Tipos de Specs
Patrick Debois (AI Native Dev) identifica 4 tipos:
1. Specs Funcionales/Técnicos
# Feature: Health Endpoint
## Requirements
- GET /health returns 200 OK
- Response includes status and timestamp
## Acceptance Criteria
GIVEN API is running
WHEN GET /health
THEN 200 OK with { status: "ok" }Propósito: Describir QUÉ hace el sistema
2. Specs de Identidad de Agente
# Agent: Code Reviewer
## Role
You are a senior code reviewer...
## Capabilities
- Review code for patterns
- Suggest improvements
- Check security issues
## Boundaries
- DO NOT modify code directly
- ONLY suggest changesPropósito: Definir personalidad y límites del agente
3. Specs de Workflow/Tareas
# Workflow: Feature Development
## Steps
1. Create proposal
2. Write specs
3. Design architecture
4. Break into tasks
5. Implement
6. Verify
7. ArchivePropósito: Describir procesos y secuencias
4. Specs de Conocimiento/Uso
# Knowledge: Authentication Patterns
## OAuth 2.0 Flow
- Authorization Code for web apps
- PKCE for SPAs
- Client Credentials for services
## Session Management
- JWT for stateless
- Redis for statefulPropósito: Capturar conocimiento del dominio
⚠️ Desafíos de SDD
Context Window Constraints
Problema: Demasiados specs sobrecargan el contexto del LLM
Soluciones: - RAG/Context selection - Subagentes con contexto específico - AST parsing + LSP integration
Escribir Buenas Specs
Problema: Los desarrolladores no están acostumbrados a escribir requisitos precisos
Soluciones: - Templates estandarizados - Checklists de validación - Iteración basada en feedback del agente
Spec vs Memory Bank
| Memory Bank | Spec |
|---|---|
| Contexto global | Contexto específico |
| Reglas del proyecto | Requisitos de feature |
| Persistente | Temporal o persistente |
| AGENTS.md | spec.md |
🔗 Specs vs Otros Conceptos
Spec vs Prompt
Prompt: "Add a health endpoint"
→ Instrucción única, sin estructura
Spec: Documento estructurado con requisitos
→ Fuente de verdad, persistente, versionable
Spec vs Test
Test: Verifica comportamiento después
→ "¿Funciona como esperado?"
Spec: Define comportamiento antes
→ "¿Qué se espera que haga?"
SDD + TDD = Mejor juntos: 1. Spec define QUÉ 2. Tests verifican QUÉ 3. Implementación es CÓMO
🚀 Siguiente Paso
Continúa con Módulo 1B: Context Architecture para profundizar en la arquitectura de contexto.
Módulo 01 | © Diego Saavedra