第五章:流程设计方法论——成为机器的奴隶,或是制造腐败
发布于
文档大纲
一、流程的本质
二、流程的要素
1、驱动力模式
2、任务和状态
3、节点
(1)验证机制
(2)驳回机制
4、监管机制
三、流程的设计模式
1、面向状态(谁做都行,以事为中心)
H2、面向节点(不是谁都能做的,以人为中心)
3、面向状态还是面向节点,这是个问题。
四、流程模型
1、箭头模型
2、层叠模型
(1)层叠模型有两种:
(2)反馈机制
3、水池模型
4、模型的混合使用
五、多层流程的设计
1、单一任务,多层状态
2、单一主任务,多重子任务
3、两种多层流程设计的方式各有优缺点
零几年的时候,我曾经在国内的一家头部互联网企业工作。当时,公司内部使用一套工单系统来实现工作协同。那个时候,不像现在,有很多的协同工具可以选择。所以,那套工单系统曾被我仔细研究。
也就是那个时候,我开始关注流程的设计和管理。
在后来的很多年里,我曾经做过很多流程类的产品,甚至也做过流程引擎。
前几年曾经专门复盘过这些流程类的产品,最后,搞出来自己的一套流程设计方法论。
可能不像很多方法论那样高度抽象,但胜在简单实用。至少对于大多数流程的设计来说,基本上可以拿来就用。
一、流程的本质
流程的本质就是事物状态的有序化。
任何事物,按照一定的标准,都可以用一系列的状态来标注。而这些状态的有序化便形成了流程。
二、流程的要素
1、驱动力模式
被动模式和主动模式。
任何一个流程的运转都是有自己的驱动力的。
被动模式的驱动力来源于上一个流程节点,也即是上一个节点驱动下一个节点。(简单理解:任务从上一个执行人转给下一个执行人,下一个执行人被动执行。)
主动模式的驱动力来源于流程节点本身,或者叫自驱动。
不同的驱动力模式,决定了流程设计的时候如何选择流程模型。
流程设计是必须要考虑整个流程的驱动力模式的。否则,很可能会造成,你设计的流程,“不好用”、“不合理”、“太麻烦”。。。。。。
在同一个流程中,主动模式和被动模式可以混合使用。主要看具体的事务和场景。
2、任务和状态
一个流程的流转,是需要一个状态化的东西来统筹整个流程的,这就是任务。任务的状态的有序变化形成了流程。
一个任务,可以是一个文档、一个票据、一个订单、一个工单、一个卡券等等。
一个流程只能有一个任务。或者只能有一个主任务,在流程中可以被拆分成多个子任务分别执行。
3、节点
节点就是执行人。
也就是,每一个任务的状态的具体执行者。可以是人,可以是程序,也可以是机器设备等等。
一个节点可以只执行一个状态,也可以执行多个状态。这主要取决于流程的设计模式(详见后边的“三、流程设计模式”)。
对于每一个节点来说,状态的切换,并不一定会伴随节点的切换,但节点的切换一定会伴随状态的切换。这算是一个流程设计的原则。
而对于每一次节点的切换,都会需要相应的验证机制,以及有可能会用到的驳回机制。
(1)验证机制
每一次节点的改变,都会执行验证。
- 前置验证:
有的是在节点切换之前验证当前节点的执行结果,通过验证,则切换下一个节点。
- 后置验证:
在节点切换之后验证上一个节点的执行结果,如果不能通过验证,则执行驳回机制。
(2)驳回机制
如果流程的验证机制是后置验证,那么就必须要有驳回机制。驳回机制就是验证上一个节点提交的任务不合格,而退回给上一个节点的机制。具体的验证标准、规范、退回方式、驳回后要如何处理等,都是需要在设计流程的时候考虑的。
4、监管机制
每一个流程都应该有监管机制。监管机制主要有两种。
- 记录型监管
最简单,也是最基本的监管机制,就是将记录任务的执行过程,即任务状态的变化和每个状态的属性和执行结果等。出了问题,便可以追溯原因。
- 实时监管
实时监管流程的每一个状态的执行情况,发现不合规之处,可立即介入。
三、流程的设计模式
1、面向状态(谁做都行,以事为中心)
这个比较常见。重状态,轻节点。我们大多数见到的和做的流程都是这样的设计模式。
先做什么事情,然后得到一个什么状态,然后再做什么事情,再得到一个什么状态,然后再通过图像识别,得到一个什么状态,然后再做什么事情,得到一个什么状态。。。。。。
流程中的所有节点(人、程序、机器等)围绕着一件事、一个机械化的步骤,按照固定的规则在做各自负责的事情。
你可以把它理解成“流水线”。
2、面向节点(不是谁都能做的,以人为中心)
这种比较少见。轻状态,重节点。
任务先交给谁,能得到一个什么结果,然后再交给谁,能得到一个什么结果,然后再交给哪个机器,能得到一个什么结果,然后再交给谁,能得到一个什么结果。。。。。。。
一般来说,在一些非标准化、节点产出的结果差异较大的情况下,或是在一些松散的组织和流程中,才会考虑使用。
在互联网产品中,不多见。目前,主要是在一些协同办公产品中会用到。
3、面向状态还是面向节点,这是个问题。
或许,上帝之所以会存在,是因为这个世界不完美的原因吧。
一个流程的设计,无论面向状态还是面向节点,都不可能设计出一个绝对完美的流程。
面向状态的终极,人类终将成为程序和机器的奴隶。
面向节点,很容易会造成权利的集中和腐败的产生。
所以,最后,流程要使用什么样的设计模式,还要看具体的业务场景。适合的才是最好的。
四、流程模型
[pms-restrict subscription_plans = “1125”]
1、箭头模型
单向流程。整个流程就是一个有方向的箭头。

