Spec-driven development: the mature answer to vibe coding
Two companies that compete directly for developers - GitHub and Microsoft - arrived at the same conclusion about the most expensive problem with "vibe coding": describing a goal, getting back a block of code, and only discovering afterward that the result never considered how the system should interact with what already existed. The answer both document is spec-driven development, and GitHub Spec Kit became the reference implementation.
The diagnosis: code is binding, a spec isn't
Microsoft sums up the central argument directly: "code is a binding artifact" - hard to decouple once implemented - while specs allow flexible experimentation before anything locks in. The company describes spec-driven development not as exhaustive documentation or waterfall planning, but as "version control for your thinking" - making technical decisions "explicit, reviewable, and evolvable," the same way code gets versioned.
The scenario that illustrates the cost of not having this
Microsoft cites a concrete scenario: a notification system where different team members made conflicting assumptions about how it should work - divergences a well-made spec would have caught before a single line of code was written, not afterward, in production. It's the same argument behind the contrast GitHub draws between vibe coding and spec-driven development: vibe coding accepts the first prompt's output; spec-driven development forces "clarity about how it should interact with existing systems" before accepting any implementation.
Three commands, one sequential flow
GitHub Spec Kit - now with more than 118,000 stars - organizes this around sequential commands: /specify defines functional requirements (the "what" and "why"), /plan defines technical decisions (the "how"), /tasks breaks the spec into implementable units. The tool itself, Specify CLI, is agnostic to which AI agent is used - it works with more than 30 different agents, from GitHub Copilot to Claude Code to Gemini.
What a spec allows that vibe coding doesn't
A detail Microsoft highlights that rarely comes up in discussions of generative AI in code: with the spec as the central artifact, it becomes possible to explore multiple implementations from the same spec - for example, comparing a component written in Rust against one written in Go, without rewriting the requirement from scratch for each attempt. That's structurally impossible in vibe coding, where the specification only lives inside a single attempt's prompt.
Why this is the mature answer, not just another tool
GitHub and Microsoft aren't inventing specs - architecture decision records (ADRs) and formal requirements already existed before generative AI. What changes is the systematic integration between spec and agent flow: the specification stops being a filed document and becomes the artifact the agent itself uses to generate, and the team uses to review, with traceability between the original requirement and the final code.
Sources
- GitHub - Spec-driven development with AI: Get started with a new open-source toolkit - https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/
- GitHub Spec Kit - https://github.com/github/spec-kit
- Microsoft Developer Blog - Diving Into Spec-Driven Development With GitHub Spec Kit - https://developer.microsoft.com/blog/spec-driven-development-spec-kit