<?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: Alfonso José García Bañón</title>
    <description>The latest articles on DEV Community by Alfonso José García Bañón (@alfoncode).</description>
    <link>https://dev.to/alfoncode</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%2F4078827%2F16ce25c7-6be5-40b8-8cca-19b602277a79.png</url>
      <title>DEV Community: Alfonso José García Bañón</title>
      <link>https://dev.to/alfoncode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alfoncode"/>
    <language>en</language>
    <item>
      <title>Spec-Driven Development in the Age of AI: OpenSpec vs. GitHub Spec Kit</title>
      <dc:creator>Alfonso José García Bañón</dc:creator>
      <pubDate>Sat, 15 Aug 2026 10:58:40 +0000</pubDate>
      <link>https://dev.to/alfoncode/spec-driven-development-in-the-age-of-ai-openspec-vs-github-spec-kit-1b2</link>
      <guid>https://dev.to/alfoncode/spec-driven-development-in-the-age-of-ai-openspec-vs-github-spec-kit-1b2</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://labitcode.com/blog/spec-driven-development-openspec-vs-spec-kit/" rel="noopener noreferrer"&gt;labitcode.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the early wave of generative AI, the software industry embraced &lt;strong&gt;"vibe coding"&lt;/strong&gt; — prompting an LLM in an open chat window, hitting apply, and tweaking code until the test suite or browser stopped throwing errors.&lt;/p&gt;

&lt;p&gt;For weekend prototypes and disposable scripts, vibe coding feels like magic. But when applied to production monoliths, distributed microservices, or long-lived codebases, it quickly degenerates into an unmaintainable tangle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Rot &amp;amp; Compounding Hallucinations:&lt;/strong&gt; As chat conversations grow beyond 15–20 iterations, the LLM loses track of earlier decisions and starts reverting fixes or introducing regressions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lost Architectural Intent:&lt;/strong&gt; When code is generated directly from conversational prompts, the reasoning vanishes once the chat window closes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unreviewable PRs:&lt;/strong&gt; Reviewing a 1,500-line diff generated across multiple chat sessions is exhausting because the requirements were never codified in Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solution to this chaos is &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;: the engineering methodology that shifts AI pair programming from conversational guessing to &lt;strong&gt;structured, executable contracts&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Spec-Driven Development (SDD)?
&lt;/h2&gt;

&lt;p&gt;Instead of asking an AI to immediately write code, SDD breaks the development cycle into distinct, verifiable phases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Conversational Prompting ("Vibe Coding"):
Vague Prompt ──▶ AI Guesses Architecture ──▶ Generates Code ──▶ Silent Bugs &amp;amp; Drift

Spec-Driven Development (SDD):
Human Intent ──▶ Structured Spec &amp;amp; Rules ──▶ Plan &amp;amp; Task Matrix ──▶ Autonomous AI Execution ──▶ Verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The 4 Core Pillars of SDD
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Constitution / Rules:&lt;/strong&gt; Global invariant standards (tech stack, security rules, dependency budgets, coding style).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intent (&lt;em&gt;What &amp;amp; Why&lt;/em&gt;):&lt;/strong&gt; User stories, business constraints, and Given/When/Then acceptance criteria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture (&lt;em&gt;How&lt;/em&gt;):&lt;/strong&gt; System design, data schemas, API contracts, and component boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution (&lt;em&gt;Tasks&lt;/em&gt;):&lt;/strong&gt; A dependency-ordered checklist of atomic implementation steps.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Open-Source Showdown: OpenSpec vs. GitHub Spec Kit
&lt;/h2&gt;

&lt;p&gt;Two open-source frameworks lead the SDD ecosystem today. Here is how they work and compare:&lt;/p&gt;




