一张请假单在系统里走了两天,状态一直停在“审批中”。申请人看见的是进度条,审批人看见的是待办列表,而真正让流程停下来的,可能只是某个节点把“同意”设成了必填,却没人说清什么情况下可以退回。自动化工作流把纸面流程搬到了线上,也把原本藏在口头沟通里的停顿,变成了可被记录的状态。
很多团队讨论自动化时,容易把注意力放在“能不能连起来”:表单触发、消息通知、条件分支、结果回写。这些当然重要,但流程是否顺畅,往往不取决于节点数量,而取决于等待被放在哪里。一个节点如果只是把任务转交给下一个人,系统看起来完整,实际只是把排队从线下挪到了线上。申请人反复刷新页面,审批人并不知道这张单为什么需要自己处理,流程就有了“堵车”的错觉。
先看清等待,再谈连接
我习惯把流程里的时间分成两段:做事的时间和等事的时间。做事的时间通常容易被看见,谁处理、处理了什么、花了多久,系统都能留下痕迹;等事的时间则散落在通知、催办和沉默里。设计自动化工作流时,如果只统计节点耗时,很容易得到一个漂亮的平均处理时长,却解释不了单子为什么卡住。更实际的做法,是把每个等待状态写清楚:在等谁、等什么、等到什么时候可以升级、如果等不到该找谁。
这听起来像管理细节,却直接影响自动化能走多远。条件分支不是越多越灵活,分支太多而没有默认路径,流程会在异常处反复打转。通知也不是越多越及时,如果每个动作都触发提醒,真正需要处理的消息反而被淹没。流程设计需要一点克制:先确认哪些等待是必要的,哪些只是责任没有落地。
异常分支比主路径更考验设计
演示流程时,大家通常走主路径:提交、审批、完成,干净利落。可日常使用中,异常才是常态。请假单可能遇到权限交接,采购申请可能遇到预算科目调整,内容发布可能遇到临时改稿。自动化工作流若只覆盖顺利情况,使用者很快就会学会绕开系统,用聊天工具补一句“这个先帮我过一下”。系统里的记录因此变得不完整,后面的自动化也失去可靠输入。
处理异常不一定需要复杂引擎。有些团队会设一个“人工接管”节点,让流程在条件不满足时停下来,交给明确的人判断;也有些团队会把常见异常拆成更小的子流程,避免主流程被少数情况拖长。两种做法都指向同一件事:承认流程会停,并为停顿安排出口。与其追求一条永远不中断的链路,不如让中断发生时有人知道、有地方可去。
把边界写进流程里
自动化工作流还有一个容易被低估的部分:责任边界。系统可以按规则把任务分给某个角色,但角色背后是谁、是否有空、是否具备判断依据,往往不在流程图里。一个节点写着“部门负责人审批”,实际可能对应多个代理人;规则没有说明代理关系,流程就会在换人、休假或交接时露出缝隙。把这些边界写进配置,比在出问题后补说明更省力。
- 每个等待状态尽量对应一个明确的人或角色,而不是模糊的“相关方”。
- 条件分支要有默认路径,异常时能停下来,而不是继续往下猜。
- 通知要围绕需要行动的时刻发出,减少只告知不处理的提醒。
- 流程记录不只保存结果,也保留退回原因和人工接管的痕迹。
回到那张请假单。它后来被退回过一次,原因是审批人希望申请人补充交接说明。这个动作在系统里只是一个字段,却让流程多停了一天。问题不在于自动化本身,而在于设计时默认所有信息都会一次给全。自动化能压缩重复操作,却压缩不了判断所需的信息。把等待、异常和责任边界一起考虑,流程才可能从“看起来自动”走向“用起来顺手”。