注:图中,每个点,可以是状态,也可以是节点。
箭头模型就是一个典型的被动模式的流程模型。经常被用在一些状态比较多,每个状态都会有不同的执行人的流程的设计上。比如,我们常见的各种审批流程。
箭头模式既适合面向状态的流程设计模式,也适合面向节点的流程设计模式。所以,图中的每个点,可以是状态,也可以是节点。
2、层叠模型
层叠模式也是被动模式的流程模型,并且,只适合面向节点的流程设计模式。
(1)层叠模型有两种:
- 不分叉的层叠模型

图中,实线箭头表示由发起节点发起,虚线箭头表示由执行节点反馈。
由发起节点指定单个执行节点执行,执行节点执行完成后,反馈给发起节点。
不分叉层叠模型是单层的,原则上是不能够建立多层流程节点的,否则会让整个流程出现不合理和浪费资源的情况。
- 分叉的层叠模型

图中,实线箭头表示由发起节点发起,虚线箭头表示由执行节点反馈。
由发起节点拆分任务分别指定给多个执行节点执行,执行节点执行完成后反馈给发起节点。
分叉的层叠模型,既可以是单层的,也可以建立多层流程节点。
- 多层分叉层叠模型示意

注:图中绿色为发起节点,桔色既是发起节点又是执行节点,蓝色节点为执行节点。
(2)反馈机制
这是层叠模型特有的机制。无论哪种层叠模型,都必须要有反馈机制,并且要遵循两个原则:
- 下一级节点只能反馈给上一级节点
越级反馈是不允许的。否则,只能说明流程还有需要优化的地方。
- 原路反馈
执行节点只能反馈给向其发起任务的发起节点,
3、水池模型
水池模型是主动模式的流程模型。只适合面向状态的流程设计模式。

