内源即将开源方法(最佳实践、协作方式、架构模式等)融入到组织的软件构建和发布方式之中,以在组织内构建类似开源的文化。
作为一个站在国内开源前线的开发者(GitHub 国内 Top 10),我本应该早点写一篇关于:『为什么应该选择内源,而非中台?』。然而呢,中台一直在火,找不到合适的机会。直到最近,因为拆中台,所以它又火了。我觉得再不聊聊,下一个热点技术领域又要出现了。
对于大部分不了解开源的人来说,他们很难理解:为什么“内源”能解决中台没有解决的问题?内源不就是在内部建立起开源式的项目,它哪能比中台更好?
对于中台的定义,大家都很了解了:企业级能力复用平台,又或者是,各类的复用、聚合、协调。它从组织的层面定义了,内部的各个系统及其如何协作。中台做了一个非常优秀的事情:定义了企业 IT 架构的标准化梳理形式。即,我们可以以一套方法论来自上而下梳理企业架构。
然而,从软件开发的角度来看,它违背了一些软件设计的思想:
对于大量相似业务的公司来说,它能产生巨大的价值。但是,多数公司并不存在这样的场景。它只会带来系统间的耦合度,进一步挺慢企业创新 + 产品上市的速度。除此之外,它并没有帮助企业解决一系列的内在问题,譬如部门之间的协作、降低系统的耦合度、复用的整体机制等等。那么,问题来了,如何实现解耦与复用的平衡呢?
回到架构设计领域的『整洁架构』,对于解耦模式来说,通常有这么一些层级(源自《整洁架构之道 》):
对应到了系统的各个部分:业务/产品/系统的应用、微服务、软件包。为了复用它们,常见的方式就是拆模块、封装组件、封装服务等等。
在团队内部,最常见的方式就是模块 + 组件复用,而跨团队的模块复用,则是服务的复用。模块 + 组件复用,除了经常引入非公共的公共代码,基本上没有啥问题。而模块的复用呢,则是各种矛盾的中心:A 团队提供服务给其它团队,其它团队经常报怨 A 团队响应太慢,而 A 团队也不愿意向其它团队提供服务 —— 容易被打乱节奏。
还有关于投入人力以复用时,常常忽略的一点是:付给程序员的工资,远比 CPU + 内存贵多了。
既然,你想通过我们已经实现的功能,来帮助你快速构建你的系统,而我也不想配合你修改我们的系统。那么,我们就从最简单的一种方式开始,你复制一份我们的代码,各走各的路。如果你不愿意复制,又想让我们提供支持,那么请为这个系统提供人力支持。
开放源码,促成两个团队的协作,这就是『内源』的雏形。不满意,你就 fork 项目,自己维护自己的版本;符合需要,我们可以一起合作,完善这个项目。
根据这个基本的思想,我们可以发现一个组织内有大量的代码可以开源共享:
而围绕这些不同的业务、技术、框架、场景等,就能构建出基于这些领域的知识性社区,幸运的话可以直接诞生出生机型组织。
让我们将内源带来的收益,映射到《企业 IT 架构转型之道 :阿里巴巴中台战略思想与架构实践》一书所提及的『烟囱式』系统三大弊端:
从理论上来看,中台解决了问题。回过头来看:内源是不是也解决了这些问题? 并且,由于内源不是一种集中式建设,而是自下而上的发起,加自上而下的激励,所以它反而还能真正为组织带来活力:
当然,这些都不是一件容易的事。
从我个的观点来看,内源主要有这么一些优势:
而从个人的角度来看,无负担重用将会是国内企业采用内源一个重要原因。其次,则是协作,我看好它带来的一个重要原因是:横向虚拟团队 + 内部技术社区。但是,不可置否能否真正成立横向虚拟团队,依赖于组织的负责人。
作为一个技术人,我觉得每家有一定规模 IT 人员的公司应该有横向虚拟团队。它可以沉淀某一特定技术领域产生的技术能力,并包含组织内的主要相关的、开放式技术场景。
大型 IT 组织里,在不同的领域都会不断提炼出技术框架,并沉淀下去。最常见的示例就是互联网公司的开源,它们会选择将一些沉淀的基础设施开源出去,以吸纳更多的相关领域人才,进一步提升该组织在该领域的能力 —— 如阿里巴巴的云原生开源。
相似的,以内部开源的方式,可以将特定领域的人才聚集起来,强化组织在这一方面的能力,并进一步提升其他/她开发人员的能力。如一个以微服务框架构建内部技术群,围绕的是该微服务框架的演进,以及如何适用于不同团队的落地。通过一系列的讨论 + 编码 + 示例,能加速产品的开发和实施,以及这个内源项目的完善。
考虑到“内源”本身也是类似于中台、敏捷这样的组织转型,它与它们的方式实现上是差不多的。
然而,与中台、敏捷这一类的转型方式不太一样的是,“内源”与开源方式类似,在单个项目上它依赖于『受信任的个人』,这也是开源项目与企业内部软件开源非常不同的一点。所以,与之相匹配的是,在“内源”运动里,单个项目非常需要可信提交者(Trust Committer)。可以暂且认为是在内部有技术影响力,并且还在编码的个人。
可信提交者(Trust Committer),即有直接向代码仓库提交的开发人员。即,你是经专业开发人员论证的有能力的开发者,可以一起为这个项目做贡献。从一个外部开源人员,到能直接向内部代码库提交代码并不是一件容易的事情,需要一步步的成长过来。
如在引入 Committer 机制的华为公司里 (源自《如何构建高效可信的持续交付能力,华为云有绝活!》,Committer 要做这么一些事情:
而这个流程是自己的项目上都采用了相关的流程。
『内源』在国内比较痛苦的一点是:内源需要自上而下的推动。至于要多上呢,这又是一个值得沉思的问题 —— 当然是越上越好。哪怕是有了组织的支持,还需要一系列的改变:
除此,从某种意义上来说,『内源』在国内又不是一个特别好的词语,听上去就是一个技术词汇,笑 ~ 。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!