Skip to content

Latest commit

 

History

History
377 lines (281 loc) · 11.8 KB

File metadata and controls

377 lines (281 loc) · 11.8 KB

AI 驱动功能开发流程

你决定做什么,AI 自主做完,你体验确认。

核心原则

  • 你是产品经理 + 最终审核者,只参与重大决策
  • AI 是全栈执行者,自主完成 PRD、技术选型、测试、编码、构建、回归验证
  • 中间所有环节 AI 自主闭环,不频繁中断你

角色分工

你的职责 AI 的职责
决定做哪些功能(产品定型) 写 PRD + 自查
启动开发(说"做键盘导航") 写测试 + 写代码(TDD)
体验验证(好不好用?) 技术选型 + 依赖安装
里程碑审核(每个 Tier 完成后) Lint / Typecheck / 构建 / 回归

ICE 打分 + Tier 分档

ICE 是什么

给每个功能打分的工具。三个维度各 1-5 分,相乘得到总分(满分 125)。

维度 含义 5 分 3 分 1 分
I (Impact) 必要性:不做会痛吗? 刚需痛点 明显改善 锦上添花
C (Confidence) 信心:你确定这个评估准吗? 100% 确定 大概是这样 猜的
E (Ease) 容易度:做多容易? 半天内 1-3 天 一周以上

公式:ICE Score = I × C × E

Tier 是什么

按 ICE 分数分档。Tier 本身不是方法论,只是把数字分成人能一眼看懂的档位。

Tier 分数范围 含义 对应优先级
Tier 1 ≥ 3.5(归一化后)或 ICE ≥ 80 必须做 P0/P1
Tier 2 3.0 - 3.5 或 ICE 48-79 值得做 P1/P2
Tier 3 2.5 - 3.0 或 ICE 27-47 可以做 P2/P3
Tier 4 < 2.5 或 ICE < 27 暂缓 P3/P4

ICE、Tier、Roadmap 的关系

它们是同一条流水线的三个步骤

ICE 打分(得到数字) → Tier 分档(得到档位) → Roadmap 排期(得到时间线)
  键盘导航: 125        Tier 1                本周做
  Session备注: 80       Tier 1                本周做
  Session导出: 64       Tier 2                下周做
  • ICE 解决"凭什么是这个排名"
  • Tier 解决"这些排名怎么分组执行"
  • Roadmap 解决"什么时间做什么"

例子:键盘导航的 ICE 打分

必要性 I=5:不用键盘导航,每次都要鼠标点,高频操作很烦
信心   C=5:100% 确定↑↓选中、Enter进入、Esc返回,没有不确定性
容易度 E=5:半天能做完,只改 SessionList.tsx,不需要新组件
ICE = 5 × 5 × 5 = 125 → Tier 1

例子:Token 仪表盘的 ICE 打分

必要性 I=4:确实想看花了多少钱
信心   C=3:不确定 opencode 的 token 字段是否都能取到
容易度 E=2:需要新页面 + 图表库 + 数据聚合,至少 3 天
ICE = 4 × 3 × 2 = 24 → Tier 3

完整流程(4 个 Phase)

Phase 0:选择(你主导)

你告诉 AI "做 {功能名}" 或 "做 Tier 1"。

  • 如果 ROADMAP 已有且 PRD 已通过 → 直接 Phase 2
  • 如果 ROADMAP 已有但无 PRD → Phase 1
  • 如果 ROADMAP 没有 → Phase 1(先加入 ROADMAP)

Phase 1:规划(AI 自主)

AI 自主完成以下工作:

  1. 更新 ROADMAP.md(ICE + Tier + Estimate + Dependencies)
  2. docs/features/xxx.md,必须包含:
    • 用户故事(谁、要什么、为什么)
    • 验收标准(正常路径 + 边缘情况)
    • 影响范围(会修改的文件、可能影响的功能)
    • 技术方案(含数据库变更)
    • 测试计划
    • 回滚方案(数据库回退 SQL + 新增文件列表)
    • Out of Scope(明确不做的事)
    • 进度 checklist(全部未勾选)
  3. PRD 自检(AI 自行完成,不找你):
