产品必读:“康威定律”对组织论、沟通成本、微服务的启发
“组织形式等同系统设计”——这就是康威定律(Conway's Law)阐述的一个关键思想。Conway's Law (melconway.com)
其原话是这样的:
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)
中文直译大概的意思就是:设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。
但是其思想启发远不止于此。
本文目录如下:
1、团队组织&产品架构设计
2、沟通成本 = n(n-1)/2
3 、孤岛系统的集成接口量
4、康威定律与微服务的合理性
1
团队组织&产品架构设计
面试的时候,面试官问我们有什么要问的,实在想不出的时候,你就问问团队组织架构吧。
这不仅仅是关乎到自己入职后的汇报协作,同时也是对产品系统架构的预估。
为什么呢?因为组织结构往往代表一种协作分工,而分工的产物就是产品。
所以,团队组织形式,首先体现在系统上。
比如Apple的产品、微软等的产品脚骨设计,就能形象生动的理解这句话。
从这张图也可以看出:
亚马逊等级森严且有序;
谷歌结构清晰,产品和部门之间却相互交错且混乱;
Facebook架构分散,就像一张散开的网络;
微软内部各自占山为王,军阀作风深入骨髓;
苹果一个人说了算,而那个人路人皆知;
庞大的甲骨文,臃肿的法务部显然要比工程部门更加重要。
多年前,更有人在《第一财经周刊》尝试着炮制了一份中国主要的科技公司的结构图—百度、腾讯、华为、联想、阿里巴巴、新浪。
结果发现,它们也是彼此风格迥异(和今天的实际情况已经不一样了):
华为,技术创新引发矩阵结构变化;
阿里巴巴,马云的影子无时无处不在;
新浪,依托微博画了一张大饼;百度崇尚简单;
联想,大小通吃但又左右互搏;
腾讯,产品与部门关系千丝万缕,QQ是所有产品与服务的基石。
这给我们的启发就是,想要什么样的系统,就搭建什么样的团队。
比如,如果系统是按照业务边界划分的,大家按照一个业务目标去把自己的模块做出小系统,小产品的话,你的大系统就会长成下面的样子,即微服务的架构:
这个思想,其实就来自于康威定律。
2
沟通成本 = n(n-1)/2
《人月神话》中最著名的一句话就是:
Adding manpower to a late software project makes it later --Fred Brooks, (1975)
之所以这样,是因为沟通成本 = n(n-1)/2。
沟通成本随着项目或者组织的人员增加呈指数级增长。举个例子:
-
5个人的项目组,需要沟通的渠道是 5*(5–1)/2 = 10 -
15个人的项目组,需要沟通的渠道是15*(15–1)/2 = 105 -
50个人的项目组,需要沟通的渠道是50*(50–1)/2 = 1,225 -
150个人的项目组,需要沟通的渠道是150*(150–1)/2 = 11,175
-
亲密(intimate)朋友: 5 -
信任(trusted)朋友: 15 -
酒肉(close)朋友: 35 -
照面(casual)朋友: 150
正如人月神话提出的,随着项目或者组织的人员增加呈指数级增长,沟通成本 = n(n-1)/2,传统模式下各个孤立系统对接时候的接口开发最大数量也是N*(N-1)/2。
这就导致实现成本很高,于是出现很多集成平台。
集成平台的重要性在于,其不仅能够在各个系统之间实现统一集成和交互,同时为数据集成提供了可能。
4
康威定律与微服务的合理性
微服务是指将应用功能最小化,原子化,尽可能减少应用服务之间的耦合,而后通过不同微服务组合出不同的功能,提供给用户。最大化服务的可重用性。
· 分布式服务组成的系统
· 按照业务而不是技术来划分组织
· 做有生命的产品而不是项目
· Smart endpoints and dumb pipes(我的理解是强服务个体和弱通信)
· 通过MVP的方式来设计系统,通过不断的迭代来验证优化,系统应该是弹性设计的。
· 自动化运维(DevOps)
· 容错
· 快速演化
康威定律可归纳一些核心观点,如下:
第一定律:Communication dictates design(组织沟通方式会通过系统设计表达出来)
第二定律:There is never enough time to do something right, but there is always enough time to do it over(时间再多一件事情也不可能做的完美,但总有时间做完一件事情)
第三定律:There is a homomorphism from the linear graph of a system to the linear graph of its design organization(线型系统和线型组织架构间有潜在的异质同态特性)
第四定律: The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems(大的系统组织总是比小系统更倾向于分解)
给我们的启发是:
人与人的沟通是非常复杂的,一个人的沟通精力是有限的,所以当问题太复杂需要很多人解决的时候,我们需要做拆分组织来达成对沟通效率的管理。
组织内人与人的沟通方式决定了他们参与的系统设计,管理者可以通过不同的拆分方式带来不同的团队间沟通方式,从而影响系统设计。
我们要用一切手段提升沟通效率,能2个人讲清楚的事情,就不要拉更多人,每个人每个系统都有明确的分工,出了问题知道马上找谁,避免踢皮球的问题。
你想要什么样的系统设计,就架构什么样的团队,能扁平化就扁平化。最好按业务来划分团队,这样能让团队自然的自治内聚,明确的业务边界会减少和外部的沟通成本,每个小团队都对自己的模块的整个生命周期负责,没有边界不清,没有无效的扯皮,inter-operate, not integrate。
做小而美的团队,人多会带来沟通的成本,让效率下降。亚马逊的Bezos有个逗趣的比喻,如果2个披萨不够一个团队吃的,那么这个团队就太大了。事实上一般一个互联网公司小产品的团队差不多就是7,8人左右(包含前后端测试交互用研等,可能身兼数职)。
扫码加产品社群