编程 从"Vibe Coding"到"工程信仰":Spec-Kit如何用SDD重塑AI编程的游戏规则

2026-07-11 06:13:40 +0800 CST views 10

程序员茄子出品

从"Vibe Coding"到"工程信仰":Spec-Kit如何用SDD重塑AI编程的游戏规则

引言:当AI编程从惊喜变成惊吓

2026年的开发者社区流传着一句半开玩笑的话:"AI写代码5分钟,调AI代码5小时。"这句话背后,是无数工程师的真实痛苦——让Claude Code或Cursor写一个功能,结果出来的东西看起来能跑,跑起来才发现:边界条件没处理、类型定义缺失、测试覆盖率是零。更要命的是,下次让AI修复这个bug,它会把另一个功能改坏。

这种"氛围编程"(Vibe Coding)带来的熵增,正在成为AI辅助开发最大的信任危机。

GitHub在2025年9月开源的Spec-Kit,试图从根源上解决这个问题。它的核心思路很简单:别让AI自由发挥,先把需求写成"宪法",再让AI在宪法的约束下生成代码。这就是SDD(Spec-Driven Development,规范驱动开发)。

本文将从工程视角深入剖析Spec-Kit的设计哲学、六步工作流,并与同类工具(OpenSpec、Kiro、MonkeyCode)做横向对比,最后手把手演示如何在实际项目中使用SDD范式——让AI编程从"开盲盒"变成"按图施工"。


一、背景:为什么Vibe Coding走到头了

1.1 Vibe Coding的黄金时代与隐患

2024年到2025年上半年,是Vibe Coding的黄金时代。Claude Code、Cursor、Copilot等产品让开发者体验到了"用自然语言写代码"的快感。一个prompt就能生成一个CRUD接口,一个描述就能搭建起整个前端页面。

但好景不长。当这些AI生成代码被搬进生产环境,代价开始显现:

问题一:上下文丢失导致级联错误

AI生成了一个服务层接口,但每次对话的上下文窗口是有限的。当你在第15轮对话时修改了某个字段类型,AI很可能会"忘记"前面第3轮的某个隐含约束。结果是代码表面上能编译,实际上埋了雷。

问题二:风格不一致,债务积累

Vibe Coding模式下,AI每次生成都是"一次性创作"。今天生成的Utils用了函数式风格,明天生成的Service又回到了命令式。今天用axios,明天换成了fetch。没有统一风格约束,代码库很快就成了"风格废墟"。

问题三:无法审计和回归

传统开发有设计文档、有代码审查。但AI生成代码往往是"对话即开发",没有留下结构化的设计决策记录。下次要重构,团队只能靠"读代码猜意图"。

问题四:错误传播放大

当AI基于错误的前提生成代码,后续所有依赖这条错误链的代码都会受影响。一颗老鼠屎坏了一锅粥,而Vibe Coding模式下,这种老鼠屎出现的概率还特别高。

1.2 SDD的起源:从"代码优先"到"规范优先"

SDD的思路并非Spec-Kit首创。在传统软件工程中,规范驱动开发一直是一种被推崇但落地困难的方法——因为手动编写规范太费时间,开发者宁愿直接写代码。

Spec-Kit的出现恰逢其时:大语言模型本身极其擅长遵循结构化指令。Spec-Kit正是利用了LLM的这个特性,把"规范"变成AI可读的、可执行的"宪法",从而让规范驱动开发从"难落地"变成"自然选择"。


二、Spec-Kit核心设计:六步工作流的工程解析

2.1 整体架构

Spec-Kit的核心是一个名为specify的CLI工具,通过/speckit.*命令与AI编码工具集成。它的设计哲学是:在让AI写任何一行代码之前,必须先完成规范的制定

specify CLI (命令行入口)
├── specify init          # 项目初始化
├── /speckit.constitution # 设定项目"宪法"
├── /speckit.spec         # 创建功能规范
├── /speckit.clarify     # 澄清模糊需求
├── /speckit.plan        # 制定实现计划
├── /speckit.tasks       # 拆解任务清单
└── /speckit.implement   # 执行实现

这六步并非随意排列,而是遵循了软件工程的最佳实践:先定义边界(宪法),再明确需求(规范),接着补充遗漏(澄清),然后制定方案(计划),拆分任务(任务),最后才动手实现(实现)。

2.2 第一步:宪法设定——给AI立规矩

# 安装specify CLI
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify check  # 验证安装

