敏捷第7讲:工时评估技巧——当程序员说“这功能没做过不知道要多久”,PM怎么定排期?

60 阅读14分钟

写在前面:

需求范围(Scope)终于定下来了。MVP的功能列表已经躺在Product Backlog里。 接下来,该抛出那个灵魂拷问了: “所以,V1.0到底哪天能上线?”

你拿着列表去找研发老张:“老张,估个时吧。” 老张扫了一眼:“这个‘视频流预加载’没做过,不好说。顺利的话2天,不顺利的话……一周也可能。” 前端小王:“我也没做过,得看老张接口啥时候给我。”

你的排期表陷入了僵局。 如果你按“顺利”估,大概率延期;如果你按“不顺利”估,老板会骂你效率低。

这一讲,我们要解决敏捷PM的核心技能:如何在充满“未知”的情况下,拿到一个靠谱的排期?

在我们今天开始前,先回答我们上一讲最后提出的两个问题:

一、判断题:抖腿 App 的“高大上启动动画”,是伪需求吗?

首先,我们需要理解抖腿 App 的战略:

  • 主打下沉市场
  • 追求极致秒开
  • 用户对品牌感知弱
  • 用户对速度敏感度极高

在这种战略下:

任何延迟 0.5 秒的启动动画,都不是战略级价值。
所以结论:这是伪需求。

为什么?

因为你只要把数据拉出来看就知道:

  • 新用户的 70% 留存是在 前 5 秒 决定的
  • 下沉市场用户对“加载时间”的敏感性比一线城市高几倍
  • 网络差→动画卡顿→反感→直接卸载

请注意:

不是“启动动画不好”,
而是“不符合本 App 的战略定位”。

如果你是做奢侈品、做高端品牌 App,那启动动画是必须的。

但抖腿不是。

所以这题的答案是:

是伪需求。

二、执行题:老板非要保留品牌展示,项目经历 如何做折中?

互联网 PM 不存在“干掉老板”的权限。
这你非常清楚。

所以我们不是“反对动画”,
而是给“更聪明的方案”。

你可以向老板提出三个选择,全都经过主流 App 验证。


方案 1:极简静态 LOGO(参考微信)

微信的启动页:

  • 一张白底
  • 一个绿色微信 LOGO
  • 不闪、不动、不炫

只有 200ms 显示时间。

品牌完成,体验也不卡。

「这就是最强品牌:干净、稳定、克制。」


方案 2:动画提前异步加载(参考抖音)

抖音的做法是:

  • 启动时先进入界面
  • 动画只在“冷启动资源未准备好”的时间显示
  • 只要资源提前预加载好,启动动画直接秒过

换言之:

动画变成“兜底方案”,不是“必展示方案”。

你可以告诉老板:

  • 如果用户手机状况好 → 秒开
  • 如果网络差 → 动画帮你遮挡

老板一般会接受这个方案,因为:

  • 品牌展示有
  • 秒开体验也不受影响
  • 体验更智慧

方案 3:首帧即内容(主流做法)

把“首帧内容预加载”当作启动动画:

  • 打开 → 直接看到视频封面
  • 背后完成资源加载
  • 加载完成 → 视频自动播放

这其实是:

内容即启动动画,启动动画即内容。

老板想展示品牌?
你可以:

  • 把 LOGO 放在右上角
  • 放在 Loading 点
  • 放在自定义水印
  • 甚至放在首帧蒙版里(3 秒淡出)

这个方案对于抖腿特别合适:

  • 下沉市场用户:体验极致顺滑
  • 老板:品牌露出得到了保证
  • 研发:技术成本低
  • 产品:体验无损
  • PM:能上线

三、程序员说“这功能没做过,不知道要多久”怎么办?

这是每一个 PM 都一定会遇到的场景。

比如你让后端做一个“视频校验+AI 识别”的模块,他说:

“这个我没做过。
没概念,不知道需要多久。”

或者你让前端做一个“全局播放器组件”,他说:

“之前都是局部播放器…
这个我没做过,要评估下。”

或者你让算法同学做一个“冷启动推荐模型”,他说:

“我们没做过短视频,得调研下。”