注:图中,一个箭头表示一个节点的处理过程。
水池的定义:同一状态的任务的集合。
水池模型的描述:将同一状态的任务集合到一块,由节点(执行人)主动检出并执行,然后再放入另一个水池。如果遇到异常,则节点可执行退回,将任务重新退回原来的水池。
4、模型的混合使用
单独使用一个模型的流程往往是处理一些比较简单的事务,流程节点一般也不会太多。大多数的流程都是多种模型混合使用的。
比如,在一个被动模式的箭头模型为主的流程中,也可以在其中一部分使用主动模式的水池模型。
但是,一般来说,面向状态的设计模式和面向节点的设计模式不可混合使用,否则容易出现混乱,让整个流程不够优化。
另外,模型的混合使用也经常会伴随着多层流程的叠加,用来处理各种复杂业务。
五、多层流程的设计
在实际的业务中,各种复杂流程是非常常见的。解构这些复杂流程,其实,是多种模型的混合和多层次流程的叠加。
多层流程有两种。
1、单一任务,多层状态
一般情况下,一个任务只会有一层状态。但为了处理很多的复杂场景,对一个任务设计多层状态是非常有必要的。这样做,会在很大程度上降低流程的复杂度,让整个流程和所有的节点井然有序。
我们来举个例子。
就拿比较常见的分销电商购物流程来说。任务是订单,主要的过程是,用户下单支付,然后,物流配送,用户收货,和分销商结算。
我们先按一层状态来设计这个流程。
任务是一个订单,状态只有一层。

这个流程只是为了举例说明多层状态的设计,所以就做得简单粗糙了一些。而在实际业务中,会比这个复杂地多。
我们再按多层状态来设计这个流程。
任务同样是一个订单,状态有三层。用户使用一层,物流人员使用一层,分销商使用一层。三层状态并行。但是三层状态的执行是有先后的,不是同时进行的。
注:这个例子的设计,其实很粗糙,而且为了简单,所有的流程都用了箭头模型,其实像物流人员的流程设计可以再多分几层,并且在实际的业务中,很多物流业务是采用的水池模型。
用户:

物流人员:

分销商:

实际上,如果从上帝视角来看,按多层状态设计的这个流程和按一层状态设计的流程是一致的。只是,多层设计后,会在用户体验上大幅度提升。同时会大幅度降低一层状态设计的流程的复杂度,并且可以做的很精细,这是在一些比较复杂的流程中,一层状态所无法做到的。
2、单一主任务,多重子任务
将主任务拆解成多个子任务去执行。
注意,这个和层叠模型是不同的。拆解出来的任何一个子任务都是相对独立的,都是可以按照一个流程模型或多个流程模型混合来独立设计的。也可以将子任务再次拆解成多个独立的下一级任务。
举个例子。
同样是上述分销电商购物流程。我们现在把它改变一下,分销商的分佣的流程依然按照主任务的单独的一套状态来处理,物流人员的流程按照单一主任务,多重子任务的方式重新设计。

主任务是用户创建和支付订单,然后,订单被收货,最后归档为止。
在用户支付后,同时生成两个子任务。一个是给仓库拣货人员用的拣货工单,一个是给快递配送人员用的快递工单。当然,如果需要,也可以在“拣货完成”后再生成快递工单。
当子任务都被执行完后,最后归档。
3、两种多层流程设计的方式各有优缺点
第一种方式,也就是单一任务,多层状态,是一种无论在设计还是在实现上都比较简单的方式,而且,可以处理很多复杂的业务流程。
一般来说,能用第一种方式处理的,就不会选择第二种方式。
第二种方式,也就是单一主任务,多层子任务。选择这种方式,就意味着,在系统架构和开发上都会复杂很多。所以,这种方式一般也都是用在大型的、复杂的、涉及的节点和角色众多的流程的设计中。当然,这种流程在设计上,很多时候为了尽可能地降低复杂度,也会夹杂很多第一种方式的设计。
处理同样一个事务,流程的设计可以多种多样。这主要取决事务本身、场景,以及流程设计者的设计理念。
[/pms-restrict]