Comparing Spec-Driven Development (SDD) Environments: SpecKit vs Kiro

by Sloth255
Spec-Driven DevelopmentSDDSpecKitKiroAIGitHub CopilotIDEDevelopment Workflow

Comparing Spec-Driven Development (SDD) Environments: SpecKit vs Kiro

Introduction

This article compares two representative approaches to implementing "Spec-Driven Development (SDD)," a methodology that has recently gained significant attention.

  • VSCode + GitHub Copilot + SpecKit: Adding an SDD toolkit to existing editors
  • Kiro IDE: An all-in-one IDE with integrated SDD features

What is Spec-Driven Development (SDD)?

In traditional development, code is central and specifications are supplementary. SDD reverses this by treating specifications as executable deliverables.

Key Benefits of SDD

  • Clarification and documentation of requirements
  • Precise instructions for AI agents
  • Reduced misalignment between teams
  • Support for iterative improvement processes

Environment 1: VSCode + GitHub Copilot + SpecKit

Overview

SpecKit is an open-source toolkit for implementing SDD in existing development environments. Provided by GitHub, it enables interaction with AI agents through slash commands.

Setup

# Install Specify CLI
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git

# Initialize a new project
specify init my-project --ai copilot

# Or in an existing project
specify init . --ai copilot

Development Flow

1. Establish Project Constitution

/speckit.constitution Create principles focused on code quality, 
testing standards, user experience consistency, and performance requirements

This command generates .specify/memory/constitution.md, defining project-wide guidelines.

2. Create Specifications

/speckit.specify Build an application that can help me organize my photos 
in separate photo albums. Albums are grouped by date and can be re-organized 
by dragging and dropping on the main page.

Generated files:

  • .specify/specs/001-feature-name/spec.md: Feature requirements and user stories

3. Create Technical Implementation Plan

/speckit.plan The application uses Vite with minimal number of libraries. 
Use vanilla HTML, CSS, and JavaScript as much as possible.

Generated files:

  • plan.md: Technical architecture
  • data-model.md: Data model definition
  • contracts/api-spec.json: API specifications
  • research.md: Technical research documentation

4. Task Decomposition

/speckit.tasks

Generated files:

  • tasks.md: Implementation task list (with dependencies and parallel execution markers)

5. Execute Implementation

/speckit.implement

Implementation proceeds sequentially based on the task list.

SpecKit Prompt File Details

SpecKit generates multiple prompt files in the .github/prompts/ directory.

speckit.constitution.prompt.md

Purpose: Define fundamental principles and development guidelines for the project

Structure:

---
description: Create or update project governing principles
---

# Project Constitution

Create a comprehensive constitution document that includes:

1. **Code Quality Standards**
   - Naming conventions
   - Documentation requirements
   - Code review processes

2. **Testing Standards**
   - Unit test coverage requirements
   - Integration test strategies
   - Test documentation

3. **Architecture Principles**
   - Design patterns to follow
   - Technology stack constraints
   - Performance requirements

4. **User Experience Guidelines**
   - Accessibility standards
   - Responsive design requirements
   - Internationalization considerations

Features:

  • AI agents reference this document throughout all subsequent phases
  • Enforces project-specific best practices
  • Ensures consistency across teams

speckit.specify.prompt.md

Purpose: Structure feature requirements in user story format

Structure:

---
description: Define requirements and user stories
---

# Specification Template

## User Stories

**As a** [user type]
**I want** [goal]
**So that** [benefit]

### Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2

## Functional Requirements

### FR-001: [Requirement Name]
**Priority**: High/Medium/Low
**Description**: Detailed requirement description
**Dependencies**: [Other requirements]

Generation Process:

  1. Parse natural language description from user
  2. Convert to user stories
  3. Clarify acceptance criteria
  4. Assign functional requirement IDs

speckit.plan.prompt.md

Purpose: Detail technical implementation plans

Structure:

