<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manuel</title>
    <description>The latest articles on DEV Community by Manuel (@manu00001).</description>
    <link>https://dev.to/manu00001</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4027671%2F4e65109c-9fd0-46ba-9228-523d1b346b05.png</url>
      <title>DEV Community: Manuel</title>
      <link>https://dev.to/manu00001</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manu00001"/>
    <language>en</language>
    <item>
      <title>Spec-Driven Development (SDD): De la improvisación a la ingeniería con agentes de IA</title>
      <dc:creator>Manuel</dc:creator>
      <pubDate>Sun, 13 Sep 2026 11:48:16 +0000</pubDate>
      <link>https://dev.to/manu00001/spec-driven-development-sdd-de-la-improvisacion-a-la-ingenieria-con-agentes-de-ia-42a8</link>
      <guid>https://dev.to/manu00001/spec-driven-development-sdd-de-la-improvisacion-a-la-ingenieria-con-agentes-de-ia-42a8</guid>
      <description>&lt;p&gt;Hacer desarrollo asistido por IA hoy en día suele caer en dos extremos: o bien el llamado vibe coding (abrir el chat, tirar un prompt ambiguo y rezar para que compile), o saltar directamente a herramientas y frameworks como spec-kit u open-spec sin entender los principios de base.&lt;/p&gt;

&lt;p&gt;A partir del &lt;a href="https://github.com/mouredev/hello-sdd" rel="noopener noreferrer"&gt;curso de MoureDev&lt;/a&gt;, este artículo desglosa los fundamentos de Spec-Driven Development (SDD): qué es, sus niveles de adopción, sus artefactos clave, la sintaxis EARS y una guía práctica paso&lt;br&gt;
a paso.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. ¿Qué es SDD y por qué surge?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  El problema del Vibe Coding
&lt;/h3&gt;

&lt;p&gt;El vibe coding es fantástico para prototipar en 15 minutos: le pides a un LLM que te monte una aplicación y lo hace. Sin embargo, a medida que el proyecto crece, el enfoque colapsa por cuatro razones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pérdida y saturación de contexto: El modelo olvida decisiones previas.&lt;/li&gt;
&lt;li&gt;Alucinaciones arquitectónicas: Introduce librerías innecesarias o refactoriza código funcional sin avisar.&lt;/li&gt;
&lt;li&gt;Código espagueti: Parches sobre parches sin una visión global coherente.&lt;/li&gt;
&lt;li&gt;Falta de verificabilidad: No hay forma certera de comprobar si el modelo cumplió el 100% de lo que se le pidió.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  La solución: SDD como puente con el SDLC clásico
&lt;/h3&gt;

&lt;p&gt;Spec-Driven Development (SDD) traslada los principios del ciclo clásico de vida del software (SDLC) a la interacción con agentes de IA:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fase del SDLC&lt;/th&gt;
&lt;th&gt;Equivalente en SDD&lt;/th&gt;
&lt;th&gt;Rol de la IA y del desarrollador&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Planificación y reglas&lt;/td&gt;
&lt;td&gt;&lt;code&gt;constitution.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Define los límites técnicos y las reglas innegociables del proyecto.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Análisis de requisitos&lt;/td&gt;
&lt;td&gt;&lt;code&gt;spec.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;La IA entrevista al desarrollador para definir qué debe hacer el sistema y por qué.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diseño arquitectónico&lt;/td&gt;
&lt;td&gt;&lt;code&gt;plan.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Se define cómo se implementará la solución: módulos, datos, contratos y decisiones técnicas.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desglose del trabajo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tasks.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Se crean tareas pequeñas, preferiblemente de menos de 30 minutos, ordenadas por dependencias.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementación&lt;/td&gt;
&lt;td&gt;Ejecución tarea a tarea&lt;/td&gt;
&lt;td&gt;La IA escribe primero los tests, después el código, ejecuta las comprobaciones y se detiene al terminar la tarea asignada.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing y QA&lt;/td&gt;
&lt;td&gt;Validación contra la especificación&lt;/td&gt;
&lt;td&gt;Se audita cada requisito funcional y se comprueba qué test demuestra su cumplimiento.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mantenimiento&lt;/td&gt;
&lt;td&gt;Ciclo de cambio&lt;/td&gt;
&lt;td&gt;Todo cambio comienza actualizando la especificación, no modificando directamente el código.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Principio fundamental:&lt;/strong&gt; la IA no debe decidir por sí sola el alcance ni improvisar la arquitectura. Primero se acuerda y aprueba la especificación; después, la IA implementa bajo supervisión.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  2. Los 3 tipos de SDD: Grado de compromiso con la Spec
&lt;/h2&gt;