作为 PM,你此刻的心理可能是:

  • 不会吧不会吧,你都工作三五年了,怎么会不知道多久?
  • 我排期怎么做?
  • 进度怎么保证?
  • 我怎么和老板解释?

你千万不要慌。
因为你需要理解一条在真实互联网团队里最重要的规律:

研发不是不能评估,而是“在不确定条件下给不出承诺”。

换言之:

他们不是不知道要多久,是不知道如何承担“万一做不完”的后果。

这句话很重要,建议你反复理解。

所以作为 PM,你的职责不是“逼他们给时间”,而是:

帮助研发把“不确定性”拆成“可确定性”,再估到小时级别。

换句话说:

不是“问多久”,
而是“拆到你肯定知道多久”。

四、 为什么传统的“拍脑袋”估时必死?

PM 的第一条工时原则:不是估工时,是拆工时

很多 PM 一股脑问:

“这个功能要多久?”

这是最不应该问的问题。

成熟 PM 的问法应该是:

“这个功能要分成几段?
哪些部分你能确定时间?
哪些部分你不确定?
不确定的部分我们怎么验证、怎么试探、怎么降低风险?”

你要把“不确定的整体”,拆成“确定的小块”。

比如一个“视频自动审核模块”,后端可能会觉得:

  • 第一次接触第三方鉴黄平台
  • 不知道 API 是否稳定
  • 不确定数据量会不会压垮服务器
  • 不清楚网络延迟
  • 不知道要不要缓存
  • 不知道需要前期多少样本测试

这些不确定性堆在一起,自然让他无法给你一个确定时间。

但你把它拆开,他就能给了。

示例拆分:

子任务研发是否能给时间说明
接入第三方 SDK(Demo)✔ 能2 小时
调通一条 API 调用✔ 能1 小时
加入鉴黄回调机制✔ 能4 小时
大量样例测试✔ 能半天
性能压测✔ 能半天
业务接入(上传流程对接)✔ 能1 天
缺少的部分:并发瓶颈预估✘ 不能需要小样本试探
缺少的部分:全链路延迟预估✘ 不能需要 mock 流量

你看,本来一个“未知功能”,拆完之后:

  • 80% 的部分是确定的
  • 20% 的部分需要实验或 mock 来降低风险

然后 PM 做的不是继续“问多久”,
而是帮研发建立一个 可验证的时间盒(Timebox)

比如:

“未知风险部分,我们先给 4 小时打样模型验证。”

打样完成后:

“结果能跑,我们继续做。”
“结果跑不动,我们改方案。”

这比“程序员瞎估一个时间→延期→甩锅”要成熟得多。

所以在“抖腿”项目组,我们首先要废除 “专家独裁估时法”(即项目经理问主要技术负责人,老张拍脑袋)。

因为“拍脑袋”有三个死穴:

  1. 幸存者偏差: 老张是资深架构师,他觉得简单的(比如搭个Redis),对新手后端来说可能要研究三天。老张估2小时,新手做3天,项目延期。
  2. 防御性估算: 大家怕背锅,都会在心里默默乘个3。3天的活报9天。老板一看排期:半年后上线?直接把项目砍了。
  3. 认知不一致: 同样是“登录”,产品以为是“手机号+验证码”,开发以为还要做“找回密码、第三方登录、风控校验”。大家聊的根本不是同一个东西。

敏捷的解药: 我们不追求绝对准确(那是算命),我们追求 “相对准确”“团队共识”

五、 当研发说“没做过”时,你可以用的实战工具

工具 1:拆到不能再拆(WBS 敏捷分解法)

永远记住一句话:

只要能拆,就能评估。
不能评估,只是因为还没拆。

你要让研发从:

  • 需求维度
  • 技术路径
  • 外部依赖
  • 自己没做过的点
  • 可能踩坑的地方

逐个列出来。

一个 3 天做不完的功能,
拆完后可能是:

  • 1 小时
  • 2 小时
  • 4 小时
  • 半天
  • 1 小时
  • 2 天(这部分是真的坑)

这样 PM 就知道:

真正的不确定性只占整体的 20%。

然后可以进一步优化。


工具 2:时间盒 Timebox(限制投入时间)

