程序猿和架构师都应该了解“康威定律”(Conway's law)

程序猿和架构师都应该了解“康威定律”(Conway's law)

什么是康威定律

康威定律是一句格言,指出组织设计系统来反映他们自己的沟通结构。它以计算机程序员梅尔文·康威的名字命名,他于1967年提出了这个想法。他最初的措辞是:

organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations. — M. Conway

一个组织的系统通常被设计成这个组织通信结构的副本

我的理解:你的组织是什么样子的,最终这个组织信息系统肯定也是相同样子。效率高的组织,系统效率自然也高。效率低的组织,做成的信息系统效率也肯定不高。

后来康威定律被引申为下面的四条

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

如此简单的一句话怎么成为了定律

其实这不过作者的经验总结,发表在《Datamation》杂志上。但是后来Brooks在著名的《人月神话》中引用康威的观点,并将其称赞为我们熟知“康威定律”。

Adding manpower to a late software project makes it later --Fred Brooks, (1975)

为了赶进度加程序员就像用水去灭油锅里的火一样(无奈大家还是前赴后继)。

Because the design that occurs first is almost never the best possible, the prevailing system concept may need to change. Therefore, flexibility of organization is important to effective design.

由于首先发生的设计几乎从来不是最好的可能,因此流行的系统概念可能需要更改。因此,组织的灵活性对有效设计至关重要。

由此可知,大牛们早在半个世纪前就告知我们先优化组织,在优化系统。没有敏捷的组织,就没有敏捷的开发团队。

在康威的文章中,他还提到了

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

听着很耳熟不是吗,这不就是现在的持续集成和敏捷开发么。

康威定律如何指导我们实践

  • 我们要用一切手段提升沟通效率,比如slack,github,wiki。能2个人讲清楚的事情,就不要拉更多人,每个人每个系统都有明确的分工,出了问题知道马上找谁,避免踢皮球的问题。
  • 通过MVP的方式来设计系统,通过不断的迭代来验证优化,系统应该是弹性设计的。
  • 你想要什么样的系统设计,就架构什么样的团队,能扁平化就扁平化。最好按业务来划分团队,这样能让团队自然的自治内聚,明确的业务边界会减少和外部的沟通成本,每个小团队都对自己的模块的整个生命周期负责,没有边界不清,没有无效的扯皮

参考资料

  • 原文 康威定律的原文 Committees_Paper.html

文章内容引用

  • 微服务架构的理论基础 - 康威定律
    https://yq.aliyun.com/articles/8611

  • 每个架构师都应该研究下康威定律
    http://www.infoq.com/cn/articles/every-architect-should-study-conway-law

  • Conways_Law 早期介绍

你可能感兴趣的:(程序猿和架构师都应该了解“康威定律”(Conway's law))