---
description: Create technical implementation plans
---

# Implementation Plan

## Technology Stack
- Frontend: [Framework/Library]
- Backend: [Framework]
- Database: [Type]
- Deployment: [Platform]

## Architecture Overview
[System architecture diagrams, component diagrams]

## Data Model
[Entity relationship diagrams, table definitions]

## API Specifications
[Endpoint definitions, request/response formats]

## Implementation Phases
1. Phase 1: [Core features]
2. Phase 2: [Advanced features]

## Technical Considerations
- Security requirements
- Performance optimization
- Scalability concerns

Features:

  • Adheres to constitution.md principles
  • Technically resolves spec.md requirements
  • Compares multiple technology choices

speckit.tasks.prompt.md

Purpose: Decompose into concrete, implementable tasks

Structure:

---
description: Generate actionable task lists
---

# Task Breakdown

## User Story: [Story ID]

### Task 1: [Task Name]
**File**: `src/components/Feature.tsx`
**Type**: Implementation
**Dependencies**: None
**Parallel**: [P] (if parallelizable)
**Description**: Detailed task description
**Acceptance**: How to verify completion

### Task 2: [Task Name]
**File**: `tests/Feature.test.tsx`
**Type**: Testing
**Dependencies**: Task 1

Generation Rules:

  • Explicitly manage dependencies
  • Specify file paths concretely
  • Consider Test-Driven Development (TDD) order
  • Mark tasks that can be executed in parallel

speckit.implement.prompt.md

Purpose: Execute implementation based on task list

Execution Flow:

---
description: Execute implementation plan
---

# Implementation Execution

1. **Validate Prerequisites**
   - Constitution exists
   - Spec is complete
   - Plan is approved
   - Tasks are defined

2. **Parse Tasks**
   - Read tasks.md
   - Build dependency graph
   - Identify parallel tasks

3. **Execute Tasks**
   For each task in order:
   - Create/modify specified files
   - Run tests (if TDD)
   - Validate against acceptance criteria
   - Update task status

4. **Progress Reporting**
   - Mark tasks as In Progress/Done
   - Report errors with context
   - Suggest next steps

speckit.clarify.prompt.md

Purpose: Clarify ambiguous parts of the specification through questions

Structure:

---
description: Clarify underspecified areas
---

# Clarification Questions

## Coverage Analysis
[Identify areas not covered in the specification]

## Sequential Questions
1. **Question**: [Specific question]
   **Context**: [Why this is important]
   **Options**: [Possible answers]

[Answers are added to Clarifications section when recorded]

Features:

  • Recommended to execute before Plan creation
  • Elicit answers through structured questions
  • Answers are integrated into the specification

Example Generated Documents

In an actual project, the directory structure looks like this:

my-project/
├── .specify/
│   ├── memory/
│   │   └── constitution.md          # Project principles
│   ├── specs/
│   │   └── 001-photo-albums/
│   │       ├── spec.md               # Feature specifications
│   │       ├── plan.md               # Implementation plan
│   │       ├── tasks.md              # Task list
│   │       ├── data-model.md         # Data model
│   │       ├── contracts/
│   │       │   └── api-spec.json    # API specifications
│   │       └── research.md           # Technical research
│   ├── scripts/
│   │   ├── create-new-feature.sh
│   │   └── setup-plan.sh
│   └── templates/
│       ├── spec-template.md
│       ├── plan-template.md
│       └── tasks-template.md
├── .github/
│   └── prompts/
│       ├── speckit.constitution.prompt.md
│       ├── speckit.specify.prompt.md
│       ├── speckit.plan.prompt.md
│       ├── speckit.tasks.prompt.md
│       ├── speckit.implement.prompt.md
│       ├── speckit.clarify.prompt.md
│       └── speckit.analyze.prompt.md
└── src/
    └── [Implementation files]

Advantages