对任何未知功能,不要问:

  • 这个要多久?

而要说:

“我们给这个未知模块 3 小时做出最小验证。”

比如试探:

  • API 通不通
  • Demo 功能能不能跑
  • 数据格式是否正确
  • 并发是否爆掉
  • 网络延迟是否能接受

3 小时后你会得到一个结果:

  • 能做:继续推进
  • 不能做:换方案

而不是:

  • 研发卡 4 天
  • PM 每天催
  • 最后告诉你“方案可能不行”

这就是 Timebox 的意义。


工具 3:三点估算法(PERT)

这是项目管理专业人士的常用方法。

让研发分别估:

  • 最乐观时间(O)
  • 最可能时间(M)
  • 最悲观时间(P)

真实估算 E = (O + 4M + P) / 6

这个方法能让研发从“拍脑袋”变成“结构化思考”。


工具 4:故事点 Story Point + 速率 Velocity

敏捷估工时不是问“几个小时”,
而是问“复杂度是多少?”

比如:

  • 点赞功能:1 点
  • 评论列表:2 点
  • 视频上传:8 点
  • 推荐流:13 点

然后用团队上一 Sprint 的平均速率(Velocity)来推算:

例如:

  • 团队上个 Sprint 做了 30 点
  • 本 Sprint 有 35 点

→ 你就知道一定会延期
→ 你就知道可以砍哪些点

而不是“等到最后一天才知道做不完”。


工具 5:研发借鉴对比(Reference)

你应该问研发:

“之前做过类似的吗?复杂度相似吗?依赖是同一套吗?”

例如:

  • 新的播放器能对标旧播放器的复杂度
  • 新的埋点模块能参考旧模块
  • 新的上传链路能参考老系统的逻辑
  • API 的签名方式与之前是否一致

研发很难估一个“完全未知”的时间,
但非常擅长估一个“与旧功能对比”的时间。


工具 6:计划扑克(Planning Poker)

场景还原:一场关于“视频上传”的估算博弈

会议室里,你给每个人发了一副扑克牌。牌面上不是JQK,而是斐波那契数列:0.5, 1, 2, 3, 5, 8, 13, 20, ∞(无穷大) 。 单位:人天(Man-Day)

你宣布规则: “全员参与,同时亮牌。”

第一轮出牌:

  • 老张(资深后端): 亮出 2
  • 新手后端(小李): 亮出 8
  • 前端(小王): 亮出 5

巨大的分歧! 如果按老张的排期,项目就挂了。

项目经理引导对话(这才是扑克的价值):

  • 你问老张: “你为什么觉得2天就能搞定?”
  • 老张: “阿里云有现成的OSS SDK,接一下就行了,很快。”
  • 你问小李: “你为什么觉得要8天?”
  • 小李(怯生生地): “我看文档里说要支持‘断点续传’和‘大文件分片’。我没做过分片逻辑,得去学,而且还要处理上传失败的重试,我觉得很复杂。”

真相大白! 老张忽略了“断点续传”的复杂度(或者他以为不需要做),而小李考虑到了细节但高估了难度。

第二轮讨论与对齐: 老张:“哦,断点续传确实麻烦点。不过阿里云SDK里封装好了,不用自己写分片逻辑。小李我教你用SDK,大概半天能学会。” 小李:“啊?有现成的?那……那应该快很多。”

第二轮出牌:

  • 老张: 3(加了点指导时间)。
  • 小李: 3(有信心了)。
  • 前端: 3(后端稳了我也稳了)。

最终估时:3人天。

深度思考: 计划扑克的本质不是为了“算命”,而是为了 “炸出” 团队内部的认知偏差。通过 “资深者”“执行者” 的碰撞,消除“我以为很简单”和“我以为很难”的幻觉。

工具 7: 应对“黑盒”,探针任务(Spike)

对于“视频上传”这种通用功能,还能靠讨论对齐。但对于 “美颜滤镜” 这种团队从未接触过的黑科技,老张直接打出了 ∞(无穷大)

老张:“这玩意儿我真没底。市面上有几十家SDK,我不知道哪个好用,也不知道坑在哪。你让我估时,我只能瞎编。”

