重點摘要#
- 不要對簡單的問題套用複雜的解決方案 – 簡單問題配複雜方案是常見的陷阱
- 聰明的人容易因為想展示知識而過度設計,需要時刻保持自覺
- 在架構層級的過度工程,其負面影響會被放大到開發層級
- 猜測未來需求時,50% 的時候你是錯的,49% 的時候你大錯特錯
詳細內容#
簡單問題的複雜方案陷阱#
軟體架構師解決很多困難的問題,但也會遇到相對簡單的問題。最不應該做的事就是對簡單問題套用複雜的解決方案。設計軟體的人非常聰明,而「簡單問題配複雜方案」這個陷阱很容易掉入,因為我們喜歡展示自己的知識。
如果你發現自己正在設計一個過於巧妙的解決方案,停下來想一想:解決方案是否符合問題的規模?如果答案是否定的,重新考慮你的設計選項。
過度工程的代價#
這不是說不應該實作優雅的解決方案,而是說如果任務只需要支援一種 SKU 型號的銷售系統,就不應該設計一個支援動態可配置產品層級結構的系統。
複雜方案帶來的成本往往比你想像的更大:
- 在架構層級的過度工程會造成與開發層級相同的問題,但負面效果會被倍增放大
- 設計層級的糟糕決定更難實作、更難維護,且最難逆轉
- 在簡單問題上花過多時間,會讓你在複雜問題出現時缺乏時間
- 你的架構決定可能無意間製造了範圍蔓延和不必要的風險
解決今天的問題#
記住這個原則:當你嘗試猜測未來需求時,50% 的時候你是錯的,49% 的時候你大錯特錯。解決今天的問題,按時交付應用程式,等待回饋來產生真正的需求。
簡單的設計反而更容易在新需求到來時整合它們。如果你猜對了未來需求,你已經有了解決方案的想法;但差別在於你現在可以在估算中合理分配時間,因為需求已經被確認。這樣你就會擁有一個能做出好估算、按時交付的團隊聲譽。
— By Chad LaVigne