第五章:流程设计方法论——成为机器的奴隶,或是制造腐败

发布于

文档大纲

一、流程的本质
二、流程的要素
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]