这时候,作为项目经理的你绝不能逼着老张给数字。 你要引入敏捷的大杀器:探针任务(Spike)

1. 什么是Spike?

它是一个 “有时限的调研任务”。我们不估算“做完这个功能要多久”,我们只估算 “搞清楚怎么做要多久”

2. 实战操作

你在看板上新增了一张卡片:

  • 任务名: 【探针】美颜SDK选型与技术验证
  • 目标: 选出一家性价比最高的SDK,跑通Demo,列出接入风险。
  • 时间盒(Timebox): 1人天(老张负责)。
  • 验收标准: 明天站会,老张告诉大家“做这个功能到底要3天还是13天”。

话术: “老张,我不逼你现在估时。我给你1天时间,你什么代码都别写,就去研究这个SDK。明天这个时候,你再给我一个靠谱的数字。如果1天不够,我们再商量。”

价值: Spike 把“无限的未知”变成了“有限的调研”。它保护了团队的承诺,避免了盲目承诺导致的延期。

六、 风险缓冲:PM要学会藏“私房钱”

通过常用工具,你拿到了一份相对靠谱的“工时表”。

总计:120人天。

团队:4人。

理论耗时:30个工作日。

这时候,你直接跟老板报“30天上线”吗?

绝对不行! 那是找死。因为“墨菲定律”永远存在:老张会感冒,服务器会宕机,老板会临时加个Logo展示……

你需要加缓冲(Buffer) 。但在敏捷里,我们不简单的乘以系数,我们用 “聚焦系数(Focus Factor)”

  • 理想人天: 1天8小时全在写代码。
  • 现实人天: 沟通、开会、上厕所、修老Bug……真正的有效产出时间通常只有 60% - 70%

最终排期计算:

对外承诺工期=估算总工时 (120)聚焦系数 (0.7)171人天\text{对外承诺工期} = \frac{\text{估算总工时 (120)}}{\text{聚焦系数 (0.7)}} \approx 171 \text{人天}

实际天数=171/443工作日\text{实际天数} = 171 / 4 \text{人} \approx 43 \text{工作日}

向上的汇报艺术:

“老板,按最理想情况是30天。但考虑到技术风险和磨合成本,我们要预留安全空间。承诺45天上线(留2天富余)。 如果顺利,我们提前惊喜上线;如果不顺,我们也有退路。”

七、 总结:估时是团队的承诺,不是项目经理的命令

会议结束,白板上写满了数字。 大家看着自己打出的牌,心里是踏实的。因为:

  1. 数字是他们自己定的,不是你强压的(承诺感)。
  2. 不懂的地方给了调研时间,不心虚(安全感)。
  3. PM预留了缓冲,不焦虑(信任感)。

在这个“抖腿”项目里,我们终于从 “不知道什么时候上线” 的迷雾中看到了出口的影子。


【第7讲·思考】

场景回顾: 你用计划扑克搞定了大部分需求的估时。但在估算 “首页视频推荐流” 这个核心故事时,出现了僵局。 产品Linda说:“必须包含‘去重’逻辑,用户看过的视频不能再出现。” 新手后端小李打出了 13人天(非常大),理由是:“去重逻辑很复杂,随着用户看过的视频越来越多(几千条),每次查询都要过滤,数据库性能会崩,我得引入Redis BloomFilter,还要学怎么用……” 老张打出了 3人天,理由是:“V1.0数据量小,直接数据库 NOT IN 就行了,崩了以后再说。”

请思考并回答:

  1. 决策题: 面对“为了未来高性能而现在的复杂实现(小李)”和“为了现在快上线而欠技术债(老张)”,作为创业项目的PM,你会支持谁的方案?为什么?
  2. 话术题: 你决定支持其中一方。请设计一段话,说服另一方接受这个决定,并让他感到被尊重。

下集预告: 排期定了,开发开始了。你每天看着看板上的卡片在动,但心里还是没底: “我们真的能按时上线吗?大家是不是在报喜不报忧?” 你需要一张图,一张不撒谎的图。 敬请期待第8讲:《迭代规划会议——拒绝派活式管理,如何让团队心甘情愿自己认领任务?》