&lt;p&gt;Se puede clasificar el SDD según el papel que desempeña la especificación frente al código:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel de compromiso&lt;/th&gt;
&lt;th&gt;Enfoque&lt;/th&gt;
&lt;th&gt;Fuente de verdad&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bajo&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Spec-first&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El código&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medio&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Spec-anchored&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El código y la especificación sincronizados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alto&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Spec-as-source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;La especificación&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Cuanto mayor es el nivel de compromiso, más importante resulta mantener la especificación actualizada y utilizarla como referencia para diseñar, implementar y validar el sistema.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  1. Spec-First (Nivel Bajo)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Concepto&lt;/u&gt;: La especificación se redacta al inicio para alinear ideas y arrancar el desarrollo.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Comportamiento&lt;/u&gt;: Una vez que el código empieza a evolucionar, la spec se abandona y suele quedar desactualizada.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Fuente de verdad&lt;/u&gt;: El código.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Cuando se usa:&lt;/u&gt; Prototipos rápidos donde se necesita claridad inicial, pero el ciclo de vida será corto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Spec-Anchored (Nivel Medio — El estándar recomendado)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Concepto&lt;/u&gt;: La especificación acompaña al código durante toda la vida del proyecto.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Comportamiento&lt;/u&gt;: Si un requisito cambia o se añade una feature, está prohibido tocar el código directamente: primero se actualiza la spec, se aprueba el diff, se ajustan el plan y las tareas, y finalmente se implementa.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Fuente de verdad&lt;/u&gt;: El tándem Código + Specs sincronizadas.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Cuando se usa:&lt;/u&gt; Proyectos reales en producción y equipos profesionales. Es el enfoque enseñado en el curso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Spec-as-Source (Nivel Alto / Radical)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Concepto&lt;/u&gt;: La especificación es el programa.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Comportamiento&lt;/u&gt;: El desarrollador no edita el código ejecutable; este se compila o regenera automáticamente por la IA a partir de la spec.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Fuente de verdad&lt;/u&gt;: La Spec exclusivamente.&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Cuando se usa:&lt;/u&gt; Sistemas formales, DSLs (Domain Specific Languages) o flujos de generación determinista de
pipelines.
──────
## 3. Las piezas y artefactos del ecosistema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para trabajar con SDD sin herramientas complejas, solo necesitas una estructura ordenada de archivos Markdown:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mi-proyecto/
├── AGENTS.md                  # Contexto, herramientas y reglas operativas del agente
├── docs/
│   └── constitution.md        # Principios innegociables del proyecto
└── specs/
    └── 001-nombre-feature/
        ├── spec.md            # Qué y Por qué (criterios en EARS)
        ├── plan.md            # Cómo (arquitectura, datos, decisiones técnicas)
        └── tasks.md           # Desglose de tareas con checkboxes y criterios de fin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  1. Constitución (constitution.md)
&lt;/h3&gt;

&lt;p&gt;Se escribe una sola vez por proyecto. Son directrices cortas (máx. 15 líneas) e innegociables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Límites del stack (ej.: "Python 3.12+ y solo biblioteca estándar").&lt;/li&gt;
&lt;li&gt;Separación de responsabilidades (ej.: "Lógica separada de la CLI").&lt;/li&gt;
&lt;li&gt;Política de tests (ej.: "Ninguna tarea avanza con tests en rojo").&lt;/li&gt;
&lt;li&gt;Regla de oro: "La spec manda. Si algo no está especificado, no se programa".&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Contexto del Agente (AGENTS.md)
&lt;/h3&gt;

&lt;p&gt;El archivo donde el agente consulta los comandos de ejecución (pytest, linters), el estilo del código y la regla de parada obligatoria tras cada tarea.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. La Especificación (spec.md)
&lt;/h3&gt;

&lt;p&gt;Contiene únicamente el QUÉ y el POR QUÉ. Prohibido hablar de nombres de archivos, bases de datos o librerías aquí.&lt;br&gt;
Incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contexto y objetivo.&lt;/li&gt;
&lt;li&gt;Historias de usuario.&lt;/li&gt;
&lt;li&gt;Requisitos Funcionales (RF) numerados usando notación EARS.&lt;/li&gt;
&lt;li&gt;Casos límite (duplicados, cadenas vacías, archivos corruptos).&lt;/li&gt;
&lt;li&gt;Fuera de alcance (lo que explícitamente NO se construirá en esta iteración).&lt;/li&gt;
&lt;li&gt;Criterios de finalización y dudas abiertas ([NECESITA ACLARACIÓN]).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  4. El Plan Técnico (plan.md)
&lt;/h3&gt;