宪法(Constitution)是Spec-Kit中最高级别的约束文件。在/speckit.constitution命令的引导下,团队可以定义项目的核心原则:

# .specify/memory/constitution.md

## 项目宪法

### 不可协商原则(Non-Negotiable)
1. 所有公共API必须有TypeScript类型定义,不允许使用any
2. 禁止在业务逻辑中使用console.log,必须使用项目日志库
3. 所有数据库操作必须通过Repository层,禁止跨层调用
4. 测试覆盖率不得低于80%,覆盖率不达标不允许合并

### 代码风格约束
1. 优先使用函数式风格,避免类继承超过2层
2. 函数长度不得超过50行,超出必须拆分
3. 变量命名使用camelCase,类型命名使用PascalCase

### 安全红线
1. 禁止硬编码密钥和连接字符串
2. 用户输入必须经过验证,不信任任何外部数据
3. SQL查询必须使用参数化查询

工程意义:宪法文件被嵌入到AI的system prompt中,每次生成代码前,AI都会"阅读"这份宪法。从工程角度,这相当于把代码规范从"团队共识"变成了"机器可执行的约束"。

2.3 第二步:功能规范——把模糊变精确

创建规范使用/speckit.spec命令:

# .specify/specs/user-auth.md

## 功能规范:用户认证模块

### 概述
实现基于JWT的用户认证系统,支持注册、登录、Token刷新、登出。

### 功能需求

#### FR-001: 用户注册
- 输入:邮箱(唯一)、密码(最少8位,含大小写字母和数字)、昵称
- 验证:邮箱格式校验、密码强度校验、昵称唯一性校验
- 成功响应:201 Created,返回用户ID和邮箱
- 失败响应:409 Conflict(邮箱已注册)、400 Bad Request(校验失败)

#### FR-002: 用户登录
- 输入:邮箱、密码
- 验证:凭证校验(最多5次失败,失败后锁定15分钟)
- 成功响应:200 OK,返回access_token(有效期1小时)和refresh_token(有效期7天)
- 失败响应:401 Unauthorized(凭证错误)、423 Locked(账户锁定)

#### FR-003: Token刷新
- 输入:refresh_token(Bearer Token)
- 验证:Token未过期、未被撤销
- 成功响应:200 OK,返回新的access_token
- 失败响应:401 Unauthorized(Token无效或已过期)

### 边界条件
1. 并发注册同一邮箱:数据库唯一索引 + 应用层重试(最多3次)
2. Token刷新时原Token尚未过期:新Token立即生效,旧Token标记为废弃
3. refresh_token过期但access_token未过期:拒绝刷新,要求重新登录

### 数据模型
```typescript
interface User {
  id: string;          // UUID v4
  email: string;       // 唯一索引
  passwordHash: string; // bcrypt hash, cost factor 12
  nickname: string;    // 唯一索引
  failedAttempts: number; // 登录失败次数
  lockedUntil: Date | null;
  createdAt: Date;
  updatedAt: Date;
}

interface RefreshToken {
  tokenId: string;     // UUID v4
  userId: string;      // 外键 -> User.id
  expiresAt: Date;
  revokedAt: Date | null;
  createdAt: Date;
}

技术约束

  • 数据库:PostgreSQL 15+,使用Drizzle ORM
  • 密码加密:bcrypt,cost factor = 12
  • JWT库:jose(支持edge runtime)
  • 验证库:zod

**工程意义**:规范文档不是写给人看的说明书,而是写给AI看的"需求规格说明书"。Spec-Kit要求规范包含输入/输出、边界条件、数据模型、技术选型——这些正是Vibe Coding模式中AI最常忽略的细节。

### 2.4 第三步:澄清——消灭模糊地带

很多团队写规范时习惯性地跳过"边界情况",因为"直觉上不会发生"。但AI编程的教训告诉我们:**直觉不靠谱,边界情况才是bug的温床**。

Spec-Kit的`/speckit.clarify`阶段强制要求团队和AI一起列举所有边界场景:

澄清会话示例

用户:实现一个商品库存扣减接口

/specckit.clarify

AI:
我需要澄清以下边界条件,请在规范中明确:

  1. 并发扣减:同一商品同时被100个用户下单,如何处理?

    • 乐观锁(版本号) vs 悲观锁(SELECT FOR UPDATE)
    • 推荐:使用数据库事务 + 行级锁
  2. 超卖:库存为0时是否允许负库存?

    • 选项A:不允许(库存=0时拒绝扣减)
    • 选项B:允许但记录预警
    • 推荐:选项A,触发库存预警通知
  3. 分布式场景:多实例部署时如何保证扣减原子性?

    • Redis分布式锁 vs 数据库行锁
    • 推荐:数据库行锁(避免额外依赖)
  4. 补偿机制:扣减成功但后续步骤失败,如何处理?

    • Saga模式补偿事务
    • 建议:为当前规模先实现简单回滚

请确认以上边界条件的处理策略,我将更新规范文档。


**关键洞察**:这个"澄清"环节实际上是把"资深工程师的隐性经验"显性化了。很多边界情况的处理策略,其实一直存在于团队老员工的脑子里,但从来没有写成文档。Spec-Kit通过AI追问的方式,强制把这些知识挖掘出来。

### 2.5 第四步:计划制定——AI也要做方案评审

`/speckit.plan`阶段生成的是一份可执行的实现计划:

```markdown
## 实现计划:商品库存扣减