□ 验收标准是否可测试(不能有"用户体验好"这种主观标准)
□ 边缘情况是否覆盖(空数据、极端数据、组合场景)
□ 技术方案是否可行(检查依赖兼容性、Electron 限制)
□ 影响范围是否完整(读了所有会修改的文件)
□ Out of Scope 是否明确
□ 是否与已有功能的 PRD 矛盾

自检全部通过 → 直接进 Phase 2。不通过 → 自行修正 PRD 再自检。

Phase 2:开发(AI 自主,TDD)

AI 自主完成以下工作:

① 写测试用例
② 写实现代码
③ 跑测试 → 失败?自行调试(最多 3 次)
④ Lint + Typecheck
⑤ 构建验证(npm run build)
⑥ 全量回归测试(不只是当前功能的测试)
⑦ 每完成一步 → 更新 PRD 的进度 checklist

遇到问题时的决策规则

情况 AI 行为
技术问题(方案明确、无副作用) 自主解决,记录决策到 PRD 进度备注
多个方案各有利弊 选最保守的方案,记录理由
需求遗漏 自主补充 PRD 验收标准,标注变更说明
测试失败 自行调试,最多重试 3 次,换方案再试
功能不可行 / 成本远超预期 🔴 停下来找你(影响"做不做"的产品决策)
需要付费外部服务 🔴 停下来找你(影响成本)
安全风险 🔴 停下来找你(影响安全)

约束

  • 需安装新依赖 → 先问(尤其含 native 模块的包)
  • 不得实现 Out of Scope 中的内容
  • 不得"顺手"加 PRD 之外的功能
  • 严格按 PRD 执行,除非自主修正并记录

Phase 3:体验验证(你主导)

AI 输出交付摘要:

"键盘导航已完成。改了 SessionList.tsx + useStore.ts。
 请验证以下场景:
 1. 按↑↓能选中上/下一条
 2. Enter 进入详情
 3. Esc 返回列表
 4. 空列表时不报错"

你启动 App 手动体验,反馈:

你的反馈 AI 行为
✅ 通过 进入 Phase 4
🔄 要改(实现问题) AI 自主修改 → 重新自检 → 再交给你(最多 3 轮)
🔄 要改(需求问题) 回到 Phase 1 重写 PRD
❌ 取消 ROADMAP 标 Cancelled

修改超过 3 轮仍未通过 → AI 建议"取消或拆分该功能"。

Phase 4:收尾(AI 自主)

  1. 更新 PRD.md(加新功能的整体描述)
  2. 更新 ROADMAP.md 状态 → Done
  3. 更新 PRD 进度 checklist → 全部 ✅
  4. 问你是否 git commit(不主动提交)
  5. 问"继续做下一个?" → 是 → Phase 0

你参与的 4 个时刻

时刻 你做什么 频率
产品定型 决定做什么功能、ICE 维度、产品方向 一次性
启动开发 说"做 XX" 或 "做 Tier 1" 每个功能 1 次
体验验证 打开 App 感受"好不好用" 每个功能 1 次
里程碑审核 每个 Tier 完成后整体看一遍 每个 Tier 1 次

中间的 PRD 编写、技术选型、测试、代码、lint、构建、回归 — 全部 AI 自主完成。


功能状态流转

💡 Proposed → 📋 Planned → 📝 PRD Done → 🔨 In Progress → 🔍 Review → ✅ Done
                                                      ↘
                                                       ❌ Cancelled
状态 含义 谁触发
💡 Proposed 刚提出,未评估 AI(发现新功能点)
📋 Planned ICE 已打分,Tier 已定 AI(完成打分)
📝 PRD Done PRD 已写完并通过自检 AI(Phase 1 完成)
🔨 In Progress 正在开发 AI(Phase 2 进行中)
🔍 Review 开发完成,等待你验证 AI(Phase 2 完成)
✅ Done 已验证通过并提交 你(Phase 3 通过)
❌ Cancelled 取消不做 你(任何时候)

文件结构

项目根目录/
├── PRD.md                    ← 产品总文档(持续更新)
├── ROADMAP.md                ← ICE + Tier + 状态总览
├── AGENTS.md                 ← 项目配置(技术栈、构建命令、特殊约束)
├── docs/
│   └── features/
│       ├── keyboard-navigation.md   ← Phase 1 产出的小 PRD
│       └── session-notes.md         ← Phase 1 产出的小 PRD
├── tests/
│   ├── unit/                        ← 数据层 + 逻辑层测试
│   └── integration/                 ← IPC / 跨模块测试
└── migrations/                      ← 数据库迁移脚本
    ├── 001-initial.sql
    ├── 002-add-pinned.sql
    └── 003-add-notes.sql

