前面讲过了模型转化为方案和基于模型的沟通,自然就到了基于模型和业务架构进行的企业级 IT 系统开发,相信到这一讲很多人都会有所期待,毕竟从业务到模型只是一个复杂的“预备过程”,开发才是大家关注的重头戏,然而,我不得不以自己六年的企业级项目经验告诉大家,这里既没有什么神秘,也不该有什么神秘。可能让你失望了,但这是事实。为什么很多企业,甚至包括科技企业在内,业务转型或企业级方面做得不理想,其实是因为一个很简单的问题——脱节。一开始把企业级或业务转型搞得“高大上”,请咨询顾问、搞战略项目,但是往往停留在企业高层,缺少向执行层面的贯穿,当然也就更谈不到传导到开发,甚至搞战略时技术人员都很少参与。
搞企业级或者业务转型,实际上是个“全民工程”,不能只做顶层设计,必须逐级分解;不能只是业务自己想转型,而是必须拉上技术人员一起研究。转型不是搞一套新需求,而是要实实在在落地的。而基于模型的企业级业务架构设计方法正是关注战略到落地的“一气呵成”。
模型驱动开发(MDD)并不是新鲜事物,搞开发的人,尤其是科班出身的开发人员,上学时可能就知道 MDD 了,特别是 UML 这类耳熟能详的需求分析方法;企业架构也有 30 多年历史了,就算只以 TOGAF 为起点,业务架构也有 20 多年历史。虽然业务架构这几年提的人越来越多,并且大家着手的落地实践也日益增多,不再觉得业务架构,特别是企业级业务架构只是“画大饼”,但是,它只是在以往的工程方法之上累积发展起来的,所以,它更多的是对使用者决心和意志有较高要求,而非有什么点石成金的神奇方法。所有的企业级业务架构都是在痛苦的摸索、怀疑甚至反复中,靠着“革命乐观主义”精神和持之以恒的努力,迭代演化出来的,无论最初的设计看起来多出色、多惊艳,终归也要随着时代发展更迭,何况大部分的企业级业务架构设计最多只能算是给出了一个可以被多数人接受的演化起点而已。
基于业务模型进行项目设计在具体方法上可以根据自身企业的特点和习惯去决定实施工艺,但是其过程本质上是对业务模型的细化。业务模型为了设计企业级业务架构,必然对活动、任务进行适当的抽象,甚至减少一些工作细节,这样的模型可以让项目实施团队了解其标准化的核心,以及功能复用方面的设计思路,但是在具体开发中,实施团队是要了解到细节需求的,这与建模过程有一些矛盾之处。对建模而言,需要了解一定的细节,细节有助于判断抽象的正确性和合理性,但是,建好的模型中却不能表达太多的细节,过多的细节会让抽象的表达变得混乱,而且,以后我们还会讲到,过多的细节也会让模型的应用过程笨拙,使维护变得不可能。所以,到了设计阶段就必须对模型表达的工作流再细化,这也是为什么说业务架构的建模不能替代需求分析的原因。设计阶段的细化允许对原有的工作流进行拆分重构,但是有一个前提,就是新产生的元素必须基于旧元素,并且标明继承关系,这样才能保证设计的连续性。比如,之前虚拟案例中“获取新客户”、“维护老客户”、“存款”这三个活动,在实际设计中,如果存款部分和客户管理部分按照组件边界划分了项目组,存款项目组负责合约管理组件和账户管理组件,客户项目组负责客户管理组件,这种情况下,需求分析或者开发人员可能更愿意用一个较长流程来表示应用视角,这样可以更好地描述两个项目组提供的功能如何在具体的存款业务场景中衔接,而重构后的流程很可能如下图:
现实场景中,对公客户经理录入客户信息时很可能对方还只是潜在客户或者客户并没有马上进行开户操作,而是隔了一段时间之后才开户,这时客户信息可能需要更新。如果是客户经理首先了解到需要变更客户信息,则会走上边泳道中流程;如果客户直接去了柜台,柜员则会首先检查客户信息,这时发现需要更新,则可以走下边泳道这个过程,更新之后再开立账户。图中也可以发现,原本没有“检查客户信息”这个任务,在最初的建模过程中,它是可以写在开立账户这个任务中的,但是在细化流程阶段,则可以考虑是不是将其独立出来。这个取决于整体的架构判断,如果其他流程中也涉及这种拆分,确实可以调整企业级业务架构模型,如果不涉及或者很少领域涉及,也可以将其标记为“开立账户”任务的衍生。这种细化可能产生新的数据需求,设计新的数据实体,或者在原有的数据实体下产生根据某种维度细分的子实体。
之后就是根据细化了的、已经达到需求分析标准的业务模型,进行大家已经比较习惯的项目开发,设计用例、设计功能或者服务、分组开发、测试上线。但是企业级项目很重要的一点是要建立各阶段工作之间明确的衔接关系,尤其是设计元素之间的联系,最好能建立“战略 - 战略能力 - 需求 - 活动与任务 - 细化活动与任务 - 用例 - 交易或服务”这样明确的关联关系,形成一个完整的、分层级的企业能力地图,当然,这需要工具的支持。其参考逻辑关系如下:
企业能力视图不能仅局限于业务侧或者到组件层级,而是应该延伸到最终的实现,业务与技术的深度融合是今后企业发展的大趋势,业务就是技术,技术也是业务,企业未来的作战地图必须是基于业务技术一体化的视图,而非分裂的视角。
“检查客户信息”这个任务的增加,还引出了企业级项目中很常见的另一项工作——跨项目协调。业务模型最初设计时将任务归类给了各个组件,每个组件都包含了一定数量的任务和数据,从而构成了自己的边界,这个边界可以演化成各个子项目的边界。假定根据业务模型,企业内部已经完成了第一次“争吵”,所有项目的边界在下达项目计划给项目组时,已经暂时接受了,那么,在进行需求分析产生的这个“检查客户信息”任务应该归谁呢?从流程图中,似乎挺明显,它读取客户信息数据做判断,生成判断结果,按照数据聚类的话,应该归负责客户管理组件的项目组实施,尤其是在多个领域都涉及这种拆分时,它的“企业级”属性看起来比较明显。但如果涉及的领域很少呢?比如只有存款领域用它,虽然图中做了简化,数据实体没有增加,但在实际需求中,如果要求它不但生成屏显的判断结果,还记录判断结果并生成推送信息给客户经理呢?如果这个推送信息又被视为运营和销售两个部门间的沟通呢?数据会增加,而这些数据的归属似乎也是模棱两可的。不但任务的“企业级”属性模糊了,连数据归属都有点儿模糊。如果我们再引入一些常见的影响因素,比如,项目组的预算管理比较严格、项目组都面临工期问题、新加任务识别的较晚等等,在这些因素的作用下,项目组对于这些调整是很不愿意接受的,毕竟,企业级项目的一大特点就是,功能谁都能做,谁做了也都可以实现企业级复用,为什么就非得拍给我?这就是对基于模型的企业级架构协调工作的考验,一方面考验模型本身的质量,而更重要的是考验人和制度。人指的当然是业务架构师自身的设计和协调能力,架构师提出的调整方案是否具有足够的说服力;制度指的就是整个企业给企业级项目或者企业级转型提供的配套管理措施是否到位,项目组对企业级管控的执行是否给力。文中的案例是虚拟的,但在实际工作中,大家难免会遇到类似情况,如果这类问题解决的不好,组件间的不规则“边缘”会越来越多,而企业级项目协调难度之大,甚至会令一些项目组望而却步,为了赶工,宁愿多干活儿、少开会,产生一些连架构层都不清楚的“违章建筑”,最终形成一个到处都有“兔子洞”的企业级。
基于模型的企业级业务架构对解决上述问题有多大帮助呢?个人的经验认为,最大的帮助在于大家可以用同一种“语言”进行“吵架”,在进行项目协调的过程中,业务模型会很自然地吸引“火力”,它是项目设计的源头,向上追溯一定会追溯到模型这里,使大家不再只是“公说公有理,婆说婆有理”,为最终达成一致结论提供了有益的标靶。而模型也是一种很好的、结构化的结论记录形式,比起“一纸文书”的会议纪要或者发个内部电邮更容易让项目组理解和执行。
可能也有人会觉得,形成一个至高无上的强力架构不是更简单吗?但是,从实际工作角度来看,一是模型很难一开始就做到十分完善,很难达到可以照做不问的程度;二是,做企业级不是为了造就新的技术官僚,是为了打破部门边界、提升企业能力,所以让架构自己过于中心化了,反倒不是一个很好的选择。从这里引申开去,做企业级项目的成功标志,我个人认为不是项目上线,而是业务能力被全面地固定在机构中并且能够可视化,让大家都能在一个框架下朝着一个目标努力,不再过分依赖个人,无论是业务还是技术人员,这才是企业级的真谛。
从设计的角度再说说中台,中台其实也不过是个规划和迭代的结果,如果抛开规模导致的技术复杂度来看,只要坚持企业级的方向或者合理的领域规划,经过业务设计和沉降过程,产生中台规划只是个必然结果,每个企业都能找到属于自己特点的中台,而这个“寻找”的过程对企业而言胜过“中台”这个结果本身。从企业级的视角出发,你也许能够找到比中台模式更适合你的组件化结构,而不必沉迷于中台这个概念。
前面已经多次提到了业务架构设计是个迭代的过程,会有不断的反复和调整,站在旁观者或者事后回头看的角度,这是挺容易理解的,但是在执行过程中,却是一个需要慎重考虑且非常“烦人”的事情。如果把你摆在业务架构师的位置上,花了好大精力,动用了不少的人力、物力,几经周折汇报,过五关斩六将地完成了业务架构设计,任务发到了项目组,然后没过多久,以各类合理不合理的理由被提出种种调整,这当然是件很让人掉头发的事情,作为企业级项目,这些调整往往涉及的不是一个项目组,而是一条绳上拴着好几只“蚂蚱”,企业级架构管控经常在做些“按下葫芦浮起瓢”的操作。每每出现这种情况,上上下下都会想为什么架构不能直接把事情拍了(当然很多时候还是站在自己立场上想,为什么不按我说的拍)?业务架构师自己也会觉得,我说的很在理,我是最站在企业级立场的,为什么不干脆让我直接说了算?其实业务架构师,如果具有较大权力确实有助于贯彻整体架构,中心化毕竟是一种高效的执行结构,但是中心化的决策方式其实不符合建设企业级项目的目标,上一讲最后我提到,理想的企业级项目,实现之后应该达到不对个人的依赖,而过于强势的架构师自然会导致这种依赖的产生,所以,无论是从职业的角度还是企业级项目目标的角度,架构师都必须接受、鼓励、坦然应对这种调整要求,当然,这不是要求架构师允许无限制的浪费精力和项目时间,而是首先坚持“以理服人”,再要求对架构设计的贯彻,讨论是让所有项目人员深入理解企业级的过程,这个过程必须,也只能允许反复和挑战。基于实施情况进行调整,对业务架构和模型都是有益的,没有此类反馈的模型,十之八九是没有被真正使用的模型。
既然允许调整,又不能无限浪费时间,那我们就来梳理下应当调整的情况:
以上是几种应当做的调整,还有些情况则不应当调整,大致如下:
经过多年的企业级实践,有时我也会问自己,企业级这么费劲儿的事情,真的物有所值吗?坦白地告诉你,无法计算。所谓降低开发成本,这个是常挂在嘴边,但不一定是企业级要去解决的核心问题,技术五到八年差不多就换代了,节省的成本就算能算出来可以挺几年?你还得扣除转型成本。所谓系统互联互通、数据共享,其实这个是通过对关键问题的企业级处理,也就是点上的企业级就可以解决,比如数据标准化加数据仓库。所谓灵活响应、快速上线,这个更多是开发方式、Devops 等关注的内容,毕竟领域之所以为领域,还是因为领域之间有差别,可以因共享而提升的反应速度可能是有限的。所以,企业级价值在哪里?我个人认为,花费这么大力气搞企业级最重要的是转变企业文化,打破部门边界,让企业融为一体,让业务与技术融为一体,这种一体化带来的企业内部的变化,带来的高效协作才是最有价值的,是企业未来长期竞争力的基础。衡量企业级项目成功的标志并非单指一个系统的实现,文化没有转变、思维没有转变,是不会真的诞生这样一个系统的,即便交给企业一个这样的系统,也可能会被改回去。做企业级,难点不在技术,企业级真正解决的是业务问题、组织问题、思想问题,是超越技术之上的建立一个什么样的企业的问题。企业级业务系统是给具备此类文化的企业使用的配套工具,也是给不具备此类文化的企业提供的一个转型过程,至于结果,要由时间、感受和市场去检验,而非标准。
不同的系统也会反映不同的企业文化,这点如同之前对阿里中台背后的分析,希望朋友们能够多去思考和观察你所能接触到的系统和使用这些系统的企业。