&lt;p&gt;Contiene el CÓMO. Traduce los RFs en ingeniería:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Módulos y responsabilidades.&lt;/li&gt;
&lt;li&gt;Estructura y esquema del modelo de datos.&lt;/li&gt;
&lt;li&gt;Algoritmos clave en pseudocódigo.&lt;/li&gt;
&lt;li&gt;Decisiones técnicas justificadas y la alternativa que fue descartada.&lt;/li&gt;
&lt;li&gt;Estrategia de tests (qué y cómo se va a testear).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  5. Lista de Tareas (tasks.md)
&lt;/h3&gt;

&lt;p&gt;Desglose de tareas pequeñas (de 20 a 30 minutos como máximo), ordenadas por dependencias estrictas. Cada tarea&lt;br&gt;
indica qué RFs cubre y contiene una cláusula explícita: "Hecho cuando: ".&lt;/p&gt;
&lt;h2&gt;
  
  
  4. El corazón de la Spec: Notación EARS
&lt;/h2&gt;

&lt;p&gt;El lenguaje natural ordinario es impreciso. Para que un agente de IA no interprete libremente los requisitos, se&lt;br&gt;
utiliza EARS (Easy Approach to Requirements Syntax).&lt;/p&gt;

&lt;p&gt;EARS define cinco patrones universales para redactar requisitos funcionales de forma clara y verificable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo de patrón&lt;/th&gt;
&lt;th&gt;Plantilla sintáctica&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Ubicuo&lt;/strong&gt;&lt;br&gt;Siempre activo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EL SISTEMA [comportamiento]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;EL SISTEMA&lt;/strong&gt; almacenará todos los datos en un único archivo JSON local y legible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dirigido por evento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CUANDO [evento], EL SISTEMA [respuesta]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;CUANDO&lt;/strong&gt; el usuario ejecute &lt;code&gt;habits done &amp;lt;nombre&amp;gt;&lt;/code&gt;, &lt;strong&gt;EL SISTEMA&lt;/strong&gt; registrará la fecha actual como completada.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dirigido por estado&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MIENTRAS [estado], EL SISTEMA [respuesta]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;MIENTRAS&lt;/strong&gt; no exista ningún hábito registrado, &lt;strong&gt;EL SISTEMA&lt;/strong&gt; mostrará un mensaje invitando a crear el primero.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Comportamiento no deseado&lt;/strong&gt;&lt;br&gt;Errores&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SI [condición], ENTONCES EL SISTEMA [respuesta]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;SI&lt;/strong&gt; el hábito ya estaba marcado como hecho hoy, &lt;strong&gt;ENTONCES EL SISTEMA&lt;/strong&gt; informará de que ya estaba registrado y no lo duplicará.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Funcionalidad opcional&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DONDE [opción activa], EL SISTEMA [respuesta]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;DONDE&lt;/strong&gt; se pase la opción &lt;code&gt;--ayer&lt;/code&gt;, &lt;strong&gt;EL SISTEMA&lt;/strong&gt; registrará la fecha del día anterior en lugar de la fecha actual.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  5. Mini-Guía: El Flujo SDD Paso a Paso
&lt;/h2&gt;

&lt;p&gt;A continuación tienes el ciclo de trabajo completo con los prompts esenciales extraídos de &lt;code&gt;prompts.md&lt;/code&gt; y aplicados en &lt;code&gt;README.md&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A["0. Constitución"] --&amp;gt; B["1. Especificación&amp;lt;br&amp;gt;(spec.md)"]
    B --&amp;gt; C["2. Clarificación&amp;lt;br&amp;gt;(Auditoría QA)"]
    C --&amp;gt; D["3. Plan técnico&amp;lt;br&amp;gt;(plan.md)"]
    D --&amp;gt; E["4. Tareas&amp;lt;br&amp;gt;(tasks.md)"]
    E --&amp;gt; F["5. Implementación TDD&amp;lt;br&amp;gt;(Tn a Tn)"]
    F --&amp;gt; G["6. Validación&amp;lt;br&amp;gt;(RF frente a tests)"]
    G --&amp;gt; H{"¿Nuevo requisito?"}
    H -- "Sí" --&amp;gt; B
    H -- "No" --&amp;gt; I["Fin: feature completada"]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Paso 0: Constitución (Reglas del juego)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Objetivo: Acotar el terreno antes de escribir nada.&lt;/li&gt;
