理解方法
弄清什么应该写进 Spec、什么留到实现阶段,以及如何让决策可测试。
打开 Spec-First Hub弄清什么应该写进 Spec、什么留到实现阶段,以及如何让决策可测试。
打开 Spec-First Hub用于 schema、错误分类、兼容性、版本策略、Webhook、SDK 和客户端安全。
打开 API 契约 Hub把模糊成功描述改成 Given/When/Then、失败路径和发布证据。
打开验收标准 Hub在代码合并前连接 Prompt、风险登记、允许文件、测试证据和评审门禁。
打开 AI 治理 Hub写团队真正承诺的行为,而不是任务清单或 UI 偏好。
明确这次发布不会改变什么,避免实现过程中悄悄扩大范围。
用示例、失败路径、fixture、日志、截图或指标,让评审者可以检查。
按场景选择功能、API 或 DB 模板;生成器只用于快速起草第一版结构。
不要把“通过评审”当成证明。把测试、日志、上线门禁或人工检查链接到规格。
当一个改动可能以多种合理方式失败时,就值得先写 Spec。典型场景包括客户数据、资金、权限、公开 API、数据库迁移、后台任务、发布开关,以及 AI 生成代码。简单文案修改可以只用清单;退款流程、schema 迁移、合作方接口、通知偏好模型和队列消费者,都应该先有一条书面决策路径。
最快的判断方法是:如果评审者即使通过 PR,仍可能对“期望行为”有不同理解,那就先写规格。Spec 不需要提前决定所有实现细节,但必须写清行为、边界、负责人,以及什么证据能证明这次变更可以发布。
确认目标、非目标、用户可见行为,以及这次发布明确不接受哪些取舍。
检查 API、数据、权限、兼容性、发布顺序、回滚条件和实现约束。
把验收标准转成测试用例、fixture、人工检查和支持团队能识别的失败路径。
检查生成代码是否只改允许文件、是否遵守非目标,以及是否交付了规格要求的证据。
退款流程适合作为第一份练习,因为失败模式很具体。模糊 ticket 只会写“允许用户退款订单”;可评审 Spec 会决定退款窗口、重复请求处理、支付渠道超时状态、客服 override、事件发送、审计日志,以及什么上线指标应该触发暂停。
Spec-First 版本仍然可以很短:已捕获款项 90 天内可退款;同一个 idempotency key 重复请求返回同一个 refund id;支付渠道超时进入 pending confirmation;如果 15 分钟内重复退款尝试超过阈值,就暂停发布。这样产品、研发、QA、支持和 AI 编码工具都能在同一个边界内工作。
# 退款工作流验收切片 Given 一笔 90 天内的已捕获款项 When 使用新的 idempotency key 发起退款 Then 创建一条 refund 记录,发送一次 refund_requested 事件, 并写入包含 actor、charge_id、refund_id 和 reason 的审计日志。 Given 同一个请求用相同 idempotency key 重放 When 服务再次收到请求 Then 返回已有 refund_id,并且不再发送第二次事件。
使用 AI 编码工具时,先贴规格,再要求写代码。边界要清楚到模型可以被评审:允许修改哪些文件,哪些行为不在范围内,哪些测试算作证据,如果规格不清楚时应该先提问还是自行假设。
请把下面的 Spec 作为唯一事实来源。 规则: - 不要实现非目标之外的行为。 - 只修改 Allowed files 中列出的文件。 - 如果需求有歧义,先提问,不要直接实现。 - 每条验收标准都要有测试。 - 最后返回变更文件、测试命令和证据摘要。 Spec: [粘贴已评审的规格]
第一次推行时,不要要求团队一次性改掉所有流程。先选择一个真实但风险可控的需求,把 ticket 里原本最容易口头沟通的部分写成 Spec:目标、非目标、验收标准、边界情况和证据。评审时只问三个问题:行为是否清楚,失败路径是否可测试,合并前需要什么证据。
完成一次后,把最终 Spec、PR、测试结果和上线观察记录放在一起复盘。保留真正帮到评审的字段,删掉没人维护的字段。Spec-First 的重点不是多写文档,而是让团队在实现前先做出可检查的工程决定。
如果你刚接触这个方法,先看 Spec-First 开发 Hub,然后根据眼前工作选择模板。
多数低风险工作只需要一页:目标、非目标、验收标准、边界情况、负责人和证据。
工具适合快速起草结构,但输出后仍要人工补齐真实负责人、测试证据和发布边界。
把规格、非目标、允许修改的文件和验收证据交给 AI。评审边界不清楚前,不要直接要求实现。
下一张真实 ticket,先选模板,再在生成代码或实现前跑一遍评审清单。