談判與引導(Negotiation and Facilitation)#

架構師幾乎每天都在談判——與業務利害關係人、其他架構師、開發者之間的談判。談判之所以重要,是因為架構師做出的每一個決策都會被質疑。有效的談判能力讓架構師在維護架構完整性的同時,也能獲得各方的支持與配合。

談判不是「贏」或「輸」,而是找到所有人都能接受的最佳解決方案。架構師的目標是透過談判來達成對系統最有利的結果。

與業務利害關係人的談判(Negotiating with Business Stakeholders)#

關鍵技巧#

  • 永遠把時間和成本留到最後討論 — 如果一開始就談時間和金錢,談判會立刻陷入僵局。先讓利害關係人理解技術的限制和取捨,再討論成本
  • 用業務語言溝通 — 不要用技術術語淹沒業務利害關係人,而是將技術決策翻譯成業務影響
  • 從「I need it yesterday」中推導真正需求 — 當業務利害關係人說「我昨天就需要了」,這通常意味著 agilitytime-to-market 是他們最重視的架構特性

Divide-and-Conquer Rule(分而治之法則)#

當業務利害關係人提出過多的架構特性需求時,使用分而治之策略:

  • 將需求分類並逐一討論每個架構特性
  • 讓利害關係人理解每個特性的成本和取捨
  • 幫助他們優先排序,而非試圖同時滿足所有需求

例如:當利害關係人堅持要求 five nines(99.999%)的可用性,但實際只需要 three nines(99.9%)時:

  • 展示 99.999% 和 99.9% 在停機時間上的差異(5.26 分鐘/年 vs. 8.77 小時/年)
  • 說明達到 five nines 需要的額外成本和複雜度
  • 讓利害關係人自行做出知情的決定

談判中使用具體的數字和範例比抽象的論述更有說服力。將技術概念轉換成業務利害關係人能理解的指標。

與其他架構師的談判(Negotiating with Other Architects)#

  • 其他架構師與你同樣有經驗和見解,談判需要更技術性的論據
  • 使用資料和證據支持你的立場,而非訴諸權威
  • 尋找共同目標 — 大家都希望系統成功
  • 願意在次要問題上讓步,以在關鍵問題上獲得支持

與開發者的談判(Negotiating with Developers)#

  • 開發者最關心的是程式碼品質開發體驗
  • 解釋架構決策背後的 why — 不要只發號施令
  • 展示對開發者日常工作的理解和尊重
  • 當開發者提出更好的方案時,要有彈性去接受

如果架構師無法向開發者解釋架構決策的原因,那很可能是決策本身有問題,或者架構師對問題的理解不夠深入。

架構師作為領導者(The Software Architect as Leader)#

架構師是技術領導者,領導力至少佔有效架構師所需能力的一半。好的技術領導者具備以下特質:

  • 以身作則 — 展示你期望的工作方式和標準
  • 建立信任 — 信任是影響力的基礎
  • 賦能團隊 — 目標是讓團隊能夠獨立做出好決策,而非依賴架構師
  • 承擔責任 — 當事情出問題時,領導者站出來承擔

The 4 C’s of Architecture#

架構師的核心職責可以歸納為四個 C:

  • Communication(溝通) — 與所有利害關係人保持清晰有效的溝通
  • Collaboration(協作) — 與開發團隊、業務部門、其他架構師緊密合作
  • Clarity(清晰度) — 讓架構決策和方向清楚明確
  • Conciseness(簡潔) — 用最精煉的方式表達複雜的架構概念

融入開發團隊(Integrating with the Development Team)#

架構師必須與開發團隊保持緊密的連結,而非高高在上地發號施令:

  • 參與 stand-upsretrospectives
  • 透過 pair programmingcode review 了解實際情況
  • 願意動手寫程式碼,保持技術能力
  • 理解團隊面臨的實際困難和限制

架構師融入團隊的程度,直接影響架構決策的品質。離團隊越遠,做出不切實際決策的機率越高。

委員會式架構(Architecture by Committee)#

Architecture by Committee 是指透過一群人(通常是架構評審委員會)來共同做出架構決策:

  • 優點 — 集思廣益,避免盲點,決策更周全
  • 風險 — 決策過程冗長、妥協導致「設計駱駝」(a camel is a horse designed by committee)、責任分散
  • 當需要委員會決策時,確保有一個最終決策者(通常是首席架構師)
  • 委員會應該提供建議和挑戰,而非取代架構師的決策權

務實且有遠見(Being Pragmatic Yet Visionary)#

架構師必須在兩個看似對立的特質之間取得平衡:

Pragmatic(務實)#

  • 了解現實的限制條件 — 預算、時間、團隊能力、現有技術債
  • 做出在當前環境下可行的決策
  • 不追求理論上的完美架構,而是追求夠好的架構

Visionary(有遠見)#

  • 設定架構的長期方向和目標
  • 預見技術和業務的變化趨勢
  • 為系統的演進預留空間

純粹務實的架構師會陷入短期思維,只解決眼前問題;純粹有遠見的架構師會脫離現實,設計無法落地的架構。有效的架構師兩者兼備

管理會議#

架構師經常被邀請參加過多的會議,以下是管理會議的建議:

  • 評估每個會議邀請,問自己:我的參與是否真的有必要?
  • 可以透過非同步方式(如 email、文件)替代一些會議
  • 保護自己的深度工作時間,確保有足夠時間進行架構設計和分析
  • 授權團隊成員代為參加部分會議