爲什麼每個程序員都應該瞭解“康威定律”

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"背景","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前在看架構方面的資料,瞭解到了一個很受用的概念,就是今天所說的“康威定律”。可以說這個概念解釋了我很多的疑惑,也讓自己對架構有了更多的理解。所以特定分享自己的感悟和心得。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"什麼是“康威定律”","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"康威定律是50年前(1967年)由 ","attrs":{}},{"type":"text","marks":[{"type":"color","attrs":{"color":"#1890FF","name":"user"}}],"text":"梅爾文·康威","attrs":{}},{"type":"text","text":" 提出的,最初的說法(也是康威定律的核心)是:","attrs":{}}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"— Melvin E. Conway","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即:","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"一個組織的系統通常被設計成這個組織通信結構的副本","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這句話的意思就是企業或者團隊設計出來的系統,等同於其內部的溝通結構,如下圖:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/dc/dc748b789d8a8ae60045e750a109f2f9.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這也就是爲什麼以前會出現互聯網基因論:阿里適合做交易,騰訊適合做社交。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然很多同學在聽到這句話和我一開始的想法是一樣的,那就是在瞎扯,騰訊現在微信支付做的也不錯啊,阿里不是也有釘釘麼。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是我們看到即使微信支付成功,其依託的也是其背後的社交產品--微信,而且微信支付背後的生態遠遠不如支付寶。而釘釘也是如此,目前的成功的原因正如其自己說的,那就是放棄模仿微信或者QQ,瞄準的是企業或者團隊的內部交流工具,這和阿里先天的效率基因是吻合的。所以上面的例子不僅沒有反駁互聯網基因論,相反其更加印證了這個觀點。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而這個觀點在50年前就被康威提了出來,那就是:產品是其背後組織的溝通。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"四大定律","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"康威定律在提出後,被很多大牛都引用和拓展過,其中最爲經典的就是《人月神話》中引申出來的四大定律。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b6/b6bb92f161632ea71218917cbb1ca63a.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"組織溝通方式會通過系統設計表達出來","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個是康威定律本身,其意思簡單說就是,組織是什麼樣,做出來的產品就是什麼樣。這也是爲什麼阿里在引入中臺之前首先做的就是更改組織結構,先將內部的組織結構調整,才能做出中臺。而其他公司只學習中臺的概念或者技術,則會發現在落地的時候處處掣肘,以至於無法實現。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同樣的道理,我們可以從一個公司的產品去理解其背後的組織結構。我們會發現市場上很多的產品天馬行空,形態沒有下限,也沒有上限。其隨意的背後來自於其背後組織的渙散,很有可能內部的組織溝通方式不是嚴格的職責劃分,而是面向老闆開發。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"時間再多一件事情也不可能做的完美,但總有時間做完一件事情","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個是《人月神話》的核心理念之一,我們不可能一下子做出很完美的產品,但是我們可以做出一個可用的產品,也就是MVP產品(最簡可行產品)。這也是敏捷開發和迭代的理論基礎。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/94/945f396dda297afeb7c7c1280b7d3612.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以在實際工作中,我們不需要一開始就試圖打造完美的設計,整理出完美的流程:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"文檔可以暫時不完美,但也不能沒有,即使拍張照片也可以","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"產品一開始可以不完美,但是我們可以做到一個可以跑通的產品","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼也可以不完美,存在bug無可厚非,但是我們要去不斷迭代","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"先把事情做了,再去逐步完善。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"線型系統和線型組織架構間有潛在的異質同態特性","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"異質同態指的是系統和組織雖然是兩個東西,但是有相同的結構。所以系統是啥樣,組織也就得變成那個樣子。這個比較好理解,做過技術管理的人在設計組織架構的時候都會參照系統的架構來設置。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"比如公司如果是單體架構,那就一個開發組就行了;但是如果是前後端分離,那麼必然就會拆分爲前端組和後端組,分別進行管理。這就是所謂的異質同態。如果系統和組織的結構不匹配,那麼將會是災難。你想象一下系統是前後端分離,但是壓根就沒拆分前後端的崗位是啥情況?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"大的系統組織總是比小系統更傾向於分解","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4a/4ad2847b0ae85f869da9ac299064ed58.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個是目前大部分公司採用的方式,因爲隨着業務的增長,系統將會變得複雜。那麼就需要增加人手,這時溝通成本和管理成本也隨之增加。那麼大部分公司都會採用分而治之的方式。所以,一個大的組織因爲溝通成本/管理問題,總會被拆分成一個個小團隊。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼根據康威定律,組織的溝通方式會在系統設計上體現。所以每個經理都被賦予一定的職責去做大系統的某一小部分,他們和大系統便有了溝通的邊界,所以大的系統也會因此被拆分成一個個小團隊負責的小系統。而這就是我們現在經常說的微服務架構。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"認清組織的溝通方式","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以根據康威定律,系統設計應當與組織溝通方式貼合。這個世上沒有完美的系統設計,只有最爲合適的系統設計。什麼時候最爲合適的系統設計,那就是業務-組織-系統都完美貼合。如果是業務導向的,那麼就要去調整組織結構。如果是組織導向的,那麼就要去調整業務目標。而現實中很多時候,都是三者不相貼合,這樣就會在實現的時候互相掣肘,嚴重影響最終的效果。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然在很多講解康威定律的文章中,都會在最後用康威定律來解釋微服務架構的合理性,因爲在解決溝通成本和提升效率上,微服務是最爲貼合的。但是不能盲目追求微服務的系統,因爲如果你的業務或者組織結構並不適合微服務架構,那麼微服務給你帶來的複雜度大於收益。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"加速產品上市的平臺團隊","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在ThoughtWorks最新的調研中,提到了目前正在崛起的平臺團隊模式。其原文如下:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"越來越多的組織正在採用平臺團隊的理念來開發產品,即成立一個專門團隊,來創建和支持內部平臺功能(如雲原生、持續交付、現代化的可觀測性、認證和鑑權模式、服務網格等),並使用這些功能來加速應用程序開發,降低運維複雜性,並縮短產品上市時間。這種日趨成熟的做法值得歡迎,所以我們早在2017年,就將該技術引入技術雷達。但是隨着成熟度的提高,我們發現組織在應用這項技術時,應避免使用一些反模式。例如,“用一個平臺來統治一切”,可能並不是最佳選擇。“構建一步到位的大平臺”,可能要過數年後才能交付價值。本着“一旦建好,就有人用”的初衷,到頭來可能卻是巨大的浪費。相反,使用產品思維,有助於根據產品客戶的需求,來弄清每個內部平臺所應提供的服務。但如果讓平臺團隊只解決技術支持工單系統中所提交的問題,那麼這種做法就又產生了老式的運維孤島團隊,出現相應的需求優先級失調的弊端,如反饋和響應緩慢,以及爭奪稀缺資源等的問題。此外,我們還看到一些新工具和集成模式湧現出來,以有效劃分團隊和技術。","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個的原因是因爲目前隨着雲原生,DevOps等技術的成熟,成立一個專門的平臺團隊可以減少內部的溝通成本,加速產品的研發。而這個組織結構產生的原因是因爲目前雲原生等技術的成熟催生了新的系統設計模式。與之而來的是帶動了組織結構的變化。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是這個裏面也提到了,雖然平臺團隊越來越受歡迎。但是如果組織沒有適應好,那麼就會適得其反,增加內耗和掣肘。所以要學會根據自己所在團隊的溝通方式來選擇是否採用平臺團隊的模式。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"總結","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多文章都會說架構師不僅僅要懂代碼或者設計模式,還要懂很多額外的東西。因爲這些額外的東西很多時候恰恰是最影響架構實現。康威定律在50年前解釋了目前的微服務興起的原因,每一位架構師都應該去了解。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"horizontalrule","attrs":{}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果喜歡我的分享,歡迎關注“雨夜隨筆”","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:","attrs":{}},{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/UVIDZ1_hmufR8yiFj57fNQ","title":null,"type":null},"content":[{"type":"text","text":"爲什麼每個程序員都應該瞭解“康威定律” (qq.com)","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2a/2a30215391e2c965017a9a082ee267a9.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章