第9章 务实的项目
用稳定全功能团队、适境实践、自动交付、用户价值和职业责任完成务实项目。
学习目标
- 能把第 9 章的团队、实践、交付、用户和责任连接成一个可验证的项目回路
- 能根据项目语境选择做法,用小实验验证自动化和用户反馈是否真正减少风险
- 能在边界或失败发生时保存首个差异、恢复动作和职业责任,而不是只报告进度
第9章 务实的项目
本页依据 David Thomas、Andrew Hunt《程序员修炼之道:通向务实的最高境界(第2版)》,云风译,电子工业出版社,2020 年 4 月,ISBN 9787121384356 的公开中文目录,独立重构 第9章 务实的项目。正文、代码、图示、实验和练习都是本课程重新设计的教学材料,不复制原书正文、插图或答案。
一个项目是否务实,不由它使用了哪套流程名词决定,而由它能否持续交付用户结果、快速获得反馈、按语境调整做法并对作品负责决定。本章把第 9 章的五个 Topic 串成一条工程回路:稳定的全功能团队提供责任边界,适境实践避免照搬他人的仪式,自动交付缩短反馈路径,用户价值检验结果,职业责任守住质量和道德边界。
三个会让项目看起来务实的陷阱
五个 Topic 如何接成项目回路
<Term def="拥有完成一条用户价值链所需能力,并能共同承担交付、学习和恢复的稳定协作单元。">务实团队</Term>需要明确成员边界、交付对象和决策权。稳定不等于永远不变,而是让知识和责任不会在每次交付前重新丢失。
<Term def="根据项目约束、风险、团队能力和用户结果选择并调整工作方式。">适境实践</Term>拒绝照搬流行方法。它要求团队说明选了什么、为了解决哪个问题、如何知道它有效,以及什么时候会停止。
<Term def="由版本变化触发构建、测试、检查、部署和回退证据的可重复交付链。">自动交付</Term>让机械反馈更快,但仍要连接真实输入、权限、数据和用户结果。自动化不能隐藏需要人判断的伦理或语义决定。
<Term def="用户在真实边界内完成任务并获得可感知收益的结果,而不是代码或功能数量。">用户价值</Term>应有可观察的成功信号和拒绝条件。没有用户证据时,团队只能说完成了实现,不能说完成了价值。
<Term def="对决定、质量、影响和恢复路径承担可复核且不伤害用户的承诺。">职业责任</Term>包括在作品上留下可追踪的判断,也包括拒绝不安全、不诚实或明显有害的交付要求。
第 9 章的主线不是线性瀑布,而是持续回路:团队提供能力和责任,语境选择减少无效动作,自动交付带来反馈,用户结果检验价值,职业责任再把质量和边界带回团队。
逐 Topic 读取这条主线
49 务实的团队
小而稳定的全功能团队减少交接和等待,但稳定的重点是共同目标、清晰责任和可接管知识。团队要能从用户请求走到实现、验证和恢复,不把关键决定永久藏在某个专家身上。
50 椰子派不上用场
务实项目不会因为别的组织用了某种流程就照搬。先写当前约束和风险,再用小实验比较做法;适境选择的结果应当可以停止、调整或回退,而不是成为新的身份标签。
51 务实的入门套件
版本控制驱动构建、测试和发布,可以让交付从个人记忆变成可重放事件。自动测试、破坏测试、状态覆盖和一次性修复都要连到真实失败样本;手动操作若保留,也必须有责任、输入和回退记录。
52 取悦用户
用户价值不是把更多功能塞进发布,而是让用户在自己的目标和边界下得到可靠结果。团队应当观察任务完成、错误恢复和实际反馈,优先解决影响信任的问题。
53 傲慢与偏见
在作品上签名意味着愿意说明决定、限制和已知风险,也意味着在请求会伤害用户或违反职业底线时提出拒绝。责任需要透明证据和团队复核,不需要个人英雄叙事。
用一个项目样本贯穿五个 Topic
Interactive lab
选择项目样本,定位责任链的首个变化
输入证据
团队复制外部发布规则,却没有对应的审计能力、反馈角色和回退准备。
实际首差
语境节点:流程动作增加了,当前项目的风险没有因此减少。
恢复动作
暂停扩展模板,列出实际约束和目标,保留能解决当前风险的最小做法。
先查看用户结果和责任边界,再选择样本;项目工具通过不等于项目已经完成。
type DeliveryContract = {
userOutcome: string;
requiredChecks: string[];
evidence: string[];
owner: string;
rollback: string;
};
function canRelease(contract: DeliveryContract) {
return (
contract.userOutcome.length > 0 &&
contract.requiredChecks.length > 0 &&
contract.evidence.length > 0 &&
contract.owner.length > 0 &&
contract.rollback.length > 0
);
}这个合同把用户结果、必要检查、证据、责任人和回退放在一起。它不能代替项目判断,却能阻止“代码合并了”被误报成“项目交付了”。
1. 画团队和价值边界
选择一条用户任务,写出全功能团队的成员与责任、用户结果、无法接受的影响和当前语境约束。确认请求、实现、验证和恢复不会被分散到无人负责的缝隙。
正常、边界与单一故障证据
| 样本 | 只改变的变量 | 预期判定 | 必存证据 |
|---|---|---|---|
| 正常 | 团队、流水线和用户样本齐全 | 价值交付,责任链可重放 | 目标、版本、检查和用户结果 |
| 边界 | 语境约束、权限或用户阈值 | 明确接受或拒绝,不绕过责任 | 阈值来源、决定、影响和负责人 |
| 单一故障 | 一个成员、检查或依赖失效 | 在首个交付异常点暴露并恢复 | 首差、上下文、回退和复盘 |
项目成熟度不由自动化数量决定,而由团队能否在异常中保持用户价值、必要约束和可接管责任决定。每一次发布都应留下可以被独立复核者重建的证据。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 务实团队
拥有完成用户价值链所需能力,并共同承担交付、学习和恢复的稳定协作单元。
- 适境实践
根据项目约束、风险、团队能力和用户结果选择并调整工作方式。
- 自动交付
由版本变化触发构建、测试、检查、部署和回退证据的可重复交付链。
- 用户价值
用户在真实边界内完成任务并获得可感知收益的结果。
- 职业责任
对决定、质量、影响和恢复路径承担可复核且不伤害用户的承诺。
练习
练习
问题 1: 一个团队拥有完整的自动构建和测试,但发布后用户仍无法完成导出任务。你会从哪几个 Topic 查找断点?
问题 2: 经理要求复制另一个组织的发布流程,但当前团队没有相同的监管和运维能力。如何处理?
问题 3: 核心专家休假后,团队无法修复生产故障。如何把“在作品上签名”转为团队责任?
本章回顾
第9章的务实项目把稳定全功能团队、适境实践、自动交付、用户价值和职业责任连成回路。流程选择必须服务当前语境,自动化必须连接真实用户结果,署名责任必须让决定和恢复可被团队接管。能在正常、边界和故障样本中重建这条责任链,才算完成本章,而不是背下五个 Topic 的名称。