Doubt-Driven Development(质疑驱动开发)
Overview
自信不等于正确。长会话把假设悄悄熬成"事实",没人察觉。本技能是在每个非平凡决策落地前,派一个新鲜上下文的评审员来证伪,不是来表扬。注意:这不是事后 review,是飞行中交叉审问,改向还便宜时动手。
When to Use
非平凡(中一条即算):引入/改分支逻辑;跨模块/服务边界;断言类型系统验不了的东西(线程安全、幂等、顺序、不变量);正确性依赖未来读者看不见的上下文; blast 半径不可逆(生产发布、数据迁移、公开 API 变更)。
- 高风险(生产、安全、不可逆)前
- 在不熟的代码里改核心流程时
- 对自己很有信心的输出("这肯定对/肯定快/肯定合 spec")——自信时刻即盲点时刻
- 架构决策下不定、非平凡代码将提交时
When NOT to use:
- 机械操作(改名、格式化、移文件)、跑工具、读代码总结
- 用户明确说快比对重要
- 一行改动显而易见正确
每击必疑即发不出货——只疑非平凡。
五步(CLAIM→EXTRACT→DOUBT→RECONCILE→STOP)
- [ ] 1 CLAIM:写下断言 + 为何重要
- [ ] 2 EXTRACT:剥出最小可审单元(产物 + 契约,去推理)
- [ ] 3 DOUBT:新鲜上下文对抗评审(只给产物+契约,不给结论)
- [ ] 4 RECONCILE:逐条对产物文本分类,不橡皮图章
- [ ] 5 STOP:命中停止条件(只剩 trivial / 3 轮 / 用户拍板)
1 CLAIM:两三行写清断言 + 为何重要。写不 compact 即还没想清,先浮出水面再审。
CLAIM: "新缓存层在 spec 的读多写少负载下线程安全。"
WHY: 此处 race 坏用户数据且 QA 难发现。
2 EXTRACT:评审员要产物 + 契约,不要心路。代码给 diff/函数不给整文件;决策给 3-5 句提案 + 须满足的约束;断言给 claim + 所谓证据(与 CLAIM 块分开)。剥掉你的推理——给结论即换回附和。单元须一遍装进脑子:500 行 PR 先分解。
3 DOUBT:评审提示必须是对抗式。"找毛病"不是"看看好不好":
对抗评审。找出这个产物的毛病。假设作者过度自信。找:
未声明假设、未处理边界、隐藏耦合/共享态、违契约的路、
破既有约定的地方、异常输入下的失败。
不许表扬,不许总结。找不到即明确说穷尽后无发现。
产物:<贴产物>
契约:<贴契约>
只给产物 + 契约,不给 CLAIM——给结论即偏向同意。评审员须独立判定产物是否合契约。
4 RECONCILE:评审输出是数据不是判决,你仍是协调人。逐条对产物文本重读再分类(优先级从上到下,先中先得):
- 契约误读——契约没写清先修契约,下轮重分
- 有效可改——真问题改产物,重入循环
- 有效权衡——修比认贵,写下权衡让用户看见
- 噪音——评审缺上下文误报,记下并问:契约补一句能否防下次误报
新鲜不等于对——缺上下文的评审也会错,不跪只分。
5 STOP:下轮只剩 trivial/已议发现,或 3 轮走完(升级给用户,不独自磨第四轮),或用户说发。3 轮还有实质问题即产物没 ready,是信号不是继续的理由。嫌 3 轮不够多半是产物太大——回第 2 步分解,不放宽 bound。
降级模式(无独立评审时不得阻塞任务)
首选主会话派子代理做新鲜评审;派不出(如不许嵌套)即降级:把产物 + 契约重写成带硬分隔的新自提示,走 1-5 自问,并标注降级(自带上下文非新鲜),有用户在即优先升级。缺独立 reviewer 不是阻塞普通任务的理由——降级自检即可完成;只有高风险/不可逆项才值得专门等真正独立的新鲜上下文。
Quick Reference
| 场景 | 动作 |
|---|---|
| 生产/不可逆/不熟 | 走五步,不凭信心直执 |
| 自信爆棚的输出 | 信心即开疑信号,先 CLAIM 再审 |
| 评审说没问题 | 看是真无还是提示词太软;提示词必须对抗式 |
| 评审有发现 | 对产物文本逐条分类,不跪不无视 |
| 3 轮还有实质问题 | 停,升级给用户,产物没 ready |
| 派不出评审 | 降级自问 + 标注,有用户即升级 |
Common Rationalizations
| Excuse | Reality |
|---|---|
| "我很确定,跳过吧" | 确定感与正确率在新问题上最不相关;确定时刻即盲点时刻 |
| "派评审太贵" | 带五步的评审有界;生产事故无界 |
| "评审只会挑刺" | 不限"违契约才算"的提示词才会;收紧提示词 |
| "最后统一 review 就行" | 事后 review 是验尸;飞行中改向便宜,合后贵 |
| "步步疑发不出货" | 只疑非平凡;机械操作不走本技能 |
| "评审反对即我错" | 评审缺上下文;分歧是信息不是判决,重读产物再定 |
| "跨模型总更好" | 异构补盲点但加成本;有条件就加,没条件单模型 + 对抗提示也够 |
Red Flags — STOP
- 给改名/格式化派新鲜评审(杀鸡用牛刀)
- 评审输出不看产物文本直接认(跪)
- 超 3 轮不升级独自磨
- 提示词是"看看好不好"而非"找毛病"
- 高风险赶时间跳疑
- 同一未改产物反复派审(刷相同发现即拖延)
- 2+ 轮有实质发现但零 actionable(演疑不决疑,升级)
- 提交后再疑(那是事后 review)
- 把 CLAIM/推理塞给评审(偏向同意)
- 降级自问不标注
以上任一出现 → 停手,回五步修正后再立断言。
Verification
- 每个非平凡决策有 compact CLAIM + 为何重要
- 每产物至少一次新鲜评审(TDD 的 RED 失败测试可抵行为断言的一次)
- 评审只收到产物 + 契约(无 CLAIM、无推理),提示词对抗式
- 发现已对产物文本分类(误读/可改/权衡/噪音),非橡皮图章
- 命中停止条件(trivial/3 轮/用户拍板)
- 降级已标注