4、任务依赖关系管理:FS、SS、FF、SF四种依赖类型,关键路径法
说实话,任务依赖关系这块,我见过太多人把它想简单了。
很多人觉得,不就是A做完B才能做嘛。嗯,这确实是最常见的一种。但实际项目中,依赖关系远比这复杂。我当年带一个硬件开发项目时,就因为搞混了SS和FF的关系,差点让整个测试阶段延期两周。从那以后,我对这四种依赖类型就格外上心。
4.1 四种依赖类型,你真的搞懂了吗?
项目管理里,依赖关系一共就四种。你想想看,其实就两个维度:前置任务和后置任务,加上开始和完成两个状态。两两组合,正好四种。
| 缩写 | 全称 | 含义 | 通俗理解 |
|---|---|---|---|
| FS | Finish-to-Start | 前置任务完成后,后置任务才能开始 | 最常用的依赖,A做完B才能做 |
| SS | Start-to-Start | 前置任务开始后,后置任务才能开始 | 可以同时开工,但B不能比A先开始 |
| FF | Finish-to-Finish | 前置任务完成后,后置任务才能完成 | B必须等A做完才能收工 |
| SF | Start-to-Finish | 前置任务开始后,后置任务才能完成 | 用得最少,B必须在A开始后才能结束 |
4.2 FS(Finish-to-Start)—— 最常用的依赖
这个不用多说。你写完代码,我才能做代码审查。你做完需求评审,我才能开始设计。这就是FS。
我个人习惯,在项目初期把所有任务都默认设为FS。等后面细化时,再根据实际情况调整。为什么?因为FS最安全,不容易出错。你想想看,如果两个任务之间没有明确的并行需求,用FS准没错。
4.3 SS(Start-to-Start)—— 并行工作的利器
SS依赖,说白了就是「你可以开始了,不用等我做完」。
举个例子:我在写接口文档的同时,前端团队可以开始搭建页面框架。只要我开始了接口定义,他们就能动工。不需要等我写完所有文档。
这里有个坑。我曾经在一个项目中,把两个任务设成了SS,结果前置任务只开了个头就卡住了,后置任务做到一半发现前置改了方向,全部返工。嗯,SS依赖的关键在于:前置任务必须有一个稳定的「开始里程碑」,而不是随便开个头就算数。
4.4 FF(Finish-to-Finish)—— 一起收工
FF依赖的意思是:你做完我才能做完。但你可以先做完,我不拦着。
我记得有一次做系统集成测试,测试用例编写和测试环境搭建就是FF关系。测试用例可以提前写完,测试环境也可以提前搭好。但只有两者都完成了,测试阶段才算真正结束。
FF依赖在实际项目中经常被忽略。很多人只关注「什么时候开始」,却忽略了「什么时候结束」。其实,有些任务的结束条件是相互绑定的。
4.5 SF(Start-to-Finish)—— 最反直觉的依赖
SF依赖,说实话,我工作这么多年,真正用到的次数一只手数得过来。
它的逻辑是:B任务必须在A任务开始之后才能结束。听起来有点绕对吧?
举个例子:旧系统下线和新系统上线。旧系统必须在新系统开始运行之后,才能正式下线。这就是SF。新系统一启动,旧系统才能结束。
我个人觉得,SF依赖更多是一种逻辑约束,而不是时间约束。在项目管理工具里,很多工具甚至不支持SF依赖。如果你遇到了,先想想是不是可以用FS或SS来替代。
4.6 关键路径法(CPM)—— 找到决定项目周期的命脉
好了,四种依赖关系讲完了。接下来是关键路径法。说白了,就是找出项目里最长的那条任务链。
为什么重要?因为这条链上的任何一个任务延期,整个项目就延期。其他任务哪怕提前做完,也改变不了项目结束时间。
我当年带一个嵌入式项目时,一开始觉得所有任务都很重要。后来用关键路径法一分析,发现真正决定周期的只有6个任务。其他任务都有或多或少的浮动时间。从那以后,我每次做计划,第一件事就是找出关键路径。
4.7 如何计算关键路径?
计算关键路径,其实就四步:
- 列出所有任务,包括工期和依赖关系
- 正向计算:从开始到结束,算出每个任务的最早开始时间和最早完成时间
- 反向计算:从结束到开始,算出每个任务的最晚开始时间和最晚完成时间
- 找出浮动时间为0的任务,这些任务连起来就是关键路径
举个例子,假设有四个任务:
| 任务 | 工期(天) | 前置任务 |
|---|---|---|
| A | 3 | 无 |
| B | 4 | A |
| C | 2 | A |
| D | 1 | B, C |
正向计算:A最早第3天完成,B最早第7天完成,C最早第5天完成,D最早第8天完成。
反向计算:D最晚第8天完成,B最晚第7天完成,C最晚第7天完成,A最晚第3天完成。
浮动时间:A=0,B=0,C=2,D=0。所以关键路径是 A → B → D,总工期8天。
4.8 关键路径的常见误区
嗯,这里我要说几个我踩过的坑。
误区一:关键路径上的任务最重要。 不对。关键路径上的任务最敏感,但不一定最重要。有些非关键路径上的任务,一旦延期超过浮动时间,就会变成新的关键路径。
误区二:压缩关键路径就能缩短工期。 不一定。你压缩了一个关键任务,可能另一个任务链变成了新的关键路径。我曾经把一个关键任务从5天压缩到3天,结果另一个链上的任务变成了关键路径,总工期只缩短了1天。
误区三:关键路径只有一个。 大型项目往往有多条关键路径,或者接近关键路径的次关键路径。这些都需要关注。
4.9 依赖关系与关键路径的结合使用
依赖关系决定了任务之间的连接方式,关键路径则告诉我们哪些连接最重要。
我个人习惯的做法是:
- 先用FS依赖画出主干
- 再用SS和FF优化并行度
- 最后用关键路径法验证计划是否合理
你想想看,如果关键路径上的任务用了SS依赖,那就要特别注意前置任务的「开始里程碑」是否足够稳定。如果关键路径上的任务用了FF依赖,那就要确保两个任务都能按时完成。
说白了,依赖关系是骨架,关键路径是命脉。两者结合,才能做出靠谱的项目计划。
这张图把四种依赖类型和关键路径法的关系串起来了。上面是四种依赖,下面是关键路径的计算步骤。两者不是孤立的,而是相辅相成的。
好了,这一章的内容就到这里。记住一句话:依赖关系决定了任务怎么连,关键路径决定了项目怎么管。两者都搞明白了,你的项目计划就不会出大问题。