3067 字
约 10 分钟
15
S21-A16 · 估时与承诺的混淆:一个数是预测,另一个数是债务

需求评审的末尾,技术负责人说"大概两周"。两周后业务方开始问进度,得到的回答是"还需要一周"。第三周结束仍然没有上线,业务方把这件事记在了"技术不可靠"的账上。

问题不在估错了,而在于**"两周"这个数在两边指的完全不是一件事**:技术说的是一份概率分布的众数,业务记的是一个到期日。当这两种东西用同一个词表达,误差就变成了失信。


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. 自测

  1. 估时与承诺在"信息更新"这一点上的要求为什么相反?
  2. "两周"的三种含义分别是什么?为什么说数时必须带单位?
  3. 为什么统一加 20% 缓冲是最无效的纠偏?替代方法需要什么前提?
  4. 缓冲放在任务里和放在承诺里,行为差异体现在哪里?缓冲集中后有什么副作用要管理?
  5. 范围、时间、人力、质量四项中,为什么"全都固定"这一项不该存在?此时真正的浮动项是什么?
  6. 为什么"估错"不应被追责,而"承诺变更不提前说"应该?
S21-A16 · 估时与承诺的混淆:一个数是预测,另一个数是债务
https://www.clxhxhhr.top/posts/6382/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。