在軟體開發領域,人們常試圖區分「架構(Architecture)」與「設計(Design)」。
通常認知是:架構屬於高層次策略,而設計屬於低層次細節。

但在 Uncle Bob 眼中,這種區分沒有意義。

一、破除迷思:兩者本是同根生#

  • 沒有界線: 「架構」與「設計」間沒有明確邊界
  • 連續體: 它們是同個整體的一部分
    • 低層次的細節(設計)是用來支撐高層次決策(架構)
    • 就像建築藍圖,既包含整體形狀(架構),也包含插座與開關的具體位置(設計)。
      兩者共同構成一份完整指南

二、軟體架構的終極目標#

若要評估一個軟體架構的好壞,只有一個核心指標:人力成本

軟體架構的目標: 「由最小化建置和維護該系統所需的人力資源來決定。」
(The goal of software architecture is to minimize the human resources
required to build and maintain the required system.)

  • 好設計: 隨著系統規模擴大,新增功能的人力成本保持穩定
  • 壞設計: 隨著系統規模擴大,新增功能的人力成本呈指數級上升

三、混亂的代價:龜兔賽跑的啟示#

很多開發團隊都有過這經歷:專案初期進展神速,但隨時間推移,開發速度像懸崖般墜落。

1. 混亂特徵 (The Signature of a Mess)#

  • 生產力崩跌: 隨著發布版本(Release)增加,開發團隊生產力趨近於零
  • 成本飆升: 公司為挽救生產力,投入更多人力。但新人加入往往讓混亂加劇(不熟悉原本設計,且製造更多通訊成本), 導致「每行程式碼的成本」(Cost per line of code)天文數字般成長

Figure 1.1: Growth of the engineering staff

Figure 1.2: Productivity over the same period of time

Figure 1.3: Cost per line of code over time

Figure 1.4: Productivity by release

Figure 1.5: Monthly development payroll by release

2. 關於速度的謬誤#

開發者常有種錯覺:「先把功能做出來(Go fast), 再整理程式碼(Clean it up later)」

  • 現實: 「以後」永遠不會來
  • 真相: 製造混亂永遠不會比保持整潔快。無論是短期還是長期,混亂總會讓你變慢

Figure 1.6: Time to completion by iterations and use/non-use of TDD

四、結論:唯一出路#

對想「快」的管理者和開發者,Uncle Bob 給出全書最重要的結論:

「要走得快的唯一方法,就是走得好。」 (The only way to go fast, is to go well.)

唯有保持架構品質,才能在專案中後期依然保持穩定開發速度。
這不是為了追求完美藝術品,而是為了經濟效益。