文件职责

文件 写什么 什么时候更新
ROADMAP.md 所有功能 + ICE 分数 + Tier + 状态 + 依赖 Phase 1 开始时
docs/features/xxx.md 单个功能的详细需求(小 PRD) Phase 1
PRD.md 产品整体描述 + 所有功能概述 Phase 4 收尾时
AGENTS.md 项目技术栈、构建命令、特殊约束 项目初始化时
migrations/xxx.sql 数据库 schema 变更 Phase 2 开发中

PRD 模板

每个 docs/features/xxx.md 使用以下模板:

# {功能名} (ICE: {分数}, Tier: {N}, Estimate: {XS/S/M/L/XL})

## 用户故事
作为 {角色},我想要 {功能},以便 {价值}

## 验收标准

### 正常路径
- [ ] {具体可验证的条件}
- [ ] {具体可验证的条件}

### 边缘情况
- [ ] 空数据时的行为
- [ ] 极端数据量时的性能
- [ ] 与其他功能组合使用时的行为

## 影响范围
- 会修改的现有文件:
- 可能影响的现有功能:
- 新增文件:

## 技术方案
- 实现思路:
- 数据库变更:有/无(具体描述)
- 新增依赖:有/无(具体描述)

## 测试计划
- 测试用例 1:{描述} → 期望 {结果}
- 测试用例 2:{描述} → 期望 {结果}

## 回滚方案
- 数据库变更:有无,如有写回退 SQL
- 新增文件列表(便于删除)

## Out of Scope
- {明确列出本次不做的事情}

## 依赖
- Depends On:{依赖的其他功能,无则写"无"}

## 进度
- [ ] PRD 自检通过
- [ ] 测试用例已写完
- [ ] 实现代码已写完
- [ ] Lint / Typecheck 通过
- [ ] 构建验证通过
- [ ] 全量回归测试通过
- [ ] 等待用户验证
- [ ] 验证通过

ROADMAP 状态列

ROADMAP.md 中每个功能包含以下列:

说明
功能 功能名称
I Impact 必要性 (1-5)
C Confidence 信心 (1-5)
E Ease 容易度 (1-5)
ICE I × C × E
Tier 1/2/3/4
Estimate XS=2h / S=0.5d / M=1d / L=3d / XL=5d
Depends On 依赖的其他功能
Status 状态(见状态流转)

功能拆分规则

如果预估超过 L(3 天),AI 主动提出拆分为子功能,每个子功能单独走一遍完整流程。

例:Token/Cost 仪表盘(预估 5 天 = XL)可拆分为:

  • 子功能 A:Token 数据聚合逻辑(M,1 天)
  • 子功能 B:仪表盘 UI 渲染(M,1 天)
  • 子功能 C:按日/周/月筛选(S,0.5 天)

Bug 修复流程(简化版)

Bug 不需要走完整流程,走简化版:

1. AI 确认 bug 可复现
2. 写测试(先复现 bug)
3. 修复代码
4. 测试通过 + Lint + Typecheck + 构建
5. 告诉你"已修复,请验证"
6. 你验证 → 通过 → commit

不需要 PRD、不需要 ROADMAP、不需要 Tier。


会话断开恢复

如果中途关了电脑或会话断开:

  1. AI 读取 docs/features/xxx.md 的进度 checklist
  2. 从第一个未勾选项继续
  3. 如果 checklist 已全部勾选但 ROADMAP 状态不是 Done → 说明在等你验证

对比:有流程 vs 没流程

没有流程 有流程
功能选择 想到什么做什么 ICE 打分 → Tier 分档 → 按顺序做
AI 交互 频繁停下来问你 自主完成 95% 的决策
质量保证 没有测试,出回归 bug TDD + 回归测试
方向把控 做 3 天发现方向不对 PRD 自检确保方向正确
优先级 不知道哪个先做 ROADMAP 一眼看清
文档 过了一周忘了为什么这样做 每个功能有完整 PRD + 进度
你的参与 每步都要确认 只在启动和验证时参与