需求评审的末尾,技术负责人说"大概两周"。两周后业务方开始问进度,得到的回答是"还需要一周"。第三周结束仍然没有上线,业务方把这件事记在了"技术不可靠"的账上。
问题不在估错了,而在于**"两周"这个数在两边指的完全不是一件事**:技术说的是一份概率分布的众数,业务记的是一个到期日。当这两种东西用同一个词表达,误差就变成了失信。
1. 预测与义务
| 维度 | 估时 | 承诺 |
|---|---|---|
| 本质 | 对工作量的概率判断 | 对交付的确定性义务 |
| 表达形式 | 区间 + 置信度 | 日期 + 范围 + 质量下限 |
| 出错时 | 修正判断,正常 | 违反义务,需要交代 |
| 谁来承担 | 判断者 | 组织 |
| 应该随信息变化 | 是,越估越准 | 否,变更要走流程 |
| 对外可见性 | 内部 | 对外 |
估时是可以也应该随着信息更新而变化的,这是它的价值所在;承诺一旦给出就不该自行变化,要变必须走变更流程。把估时当成承诺,等于取消了"随着信息更新"这个动作——因为一改口就是失信,于是团队宁可将错就错地硬撑,直到撑不住。
这种混淆还有一层更隐蔽的后果:它让"早说"变成一件吃亏的事。如果估时可以随时改,提前两周说"要延期"和到期当天说,代价应该不同;但当两个词被混用,团队感受到的是"一改口就被记为失信",于是理性选择是拖到最后一天才说——那时已经没有任何调整空间。
反过来,把承诺当成估时也很糟:业务方会认为日期可以随时调整,于是排期失去约束力,资源协调无从谈起。
2. "两周"的三种含义
同一个词至少对应三件事,混用就会各说各话:
| 说法 | 实际含义 | 谁这样理解 |
|---|---|---|
| 两周后交付 | 到期日 | 业务方、项目经理 |
| 两周的工作量 | 需要 10 个工作日的人力 | 技术负责人 |
| 两周后可用 | 含联调、测试、上线窗口 | 有时谁都没这么理解 |
第三种是最容易被忽略的:工作量和交付日期之间隔着非工作时间、评审、环境准备、发布窗口、以及并行任务。两个"两周"之间往往差出 30% 以上,而这个差距从来没有人明确算过。
可以用一条简单的时间线把三者的差距显性化:
// 从"两周人力"到"两周可用"之间被忽略的五段
10 个工作日人力
+ 评审与排期等待 (典型 1–3 天)
+ 环境与依赖就绪 (典型 1–2 天)
+ 联调与缺陷修复 (典型 2–4 天)
+ 发布窗口与灰度观察 (典型 1–3 天)
+ 并行任务造成的人力稀释 (按实际可用人力折算,往往 -30%)
= 对外可承诺的"上线日期"
一个可落地的约定是:说数的时候带单位。"两周人力"和"两周后上线"是两句话,前者不能拿来对外承诺。
3. 乐观偏差与它的纠偏
估时系统性偏乐观,不是因为不专业,而是因为规划时只在脑子里走顺利路径。
| 偏差来源 | 机制 | 有效纠偏 |
|---|---|---|
| 只想到顺利路径 | 未展开异常分支 | 列出"可能卡住的三个点"再估 |
| 忽略等待时间 | 评审、环境、外部依赖 | 把等待单独列成一行 |
| 参照错对象 | 用最简单的历史任务类比 | 用同类任务的历史分布,不用最好的一次 |
| 加缓冲比例 | 加 20% 而非按历史偏差 | 用历史偏差分布定倍数,不用固定比例 |
| 沉没成本顾虑 | 不愿承认已超 | 每次重估都从头算剩余工作 |
最无效的纠偏是"统一加 20% 缓冲"。如果历史偏差是 60%,加 20% 只是让乐观偏差显得更专业;如果某些任务从不准时、另一些一直很准,统一比例会把两者都改错。
估时本身也可以写成区间,这比给一个点更有信息量:
// 三档估时的写法:把不确定性放在明面上
乐观(一切顺利,无等待) 5 天
中位(含常规等待与一轮返工) 8 天
悲观(依赖延迟 + 两轮返工) 14 天
对外承诺 = 中位 + 集中缓冲,不取悲观值(否则永远在提前,失去约束力)
内部进度判断 = 以中位为基准,第 3 天未完成 40% 即视为偏离,进入预警
有效的方式是用同类任务的历史分布:把过去同类工作按实际耗时(不是估时)排队,取中位数偏上一档作为对外承诺,取中位数作为内部预期。这不需要复杂模型,只需要一份能查的历史记录。
// 用历史实际耗时反推该类任务的合理承诺倍数
SELECT task_type,
COUNT(*) AS n,
AVG(actual_days) AS avg_days,
AVG(actual_days) / AVG(estimate_days) AS bias_ratio,
MAX(actual_days) AS worst
FROM task_history
WHERE finished_at > NOW() - INTERVAL 12 MONTH
GROUP BY task_type
ORDER BY bias_ratio DESC;
// bias_ratio 是该类任务的系统性偏差;对外承诺用 avg_days 而不是 estimate 众数
// n < 5 的类型不采信,先积累样本
4. 缓冲放在承诺里,不放在任务里
两种放法的区别很大:
| 放法 | 表现 | 问题 |
|---|---|---|
| 每个任务加缓冲 | "这个 3 天变 4 天,那个 5 天变 7 天" | 缓冲被任务吃掉,总量失控 |
| 整体承诺加缓冲 | 内部合计 12 天,承诺 16 天 | 缓冲集中、可观测、可挪用 |
| 缓冲单独成阶段 | 留出"收尾期" | 缓冲不会被前置任务侵占 |
| 不放缓冲靠加班 | 承诺=理想值 | 缓冲以人力透支的形式存在 |
第二种和第三种是可用的。缓冲集中之后有一个副作用需要管理:缓冲会被提前消耗(每个任务都"稍微"超一点,缓冲在中期就用完了)。所以缓冲要可见——它是一个被跟踪的数字,而不是一个心理预期。
// 承诺的三要素:日期、范围、质量下限;缓冲作为独立项被跟踪
commitment:
due: 2026-12-05
scope: // 范围必须被写明,否则"完成"无法判定
- 下单链路灰度可切
- 对账口径与财务确认
quality_floor:
- p99 延迟不高于现网 1.2 倍
- 无 P1/P2 缺陷遗留
buffer:
days: 4 // 集中缓冲,不摊到各任务
consumed: 0 // 每周更新,消耗过半触发预警
excluded: // 明确不包含的内容,这一栏最有价值
- 历史数据迁移(单独项目)
- 移动端适配
承诺变更的流程比承诺本身更重要,最小可用版本只有三条:
// 承诺变更的三条规则
1. 提前量:预计到期前至少 3 个工作日提出,否则视为违约(不含不可抗力)
2. 备选项:必须同时给"缩范围保日期"和"延日期保范围"两个方案
3. 留痕:变更原因、影响面、批准人写入项目记录,不只在群里说
excluded 这一栏常常被省略,但它决定了后续所有争议的走向。没有它,"你没做完"和"这本来就不在范围内"会各执一词。
5. 范围与时间:只能固定一个
| 固定项 | 浮动项 | 适用场景 | 代价 |
|---|---|---|---|
| 固定日期 | 范围浮动 | 有外部硬约束(活动、合规期限) | 需要砍需求的决策机制 |
| 固定范围 | 日期浮动 | 探索性工作、质量优先 | 上游无法排期 |
| 固定人力 | 范围与日期都浮动 | 长期团队、持续投入 | 需要对上解释进度不确定性 |
| 三个都想固定 | 只能浮动质量 | 常见但不该存在 | 质量以技术债形式支付 |
四个选项里没有"全都固定"这一项,但组织里最常出现的要求恰恰是它。此时真正的浮动项是质量——它以缺陷率、技术债、加班的形式延期支付。说清楚这一点,比承诺一个日期更有价值。
6. 排错:五种"承诺了但做不到"
| 现象 | 成因 | 处理方向 |
|---|---|---|
| 每次都说"还要一周" | 剩余工作从未重估,沿用初始估时 | 每周重估剩余量,不重算已花费 |
| 承诺达成率低但没人预警 | 没有中期检查点 | 在缓冲消耗过半时设检查点 |
| 范围反复扩张但日期不变 | 缺少 excluded 一栏 | 承诺时写明不包含什么 |
| 团队长期加班仍未准时 | 缓冲以人力透支形式存在 | 把缓冲显式化,减少隐性加班 |
| 估时越来越保守 | 曾经因超期被追责 | 区分"估错"与"承诺违约",前者不应追责 |
最后一条是组织层面的因果:如果估错也要担责,团队就会用加长估时来自保,估时随之失去信息价值。要保护"估时可以被修正",同时要求"承诺变更必须提前说"——这两条同时成立,估算才会越来越准。
7. 边界:什么情况不该给确定性承诺
| 场景 | 为什么 | 替代做法 |
|---|---|---|
| 首次做、无同类可比 | 没有历史分布 | 给"下一个检查点"+ 判断依据 |
| 外部依赖主导进度 | 进度不由自己控制 | 承诺依赖就绪日期,而非交付日期 |
| 探索性任务 | 结果本身就是未知 | 承诺投入上限与产出形式 |
| 需求仍在变化 | 范围未定 | 承诺阶段目标,不承诺总日期 |
| 极小任务(一两天) | 误差相对值过大 | 直接做,不做估时 |
判断口径一句话:估时是给自己用的,承诺是给别人用的。当没办法把不确定性讲清楚时,宁可承诺一个检查点加一个判断依据,也不要承诺一个自己都不信的数字——后者会在两周后变成一笔说不清的债。
8. 自测
- 估时与承诺在"信息更新"这一点上的要求为什么相反?
- "两周"的三种含义分别是什么?为什么说数时必须带单位?
- 为什么统一加 20% 缓冲是最无效的纠偏?替代方法需要什么前提?
- 缓冲放在任务里和放在承诺里,行为差异体现在哪里?缓冲集中后有什么副作用要管理?
- 范围、时间、人力、质量四项中,为什么"全都固定"这一项不该存在?此时真正的浮动项是什么?
- 为什么"估错"不应被追责,而"承诺变更不提前说"应该?