Open Source: Free to use under MIT license
Flexibility: Supports multiple AI agents (Claude, Gemini, Copilot, etc.)
Gradual Adoption: Can adopt incrementally starting with needed features

Disadvantages

Manual Setup: Initial configuration requires multiple steps
Integration Complexity: Need to combine multiple tools
UI Experience: Command-line centered with limited visual feedback
Learning Curve: Need to understand the role and order of each command

Environment 2: Kiro IDE

Overview

Kiro is an Agentic IDE supporting from prototype to production, with natively integrated SDD features.

Setup

  1. Download the IDE from kiro.dev
  2. Install and launch
  3. Can automatically import VS Code settings and plugins

Development Flow

1. Generate Steering Docs

Select "Generate Steering Docs" from the Kiro panel to generate the following in .kiro/steering/:

  • Project technology stack information
  • Coding conventions
  • Workflow guidelines

2. Three Phases of Spec Creation

Requirements Phase

Describe user stories and acceptance criteria in EARS (Easy Approach to Requirements Syntax) format:

WHEN [condition/event]
THE SYSTEM SHALL [expected behavior]

Generated file: .kiro/specs/feature-name/requirements.md

Design Phase

Document technical architecture and sequence diagrams:

Generated file: .kiro/specs/feature-name/design.md

Tasks Phase

Detailed plan for implementation tasks:

Generated file: .kiro/specs/feature-name/tasks.md

3. Automation with Hooks

Event-driven automation that automatically executes tasks in response to file changes:

Example: "When saving a React component, automatically generate test files"

{
  "hooks": [
    {
      "trigger": "onFileSave",
      "pattern": "**/*.tsx",
      "action": "generateTests"
    }
  ]
}

Kiro Document Structure

my-project/
├── .kiro/
│   ├── steering/
│   │   ├── tech-stack.md
│   │   ├── coding-standards.md
│   │   └── workflows.md
│   └── specs/
│       └── photo-albums/
│           ├── requirements.md    # EARS format requirements
│           ├── design.md          # Architecture design
│           └── tasks.md           # Implementation tasks
└── src/
    └── [Implementation files]

Advantages

Integrated Experience: All features natively integrated in the IDE
Visual UI: Visual management of spec lists and task statuses
Automation: Background task execution with Hooks

Disadvantages

Dedicated IDE Required: Need to migrate from existing editors
Vendor Lock-in: Dependency on Kiro-specific features

Detailed Comparison Table

Aspect SpecKit Kiro
Setup Manual setup via CLI Download & install only
Learning Curve Need to learn commands Intuitive UI
Spec Format Markdown with templates EARS + Markdown
Task Management Text management in tasks.md Visual management in IDE
Automation Script-based Event-driven with Hooks
Git Integration Automatic branch-based management Manual or IDE features
AI Agents 10+ supported Kiro integrated agent
Extensibility Template customization MCP + Powers
Cost Free (OSS) Free during preview
Team Sharing Full sharing via Git Git + Kiro-specific features

Comparison of Generated Documents

Constitution/Steering

SpecKit:

  • .specify/memory/constitution.md: Single file
  • Describes overall project principles
  • Referenced by all commands

Kiro:

  • .kiro/steering/: Multiple files
  • Separates tech stack, coding conventions, workflows
  • Auto-generated + customizable

Specification

SpecKit:

# spec.md

## User Stories
As a user, I want to...

## Functional Requirements
FR-001: Feature description

## Review Checklist
- [ ] Requirements are clear
- [ ] Acceptance criteria defined

Kiro:

# requirements.md (EARS format)

WHEN user clicks upload button
THE SYSTEM SHALL display file selection dialog

WHEN file size exceeds 10MB
THE SYSTEM SHALL display error message

Implementation Plan

SpecKit:

# plan.md

## Architecture
- Frontend: React
- Backend: Node.js

## Implementation Details
[Detailed implementation guide]

# data-model.md
[Database schema]

