重點摘要#
- 軟體工程常被比喻為建造摩天大樓,但這個類比在重要方面是有誤導性的
- 傳統的「大爆炸」部署就像把一堆鋼樑扔到空中期待它們自動組成建築物
- 應該逐個元件部署,分散技術風險並促進更好的介面設計
- 軟體的優勢在於可以輕鬆增加功能——摩天大樓不行
詳細內容#
我們常聽到軟體工程被比作建造摩天大樓、大壩或道路。在某些方面確實如此,但土木工程最難的部分不是設計一棟完工後能站立的建築,而是規劃建造過程。
逐步部署的好處#
傳統的「大爆炸」部署就像把一堆鋼樑和梁柱扔到空中,期待它們能自動組成建築物的形狀。我們應該計劃一次部署一個元件。
逐步部署有兩大好處:
- 分散技術風險:每個元件都有自己的機會在生產環境中失敗,讓我們能獨立強化每一個元件
- 促進良好的介面設計:部署新系統的單一元件通常意味著需要與舊系統反向整合,迫使我們建立明確定義的介面,帶來更好的內聚性和更鬆散的耦合
土木工程類比的陷阱#
土木工程的具體性會把我們推向瀑布式流程。畢竟沒有人會在不知道摩天大樓要蓋在哪裡或要蓋多高的情況下就開始動工。在現有建築上增加樓層既昂貴又具破壞性。
但軟體不同——我們已經學會了如何輕鬆地為軟體增加功能。這不是軟體流程的缺陷,而是我們工作媒介的優勢。
早期發布與增量部署#
「早期發布」和「增量部署」看似矛盾,但實際上它們能很好地配合。個別元件的早期發布意味著每個元件都能獨立迭代。
很少有技術能同時提供更高的商業價值和更好的架構品質,但個別元件的早期部署正好兩者兼具。
— By Michael Nygard