“这个需求大概 60 人日。” “那我们投 2 个人,一个月能上线吧?”
这段对话每天都在发生,而它几乎必然导致延期。因为从”60 人日”到”一个月上线”,中间隔着两次换算,每一次都会把日期往后推。
三个量,别混着说
| 词 | 英文 | 含义 | 谁关心 |
|---|---|---|---|
| 人日 | effort | 一个人干一天的工作量 | 报价、成本核算 |
| 工期 | duration | 项目占用多少个工作日 | 排期、资源调度 |
| 日历日 | calendar days | 跨过多少个自然天 | 客户、老板、合同 |
报价谈的是第一个,客户关心的是第三个。排期这件事的全部内容,就是把第一个换算成第三个。
第一次换算:人日 → 工作日
公式很简单,难的是里面那个系数:
工期(工作日)= 总人日 ÷ 有效人数 ÷ 投入系数
投入系数是这里唯一有争议的数。一个人一天名义上 8 小时,但真正能投在这个项目上的时间要扣掉:
- 站会、评审会、跨部门对齐会
- 线上问题排查、答疑、支持
- 手上还没交接完的上一个项目
- 上下文切换——同时推两件事时,切换本身就有成本,两件事各投一半时间的产出,明显低于分别全投
常见的取值区间:
| 团队状态 | 投入系数 |
|---|---|
| 全职专注、需求冻结、不接支持 | 0.75 – 0.8 |
| 正常项目节奏、少量支持工作 | 0.65 – 0.75 |
| 同时维护线上系统、需求边做边定 | 0.5 – 0.6 |
| 多项目并行、频繁被打断 | 0.4 – 0.5 |
取值方法比取值本身重要。 翻出上一个已完成的项目,用实际投入人日除以实际工作日和人数,倒推出真实系数——这个数字通常比团队里所有人的直觉都低。没有历史数据的新团队先用 0.65,跑两个迭代后校准。
回到开头那个例子:
60 人日 ÷ 2 人 ÷ 0.7 ≈ 43 个工作日
不是 30 天,是 43 个工作日。而 43 个工作日还不是 43 天。
第二次换算:工作日 → 日历日
这一步取决于项目落在一年中的哪个位置。2026 年全年只有 248 个工作日,但它们在月份之间的分布很不均匀:
| 月份 | 工作日 | 备注 |
|---|---|---|
| 1 月 | 21 | 元旦 3 天假(1/1–1/3),1 天调休补班 |
| 2 月 | 16 | 春节 2/15–2/23 放 9 天,2 天调休补班 |
| 3 月 | 22 | 无假期,全年产能最好的月份之一 |
| 4 月 | 21 | 清明 4/4–4/6 |
| 5 月 | 19 | 劳动节 5/1–5/5 放 5 天,1 天调休补班 |
| 6 月 | 21 | 端午 6/19–6/21 |
| 7 月 | 23 | 无假期,全年工作日最多 |
| 8 月 | 21 | 无假期 |
| 9 月 | 22 | 中秋 9/25–9/27,1 天调休补班 |
| 10 月 | 18 | 国庆 10/1–10/7 放 7 天,1 天调休补班 |
| 11 月 | 21 | 无假期 |
| 12 月 | 23 | 无假期,赶年底交付的黄金月 |
(数据依据国务院办公厅年度放假安排,与 时间计算 工具内置的口径一致。作为对照:2024 年 251 个工作日,2025 年 248 个。)
最直接的三条结论:
- 7 月和 12 月的产能比 2 月高 40%以上(23 天 vs 16 天)。同样一个”一个月的活”,排在 2 月和排在 7 月完全是两码事。
- 跨春节的项目要单独评估。除了 2 月本身只有 16 个工作日,节前一周和节后一周的实际产出也明显下滑——人在,心思不一定在。保守做法是在春节前后各加两三天缓冲。
- 平均每月约 20.7 个工作日(248 ÷ 12)。“一人月”这个单位在国内大致等于 20 到 21 人日,不是 22,更不是 30。
所以那 43 个工作日跨多少自然天?拿 2026 年不同的启动日实算一遍:
| 启动日 | 43 个工作日后 | 自然日跨度 | 撞上什么 |
|---|---|---|---|
| 2026-11-02 | 2026-12-31 | 59 天 | 什么都没撞,全年最顺 |
| 2026-06-01 | 2026-07-31 | 60 天 | 无假期 |
| 2026-01-19 | 2026-03-25 | 65 天 | 跨春节 |
| 2026-08-03 | 2026-10-08 | 66 天 | 撞国庆 7 天假 |
同样 43 个工作日的工作量,启动时间不同,自然日跨度能差出一周。 差距看起来不大是因为调休补班把假期”还”回来了一部分——但这一周往往正好是交付前最要命的一周。而春节的真实影响还要更大:节前一周和节后一周的实际产出会明显下滑,这部分不体现在工作日数里,需要额外留缓冲。
“30 个工作日”这句话有三种理解
合同里最常见的表述,也是最常见的争议来源。
| 口径 | 定义 | 30 个工作日跨多少自然日 |
|---|---|---|
| 日历工作日 | 只算周一到周五,不管节假日 | 42 天(固定) |
| 扣法定假日 | 周一到周五减去法定假日 | 44 – 52 天(看撞上哪些假) |
| 中国式工作日 | 扣假日后再加回调休补班的周六周日 | 43 – 50 天 |
第三种是国内实务和本工具采用的口径:
工作日 = 周一至周五
− 法定节假日(含调休连休的部分)
+ 周六周日的调休补班日
2026 年有 6 个调休补班日(1 月、5 月、9 月、10 月各 1 天,2 月 2 天)——这些周末是要上班的,按国际口径算就会白白少算 6 天。
签合同时的建议写法:约定”工作日以国务院办公厅公布的年度放假安排为准,调休补班日计为工作日”,并在附件里附上按这个口径算出的具体交付日期。双方对着一个确定的日子签字,比对着一个数字签字安全得多——数字可以有三种理解,日期只有一种。
缓冲:别摊到每个任务里
排期估不准是常态,所以要留缓冲。问题是留多少、留在哪。
拍脑袋乘 1.5 的毛病:把所有任务一视同仁。“改个文案”和”对接一个没写过文档的第三方接口”,不确定性差了一个数量级,用同一个系数显然不对。
PERT 三点估算给每个任务估三个值:
乐观 O ── 一切顺利
最可能 M ── 正常情况
悲观 P ── 该踩的坑都踩了
期望值 E = (O + 4M + P) ÷ 6
标准差 σ = (P − O) ÷ 6
举例,一个接口对接任务:O = 2 天,M = 4 天,P = 10 天。
E = (2 + 4×4 + 10) ÷ 6 = 4.67 天
σ = (10 − 2) ÷ 6 = 1.33 天
关键一步:缓冲不要摊到每个任务上。
摊进去的缓冲会被帕金森定律吃掉——工作总会填满所有可用的时间。任务估 6 天(4.67 + 缓冲),基本不可能 4 天做完,因为没人会提前交。
正确做法是:每个任务按期望值 E 排,所有 σ 平方求和再开方,作为项目级的统一缓冲放在末尾:
项目缓冲 = √(σ₁² + σ₂² + … + σₙ²)
比如 9 个任务每个 σ 都是 1.33 天:
- 各任务缓冲之和:9 × 1.33 = 12 天
- 平方和开方:√(9 × 1.33²) = 4 天
总缓冲少了三分之二,防护效果反而更好——因为不是所有任务都会同时踩坑,风险在项目层面互相抵消了一部分。这也是关键链方法的核心思路。
延期之后:加人为什么救不回来
项目过半发现要延期,最本能的反应是加人。但新人进来要先理解需求、熟悉代码、配环境,这段时间不但不产出,还要占用老成员的时间来带——短期内团队的有效产能是下降的。
三条实务建议:
- 只在项目早期加人。过了中点之后加人,基本只会让事情更糟。
- 加人不如减范围。把非核心需求挪到下一期,是唯一能立刻见效的手段。
- 必须加人时按 0.5 的系数计入产能,同时给带人的老成员也扣掉相应的投入系数——不然算出来的新工期还是虚的。
完整走一遍
一个真实节奏的例子:
需求拆解 → 12 个任务,三点估算得总人日 62、项目缓冲 5 天
团队 → 2 人全投 + 1 人半投 = 有效 2.5 人
投入系数 → 团队历史值 0.7
工期 = 62 ÷ 2.5 ÷ 0.7 ≈ 35.4 → 取 36 个工作日
加缓冲 = 36 + 5 = 41 个工作日
用「N 工作日后」模式:2026-09-01 起算 41 个工作日
→ 工具扣掉中秋 3 天、国庆 7 天,加回 2 个调休补班日
→ 交付日 2026-11-03
用「区间工作日数」模式反查 2026-09-01 到 2026-11-03:
→ 总天数 64、法定节假日 10、周末 12、调休补班 2 → 工作日 42
这里的 42 和 41 差的那一天不是算错,而是两种模式的口径不同:“N 工作日后”从启动日的次日开始数,区间统计则包含启动日和交付日两端。反查时把这一天减掉再对,或者干脆把启动日当作”启动会那天”,本来也不产出。
给客户的承诺是 “2026 年 11 月 3 日”,不是 “41 个工作日”。
常见错误清单
| 错误 | 后果 |
|---|---|
| 把人日直接当天数用 | 工期少估 30% 以上 |
| 投入系数取 1.0 | 假设每人每天 8 小时全在写这个项目的代码 |
| 一人月按 22 天算 | 2026 年平均只有 20.7 天,春节月只有 16 天 |
| 用 Excel 的 NETWORKDAYS 算国内工期 | 不认中国法定假日,也不认调休补班,两头都错 |
| 缓冲摊到每个任务 | 被帕金森定律吃掉,等于没留 |
| 合同只写”30 个工作日” | 三种口径能差出十天以上 |
| 跨年项目按今年的调休估次年 | 次年安排要到十一二月才公布,误差 3 到 5 天 |
| 延期后靠加人补救 | 短期产能反而下降 |
相关
- 工作日计算本身的坑(调休结构、跨年、合同定义):工作日计算为什么这么难
- 看某一年的假期分布、顺便找拼假机会:万年历
- 算自己的时间到底值多少钱,反推人日单价合不合理:工作值不值
- 落到每天的执行节奏:番茄钟
总结
- 人日是投入量,工期是时间跨度,日历日才是客户听得懂的东西,排期就是把第一个换算成第三个
- 投入系数是排期最大的变量,取团队历史值,没有就先用 0.65,绝不要用 1.0
- 2026 年 248 个工作日,分布极不均匀:7 月和 12 月各 23 天,2 月只有 16 天,10 月只有 18 天
- 一人月约等于 20 到 21 人日,不是 22,更不是 30
- 缓冲用 PERT 算,放在项目末尾,平方和开方通常只有各任务缓冲之和的三分之一,防护却更好
- 对外永远承诺具体日期而不是天数——“41 个工作日”能有三种理解,“11 月 3 日”只有一种