Conway#39;s law(康威定律)
Mel Conway? 康威在加利福尼亞理工學院獲得物理學碩士學位,在凱斯西儲大學獲得數(shù)學博士學位。畢業(yè)之后,他參與了很多知名的軟件項目,如 Pascal 編輯器。在他的職業(yè)生涯中,康威觀察到一個現(xiàn)象:軟件團隊開發(fā)的產(chǎn)品是對公司組織架構(gòu)的反映。
1967 年他針對這個現(xiàn)象提交了一篇論文。(http://www.melconway.com/Home/Conways_Law.html)給 《哈佛商業(yè)評論》。結(jié)果程序員屌絲的文章不入商業(yè)人士的法眼,無情被拒,康威就投到了一個編程相關(guān)的雜志,所以被誤解為是針對軟件開發(fā)的。
最初這篇文章顯然不敢自稱定律(law),只是描述了作者自己的發(fā)現(xiàn)和總結(jié)。后來,在Brooks Law著名的人月神話中,引用這個論點,并將其“吹捧”成了現(xiàn)在我們熟知“康威定律”。
康威定律的核心如下:
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
任何設計系統(tǒng)的組織,必然會產(chǎn)生以下設計結(jié)果:即其結(jié)構(gòu)就是該組織溝通結(jié)構(gòu)的寫照。簡單來說: 產(chǎn)品必然是其組織溝通結(jié)構(gòu)的縮影。
?
為什么溝通會影響產(chǎn)品、架構(gòu)等?
在《人月神話》 中提到這樣一個觀點:
Adding manpower to a late software project makes it later --Fred Brooks, (1975)?
為了趕進度加程序員就像用水去滅油鍋里的火一樣(無奈大家還是前赴后繼)。
為什么會有這樣的情況,《人月神話》中給出了簡潔的答案:?
溝通成本 = n(n-1)/2,溝通成本隨著項目或者組織的人員增加呈指數(shù)級增長。是的,項目管理這個算法的復雜度是O(n^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
所以知道為什么互聯(lián)網(wǎng)創(chuàng)業(yè)公司都這么小了吧,必須小啊,不然等CEO和所有人講一遍創(chuàng)業(yè)的想法后,風投的錢都燒完了。
?
Mike Amundsen 在 《遠距離條件下的康威定律——分布式世界中實現(xiàn)團隊構(gòu)建》 講座中(http://www.infoq.com/cn/presentations/team-building-implementation-in-distributed-world?)還舉了一個非常有意思的理論,叫“Dunbar Number”,這是一個叫Dunbar(廢話)生物學家在1992年最早提出來的。最初,他發(fā)現(xiàn)靈長類的大腦容量和其對應的族群大小有一定關(guān)聯(lián),進而推斷出人類的大腦能維系的關(guān)系的一些有趣估計。舉例來說
親密(intimate)朋友: 5
信任(trusted)朋友: 15
酒肉(close)朋友: 35
照面(casual)朋友: 150
溝通的問題,會帶來系統(tǒng)設計的問題,進而影響整個系統(tǒng)的開發(fā)效率和最終產(chǎn)品結(jié)果。
?
什么樣的團隊,產(chǎn)生什么樣的架構(gòu)
你想要什么樣的系統(tǒng),就搭建什么樣的團隊。如果你的團隊分成前端團隊,Java后臺開發(fā)團隊,DBA團隊,運維團隊,你的系統(tǒng)就會長成下面的樣子:
典型的分層架構(gòu):
如果你的系統(tǒng)是按照業(yè)務邊界劃分的,大家按照一個業(yè)務目標去把自己的模塊做出小系統(tǒng),小產(chǎn)品的話,你的大系統(tǒng)就會長成下面的樣子,即微服務的架構(gòu)。
?
微服務的理念團隊間應該是 inter-operate, not integrate 。inter-operate是定義好系統(tǒng)的邊界和接口,在一個團隊內(nèi)全棧,讓團隊自治,原因就是因為如果團隊按照這樣的方式組建,將溝通的成本維持在系統(tǒng)內(nèi)部,每個子系統(tǒng)就會更加內(nèi)聚,彼此的依賴耦合能變?nèi)?#xff0c;跨系統(tǒng)的溝通成本也就能降低。?
?
參考資料:
微服務架構(gòu)的理論基礎 - 康威定律?
https://yq.aliyun.com/articles/8611?
每個架構(gòu)師都應該研究下康威定律?
http://www.infoq.com/cn/articles/every-architect-should-study-conway-law
原文地址:http://www.cnblogs.com/ghj1976/p/5703462.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Conway#39;s law(康威定律)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core Linux下为
- 下一篇: 我为什么用docker-compose来