康威定律 - Conway’s law 简介

什么是康威定律

梅尔 • 康威于 1968 年 4 月在 Datamation 杂志上发表了一篇名为“ How Do Committees Invent”的论文,文中指出:

Any organization that designs a system (defined more broadly here than just information systems) will inevitably produce a design whose structure is a copy of the organization's communication structure.

康威定律主要揭示了交付的架构和组织间的关系.
下面我们先看一下常见的组织结构和交付结果.

组织的松/紧耦合


紧耦合组织, 指的是一起工作的员工在组织管理上的关系紧密,比如商业公司里开发同一个产品特性的组或团队。而松耦合组织, 比如常见的开源项目组织等.
研究发现, 组织的结构对交付的质量确实有深刻的影响。如果组织更加松耦合, 构建的系统更倾向于模块化, 耦合度也越低。

小团队


微软做过一个验证研究,来观察组织结构对交付的软件质量的影响,有兴趣的可以看一下这个结果:The Influence of Organizational Structure On Software Quality: An Empirical Case Study
而在对技术要求更高的互联网公司,如 Amazon 提出的原则 two pizza team rule,即一个服务的设计、开发、测试和运维人员在一起吃饭,只需两个批萨就够了。Amazon 相信小团队会更加高效,而且对交付的服务更加负责。
Netflix 也是这样,小团队的组织方式很好的保证了他们的独立解耦和快速优化的架构,某种意义上讲,Netflix 为了想要的系统架构,而使用了相应的组织结构。

服务的所有权 和 共享


在不少公司, 存在不少按技术类型划分团队, 即一个服务可被不同团队的人任意修改。
这种情况存在的原因,可能是拆分服务的成本过高,人员不足,或为了避免交付瓶颈。
但这样做有什么弊端呢? 这会降低团队对交付的关注、责任心和质量。
因此,如今很火的微服务会根据业务领域, 而不是技术进行建模。
如果负责某个微服务的团队与业务领域相匹配, 则它更容易保持对用户和业务的关注, 也更容易进行以特性为导向的开发.

如果真的不能避免服务共享, 可以采用内部开源的方式,进行共享服务。这就有了项目的守护者,不过要注意开源的时机, 需要等到项目比较稳定之后.

当然, 微服务是有成本的, 需要搭建基础设施. 小规模团队并不推荐使用, 因为架构和组织不太匹配, 除非系统和组织规模到一个点, 严重影响效率的时候, 微服务才能更好的发挥威力.

人的问题


康威定律, 其实说的也是管理和人的问题, 毕竟代码是人写的, 组织结构、质量和文化自然会很大程度上影响交付. 在设计系统的时候, 应多考虑组织和系统架构的匹配问题,否则会遇到许多管理、架构和工程等方面的问题。
在<<软件系统架构: 使用视点和视角与利益相关者合作>>这本书中也提到了:

系统架构的目标是解决利益相关者的关注点。

康威定律也正是揭示了这种利益关系对最后交付的影响.

参考


MicroservicePremium
<<微服务设计>> - Sam.Newman
每个架构师都应该研究下康威定律 - InfoQ
软件系统架构:使用视点和视角与利益相关者合作