&lt;h3&gt;
  
  
  1. OpenSpec (&lt;code&gt;Fission-AI/OpenSpec&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Developed by &lt;strong&gt;Fission-AI&lt;/strong&gt;, &lt;a href="https://github.com/Fission-AI/OpenSpec" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt; is designed specifically for &lt;strong&gt;brownfield (existing) repositories&lt;/strong&gt; and multi-agent development.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Innovation: Delta Specifications
&lt;/h4&gt;

&lt;p&gt;Rather than requiring you to document an entire legacy codebase upfront, OpenSpec operates in atomic &lt;strong&gt;"changes"&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You propose a change targeting a specific feature or bugfix.&lt;/li&gt;
&lt;li&gt;You write delta specifications (&lt;code&gt;specs/*.spec.md&lt;/code&gt;) describing only what changes relative to the current system.&lt;/li&gt;
&lt;li&gt;Once implementation and tests pass, the change is synced to permanent specs and archived.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  OpenSpec Slash Commands:
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openspec init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scaffolds the &lt;code&gt;.openspec/&lt;/code&gt; configuration in your repo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/opsx:explore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read-only analysis mode to investigate codebase safely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/opsx:propose&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generates &lt;code&gt;proposal.md&lt;/code&gt;, &lt;code&gt;design.md&lt;/code&gt;, &lt;code&gt;tasks.md&lt;/code&gt;, and delta specs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/opsx:apply&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autonomously executes the checklist in &lt;code&gt;tasks.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/opsx:sync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Merges delta specs into the permanent &lt;code&gt;specs/&lt;/code&gt; directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/opsx:archive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Archives the completed change to preserve Git history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  2. GitHub Spec Kit (&lt;code&gt;github/spec-kit&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt; is GitHub's open-source toolkit for Spec-Driven Development, powered by the Python CLI tool &lt;code&gt;specify-cli&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Innovation: Constitutional Engineering
&lt;/h4&gt;

&lt;p&gt;GitHub Spec Kit places heavy emphasis on &lt;strong&gt;Constitutional Guardrails&lt;/strong&gt;. Before specifying features, the project establishes a &lt;code&gt;constitution.md&lt;/code&gt; file setting inviolable rules for architectural patterns, linting, test coverage, and security boundaries.&lt;/p&gt;

&lt;h4&gt;
  
  
  Spec Kit Slash Commands:
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Output Artifact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/speckit.constitution&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.specify/memory/constitution.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/speckit.specify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Requirements&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.specify/specs/&amp;lt;feature&amp;gt;/spec.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/speckit.plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Technical Blueprint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.specify/specs/&amp;lt;feature&amp;gt;/plan.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/speckit.tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Task Decomposition&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.specify/specs/&amp;lt;feature&amp;gt;/tasks.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/speckit.implement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autonomous Coding&lt;/td&gt;
&lt;td&gt;Code files &amp;amp; passing test suites&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Head-to-Head Comparison Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;OpenSpec (&lt;code&gt;Fission-AI&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;GitHub Spec Kit (&lt;code&gt;github&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Change-driven, delta specifications, brownfield-first&lt;/td&gt;
&lt;td&gt;Constitution-driven, blueprint planning, greenfield &amp;amp; enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CLI &amp;amp; Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node.js (&lt;code&gt;npm install -g @fission-ai/openspec&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Python (&lt;code&gt;uv tool install specify-cli&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project State Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;openspec/changes/&lt;/code&gt;, &lt;code&gt;specs/&lt;/code&gt;, &lt;code&gt;archive/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.specify/memory/&lt;/code&gt;, &lt;code&gt;.specify/specs/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Legacy Codebase Fit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Outstanding&lt;/strong&gt; (Delta specs require zero upfront docs)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Good&lt;/strong&gt; (Requires establishing constitution &amp;amp; scope boundaries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Governance &amp;amp; Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Embedded in individual proposals or repo rules&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Dedicated Constitution engine&lt;/strong&gt; (&lt;code&gt;constitution.md&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spec Merging &amp;amp; Sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in &lt;code&gt;/opsx:sync&lt;/code&gt; merges deltas into global specs&lt;/td&gt;
&lt;td&gt;Specs remain grouped per feature branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude Code, Cursor, Copilot, Cline, Aider, Windsurf&lt;/td&gt;
&lt;td&gt;GitHub Copilot, Copilot Workspace, Claude Code, Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PR Review Ergonomics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Best in Class:&lt;/strong&gt; Reviewers review &lt;code&gt;proposal.md&lt;/code&gt; + &lt;code&gt;tasks.md&lt;/code&gt; in PR&lt;/td&gt;
&lt;td&gt;Excellent: Clean separation between &lt;code&gt;.specify/&lt;/code&gt; and source code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why SDD Defeats Context Rot
&lt;/h2&gt;

&lt;p&gt;In traditional conversational prompting, every prompt carries the baggage of all prior interactions. By Prompt #15, the LLM is spending 80% of its attention budget parsing its own previous mistakes.&lt;/p&gt;

&lt;p&gt;In Spec-Driven Development, each step in &lt;code&gt;tasks.md&lt;/code&gt; executes in a &lt;strong&gt;clean, isolated context window&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traditional Chat Interaction:
[Prompt 1] ──▶ [Response 1] ──▶ [Prompt 2] ──▶ ... ──▶ [Prompt 20] (Severe attention degradation)

Spec-Driven Development:
┌─────────────────────────┐
│     constitution.md     │ (~500 tokens: static project rules)
├─────────────────────────┤
│        spec.md          │ (~800 tokens: feature acceptance criteria)
├─────────────────────────┤
│        plan.md          │ (~1,000 tokens: technical architecture)
├─────────────────────────┤
│  Task #3: Active Scope  │ (~400 tokens: atomic target file)
└─────────────────────────┘
▲ 100% signal, 0% noise. Every task runs with fresh attention.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5 Golden Rules for Writing Bulletproof AI Specs
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Specify Non-Functional Constraints Explicitly:&lt;/strong&gt; Never assume an LLM knows your performance budgets. State constraints like &lt;code&gt;"Bundle size must not exceed 5KB gzipped"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Given / When / Then for Acceptance Criteria:&lt;/strong&gt; Ambiguous sentences cause hallucinations. Use concrete scenarios: &lt;em&gt;"Given an expired token, When accessed, Then return HTTP 401 with code TOKEN_EXPIRED"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declare Error Enums Upfront:&lt;/strong&gt; Define exact error codes and response schemas in the spec before implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decompose Tasks into Atomic Units:&lt;/strong&gt; Avoid broad tasks like &lt;code&gt;"Implement auth"&lt;/code&gt;. Break it into single-file or single-function steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Approval on Spec Before Code:&lt;/strong&gt; Fixing a mistake in a 30-line Markdown specification takes 30 seconds; fixing an architectural mistake across 20 generated code files takes hours.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;We are leaving the era of "prompt hacking" and entering the era of the &lt;strong&gt;Specification Architect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Human engineers provide the strategy, business context, and architectural boundaries. AI agents act as autonomous compilers that turn structured intent into robust, tested software.&lt;/p&gt;




&lt;p&gt;💡 &lt;strong&gt;Want the full deep dive with complete code examples, real-world OAuth2 and Rate Limiter walkthroughs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Read the full guide on our blog:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://labitcode.com/blog/spec-driven-development-openspec-vs-spec-kit/" rel="noopener noreferrer"&gt;Spec-Driven Development in the Age of AI: OpenSpec vs. GitHub Spec Kit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What SDD workflows or tools is your team using in production? Let's discuss in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