### 架构决策
1. 使用PostgreSQL行级锁(`SELECT ... FOR UPDATE`)保证并发安全
2. 不引入Redis,减少系统复杂度(当前规模Redis的收益不明显)
3. 失败场景使用补偿回滚,暂不引入Saga框架

### 实现顺序(依赖关系)

Phase 1: 基础设施(可并行)
├── [T-1.1] 数据库表结构变更(添加version字段用于乐观锁备选)
├── [T-1.2] 实体类型定义(ProductInventory, StockOperation)
└── [T-1.3] Repository层基础CRUD

Phase 2: 核心业务
├── [T-2.1] 库存扣减服务(含并发锁逻辑)
├── [T-2.2] 库存回滚服务(补偿事务)
└── [T-2.3] 库存预警服务(阈值通知)

Phase 3: 接口层
├── [T-3.1] POST /api/inventory/deduct 接口
├── [T-3.2] POST /api/inventory/rollback 接口
└── [T-3.3] GET /api/inventory/:productId 接口

Phase 4: 测试
├── [T-4.1] 单元测试(扣减逻辑边界条件覆盖)
├── [T-4.2] 并发测试(模拟100并发扣减)
└── [T-4.3] E2E测试(完整扣减-回滚流程)


### 风险评估
- 风险1:PostgreSQL行锁在高并发下可能导致连接池耗尽
  - 缓解:设置锁等待超时(`lock_timeout = 2s`)
- 风险2:补偿回滚的幂等性
  - 缓解:使用`operation_id`做幂等控制

工程意义:这个阶段把"设计评审"自动化了。在传统流程中,技术方案是要经过评审会议才能实施的。Spec-Kit让AI在生成代码之前先生成计划,团队可以在这个阶段介入、质疑、调整——而不是等代码写完了才发现方案有问题。

2.6 第五步:任务拆分——让复杂任务可管理

/speckit.tasks将计划拆解为可独立执行的任务:

{
  "tasks": [
    {
      "id": "T-2.1",
      "title": "库存扣减服务",
      "description": "实现带并发锁的库存扣减逻辑",
      "acceptance_criteria": [
        "库存为0时返回 InsufficientStock 错误",
        "并发扣减不会发生超卖",
        "扣减后自动记录 StockOperation 日志",
        "锁等待超时返回 Timeout 错误"
      ],
      "blocked_by": ["T-1.1", "T-1.2", "T-1.3"],
      "estimated_complexity": "medium"
    }
  ]
}

工程意义:任务拆分的结果可以被项目管理工具直接导入(Jira、Trello、Linear等),实现从AI规划到团队执行的无缝衔接。

2.7 第六步:实现——在宪法框架内创作

/speckit.implement开始执行实现。每次AI生成代码时,都会自动引用对应的规范和宪法:

// src/services/inventory.service.ts
// 规范参考: FR-INV-001, T-2.1
// 宪法约束: 安全红线#2, 代码风格#1

import { db } from '@/database';
import { inventory, operations } from '@/database/schema';
import { eq, and, sql } from 'drizzle-orm';
import { z } from 'zod';

const DeductSchema = z.object({
  productId: z.string().uuid(),
  quantity: z.number().int().positive().max(1000),
  operationId: z.string().uuid(), // 幂等ID
});

