15 估算

从数量级、单位和假设开始估算,以范围和迭代校准替代伪精确的单点日期。

学习目标

  • 能把一个需求拆成可数的估算单位,并写出边界、假设与拒绝条件
  • 能用数量级和误差区间给出带证据的估算,并解释为何不承诺伪精确的单点日期
  • 能回答:当真实进度偏离原区间时,哪一条新证据会触发重估,如何恢复旧记录?

为什么估算不可压缩

客户问“什么时候完成”,通常不是在要一个漂亮的日期,而是在要一条可以安排工作、暴露风险、重新协商的证据链。如果我们只报一个数字,任何隐藏的范围、依赖或等待都会在最后一天集中爆炸。

估算的作用是把不确定性提前摊开:先说明在估什么,再说明这个判断依赖什么。新的代码、反馈和阻塞出现后,估算应该留下可解释的更新轨迹,而不是逼团队维护已经失真的承诺。

本章把“多久”转成五个可观察的节点。读者可以用下面的实验台逐步推进,也可以停在任一节点检查输入、输出、首个偏差和回退动作。

15 估算:先给数字的边界

估算单位:先决定数什么

不是“一个大功能”这种模糊标签,而是能被同一把尺子重复数出来的对象。例如,把“导入客户数据”拆成解析、校验、幂等写入和失败重试四个工作块;每块都有完成条件和拒绝条件。

单位一旦改变,数字就不能直接比较。把“接口数”换成“页面数”后,过去的速度记录只能作为背景,不能拿来证明新的估算可靠。先固定对象和边界,才有资格谈数量。

假设清单:把隐藏前提写出来

回答“这个数字在什么条件下成立”。它可以包括熟悉的代码路径、可用的测试数据、已确认的外部接口、每日可投入时间,以及不纳入本次范围的迁移和运营工作。

每条假设都应该有验证方式和失效动作:依赖未交付就暂停承诺,数据质量不达标就扩大区间,范围变化就新建一条估算记录。假设不写出来,区间看起来越窄,风险反而越隐蔽。

数量级:先粗后细

用于尽早发现“这不是两天的工作”。先判断是几个小时、几天、几周,还是需要拆成多个里程碑;只有当单位、依赖和边界稳定后,细化才有意义。

对一组相似工作,可以先记录单位数 n、每单位的典型耗时 t 和固定开销 o。一个可解释的粗算式是:

E=n×t+oE = n \times t + o

这个式子在说:总估算由可数的工作块、每块的典型耗时和不能按块复制的固定开销组成;它不是从历史平均数自动生成承诺。

误差区间:诚实表达未知

不是给数字加一个装饰性的“±20%”。乐观边界要说明哪些依赖顺利,悲观边界要说明哪个阻塞会把工作推迟;如果边界没有对应证据,它只是伪精确的另一种写法。

可以用三点记录一次判断:O 是顺利路径,M 是当前最可能路径,P 是已知阻塞都发生的路径。对外沟通时给出 [O, P] 和关键假设,对内复核时保留 M 与实际反馈的差距。

15 估算:把一个日期拆成可校准的证据链1问题拆分对象 + 边界估算单位2单位可数的工作块假设清单3数量级先粗后细样本规模4区间乐观 / 可能 / 悲观误差区间5校准新信息 → 更新进度更新先写“我在估什么”再写“何时必须重估”估算不是承诺一个神奇数字,而是让每个变化都有可追踪的落点
五个节点把“多久”变成能被复核、被校准的工作记录。

提示23:通过估算来避免意外

提示 23 的重点不是让每个人更会猜,而是让意外更早获得名字。把需求拆成单位后,团队可以指出哪个工作块仍缺输入、哪个依赖没有 owner、哪个边界样例还没跑;风险就从“最后延期”变成可以行动的记录。

一次估算至少应保存:对象与边界、单位、假设、区间、时间窗口、责任人和触发重估的信号。缺少其中任一项时,应拒绝把结果写成确定承诺。

提示24:根据代码不断迭代进度表

代码并不会因为计划表写得更漂亮就按时完成。每次实现、测试、评审或集成得到新信息,都要把“已完成、剩余、阻塞、假设变化”写回原记录;更新的是剩余工作,不是把旧日期涂掉。

例如原估算是 8 个工作块、每天完成 2 块,跑完前 3 块后发现每块都要补一组兼容性测试。此时应该增加单位或扩大区间,并注明证据来源;不能继续用“还剩 5 块,所以再两天”来隐藏单位已经改变的事实。

三步复核一次估算

