康威定律

在工作的前一两年,是一个沉迷于代码,努力学习如何做好每个feature的状态。随着经验的积累,在技术方面开始接触一些架构方面的新知识。最近重新研读 Uncle Bob 的博客合集 《整洁架构之道》, 还是有很大收获。其中之一就是对于康威定律有了更加全面的认识和思考。

Conway’s law 最初来自于Conway在1967年发表的论文
《How Do Committees Invent?》,之后在《人月神话》
这本书中引用了论文的结论,并命名为康威定律(Conway’s law)得以推广。

Conway’s law: Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)
设计系统的组织其产生的设计等价于组织间的沟通结构。

反向理解起来也是成立的。

Conway’s law reversed:You won’t be able to successfully establish an efficient organizational structure that is not supported by your system architecture design.
如果系统架构不支持,你无法建立一个高效的组织。


Mike Amundsen 归纳了如下四个核心观点:

  • 第一定律

Communication dictates the design
组织沟通方式会通过系统设计表达出来

对于复杂的,需要协作完成的系统开发,沟通是必须要持续提升的问题。
每个团队由5-10人组成(沟通成本 = n(n-1)/2 - 《人月神话》),在团队内部进行频繁的、细粒度的沟通。对于团队外部,定义好接口,契约,只进行粗粒度的沟通。这样可以降低沟通成本,同时也符合高内聚,低耦合原则(代码和人员管理有些时候真是相通的)。

  • 第二定律

There is never enough time to do something right, but there is always enough time to do it over
时间再多一件事情也不可能做的完美,但总有时间做完一件事情

这就是我们在用kanban管理迭代时几乎都有一列是BAU(Business As Usual ),其中会包括一些日常修复的Bug Story。敏捷开发中将迭代引入,做到持续交付,快速验证,迅速反馈,持续改进。

  • 第三定律

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
大的系统组织总是比小系统更倾向于分解

合久必分,分久必合,团队以及架构都是在不断优化的。一个团队随着人员的增加,沟通以及管理成本一定会增加。

一些思考:
康威定律只是Conway本人基于软件开发的经验,对于架构以及团队管理普遍现象的总结。软件行业半个世纪的发展也验证了其正确性。理解了康威定律可以帮助开发人员从另一个角度理解架构设计。现实中的问题是,仅仅基于康威定律,还是不能评判某个架构是否是合格的?如何提升?什么时间进行提升?等一系列问题。我还在学习中。。。

你可能感兴趣的:(康威定律)