團隊邊界(Team Boundaries)#
架構師與開發團隊之間的互動方式,會深刻影響架構的實現品質。架構師必須在控制(control)與放手(letting go)之間找到平衡——這個平衡點取決於團隊的特性和專案的情況。
架構師對開發團隊產生的影響力,體現在他們設定的邊界(boundaries)上:太緊的邊界會扼殺團隊創造力,太鬆的邊界則可能導致架構失控。
架構師性格類型(Architect Personalities)#
作者將架構師的行為模式歸類為三種性格類型,每種會產生不同的團隊邊界:
Control Freak(控制狂)#
- 對開發團隊的每個技術決策都試圖嚴格控制
- 設定非常窄的邊界,幾乎不留給開發者自主空間
- 團隊成員感到窒息,士氣低落,優秀的人才傾向離開
- 雖然短期內可能確保決策一致性,但長期來看會阻礙團隊成長
Armchair Architect(紙上談兵型架構師)#
- 制定架構決策後不參與實作,對團隊的實際困難漠不關心
- 設定的邊界過於寬鬆或不切實際
- 這類架構師往往與開發現實脫節,做出的架構決策可能無法落地
- 團隊對架構師失去信任,最終忽略架構指導
Effective Architect(有效的架構師)#
- 根據情境動態調整控制程度,在指導與信任之間取得平衡
- 與團隊保持密切合作,了解實作中的挑戰
- 設定適當的邊界——足以維護架構完整性,又給予團隊合理的自主空間
- 讓團隊感覺是被支持而非被控制
有效的架構師不是一味放權,也不是事事插手,而是能根據團隊和專案的情境,動態調整控制程度。
控制程度的決定因素(How Much Control?)#
架構師應根據以下五個因素來決定對團隊施加多少控制:
Team Familiarity(團隊熟悉度)#
- 團隊成員之間是否合作過?彼此了解嗎?
- 新組建的團隊需要更多架構師的指導和控制
- 磨合良好的團隊可以給予更多自主空間
Team Size(團隊規模)#
- 較大的團隊通常需要更多控制,確保一致性
- 較小的團隊溝通成本低,可以給予更多彈性
Overall Experience(整體經驗)#
- 團隊的資深程度直接影響需要多少架構指導
- 經驗豐富的團隊通常自主能力更強
- 初級團隊需要更具體的架構指導和更多的 code review
Project Complexity(專案複雜度)#
- 高複雜度的專案需要更嚴格的架構控制
- 簡單的專案可以給予更多自由度
- 複雜的整合需求、高度耦合的元件都需要更多架構師的介入
Project Duration(專案持續時間)#
- 長期專案初期需要更多控制,隨著團隊成熟可以逐漸放鬆
- 短期專案由於沒有時間修正方向,可能需要從一開始就維持適度控制
這五個因素應該綜合評估,而非單獨看待。例如:一個經驗豐富但剛組建的團隊,可能需要中等程度的控制——利用成員的經驗,同時幫助團隊建立共識。
團隊警示信號(Team Warning Signs)#
以下跡象表明團隊可能過大或出現問題:
- Process loss(流程損失) — 隨著團隊規模增長,用於協調溝通的時間比例增加,真正產出的時間減少
- Pluralistic ignorance(多元無知) — 團隊成員私下不同意某個決定,但以為自己是唯一持異議者,因此保持沉默
- Diffusion of responsibility(責任分散) — 團隊越大,個人責任感越弱,「別人會處理」的心態蔓延
當發現這些警示信號時,架構師應考慮拆分團隊或調整團隊結構,而不是單純增加流程和會議。
善用檢查清單(Leveraging Checklists)#
受到 Atul Gawande 著作 The Checklist Manifesto 的啟發,作者建議架構師為開發團隊建立適當的檢查清單(checklists),降低遺漏的風險。適合建立檢查清單的領域包括:
- Code completion checklist — 程式碼完成前須確認的項目(如單元測試覆蓋率、logging、exception handling)
- Unit and functional testing checklist — 確保測試的完整性
- Software release checklist — 發布流程中的關鍵檢查點
檢查清單的價值不在於限制開發者,而在於確保重要但容易被忽略的步驟不會被遺漏。尤其在壓力大或時間緊迫的情況下,檢查清單能有效防止人為疏失。
提供指導(Providing Guidance)#
Code Reviews(程式碼審查)#
- 架構師應參與 code review,確保架構決策和設計原則被遵循
- 不需要審查每一行程式碼,而是聚焦在架構相關的面向
- Code review 也是指導團隊、傳遞架構知識的好機會
Pair Programming(結對程式設計)#
- 架構師與開發者進行 pair programming 是最直接的指導方式
- 讓架構師了解團隊面臨的實際挑戰
- 幫助架構師保持技術敏銳度,避免成為 armchair architect
無論使用哪種指導方式,關鍵是架構師要持續參與團隊的日常工作,而不是只在設計階段出現。
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, 1968
組織的溝通結構會不可避免地影響其產出的系統架構。例如:
- 如果有四個團隊負責開發一個 compiler,最終很可能會得到一個 four-pass compiler
- 如果前端和後端由不同團隊開發,系統自然會形成前後端分離的架構
實務影響#
- 架構師在設計架構時,必須考慮組織結構的影響
- 有時候改變架構需要先改變組織結構
- 如果組織結構與期望的架構不匹配,組織結構通常會「贏」
架構與團隊拓樸(Architecture and Team Topology)#
根據 Conway’s Law 的啟示,架構師應該認識到架構和團隊結構是相互關聯的。
- Inverse Conway Maneuver(逆向 Conway 操作) — 刻意設計組織結構以促進期望的架構。如果你想要 microservices 架構,就把團隊按照服務邊界來組織
- 團隊的物理位置、溝通模式和組織層級都會影響最終的架構結構
- 架構師不能只關注技術架構,還必須關注團隊拓樸如何與架構互相支持
架構和團隊結構是一體兩面。試圖在不匹配的組織結構上強推某種架構風格,通常會以失敗告終。聰明的架構師會同時考慮技術架構和團隊拓樸。