13 原型与便签
把原型限定为学习工具,先写未知、观察指标和丢弃条件,避免临时结构偷渡进生产。
学习目标
- 能把“13 原型与便签”解释为围绕未知量设计的学习实验,而不是提前承诺的产品实现
- 能用“提示21:用原型学习”定义保真度、观察指标、丢弃条件和生产边界,并把便签变成可更新的假设记录
- 能在真实项目中故意让原型触及一个边界,保存结论与首个失配,决定丢弃、重写或升级,并让独立复核者重放
为什么 13 原型与便签不是低配产品
本页依据 David Thomas、Andrew Hunt《程序员修炼之道:通向务实的最高境界(第2版)》,云风译,电子工业出版社,2020年4月,ISBN 9787121384356 的公开完整中文目录,独立重构 13 原型与便签。本页不复制原书正文、插图、练习答案或代码,而把目录命题转写成原型学习回路、生产门禁、反例和复核证据。
原型的第一产物是知识,不是代码资产。它可以用假数据、手工步骤、纸面流程、低保真界面或临时脚本快速回答一个未知;但必须声明牺牲了什么、观察什么、何时丢弃,以及哪些约束还没有验证。把演示顺利误认为产品可用,会把临时结构、假设和安全缺口一并带进生产。
便签也是实验工件,而不是永久任务清单。每张便签应表达一个问题、假设、证据、下一步或拒绝条件,能够移动、合并、拆分和过期;它的价值在于让未知可见,并帮助团队决定下一次最小学习动作。
13 原型与便签:学习合同
| 节点 | 要问的问题 | 可观察产物 | 失败动作 |
|---|---|---|---|
| 未知量 | 现在缺少哪一条会改变决定的信息 | Learning Question 和假设 | 缩小问题,不先写产品代码 |
| 原型 | 用多低的成本能产生相关证据 | Prototype Fidelity、时间盒和范围 | 降低保真度或更换实验 |
| 观察 | 哪个结果支持或否定假设 | Observation Signal、用户反馈和日志 | 先记录异常,不修改结论 |
| 结论 | 这次实验真正学到了什么 | 结论、反例和未覆盖条件 | 标记待验证或重新定义问题 |
| 丢弃 | 何时不能把原型带入生产 | Discard Condition 和生产门禁 | 丢弃、重写或隔离升级 |
Learning Question 把原型从实现任务变成学习任务,例如“用户能否在不看说明的情况下完成一次撤回”。
↡原型对真实数据、规则、错误、交互或部署边界的模拟程度,以及它明确没有模拟的部分。Prototype Fidelity 不是越高越好;它应刚好覆盖当前 Learning Question,避免为尚未需要的部分付出生产级成本。
↡能支持、否定或修改假设的用户行为、运行结果、错误、时间或领域专家反馈。Observation Signal 要在实验前定义,不能看到喜欢的结果后才临时决定什么算证据。
↡一旦出现就必须删除、隔离或重写原型的时间、风险、错误或约束条件。Discard Condition 保护团队免于把一次性代码当成长期资产,也让丢弃成为有证据的决定。
↡原型必须通过的安全、性能、数据、权限、可维护性和责任检查,才可进入产品实现。Production Boundary 不是“再加一点测试”,而是明确哪些原型性质不能被继承。
提示21:用原型学习
提示21:用原型学习。先写未知,再选择最低可行的 Prototype Fidelity,定义 Observation Signal 和 Discard Condition。原型可以回答用户流程、供应商协议、性能数量级、数据格式、领域规则或团队协作方式,但不应偷偷承担它没有验证的安全、可维护和生产责任。
例如要验证供应商是否支持部分退款,可以用一条低保真请求、隔离账号和受控金额观察协议与错误;无需先建完整订单系统。实验结束后保留协议结论、错误边界和未验证项,删除凭证、临时状态和不能通过 Production Boundary 的代码。
从提示到可失败的因果链
本页主链是 Learning Question → 原型 → Observation Signal → 结论 → Discard Condition。每条边要写明传递的是假设、数据、用户行为、错误还是学习反馈;每个节点要有输入、输出、owner、时间盒和拒绝动作。只有展示结果没有学习问题和丢弃条件,不能证明掌握提示21。
先写预测,再执行正常样本、边界样本和一次故障样本。三类样本共享问题和观察窗口,只改变一个保真度或约束条件;如果原型在真实边界失败,记录首个失配,不能用手工修补后继续宣称假设成立。
选择合适的原型保真度
低保真纸面流程适合发现概念和顺序问题,交互假界面适合观察任务完成,临时脚本适合验证数据或协议,接近真实的纵切适合验证部署、性能或错误处理。选择取决于 Learning Question,而不是团队对某种工具的偏好。
每种原型都要列出未模拟内容:假数据没有覆盖数据质量,单用户脚本没有覆盖并发,沙盒服务没有覆盖生产权限,手工流程没有覆盖自动化恢复。未模拟内容必须进入便签或结论,否则下一位读者会把沉默当成通过。
便签作为可移动的假设账本
一张便签只承载一个可行动的单位:问题、假设、观察、结论、反例或下一步。它可以从“未知”移动到“实验中”“已支持”“已否定”“待生产验证”或“丢弃”;每次移动写 owner、证据链接、时间和未覆盖边界。
便签不应替代正式决策记录,也不应成为永远不清理的墙面装饰。实验结束后,把可迁移的结论写进正式源头,把已否定的假设和临时实现清楚标记为历史,再删除凭证与无主副本。
三步完成一次原型学习
先写未知和丢弃条件
建立 Learning Question,写出假设、用户或系统边界、Observation Signal、时间盒和 Discard Condition。列出原型明确不模拟的安全、性能、数据和责任约束。
可重放的原型记录
prototype_record:
unit: tpp20-topic-13-prototypes-post-it-notes
learning_question: 用户能否在三步内撤回一笔低风险支付
hypothesis: 用户理解“撤回”后能完成并看到状态变化
prototype_fidelity: 纸面流程 + 隔离接口 + 真实错误样例
observation_signal: 完成时间、误点、状态一致性和用户复述
discard_condition: 凭证、并发、恢复和审计责任未验证
conclusion: 用户理解流程,但状态文案在失败后含糊
production_boundary: 安全、权限、审计、并发和回滚检查
decision: 丢弃临时脚本,保留文案结论并重写正式流程这份记录把原型和产品责任分开。若结论只来自作者演示、Observation Signal 没有预先定义,或 Prototype Fidelity 隐藏了关键错误,就应标为待验证而不是通过 Production Boundary。
选择、拒绝与迁移矩阵
| 判断 | 接受证据 | 应拒绝的信号 |
|---|---|---|
| 问题 | Learning Question 能被一个实验回答 | 只有“探索一下”的宽泛目标 |
| 保真度 | 刚好覆盖问题,并列出未模拟边界 | 为展示效果堆入生产复杂度 |
| 观察 | Observation Signal 在实验前定义 | 只保存截图、印象或成功案例 |
| 便签 | 每张便签有 owner、证据和状态 | 墙面堆满却没有结论与清理责任 |
| 丢弃 | Discard Condition 可触发删除或重写 | 因为已经投入就继续维护临时代码 |
| 生产 | Production Boundary 通过安全、数据和恢复检查 | 原型成功就直接上线 |
迁移到云服务、数据系统或 AI 辅助开发时,分别记录模型或服务版本、数据敏感性、权限、自动化反馈和原型未覆盖范围。工具可以加快实验,却不能替团队决定什么结论可迁移到生产。
常见误区
本章回顾
掌握 13 原型与便签,不是制作更像产品的演示,而是按 提示21:用原型学习 先写 Learning Question,再选择 Prototype Fidelity,预先定义 Observation Signal 和 Discard Condition,最后用 Production Boundary 决定丢弃、重写或升级。便签保存可移动的假设与证据,原型结束后临时结构必须有明确去处。
可验证练习
练习
本组练习覆盖 13 原型与便签 和 提示21:用原型学习,要求提交 Learning Question、Prototype Fidelity、Observation Signal、Discard Condition 和 Production Boundary 的证据。
问题 1: 团队想验证用户是否理解新的撤回流程,应该选择什么原型并观察什么?
问题 2: 如何实践“提示21:用原型学习”,避免原型代码进入生产?
问题 3: 便签墙上有许多互相矛盾的结论,怎样恢复学习账本?
名词解释
名词解释
本章出现的专业名词,用大白话再讲一遍。
- Learning Question
驱动原型、能够由观察结果回答的一个具体未知问题。
- Prototype Fidelity
原型对真实数据、规则、错误、交互或部署边界的模拟程度及其明确缺口。
- Observation Signal
支持、否定或修改假设的用户行为、运行结果、错误、时间或领域反馈。
- Discard Condition
触发删除、隔离或重写原型的时间、风险、错误或约束条件。
- Production Boundary
原型进入产品前必须通过的安全、性能、数据、权限、维护和责任检查。
前后导航
来源与改写范围
- Pragmatic Programmer 作者页面:核对 Topic 13 与提示21的版本位置和主题范围。
- 中文目录页面:核对 13 原型与便签、提示21:用原型学习的公开目录范围。
- 出版社书目信息:交叉核对中文译本的出版信息与版次边界。