# contracts/api-spec.json
{OpenAPI specification}

Kiro:

# design.md

## Component Architecture
[System architecture diagram]

## Sequence Diagrams
[Flow diagrams]

## Technical Considerations
[Performance, security, etc.]

Tasks

SpecKit:

# tasks.md

## User Story: US-001

### Task 1: Setup database schema
File: src/db/schema.sql
Dependencies: None
[P] Parallel: Yes

### Task 2: Create API endpoint
File: src/api/upload.ts
Dependencies: Task 1

Kiro:

# tasks.md

## Phase 1: Core Implementation

- [ ] Task 1: Database setup
  Status: Not Started
  Assignee: [Auto]
  
- [ ] Task 2: API development
  Status: Not Started
  Dependencies: Task 1

Usage Guidelines

When to Choose SpecKit

  1. Want to maintain existing VSCode environment

    • Use extensive plugins and settings as-is
    • Avoid editor migration costs
  2. Entire team is new to SDD

    • Learn gradually with command-based approach
    • Easy to share documents via Git
  3. Want to try multiple AI agents

    • Switch between Claude, Gemini, Copilot, etc.
    • Avoid vendor lock-in
  4. Open source priority

    • Community-driven development
    • Freedom to customize

When to Choose Kiro

  1. Maximize productivity

    • Work quickly with integrated UI
    • Automate repetitive tasks with Hooks
  2. Visual focus

    • Manage specs and tasks visually
    • Check progress on dashboard
  3. Need advanced automation

    • Event-driven workflows
    • Integrate with external services via MCP
  4. New projects

    • Not bound to existing environment
    • Try the latest SDD experience

Advanced Usage with SpecKit Prompt Files

Creating Custom Prompts

SpecKit prompt files can be freely customized:

---
description: Custom quality checklist generator
---

# /speckit.custom-checklist

Generate a quality checklist for:

1. **Security Review**
   - Authentication check
   - Authorization verification
   - Input validation

2. **Performance Review**
   - Database query optimization
   - Caching strategy
   - Load testing results

[Output format: Markdown checklist in spec directory]

Managing Multiple Specs

# Feature 1
specify init . --ai copilot
/speckit.specify Build user authentication system

# Feature 2 (on new branch)
git checkout -b feature/002-payment
/speckit.specify Integrate payment gateway

Practical Workflow Examples

Team Development with SpecKit

graph TD
    A[Product Manager] -->|Define requirements| B["speckit.specify"]
    B --> C["Generate spec.md"]
    C --> D[Tech Lead]
    D -->|Technology selection| E["speckit.plan"]
    E --> F["Generate plan.md, data-model.md"]
    F --> G[Developer]
    G -->|Review tasks| H["speckit.tasks"]
    H --> I["Generate tasks.md"]
    I --> J["speckit.implement"]
    J --> K["Generate code"]
    K --> L[Pull Request]
    L --> M[Code Review]
    M -->|Approve| N[Merge]

Team development flow with SpecKit: Different commands for different roles, sharing documents via Git

Solo Development with Kiro

graph TD
    A[Idea] --> B[Spec Chat]
    B --> C[Generate Requirements]
    C --> D[Generate Design]
    D --> E[Generate Tasks]
    E --> F[Code with #spec reference]
    F --> G[Save file]
    G --> H[Trigger Hooks]
    H --> I[Auto-generate tests]
    I --> J[Run in background]

Solo development flow with Kiro IDE: Efficient development cycle with integrated UI and automation via Hooks

Conclusion

SpecKit is ideal for teams that want to adopt SDD while leveraging existing development environments. It's open source, highly flexible, and allows gradual adoption.

Kiro is suited for developers seeking the latest Agentic IDE experience. With integrated UI, automation features, and visual feedback, it maximizes productivity.

Both environments aim to break away from traditional "vibe coding" and realize a systematic development process centered on specifications. Choose based on your project nature, team composition, and existing development environment.