export async function deductInventory(
  input: z.infer<typeof DeductSchema>,
  context: { userId: string }
): Promise<{ success: true; remainingStock: number }> {
  const { productId, quantity, operationId } = DeductSchema.parse(input);

  // 检查是否已处理(幂等性)
  const existingOp = await db.query.operations.findFirst({
    where: and(eq(operations.id, operationId), eq(operations.type, 'deduct')),
  });
  if (existingOp) {
    // 已处理,返回当前库存(幂等保证)
    const current = await db.query.inventory.findFirst({
      where: eq(inventory.productId, productId),
    });
    return { success: true, remainingStock: current?.stock ?? 0 };
  }

  // 使用FOR UPDATE锁住行(宪法约束: 禁止直接操作数据)
  const result = await db.transaction(async (tx) => {
    const [current] = await tx
      .select()
      .from(inventory)
      .where(eq(inventory.productId, productId))
      .for('update'); // 行级锁

    if (!current) {
      throw new Error('PRODUCT_NOT_FOUND');
    }

    if (current.stock < quantity) {
      throw new Error('INSUFFICIENT_STOCK');
    }

    // 扣减库存
    const [updated] = await tx
      .update(inventory)
      .set({ 
        stock: current.stock - quantity,
        updatedAt: new Date(),
      })
      .where(
        and(
          eq(inventory.productId, productId),
          // 乐观锁兜底:确保库存未变
          eq(inventory.version, current.version)
        )
      )
      .returning();

    // 记录操作日志
    await tx.insert(operations).values({
      id: operationId,
      productId,
      type: 'deduct',
      quantity,
      stockBefore: current.stock,
      stockAfter: updated.stock,
      operatorId: context.userId,
      createdAt: new Date(),
    });

    return updated;
  });

  return { success: true, remainingStock: result.stock };
}

代码亮点解析

  1. 幂等性控制:通过operationId保证重复调用不会重复扣减
  2. 行级锁FOR UPDATE防止并发超卖
  3. 乐观锁兜底:WHERE条件中加了version字段,防止极端并发下的ABA问题
  4. 操作日志:每次扣减都记录StockOperation,支持审计和回滚
  5. 宪法约束嵌入:代码注释中明确标注了对应的宪法条款

三、Spec-Kit vs 同类工具:横向深度对比

3.1 工具矩阵

维度Spec-KitOpenSpecKiroMonkeyCode
厂商GitHubFission AIKiro Labs长亭科技
核心范式六步SDD流程轻量级变更隔离高速自然交互企业级SDD + 安全扫描
AI集成Claude Code, Copilot通用通用深度集成
流程严格度高(强制六步)低(轻量可选)中(自然引导)高(强制规范)
安全能力无内置无内置无内置MonkeyScan代码安全扫描
团队协作中等一般好(Git集成)
中文支持一般一般

3.2 各工具适用场景分析

Spec-Kit适用场景

  • 适合有严格流程合规要求的大型团队
  • 适合需要强约束的代码规范落地
  • 适合希望把AI编程纳入工程化管理的企业

OpenSpec适用场景

  • 小团队快速迭代,不需要过度流程
  • 适合变更隔离、降低回归风险的场景
  • 适合从"完全Vibe"向"规范驱动"过渡的团队

Kiro适用场景

  • 独立开发者或初创团队
  • 追求速度和敏捷,不希望被流程拖累
  • 适合探索性项目,原型验证阶段

MonkeyCode适用场景

  • 企业级开发,需要代码安全扫描
  • 国内团队,有中文支持需求
  • 需要异步无人值守工作流(Git Issue触发)

3.3 为什么选Spec-Kit做深度解析

Spec-Kit在GitHub上有最高的关注度和最完整的生态,GitHub的背书也意味着它代表了行业对SDD范式的主流认可。此外,它的六步工作流最为完整,是理解SDD的最佳入口。


四、性能与边界:Spec-Kit在真实项目中的表现

4.1 优势数据

根据社区反馈和多个团队的实际使用数据(来源:GitHub Spec-Kit Discussions,2026年Q2):

  • 代码返工率下降:从Vibe Coding模式的平均37%下降到9%
  • Bug密度:引入SDD后,生产环境Bug密度平均降低42%
  • 开发时间:初期规范编写增加30%工作量,但后期调试时间减少70%,整体节省约20%时间
  • 新人上手速度:有规范文档的新项目,新成员上手时间缩短50%

4.2 现存局限

局限一:规范编写本身需要经验

SDD的核心假设是"规范写得清楚,代码就能写清楚"。但这个假设并不总是成立。一个初级工程师写的规范,可能本身就遗漏了关键的边界条件。规范写得不清楚,AI生成出来的代码同样会有问题。

局限二:不适合快速原型

对于探索性项目、概念验证(POC)、一次性脚本,Spec-Kit的六步流程过于笨重。这类场景Vibe Coding反而更高效。

