重點摘要#

  • 偉大的軟體不是「建造」出來的,而是**「生長」**出來的
  • 軟體失敗的最大預測因子是規模——從大型系統開始幾乎沒有好處
  • 從最小的可運行系統開始,讓它隨著需求逐步演化
  • 不要試圖一開始就設計一個完整的大型系統來「滿足或超越」所有已知需求

詳細內容#

作為架構師,你負責提供軟體系統的初始結構和安排。這些系統會隨時間成長和變化、需要被重構、需要與其他系統溝通——而且幾乎總是以你和利害關係人未曾預見的方式。即使我們被稱為「架構師」,從建築和工程中借用了許多比喻,但偉大的軟體不是被建造的,而是被培育的

規模是失敗的最大預測因子#

軟體失敗的最大預測因子是規模。 從大型系統設計開始幾乎沒有任何好處,但我們都會在某個時刻受到這種誘惑。從大型設計開始的問題:

  • 容易產生附帶複雜度和慣性
  • 更容易失敗、更難測試
  • 更容易變得脆弱、更可能有多餘的部分
  • 更昂貴、更容易有政治問題

抵制試圖設計一個大型完整系統來「滿足或超越」所有已知需求的誘惑。擁有宏大的願景是好的,但不要做宏大的設計。

從小開始,逐步成長#

確保軟體系統能演化和適應的最佳方式,就是從一開始就讓它演化:

  • 從一個小型可運行系統開始——預期架構中最簡單的可行版本
  • 這個初始系統有很多好處:
    • 更容易測試,表面積小因此耦合更少
    • 需要更小的團隊,降低協調成本
    • 更容易觀察其特性、更容易部署
    • 在最早的時間點告訴你什麼可行、什麼不可行
    • 對利害關係人來說更容易理解和觸及

不要將演化式方法與「丟掉需求」、「分階段交付」或「做一個用完即丟的原型」混淆。這是一種有意識的、漸進式的成長策略。

讓系統自己告訴你#

一個小型運行系統能教你很多大型架構文件永遠無法告訴你的事情——系統在哪裡難以演化、在哪裡容易固化、在哪裡可能會崩壞。設計你能設計的最小系統,幫助交付它,然後讓它朝著宏大的願景逐步成長

設計最小的系統,交付它,讓它成長。你的利害關係人最終會感謝你的。

— By Bill de hOra