[SDD Plugin] Development Journey — From Prototype to Completion

2026-04-07 hit count image

The 4 phases of building the SDD (Spec-Driven Development) Plugin for Claude Code — foundation, multilingual support, Issue template improvements, and the resume command. Sharing the development process and lessons learned.

development_process

Overview

SDD (Spec-Driven Development) Plugin is a Claude Code plugin that helps you collaborate systematically with AI through a GitHub Issue-based 4-stage process (Analyze → Design → Implement → Test). In this post, I’ll share how this plugin was built — what was considered at each phase and what mistakes were made along the way.

The full structure and usage of SDD Plugin is covered in SDD Plugin: Full Structure and Usage, the background in The Pitfalls of AI Coding and a Path Forward, and the engineering principles in Analyzed Through 4 AI Engineering Paradigms.

File Structure

Let’s first look at the completed plugin’s file structure. This will help you understand how this structure came to be as we walk through the development process.

sdd-plugin/
├── README.md
├── .claude-plugin/
│   └── marketplace.json               # Marketplace metadata
└── plugins/sdd-plugin/
    ├── .claude-plugin/
    │   └── plugin.json                # Plugin metadata
    └── skills/sdd/
        ├── SKILL.md                   # Core: Command routing + common definitions
        ├── commands/                  # Detailed process for each command
        │   ├── analyze.md
        │   ├── design.md
        │   ├── implement.md
        │   ├── test.md
        │   ├── resume.md
        │   ├── status.md
        │   ├── review.md
        │   ├── ai-review.md
        │   ├── init.md
        │   ├── rollback.md
        │   └── help.md
        └── templates/                 # Language-specific templates
            ├── en/                    # English
            ├── ko/                    # Korean
            └── ja/                    # Japanese

The most important file is SKILL.md. This file defines “when a command comes in, which file to read and how to behave” for Claude Code. Instead of writing logic in a typical programming language, the process is described in Markdown and the AI follows it.

Phase 1: Building the Foundation

The very first step was creating the basic structure for the Claude Code plugin.

What Was Built

  • plugin.json: Metadata like plugin name, version, and author
  • SKILL.md: Command routing and common definitions (labels, markers, language settings, etc.)
  • 4 English Issue templates (Bug Fix, New Feature, Enhancement, Refactoring)
  • Analysis/Design output templates

What I Struggled With

At first, I put the entire process into a single SKILL.md file. But it quickly grew to hundreds of lines, and I realized it was inefficient for Claude Code to load the entire file into context every time.

So I changed SKILL.md to only serve as a router, splitting the detailed process for each command into separate files in the commands/ directory. When you run /sdd analyze, SKILL.md directs Claude to read commands/analyze.md.

Phase 2: Multilingual Support

I added Japanese and Korean support so the plugin could be used by global teams.

What Was Built

  • Language-specific Issue templates (Korean, Japanese)
  • Language-specific output templates
  • Language setting storage (running /sdd init ko saves the setting to .github/.sdd-lang)

Localization, Not Just Translation

Rather than simple translation, I chose terminology that fits each language’s development culture. For example, the Japanese Issue templates use terms like バグ修正, 新機能, 機能改善, and リファクタリング.

Instead of using translation keys, I decided to manage complete template files separately for each language. This means more files, but it allows natural expressions for each language and makes it easy to add language-specific explanations.

Phase 3: Issue Template Improvements

I improved the GitHub Issue templates based on real-world usage.

What Changed

Initially, the Issue templates were too freeform — just a title and body. This meant different people wrote different things, and the AI often missed information it needed for analysis.

So I restructured the templates to require Background (Why), Feature Description (What), and Definition of Done (DoD) in a structured format.

name: 'New Feature'
description: 'Request a new feature'
labels: ['sdd:analyze']
body:
  - type: textarea
    id: background
    attributes:
      label: 'Background'
      description: 'Why is this feature needed?'
      value: |
        - Problem / Motivation:
        - User feedback: (if any)

  - type: textarea
    id: description
    attributes:
      label: 'Feature Description'
      description: 'What needs to be built?'
      value: |
        - One-liner:
        - Detailed description:
        - Target screens:
        - References:

  - type: textarea
    id: done
    attributes:
      label: 'Definition of Done'
      description: 'When is this feature considered complete?'
      value: |
        - [ ] Criteria 1:
        - [ ] Criteria 2:

This ensures all necessary information is captured when the Issue is created, and the AI receives structured input for analysis.

Phase 4: Adding the Resume Command

The biggest pain point in real usage was how hard it was to continue work when a conversation broke. The implement stage in particular spans multiple PRs, making conversation breaks highly likely.

The Solution

To solve this, I added the /sdd resume command.

/sdd resume 123   # Auto-detects the current stage of Issue #123 and continues

The resume command works with the following logic:

  1. Determine current stage from Issue labels (sdd:analyze, sdd:design, etc.)
  2. Check for existing outputs (analysis results, design results) in Issue comments
  3. Check related PR status
  4. For Parent Issues, check progress of Child Issues
  5. Report the interruption point to the user, get confirmation, then continue

Since all outputs are stored on GitHub with markers, context can be fully restored from GitHub even if the conversation starts completely fresh. This was the biggest advantage of the “GitHub Native” design.

Trying It Out

I created a simple project and tested the entire process end to end.

# 1. Initialize
/sdd init ko

# 2. Create Issue (using GitHub template)

# 3. Analyze
/sdd analyze 1

# 4. Design (continues after analysis is complete)
/sdd design 1

# 5. Implement (TDD)
/sdd implement 1

# 6. Test
/sdd test 1

Going from Issue creation through Analyze → Design → Implement → Test provided a consistent process throughout development. Each stage’s output remained in Issue comments, making it possible to trace back and understand why certain decisions were made.

What especially impressed me was how the testing stage had the AI write E2E test code and even create a QA checklist. The manual QA items were specific enough to use directly for testing.

Conclusion

In this post, I walked through the SDD Plugin development process phase by phase.

Looking back, the two most important decisions were:

  1. Splitting SKILL.md into a router — Context efficiency improved significantly.
  2. Storing all outputs on GitHub — The resume feature became naturally possible.

If you’re curious about what AI engineering principles were applied to this plugin, check out AI Engineering Applied to SDD Plugin — Analyzed Through 4 Paradigms.

Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!

App promotion

You can use the applications that are created by this blog writer Deku.
Deku created the applications with Flutter.

If you have interested, please try to download them for free.



SHARE
Twitter Facebook RSS