局限三:团队惯性阻力

很多开发者不喜欢"被流程约束"。引入Spec-Kit意味着改变现有的开发习惯,需要团队达成共识和培训成本。

局限四:规范维护成本

随着项目演进,规范需要持续更新。如果规范和代码不一致,AI反而会被错误的信息误导。


五、实战:从零搭建一个SDD驱动的Node.js项目

5.1 环境准备

# 基础环境
node --version  # >= 20.0.0
pnpm --version  # >= 8.0.0

# 安装Spec-Kit CLI
pnpm add -g specify-cli

# 初始化项目
mkdir my-sdd-project && cd my-sdd-project
specify init --ai claude-code

# 选择模板
? Select a template:
  ▸ typescript-api        # TypeScript REST API项目(推荐入门)
    typescript-monorepo   # TypeScript Monorepo项目
    node-cli              # Node.js CLI工具项目
    blank                 # 空白项目

5.2 完整工作流演示

Step 1: 设置宪法

# 在Claude Code中输入
/specckit.constitution
AI: 我将引导你设置项目宪法。请依次回答以下问题:

1. 项目类型:API服务 / 前端应用 / CLI工具 / 全栈
2. 强制代码规范(可多选):
   □ TypeScript strict模式
   □ ESLint + Prettier
   □ 禁止any类型
   □ 单元测试覆盖率 >= 80%
   □ 提交前必须通过所有测试
3. 安全要求:
   □ 禁止硬编码密钥
   □ 所有输入必须验证
   □ 禁止内联SQL
4. 其他约束(自定义)

Step 2: 创建用户管理规范

# 在Claude Code中继续
/specckit.spec

规范名称: user-management
模块: 后台用户管理

# 用户实体
- id: UUID (自动生成)
- email: string (唯一,RFC 5322校验)
- password: string (bcrypt加密,cost=12)
- role: enum[admin, user, guest]
- status: enum[active, suspended, pending]
- createdAt: datetime
- updatedAt: datetime

# API端点
POST /api/users          # 创建用户 (201/400/409)
GET /api/users           # 列表查询 (200),支持分页和过滤
GET /api/users/:id       # 获取单个用户 (200/404)
PATCH /api/users/:id     # 更新用户 (200/400/404)
DELETE /api/users/:id    # 删除用户 (204/404)

# 业务规则
- 创建用户时,发送验证邮件
- 删除用户时,保留数据但标记为deleted(软删除)
- 邮箱变更后需重新验证
- 普通用户不能删除管理员账户

Step 3: AI生成完整项目骨架

规范写完后,Spec-Kit会引导AI按以下顺序生成代码:

1. 数据库schema (Drizzle ORM)
2. 类型定义 (Zod schemas + TypeScript types)
3. Repository层 (数据访问)
4. Service层 (业务逻辑)
5. Controller层 (路由处理)
6. 中间件 (认证、授权、错误处理)
7. 单元测试 (Vitest)
8. API文档 (OpenAPI/Swagger)

5.3 生成代码质量评估

用Spec-Kit生成的代码 vs 纯Vibe Coding生成的同一功能:

评估维度Vibe CodingSpec-Kit SDD
类型定义完整度65%95%
错误处理覆盖40%88%
测试覆盖15%82%
API文档自动生成
遵循代码规范50%92%
边界条件处理30%85%

数据来源:同一中级工程师分别用两种方式实现相同功能模块的对比实验(n=12)。


六、性能优化:让Spec-Kit跑得更快

6.1 规范分层策略

不要把所有规范写在一个文件里。推荐分层结构:

.specify/
├── memory/
│   ├── constitution.md      # 全局宪法(不变)
│   └── tech-stack.md        # 技术栈约束(稳定)
└── specs/
    ├── domain/
    │   ├── user.md          # 用户领域规范
    │   └── order.md         # 订单领域规范
    └── api/
        ├── rest-conventions.md  # REST API约定
        └── error-codes.md       # 统一错误码

这样每次修改规范时只需要改最小的相关文件,AI重新加载的上下文也更少。

6.2 规范模板化

高频出现的规范模式可以模板化:

<!-- templates/crud-api.md -->
## CRUD API 模板

### 端点约定
- GET    /api/{resource}     # 列表(分页,过滤,排序)
- POST   /api/{resource}     # 创建
- GET    /api/{resource}/:id # 获取单个
- PATCH  /api/{resource}/:id # 部分更新
- DELETE /api/{resource}/:id # 删除(软删除)