&lt;li&gt; Prompt esencial: "Proponme la constitución de este proyecto: 6 principios cortos y verificables sobre stack, calidad, tests, persistencia e idioma. Máx. 15 líneas. Espera mi aprobación."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 1: Especificación mediante entrevista dirigida
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Objetivo: Obligar a la IA a hacer preguntas clarificadoras en lugar de escribir código.&lt;/li&gt;
&lt;li&gt; Prompt esencial: "NO escribas código. Vamos a redactar la spec de la funcionalidad X. Hazme preguntas de UNA en UNA (máx. 6) sobre casos límite, errores y alcance. Con mis respuestas, genera spec.md con RF numerados en EARS, fuera de alcance y criterios de finalización. Solo el QUÉ y el POR QUÉ."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 2: Clarificación (El rol de QA)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Auditar la spec antes de diseñar la solución técnica.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "Revisa spec.md como un QA profesional: busca ambigüedades, contradicciones entre requisitos, casos límite ausentes o conflictos con la constitución. Solo detecta, NO resuelvas todavía."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 3: Planificación Técnica
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Cerrar las decisiones arquitectónicas y el modelo de datos.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "Lee constitución y spec.md. NO escribas código: genera plan.md con módulos, modelo de datos, algoritmos en pseudocódigo, decisiones justificadas (incluyendo la alternativa descartada) y estrategia de tests. Indica qué RF cubre cada parte."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 4: Desglose de Tareas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Generar unidades de trabajo pequeñas y dependencias claras.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "A partir de spec.md y plan.md, genera tasks.md con tareas pequeñas (&amp;lt; 30 min), ordenadas por dependencia, cada una con sus RF asociados y una línea 'Hecho cuando:' verificable. Con checkboxes."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 5: Implementación TDD controlada (La regla de oro)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Evitar que el agente se desboque o implemente de más.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "Implementa SOLO la tarea T2 de tasks.md, siguiendo plan.md y la constitución. Escribe primero los tests, luego el código. Ejecuta la suite de tests y muéstrame el resultado. Al terminar: marca T2 en tasks.md, indica qué RF cubre y PÁRATE. No empieces T3."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 6: Validación cruzada
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Asegurar cobertura total de requisitos antes de dar por cerrado el trabajo.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "Recorre spec.md requisito por requisito (RF-1 a RF-n). Para cada uno indica: qué test lo cubre y el resultado de su ejecución. Comprueba los criterios de finalización y dame un veredicto: ¿spec cumplida?"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 7: Gestión de Cambios
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objetivo: Evitar que el código se desincronice de la documentación.&lt;/li&gt;
&lt;li&gt;Prompt esencial: "Nuevo requisito: . NO toques código todavía. Actualiza primero spec.md (nuevo RF en EARS y casos límite) y muéstrame el diff."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Conclusión para un desarrollador mid-level
&lt;/h2&gt;

&lt;p&gt;Como desarrollador con experiencia, notarás que herramientas como spec-kit o open-spec no hacen magia: son simplemente automatizaciones de este mismo ciclo (scaffolding, comandos CLI y linters de markdown).&lt;/p&gt;

&lt;p&gt;La verdadera fortaleza de Spec-Driven Development reside en:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reducir la ventana de contexto de la IA: Cada fase tiene un contexto delimitado (la fase de spec ignora la implementación; la fase de implementación solo mira la tarea actual y el plan).&lt;/li&gt;
&lt;li&gt;Determinismo y verificabilidad: Un test unitario asociado a un RF-x redactado en EARS es un contrato cerrado.&lt;/li&gt;
&lt;li&gt;El humano como arquitecto y árbitro: La IA asume la carga de escribir tests y código repetitivo, mientras tú tomas las decisiones críticas en la especificación y el diseño.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>specdrivendevelopment</category>
      <category>programming</category>
      <category>llm</category>
    </item>
    <item>
      <title>Día 1: Spec-Driven Development (SDD): Construyendo un Comparador de Hipotecas</title>
      <dc:creator>Manuel</dc:creator>
      <pubDate>Wed, 15 Jul 2026 20:16:34 +0000</pubDate>
      <link>https://dev.to/manu00001/dia-1-spec-driven-development-sdd-construyendo-un-comparador-de-hipotecas-36cf</link>
      <guid>https://dev.to/manu00001/dia-1-spec-driven-development-sdd-construyendo-un-comparador-de-hipotecas-36cf</guid>
      <description>&lt;p&gt;¡Hola a todos! Bienvenidos al día 1 de este diario de desarrollo. Durante las próximas semanas voy a documentar el proceso paso a paso de cómo construyo una aplicación web real desde cero. &lt;/p&gt;