先预测:如果移除误差区间,哪一个节点应该最先改变?再动手试,观察实验台中的首个断点;最后恢复并比较原始记录。每一步都要保留图示中的状态,而不是只抄下最终日期。

第一步:先拆分对象和单位

写出工作对象、纳入范围、排除范围和完成条件。把“做一个报表”改写成可以单独验收的工作块,并为每个块指定估算单位。

15 估算:把一个日期拆成可校准的证据链1问题拆分对象 + 边界估算单位2单位可数的工作块假设清单3数量级先粗后细样本规模4区间乐观 / 可能 / 悲观误差区间5校准新信息 → 更新进度更新先写“我在估什么”再写“何时必须重估”估算不是承诺一个神奇数字,而是让每个变化都有可追踪的落点
五个节点把“多久”变成能被复核、被校准的工作记录。

第二步:再写假设和误差区间

先写最乐观、最可能和最悲观路径,再播放或单步推进实验台。点击“注入单故障”移除区间,观察校准为何必须回到更早的证据。

估算实验台
把一个日期拆成五次可观察的判断问题拆分对象 / 边界估算单位工作块数量级规模误差区间假设校准实绩先预测首差,再只改变一个条件;恢复时从原始输入重放

当前:第 1 步 · 拆分:先固定对象和边界

第 1 / 5 步 · 拆分:先固定对象和边界

先猜下一步会改变什么,再用单步或播放验证。

试着注入“缺少误差区间”的故障:如果链路仍显示完成,说明验收点错了。

第三步:最后用反馈校准剩余工作

把实际完成的单位数、剩余单位数、等待时间和新增依赖写回记录。若首个偏差发生在单位定义,就重建单位;若发生在假设失效,就扩大区间并让责任人确认。

15 估算:把一个日期拆成可校准的证据链1问题拆分对象 + 边界估算单位2单位可数的工作块假设清单3数量级先粗后细样本规模4区间乐观 / 可能 / 悲观误差区间5校准新信息 → 更新进度更新先写“我在估什么”再写“何时必须重估”估算不是承诺一个神奇数字,而是让每个变化都有可追踪的落点
五个节点把“多久”变成能被复核、被校准的工作记录。

一个可复核的进度记录

estimate_record:
  unit: tpp20-topic-15-estimating
  object: 导入客户数据
  unit_definition: 解析、校验、幂等写入、失败重试
  assumptions:
    - 外部接口在本迭代开始前可用
    - 测试数据覆盖空值和重复记录
  range:
    optimistic: 2d
    most_likely: 4d
    pessimistic: 7d
  feedback: 完成 3/8 个工作块,新增兼容性测试
  first_mismatch: 单位定义漏掉兼容性测试
  recovery: 拆出测试单位,更新剩余区间并保留旧记录

这个记录的价值不在格式,而在于独立复核者能按相同边界重建一次判断。first_mismatch 必须写首个偏差,而不是写“最终多花了三天”;后者无法告诉下一次估算应该改变哪一个输入。

常见误区

小结

  • 先冻结对象、边界和估算单位,再比较数字。
  • 把假设写成可验证条件,并为失效准备动作。
  • 数量级先发现规模,误差区间再表达未知。
  • 真实进度改变模型时,更新剩余工作而非涂改旧承诺。
  • 每次重估都保留首差、证据与恢复路径。

练习:把估算变成可检查的记录

练习

问题 1: 一个任务拆成 6 个单位,典型耗时 0.5 天,固定开销 1 天。请计算粗估 E,再为顺利路径和已知阻塞各写一个区间边界。

问题 2: 真实进度完成了 3/8 个单位,却发现每个单位都需要额外的兼容性测试。你会更新哪个字段,为什么不能只把结束日期后移?

问题 3: 在估算实验台中点击“注入单故障”,然后用单步推进找到首个变化;修改 Demo 代码或状态记录,使恢复动作把实验台和记录都回到初始边界,并提交一份正常、边界、故障三行证据。

名词解释

名词解释

本章出现的专业名词,用大白话再讲一遍。

估算单位

能单独数出来、验收并记录进度的一小块工作;单位不稳定时,历史速度就不能直接复用。

假设清单

这次估算要成立所依赖的条件列表,例如接口何时可用、数据是否齐全,以及哪些工作不在范围内。

数量级

对规模的粗粒度判断,用来尽早发现任务属于小时、天还是周的级别,不是假装知道精确工时。

误差区间

把顺利、最可能和受阻三条路径放在同一个估算里,并说明每条边界为什么成立。

前后导航

来源与改写范围

讨论

评论区加载中…