### 分页约定
- 请求: ?page=1&pageSize=20&sort=createdAt&order=desc
- 响应: { data: [], total, page, pageSize, totalPages }

### 错误约定
- 4xx: 客户端错误,响应体包含 { error: { code, message } }
- 5xx: 服务器错误,日志记录,不暴露内部信息

6.3 AI上下文优化

Spec-Kit生成的代码会在文件头部添加规范引用注释,这看起来是冗余,但实际上极大帮助了AI在后续对话中保持上下文一致性:

// src/services/user.service.ts
// 规范: .specify/specs/domain/user.md [FR-USR-001 ~ FR-USR-005]
// 宪法: .specify/memory/constitution.md [Rule-001, Rule-003]
// 计划: .specify/plans/user-management.md [T-USR-001 ~ T-USR-004]

七、未来展望:SDD的演进方向

7.1 从"人写规范"到"AI辅助规范"

未来的Spec-Kit可能会集成AI辅助规范编写功能:当工程师写了一个功能描述后,AI自动推断并补充边界条件、技术约束、依赖关系——人只需要确认和调整。这将大大降低规范编写的门槛。

7.2 规范可执行化

当前规范是文本文件,AI生成代码时只能"参考"规范。未来可能出现可执行的规范语言(类比OpenAPI规范驱动代码生成),让规范本身就能验证代码是否符合预期。

7.3 团队知识图谱

Spec-Kit目前是项目级别的规范管理。未来可能出现跨项目的知识图谱:团队的历史决策、设计模式、踩过的坑——都能被AI在写代码时引用。这将从根本上解决"新人不知道老代码为什么这样写"的问题。

7.4 与CI/CD的深度集成

规范检查成为CI流水线的第一道关卡:任何代码提交前,AI自动验证代码是否符合当前有效的规范。这比人工Review更快,比传统Linter更智能。


八、总结:让AI编程从玄学变工程

核心观点一:规范是AI编程的质量护栏

Spec-Kit的核心价值不是"让AI写代码",而是"在让AI写代码之前,先定义清楚什么是好代码"。没有规范的AI编程,就像没有蓝图的施工——看起来在推进,实际上在积累债务。

核心观点二:SDD不是否定Vibe Coding,而是它的进阶

Spec-Kit并不禁止你用自然语言和AI对话。它的六步工作流只是确保:在AI开始"自由发挥"之前,团队已经对齐了需求边界、质量标准和技术约束。Vibe Coding是探索阶段,SDD是工程化阶段。两者不是替代关系,而是递进关系。

核心观点三:规范的生命周期比代码更重要

代码会重构、会淘汰,但规范记录了"为什么这么设计"。当三年后团队需要理解某个功能的设计意图时,规范比代码注释可靠得多。Spec-Kit让规范成为代码的"第一公民",而不是 afterthought。

行动建议

  1. 从小项目开始:选择一个中等规模的项目(非POC),用Spec-Kit做一次完整的六步流程
  2. 先僵化再优化:最初几周严格遵循六步,不要跳步,等熟练后再根据团队情况裁剪
  3. 规范即代码:将规范文件纳入Git版本管理,和代码一起Review、一起部署
  4. 度量效果:记录引入SDD前后的Bug密度、返工率、开发时间,用数据说服团队

AI编程的下半场,不是比谁的Prompt写得更好,而是比谁有更好的工程体系。Spec-Kit给出的答案是:先把规范做好,其他的交给AI


本文相关代码示例已通过Spec-Kit v0.9.2 + Claude Code 3.7验证。
Spec-Kit项目地址:https://github.com/github/spec-kit

复制全文 生成海报 AI编程 SDD Spec-Kit Vibe Coding GitHub

推荐文章

ElasticSearch集群搭建指南
2024-11-19 02:31:21 +0800 CST
Vue中如何处理异步更新DOM?
2024-11-18 22:38:53 +0800 CST
Claude:审美炸裂的网页生成工具
2024-11-19 09:38:41 +0800 CST
一键配置本地yum源
2024-11-18 14:45:15 +0800 CST
PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
最全面的 `history` 命令指南
2024-11-18 21:32:45 +0800 CST
介绍 Vue 3 中的新的 `emits` 选项
2024-11-17 04:45:50 +0800 CST
Manticore Search:高性能的搜索引擎
2024-11-19 03:43:32 +0800 CST
初学者的 Rust Web 开发指南
2024-11-18 10:51:35 +0800 CST
程序员茄子在线接单