重點摘要#

  • 面對兩個選項時,最重要的不是在它們之間做選擇,而是認識到設計中存在不確定性
  • 有效的架構會降低設計決策的重要性;無效的架構會放大其重要性
  • 當不確定時,透過分離和封裝來隔離決策,而非硬編碼第一個想到的方案
  • 運用選擇權思維:延遲決策直到能基於實際知識負責任地做出決定

詳細內容#

面對兩個選項時,大多數人認為最重要的事是在它們之間做出選擇。但在設計中(無論是軟體還是其他),並非如此。兩個選項的存在表明你需要考慮設計中的不確定性。利用不確定性作為驅動力,來決定哪裡可以延遲對細節的承諾,哪裡可以進行分割和抽象以降低設計決策的重要性。

架構的本質#

Grady Booch 對架構提出了一個簡潔而有建設性的定義:

「所有架構都是設計,但不是所有設計都是架構。」 架構代表了塑造系統的重要設計決策,而重要性是以變更成本來衡量的。

由此可見,有效的架構會降低設計決策的重要性,而無效的架構會放大其重要性。當一個設計決策可以合理地走兩條路時,架構師需要退一步思考:「我如何設計,才能讓 A 和 B 之間的選擇變得不那麼重要?」

辨識不確定性#

不確定性的信號包括:

  • 在白板前與同事激烈辯論選項
  • 面對程式碼時,對選擇哪種實作方式陷入僵局
  • 新需求或需求的澄清對當前實作方案產生質疑

當你識別到不確定性時,透過分離或封裝來隔離依賴於該決策的程式碼。如果沒有這種意識,替代方案往往是像緊張的面試者一樣喋喋不休的程式碼,或者以武斷但不合理的信心快速做出錯誤的轉向。

選擇權思維#

常常有壓力要求我們為了做決定而做決定。這時**選擇權思維(Options Thinking)**很有幫助:

  • 在系統發展路徑不確定的地方,做出「不做決定」的決定
  • 延遲實際決策,直到能基於實際知識更負責任地做出決定
  • 但不要延遲到太晚,以致無法利用這些知識

架構與流程是相互交織的。這也是為什麼架構師應該偏好經驗主義的開發生命週期和能引發回饋的架構方法,利用不確定性來建設性地劃分系統和時程。

不要害怕不確定性 – 擁抱它作為設計的驅動力。不確定性告訴你需要在哪裡創造靈活性。

— By Kevlin Henney