重點摘要#
- 軟體工程不像建造摩天大樓——軟體是可擴展的,建築不是
- 避免「大爆炸」式部署,改用逐步部署單一元件的方式
- 逐步部署能分散技術風險,並強制建立良好定義的介面
- 早期發布和增量部署可以同時帶來更高的商業價值和更好的架構品質
詳細內容#
我們常聽到軟體工程被拿來和建造摩天大樓、水壩或道路比較。在某些方面確實相似,但在重要的方面,土木工程的類比會誤導我們。
土木工程類比的陷阱#
土木工程最難的部分不是設計一棟能站立的建築,而是規劃施工過程。傳統的「大爆炸」部署就像堆起一堆梁柱往空中一拋,然後期望它們按建築形狀拼在一起。
土木工程的具象性會把我們推向瀑布式流程。但沒有人在不知道摩天大樓要蓋在哪裡或要多高的情況下就開始建造。軟體不同——我們已經學會如何輕鬆地添加功能。
逐步部署的兩大好處#
分散技術風險 — 每個元件都有自己在生產環境中失敗的機會,逐一部署讓我們能獨立地強化每個元件
強制建立良好介面 — 部署新系統的單一元件往往需要與舊系統反向整合,因此每個元件都已經和兩個不同系統合作過,自然帶來更好的內聚性和更鬆的耦合性
早期發布的價值#
發布一個只做少數功能的應用程式是完全可以接受的,只要使用者認為這些功能值得。事實上,越早發布,整體的淨現值就越高。
「早期發布」和「增量部署」看似矛盾,但它們實際上可以很好地配合。這是少見的能同時提供更高商業價值和更好架構品質的技術。
— By Michael Nygard