两个工程师的同一天
A 是某互联网公司的流程经理。去年花了半年时间梳理"统一请假审批流程",目标是把平均审批时长从 6 天压到 2 天以内。上线半年后内部调研结果让人哭笑不得:平均每次请假要走 4.7 天才能完成审批链。
她去看后台数据,发现流程在第 3 个节点之后就开始"卡"——不是审批人不在,而是审批人不知道这单该不该自己批。审批人开始打电话问隔壁部门的同事"按惯例你们 Q3 这种合同怎么批",打电话找不到人就拉个会议专门协调。
B 是某团队的 SRE。今年花了两个月把公司的发布流程改造成 Jenkinsfile 。两个月后他们统计:每次发布平均要花 2.5 小时才能走完流水线——其中 1.5 小时是在等"上游镜像构建失败"的错误信息传到 stage 5。
他去看 pipeline 日志,发现 stage 1 拉镜像失败之后,stage 2/3/4 还在傻跑,等跑到 stage 5 才报错。流水线跑得越长,等待时间越多。
两个人在不同领域做优化,最后列出的"问题清单"惊人地相似。
- 审批流程要靠打电话、开会、发邮件才能走通。
- 发布流水线要跑到最后一步才发现第一步出错。
- 流程图里塞了不该有的业务数据。
- Jenkinsfile 里塞了不该有的业务规则。
这不是巧合。A 和 B 碰到的是同一个老问题的不同侧面。
第一个坑:业务规则出现在不该出现的地方
流程侧的糟心例
某公司的合同审批节点,审批人要在系统里手动判断"这单合同是否超过部门 Q3 预算"。
审批人该做的决定是"批 / 不批"。但系统逼他做了第二个决定——"算不算超预算"。
审批人不是财务,业务判断跑到了不该出现的地方。结果是:
- 审批速度变慢——审批人要查预算、翻历史数据。
- 判断标准不一致——每个审批人口径不同,有的宽松有的严格。
- 出了错没人负责——超预算的合同签了,所有审批人都会说"我以为财务算过"。
流水线侧的糟心例
同一个团队改造的发布流水线,Jenkinsfile 的 deploy stage 里塞了一段判断"这次部署是否冲突下个季度的产品发布窗口"。
pipeline 该做的是"构建产物 + 推到目标环境"。但它偷偷干了"判断发布时机"这种业务规则。
结果是:
- pipeline 越长、业务人员越看不懂。
- 出了错不知道是构建的错还是业务的错。
- 业务规则改一次,pipeline 要跟着改一次。
共同的发现
两边都在"该做决定的人/系统"身上塞了"不该做的决定"。
审批节点该做的是"按业务规则执行",不是"自己造业务规则"。
pipeline 该做的是"按规矩跑构建",不是"自己定规矩"。
判断归决策层,执行归执行层。审批节点是执行层,pipeline 是执行层,它们都不该做判断。
第二个坑:错误被拖到最后才暴露
流程侧的糟心例
某 OA 系统的报销流程有 8 个节点。员工小王填了第 2 步"项目编号"——手抖填错。
流程继续往下走,到第 8 步才被退回,理由是"项目编号无效"。此时小王已经等了 5 天,前面 6 个审批人也都白签了。
错得越晚发现,整个流程浪费得越厉害。小王后来学乖了,每次报销前先打电话问财务"项目编号怎么填",又给财务增加了工作量。
流水线侧的糟心例
同一个团队的 Jenkinsfile 有 5 个 stage:lint → test → build → package → deploy。某次发布因为第一个 stage 用的基础镜像 tag 被误删,结果跑到 stage 5 才报错"找不到镜像"——前面 4 个 stage 全跑了 30 分钟才白费。
错在源头,但等到终点才发现。
共同的发现
两边都在"错误该早点暴露的地方"让错误拖延了。
流程的"快速失败"靠前置校验——第 2 步就该校验"项目编号是否合法",不该等到第 8 步。
pipeline 的"快速失败"靠 stage 1 就做基础检查——基础镜像、依赖、配置,每个都在进入下一个 stage 前校验完毕。
让错误在该浮出来的地方就浮出来,不要让流程和 pipeline 越长越能藏错。
第三个坑:决定的事和被决定的事搅在一起
流程侧的糟心例
某公司的请假流程,审批节点要求填"请假者上月绩效分"。
审批人看到绩效分后,决策被绩效影响了——绩效低的员工请假就被卡得更严。
但绩效分跟"该不该批假"是两件事。做决定的事(审批)和被决定的事(绩效数据)搅在了一起。
结果是:
- 审批节点失焦——审批人不知道该看"事实"还是"绩效"。
- 决策被业务数据污染——同一个请假理由,绩效 A 可能批、绩效 C 可能不批。
- 流程图变成数据搬运图——节点越多、搬的数据越多、流程图越长。
流水线侧的糟心例
同一个团队的 Jenkinsfile,build stage 要写"这次是否新功能、是否涉及支付链路"。
但这些跟"构建"没关系——它们是部署决策的依据,不该出现在构建配置里。pipeline YAML 越长,业务参数越塞越多,最后维护 pipeline 的人成了"业务翻译官"。
共同的发现
两边都在"做决定的位置"塞了"被决定的东西"。
做决定该看的是规则,不是数据。pipeline YAML 该承载的是执行编排,不是业务参数。
做决定的事(流程图 / pipeline YAML)和被决定的事(业务数据 / 业务参数)必须分离。前者是控制面,后者是数据面。
第四个坑:流程反向吞噬工作(最关键的一个)
前三个坑都能在"代码层面"修补——改一个字段、改一段配置、加一个 stage 校验。但第四个坑必须靠组织能力修。
反面:流程要靠"流程外"的手段补缺
差流程的典型状态——流程要走通,得靠流程以外的东西补:
- 要打电话问"这步到底该谁批"。
- 要拉会议协调"下一步谁接"。
- 要发邮件确认"前置条件齐不齐"。
- 要翻一份冗长操作手册查"流程图之外的细节"。
工作者花在"应对流程"上的时间,比做工作本身还多。流程不是工具,反而成了另一种工作。
某 IT 公司的内部调研显示:员工平均每周花 6.4 小时在"应对流程"上——开会协调、写邮件确认、打电话问下一步。流程不仅没省事,反而成了最大的时间黑洞。
正面:流程主动引导工作
好流程是什么样的状态——工作者不需要了解流程本身:
- 系统提示"现在该做什么、约束是什么、下一步交给谁"。
- 所有节点都在系统里走完,完全不需要打电话、开会、发邮件、查说明书。
- 工作者的注意力只在"工作"上,不在"流程"上。
这是流程的"隐形"——最好的流程是工作者感受不到它的存在。
某 SaaS 公司的 oncall 流程改造:oncall 收到告警后,系统直接告诉他"这是第几类问题、按 runbook 走哪个 play、要不要叫人"。oncall 平均处理时间从 22 分钟降到 6 分钟——不是因为他变厉害了,而是因为流程不再让他"应对流程"。
关键能力:职责划分
要让流程变成"引导者"而不是"负担",核心能力是职责划分:
- 流程设计者要先回答"这个工作由谁负责、边界是什么、上下游如何交接",把工作范畴划分清楚。
- 对每个划分出来的职责,要么自己设计具体执行步骤,要么把"怎么做"交给该职责的负责人,让他们做可执行管理设计。
这是一种职责逆转:不是"先有流程让工作去适应",而是"先有职责划分让流程去承载"。
工作完全线上化流程化,是这种职责划分能力的直接体现——好的流程设计本身就是一个能力的体现。流程设计者划分工作范畴,对每个职责做具体设计,或者交给每个职责负责可执行管理设计。
为什么这一坑最深
前三个坑(业务规则越界、错误延迟、控制/数据混淆)都可以靠"代码层面的纪律"修——多一次校验、多一层抽象、多一份规范。
唯独这一坑必须靠组织能力——没有"会做职责划分的人",再多的工具都没用。
这也呼应了开头讲的"数智化 ≠ 上工具"——好流程的本质不是流程图,是划分工作范畴的能力。
收尾:四个坑是一个老问题的四种投影
这四个坑看似独立,其实是同一个老问题的四种投影:
- 第一个坑:把判断放错了地方。
- 第二个坑:让错误延迟暴露。
- 第三个坑:把数据塞进了控制。
- 第四个坑:让流程反向变成工作的负担。
它们都指向同一件事——workflow 这个东西,本来该让事情更省力,但很多人把它做成了反过来的样子。
不论是组织里的审批流程,还是技术里的 CI/CD 流水线,坑长得几乎一模一样,因为它们本质上是同一种东西——都是"把工作串起来"的载体。
下篇要谈的不是"再加几条原则",而是"在数智化的成熟态,这种载体该怎么重新被组织起来"。我们会把流水线拆成三层,看清每层该管什么、不该管什么;再给一张判断表,让不同阶段的团队知道"自己该做到什么程度"。
参考
- 流程驱动工作:从纸质审批到智能门闩 —— 上篇四个坑里"流程侧的糟心例"的源头
- 基础篇总结:从手动部署到声明式流水线 —— 上篇四个坑里"流水线侧的糟心例"的源头
- 流程即镜像:数智化语境下流水线该怎么设计(下) —— 本文下篇