&lt;p&gt;Pero no lo haré a ciegas. Para este proyecto no voy a programar de la forma tradicional, ni tampoco voy a improvisar. Voy a utilizar &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt; apoyándome en la herramienta de estándar abierto más potente del ecosistema: &lt;strong&gt;GitHub Spec Kit&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 El Proyecto: El Comparador Inteligente de Hipotecas
&lt;/h2&gt;

&lt;p&gt;La aplicación que vamos a construir tiene un propósito muy claro y una lógica de negocio que se presta perfectamente para el desarrollo guiado por especificaciones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Comparador Multihipoteca:&lt;/strong&gt; Permitirá introducir y comparar de forma simultánea hasta &lt;strong&gt;3 hipotecas&lt;/strong&gt; con sus respectivos tipos de interés (fijo, variable o mixto), plazos y comisiones de apertura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulador de Vinculaciones (Complementos):&lt;/strong&gt; Podremos añadir productos adicionales vinculados que habitualmente proponen los bancos para rebajar el diferencial de la hipoteca (seguro de vida, seguro de hogar, domiciliación de nómina, plan de pensiones, alarma, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cálculo de Viabilidad Real (El "Árbitro Financiero"):&lt;/strong&gt; Evaluaremos si un complemento del banco realmente merece la pena. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Ejemplo:&lt;/em&gt; Si contratar el seguro de vida del banco te reduce la hipoteca un 0.1% (ahorrándote 15€ al mes en la cuota), pero ese seguro contratado con el banco cuesta &lt;strong&gt;300€ anuales&lt;/strong&gt; (25€/mes) y contratarlo por fuera de manera independiente te costaría &lt;strong&gt;200€ anuales&lt;/strong&gt; (16.6€/mes)... ¿Vale la pena la bonificación? El sistema calculará matemáticamente si estás perdiendo o ganando dinero con la vinculación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠️ ¿Por qué elijo GitHub Spec Kit?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqjsf5h6gfnhlf59xjv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqjsf5h6gfnhlf59xjv4.png" alt="Spec-kit github" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para gestionar el ciclo de vida de este desarrollo, he elegido &lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Spec Kit&lt;/strong&gt;&lt;/a&gt;. Los motivos son muy sencillos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Independencia de modelos (Model-Agnostic):&lt;/strong&gt; Spec Kit no me ata a un solo proveedor de IA. Funciona mediante un CLI (&lt;code&gt;specify&lt;/code&gt;) y plantillas estándar. Esto me permite orquestar mis especificaciones utilizando cualquier LLM tanto local (ej: qwen3.5:9b) como cloud (ej: modelos top tier de Claude, OpenAI, Gemini...)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estructura y Comandos Estandarizados:&lt;/strong&gt; Spec Kit nos dota de un flujo estructurado a través de comandos claros (&lt;code&gt;/constitution&lt;/code&gt;, &lt;code&gt;/specify&lt;/code&gt;, &lt;code&gt;/plan&lt;/code&gt;, &lt;code&gt;/tasks&lt;/code&gt;, &lt;code&gt;/implement&lt;/code&gt;). No tengo que inventar la estructura de carpetas; el framework se encarga de que la especificación y el código vivan en armonía.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sincronización nativa en Git:&lt;/strong&gt; La especificación (en formato Markdown con metadatos YAML basados en &lt;strong&gt;OpenSpec&lt;/strong&gt;) se guarda directamente en la carpeta &lt;code&gt;.specify/&lt;/code&gt; de nuestro repositorio. De este modo, si modificamos el comportamiento de nuestra calculadora de seguros de vida, editamos primero el archivo &lt;code&gt;.md&lt;/code&gt; de especificación, y Spec Kit regenerará el código de forma controlada.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🥊 Tablas Comparativas: El Ecosistema de Desarrollo en 2026
&lt;/h2&gt;

&lt;p&gt;Para entender el valor de lo que vamos a hacer, observemos cómo se compara SDD frente al resto de enfoques.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SDD vs. Metodologías de Diseño y Desarrollo (TDD y BDD)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterio&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;TDD&lt;/strong&gt; (Test-Driven)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;BDD&lt;/strong&gt; (Behavior-Driven)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;SDD&lt;/strong&gt; (Spec-Driven / Spec Kit)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Artefacto Principal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pruebas unitarias de código (e.g. Jest, PyTest).&lt;/td&gt;
&lt;td&gt;Escenarios de usuario en lenguaje de negocio (Gherkin: &lt;em&gt;Given/When/Then&lt;/em&gt;).&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Especificación ejecutable estructurada&lt;/strong&gt; (Arquitectura, reglas EARS, APIs, fórmulas matemáticas).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foco del Proceso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Calidad del código y diseño técnico interno.&lt;/td&gt;
&lt;td&gt;Colaboración estrecha entre desarrollo, producto y negocio.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sincronizar el diseño humano con la ejecución ultra-precisa de agentes de IA&lt;/strong&gt; y humanos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rol de la IA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Te asiste sugiriendo código para hacer pasar un test.&lt;/td&gt;
&lt;td&gt;Puede generar tests a partir de historias de negocio escritas en lenguaje natural.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Lee la spec, genera un plan técnico estructurado, desglosa tareas y escribe el código funcional y los tests.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. SDD vs. Vibe Coding (Improvisación con IA)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspecto&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Vibe Coding&lt;/strong&gt; (Improvisación)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;SDD con Spec Kit&lt;/strong&gt; (Guiado por Spec)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aproximación&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prompts rápidos y ambiguos ("Créame un comparador de hipotecas con seguros").&lt;/td&gt;
&lt;td&gt;Especificaciones acotadas basadas en reglas lógicas estandarizadas utilizando sintaxis EARS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Escalabilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Muy baja.&lt;/strong&gt; Al crecer la base de código, la IA sufre "degradación de contexto" y rompe funciones viejas al arreglar bugs.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Muy alta.&lt;/strong&gt; La IA consulta la "Constitución" del proyecto y el archivo de especificación en el repo para no desviarse jamás.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lógica Matemática&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Frecuentemente errónea.&lt;/strong&gt; Las IAs suelen fallar con fórmulas de amortización complejas si no se les guía de cerca.&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Exacta.&lt;/strong&gt; Las fórmulas financieras están explicitadas en la spec como requerimientos inflexibles que el código debe respetar.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ⚙️ El Plan de Ataque: El Flujo en 4 Fases
&lt;/h2&gt;

&lt;p&gt;A partir de mañana, para cada funcionalidad (como el módulo de carga de hipotecas, el simulador de seguros o la interfaz de comparación gráfica), repetiremos este ciclo soportado por Spec Kit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Especificar (Specify):&lt;/strong&gt; Redactaremos un archivo &lt;code&gt;calculator.md&lt;/code&gt; bajo el estándar &lt;strong&gt;OpenSpec&lt;/strong&gt;, detallando las fórmulas financieras con reglas exactas de tipo &lt;strong&gt;EARS&lt;/strong&gt; (&lt;em&gt;"CUANDO el usuario active el seguro de hogar, ENTONCES el sistema reducirá el diferencial en un 0.20% y sumará 250€ al gasto anual del perfil"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planificar (Plan):&lt;/strong&gt; El agente de IA traducirá la spec en un &lt;code&gt;plan.md&lt;/code&gt; técnico (qué librerías usaremos para calcular las fechas, base de datos en local, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crear Tareas (Tasks):&lt;/strong&gt; Dividiremos el plan en tareas de programación atómicas para que puedan ser ejecutadas sin errores colaterales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementar (Implement):&lt;/strong&gt; El programador o la IA completarán cada tarea asegurándose de que los cálculos pasen la verificación frente a la spec inicial.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🚀 ¿Qué sigue?
&lt;/h2&gt;

&lt;p&gt;Utilizar Spec Kit nos asegura que nuestro simulador financiero será matemáticamente preciso y perfectamente escalable a medida que añadamos más tipos de vinculaciones (como planes de pensiones o alarmas).&lt;/p&gt;

&lt;p&gt;En el próximo post de este diario, definiremos la &lt;strong&gt;"Constitución"&lt;/strong&gt; técnica de nuestra App y mucho más. &lt;/p&gt;

&lt;p&gt;¡Nos vemos en el Día 2! ¡Déjame en los comentarios qué características te gustaría que incluyamos en el comparador!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>specdrivendevelopment</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
