历史告诉我们,手工作坊的做法必将被工业化的流水线做法取代。
之所以要流水线,当然因为它可以提高效率。一般来说,这个过程是个复杂过程,需要多人协作完成的,很多事情可以并发进行的,甚至有些步骤是可以机器代替的。这时,流水线能够发挥很大的效率作用。
如何为过程设计一个流水线呢?我首先困惑的是其中包含哪些要素,总结发现有三个。角色、作业和接口。角色,是执行作业的主体,Actor。作业,是总体过程的分解步骤,或者说过程可以按照大体阶段区分成子过程,每个子过程可以分解成边界清晰的更细的过程,这就是作业,Job。接口,是作业之间传递任务的标准化输入输出,Interface。提出这三要数,这就是元流水线,当界定出这三者的实质内容和形式,流水线就可以设计出来。当然,前提是有必要去设计这种流水线,比如你一年做一次总结,而且基本上每个人只是做自己的,那么你就没有必要有总结工作的流水线。但如果你是一家专门为其他企业做总结报告的,有一个团队,一年365天都有这种事情干,那就有必要设计一个流水线。
如下图,表示元流水线。三角形表示角色,圆形表示作业,方形表示接口。实线箭头表示工作流,虚线表示返工工作流。显然,要提高效率,就得减少虚线箭头的次数和跨度。这可以通过提高角色执行作业的技能,以及对接口的严格定义来实现。
一个复杂过程(Process)的执行可以用Actor、Job、Interface来描述。可以遵循一些原则:
1、 Process划分Job的依据:
a) 所需技能单一的过程界定成一个Job;
b) 过程输入输出清晰的界定成一个Job;
2、 每个Job都有特定Actor主导执行;
3、 前Job和后Job之间有Interface交互,
a) 此Interface由前Job的Actor负责;
b) 后Job的Actor应尽量依据Interface完成作业,不应依赖其他形式的交互(如口头沟通);
4、 需对每个Job的输出Interface进行质量控制,减少作业反复,尤其越靠前的作业;
上面给出的是一个过程流水线的示意,可以再复杂一点,给出一个场景(实际场景,但只用代码)。
角色:Ra、Ba、Da、Dp、Rw、Qa
作业: RD、CA、DR、DP、DA、RS、RP
接口:B、AO、P1、Pn、AT、DRL、DDL、AR、QR
整个过程可以按照重要阶段划分成三个子过程:BSP、ASP和RSP,可以构建这样一个流水线。在这个过程中,虚线已经限定在特定作业之间,当然,这需要进行技能培训,以及对接口的QA保证才能实现。
至此,当分解了角色、作业和接口之后,需要进一步定义每一步接口的形式规格,保证该规格的接口能够传递必需的信息到下游。显然,这是针对特定过程而不同的。