Spec-Driven Development: From Programmer to System Architect
How AI Agents Are Changing Software Development—and Why Specifications Are Becoming a New Key Skill.
AI agents are evolving from coding assistants to independent actors in software development. Spec-Driven Development (SDD for short) is a new approach that systematically controls AI—and fundamentally changes the role of developers: away from coding and toward architecture, specification, and orchestration.
The Transformation of AI-Driven Software Development
AI has long been more than just an autocomplete assistant. AI agents are increasingly taking on entire work packages, thereby becoming an active part of the entire software development process—the agent plans, designs, implements, and tracks its own progress. But the more AI evolves from a “helper” to an “agent,” the more our approach to building software must change as well.
A promising approach in this shift is specification-driven development (Spec-Driven Development). This article explores what Spec-Driven Development means, how it works, and how it changes things for developers.
A Comparison of Vibe Coding, Plan-Mode, and Spec-Driven Development
There are various approaches to controlling AI agents in software development. They differ in terms of control granularity, traceability, and maintainability.
Ad hoc / prompt-based
In this approach, the AI agent is typically tasked directly with solving a programming problem based on requirements that are still quite broad. This is also referred to as “vibe coding.” Due to the vast solution space and the abstract nature of the requirements, this approach is very risky. It places the main emphasis on creativity and speed and is more suitable for prototypes than for production-ready software.
- Plan Mode
The execution environments (harnesses) of various AI agents (e.g., GitHub Copilot, Claude Code, or OpenAI Codex) now feature what is known as "Planning Mode." In this mode, the AI creates structured plans before the actual implementation. Only after a developer has reviewed and made adjustments is an agent tasked with carrying out the implementation. Using planning mode leads to significantly more predictable results. However, the plan is merely a means to an end. It is deleted after implementation. Decisions or requirements that were evident in the plan are lost, and the maintainability of the system is negatively impacted.
- Spec-Driven Development (SDD)
In specification-driven development, AI operates based on formal specification documents. These are created before development begins and guide the agent. The AI often assists in the creation and refinement of these specifications. The focus of this approach is on accuracy, reliability, and maintainability. The specifications created are versioned along with the application’s source code and are thus available to AI agents and software developers when implementing subsequent work packages. SDD is the most suitable approach for developing serious enterprise software, as it incorporates extensive verification processes and leads to predictable results.
What Specification Documents Does Spec-Driven Development Use?
The documents used are based on the artifacts of traditional software development processes, which are typically maintained as Markdown documents in SDD.
- Requirements Specification
The requirements specification describes what the system is supposed to do. It is also referred to as a requirements document and describes:- Features
- Use Cases
- Behaviors
- Acceptance Criteria
- Delimiters
- Technical Specification
The technical specification describes how the system is to be implemented. It is also referred to as the requirements specification and contains:- Architecture & System Design
- Technology Decisions
- Data Models
- APIs
- Detailed implementation of the requirements specified in the requirements specification
- Work Packages
The technical specification is then typically broken down into implementation tasks to be carried out by the AI agent.
At first glance, this may resemble the classic waterfall model. The key difference, however, is that the process is not designed for the entire system but is applied specifically to individual features—essentially as a “waterfall process on a small scale” at the feature level.
System-wide Instructions
In addition to traditional specification documents, spec-driven development tools typically offer additional control options via separate documents containing general rules and guidelines—essentially, a form of documentation outlining system guidelines. While specification documents are created for individual changes or features, these instructions apply to all modifications. Specifications may include:
- Non-functional requirements (performance, security, reliability)
- Fundamental architectural decisions
- Defined technology stack
- Test Procedure
- Coding Conventions
- but also rules regarding the format, scope, and quality of the specifications themselves
Note: AI agents typically have similar mechanisms (for example, the copilot-instructions.md or the emerging AGENTS.md standard). It makes sense to have these files reference each other so that system-wide rules need to be maintained only once and redundancies are avoided.
Spec-First, Spec-Anchored, Spec-as-Source: The Maturity Levels of SDD
Not every specification-driven approach is equally strict. We can distinguish between different levels:
Spec-First
Specifications are created and implemented for individual work packages. The primary purpose of the specification is to guide the initial development of a feature. In some cases, the specification may even be discarded afterward. This is similar to Plan Mode—only more formalized. No actual system documentation is produced; at most, a sequence of delta specifications is created.
It’s as if one had to reconstruct the system specification retrospectively from a collection of all individual Jira tickets.
Spec-Anchored
In spec-anchored development, the specification is viewed as a living document that evolves in parallel with the codebase. For new features, both the code and the existing specification must be adapted. The specification remains the reference.
Spec-as-a-Source
This is the most radical SDD approach. Developers work only on the specification, never on the source code. The specification takes on the role of the source code—but at a higher level of abstraction. The AI agent “compiles” the specification into the actual source code. This approach is currently more theoretical in nature or should be viewed as a vision for the future.
The Typical Spec-Driven Development Workflow
Although the workflows of individual SDD tools differ in detail, they can be broken down into the following general phases, which are based on the specification documents mentioned earlier. This workflow is followed for each planned change to the system. The individual phases are typically followed by reviews conducted by a developer. Depending on the results of the reviews, phases may be repeated, the specification documents may be manually adjusted, or the next phase may be initiated.
-
Phase 1: Technical Specification
During this phase, detailed technical requirements are identified. The level of maturity of the requirements before the phase begins can vary greatly. The requirements may already be very detailed, or the developer may start with fairly general requirements that are refined during AI-assisted interviews.
-
Phase 2: Technical Specifications
This phase involves determining the technical implementation details required to fulfill the business requirements. This involves taking system-wide guidelines into account (such as those regarding the technology stack) and researching implementation alternatives (such as the use of specific third-party components). The result of this phase is often referred to as a “plan.”
-
Preparation of the work packages
The plan is then used to create a “task list” containing the individual implementation tasks to be carried out. The task list typically includes provisions for status tracking. This means that individual tasks can be marked as completed.
-
Phase 4: Implementation
During the implementation phase, the task list is worked through. Some tools use what is known as a Ralph Wiggum Loop for this purpose. This is an autonomous AI coding method in which an AI agent is repeatedly assigned the same task, while progress is saved to files (e.g., tasks.md). The context is reset with each iteration to prevent hallucinations.
During the implementation phase, it is important to provide the AI agent with ways to test the implementation independently. For example, by running automated tests or actually using the application.
Spec-Driven Development Tooling and Frameworks
There is now a growing number of specialized tools available for the practical implementation of spec-driven development. They differ primarily in terms of workflow, customizability, and how they handle long-lived specifications. Among the best-known examples are GitHub Spec Kit and OpenSpec.
GitHub Spec Kit
One possible tool for spec-driven development is GitHub Spec Kit. It is developed by GitHub, but can be used not only with GitHub's own coding agents but also with a wide variety of others.
A Python command-line tool called “specify” initializes Spec Kit in a project by placing certain predefined prompts (known as slash commands), as well as templates and some scripts, in the project directory.
In Spec Kit, the system-wide instructions are called "Constitution," which is intended to signal that they are non-negotiable. When creating a new project, you are initially guided through the process via /speckit.constitution.
The main commands for mapping the SDD workflow are:
- /speckit.specify for creating the technical specification.
Optionally, /speckit.clarify can be used to resolve ambiguities that arise during interviews. - /speckit.plan for creating the technical specification
- /speckit.tasks to break down the technical specifications into tasks
- /speckit.implement to start the implementation
Spec Kit integrates very well with GitHub Copilot; for example, it displays possible answers to questions as buttons in the “Ask Questions” tool.
In Spec Kit, while the specifications are versioned along with the source code, they only ever reflect the delta from the previous system state, so no complete specification of the system is created. Spec Kit therefore follows only the “Spec-First” approach.
Most recently, there was also Discussionsabout whether the tool will continue to be developed sufficiently following the departure of one of its lead developers from Microsoft to Anthropic.
OpenSpec
One alternative is the OpenSpec tool. It, too, can be used with various coding agents and, similar to Spec Kit, is initialized via a CLI, which in this case is installed as an NPM package.
System-wide instructions are stored in OpenSpec's config.yaml. This file already provides a predefined format for delineating the basic system context of rules for the individual documentation artifacts.
OpenSpec offers different workflows (Quick Path and Expanded), which differ mainly in whether the specification documents are all created together in a single step or in separate steps. The latter has the advantage that, for example, the technical specification can be reviewed before the work packages are generated from it.
OpenSpec also supports the definition of custom schemas, which allow for complete customization of the workflow and the specification artifacts used.
The most important OpenSpec commands are:
- /ospx:explore as an optional step to refine the specifications through an interview.
- /ospx:propose as part of the “Quick Path,” which generates all specification documents in a single step. Alternatively, use /ospx:new to create the change and then /ospx:continue for each artifact.
- /ospx:apply starts the conversion
- OpenSpec separates changes (= proposed modifications) from specs (= how the system currently works). /ospx:archive integrates the change specification into the system specification and closes the change.
Comparing changes and specifications results in long-lasting system documentation. OpenSpec is therefore “spec-anchored.”
More SDD tools
In addition to the solutions mentioned, there are various other providers, such as Kiro, Tessl, and BMAD. However, a comprehensive evaluation of each emerging tool is challenging, as it requires comparable, non-trivial use cases and experience spanning multiple iteration cycles.
Instead, it is advisable to classify the available frameworks based on the defined categories and compare their workflows and customizability. A focused approach—that is, selecting and mastering a few suitable tools in depth—is more effective than continuously evaluating all new market entrants.
It is crucial to select a flexible framework that aligns well with your specific requirements, as well as to optimize and adapt it specifically to company- and project-specific processes. This includes, for example, integration with existing systems such as ticketing systems, version control, and knowledge databases; adapting specification artifacts to your own standards; and defining appropriate instructions and guidelines that enable agents to independently validate changes and verify them through automated tests.
How Much Specification Is Required? The Specfactor as a Metric
A key question is how much specification is actually necessary—since the various SDD tools differ, in some cases significantly, in this regard.
The following chart compares the “Lines of Spec” (i.e., the number of lines in the Markdown specifications) with the “Lines of Code” required to implement a feature. If the specification for a complex feature is too brief, the likelihood that the results will not meet expectations increases. If, on the other hand, it is too detailed, reviews become inefficient simply due to the sheer volume of content that needs to be read and validated.
To make this tension more tangible, we define the ratio of specification lines to code lines as a metric—the SpecFactor: SpecFactor = Lines of Spec / Lines of Code.
We applied this metric to various SDD frameworks as an example: OpenSpec yielded an average value of about 0.75, while GitHub Spec-Kit generated about 2.5 times as much specification as code.
There are currently no clear guidelines for what constitutes a “good” SpecFactor. In practice, however, working with OpenSpec seems a bit more manageable.
What matters most is not so much a fixed target value as it is a thoughtful approach to the metric. This raises some key questions:
- How much specification is sufficient for one's own tasks—where is the happy medium?
- Are there specifications created primarily for AI systems? If so, how can they be clearly distinguished from content that developers need to review?
- Should the same process and the same specification artifacts apply to all types of changes—or does a small bug require a different process than a major feature?
How Spec-Driven Development Is Changing the Role of Developers
Regardless of specific methods and tools, it is clear that AI-powered software development and spec-driven development do not replace developers, but rather shift their focus and significantly expand their scope of work, thereby fundamentally redefining the role of the developer:
- The focus is increasingly shifting away from simply writing code and toward structuring problems.
- Planning and systematic specifications are becoming a key focus in order to effectively manage and parallelize the work of coding agents.
- Architectural decisions and precise orchestration of AI are becoming increasingly important, as models often tend to favor “traditional” approaches—simply because these dominate the majority of the training data, even though more modern alternatives are now available.
- At the same time, the focus is increasingly shifting toward review and quality assurance, as growing support from automated or AI-assisted implementation means that the careful review of specifications and generated code, the early detection of inconsistencies, and ensuring that business and technical requirements are met are becoming increasingly central to development work.
Until now, many of these tasks have fallen primarily to experienced developers. In the future, junior developers will also need to develop these skills much earlier, while experienced developers will increasingly take on the roles of mentors and quality assurance specialists for the entire system architecture.
At the same time, experimentation becomes much easier. Whereas in the past, lengthy discussions were held to find the optimal solution before proceeding with time-consuming implementation, today different approaches can be tested quickly and easily, shifting the debate from theory to practice.
Challenges and Unresolved Issues in Spec-Driven Development
As much potential as this new way of working offers, it inevitably comes with a number of new challenges that involve both technical and organizational aspects, for which there are so far only partially tested solutions.
- How can the ever-growing volume of specifications and generated code be validated efficiently and reliably?
- If developers themselves write little or no code, how can they maintain their programming skills at a level that allows them to effectively control and evaluate the work of AI agents?
- How and by whom will programming languages and frameworks continue to be developed in the future if their primary users are increasingly AI systems?
- How should the training of the next generation of software developers be structured, and which skills should be the focus in the future?
These are all issues we are actively addressing—and our industry shares a collective responsibility for finding answers to them.
Conclusion: From Coding to Engineering
Spec-Driven Development (SDD) offers a structured approach to unlocking the potential of AI in software development. Instead of merely controlling AI agents on an ad hoc basis, SDD places the specification at the center as the key control instrument. It creates accountability, traceability, and a common foundation for humans and machines.
This new way of working fundamentally shifts the focus of software development: away from writing individual lines of code toward the precise description, structuring, and control of agents; away from coding toward engineering.
When used correctly, SDD can make collaboration with AI agents significantly more reliable, transparent, and scalable—but it still relies on good engineering practices and experienced developers.
For developers, this primarily means broadening their understanding of their role. Technical thinking, architectural expertise, the ability to clearly articulate requirements, and the simultaneous management of multiple AI agents are becoming more important than mere implementation. At the same time, this new way of working allows for greater speed and more room for experimentation.
Frequently Asked Questions About Spec-Driven Development
-
What is Spec-Driven Development?
Spec-Driven Development is an approach to AI-assisted software development in which AI agents operate based on formal specifications. Requirements, architectural decisions, and tasks are documented and guide the AI's implementation. There are review gates between the phases.
-
How do Vibe Coding, Plan-Mode, and SDD differ?
Vibe Coding relies on direct prompts without a fixed structure; Plan Mode supplements an initial implementation plan, while SDD continuously guides development through versioned specifications.
-
What advantages does SDD offer over traditional AI-driven development?
Spec-Driven Development ensures more transparent decision-making, more consistent results, greater maintainability, and better collaboration between developers and AI agents.
-
When is SDD worth it, and when isn't it?
SDD is particularly valuable for complex, long-lived, or business-critical software systems where traceability, maintainability, and controlled collaboration with AI agents are important. In particular, larger features, multiple developers or AI agents working in parallel, and high-quality requirements benefit from clear specifications and structured workflows. For small changes or simple prototypes, however, the additional effort required for specifications may be disproportionate.
-
How much detail is necessary?
The optimal amount depends on the project and the complexity of the requirements. The goal is to strike a balance between sufficient precision and a manageable review effort.
Written by
Hanno Kortekamp is a software architect at Arvato Systems and is responsible for the technical design and implementation of modern web applications. In addition to architecture, his focus is on coordinating and coaching development teams. With over 25 years of experience, he brings extensive know-how in the modernization of existing systems as well as in the development of new applications. His projects span a wide range of industries, including finance, customer service and healthcare.