為什麼軟體最終會變得複雜 - Alex Gaynor

banq發表於2020-12-14

通常將軟體的複雜性(無論是程式語言,API還是使用者介面)視為壞事情。然而,實際上沒有人會在一開始就構建複雜的東西,那麼複雜性為什麼會異常普遍存在呢?這對於希望構建易於使用的軟體感興趣的人,瞭解導致複雜性Complex的原因至關重要。幸運的是,我相信這裡有一個簡單的解釋。
任何功能需求的最自然的實現都是累加的,一般先試圖將設計中的所有其他元素保留在原位,然後新增一個新元件:UI中的新按鈕或函式的新引數。隨著此過程的不斷重複,系統的簡單性就會喪失,而複雜性會取代它。在企業軟體中,這種模式通常尤其明顯,因為很明顯,每個新功能都是為一個特別大的客戶編寫的,這給所有其他客戶增加了複雜性。
每個功能需求都有一個選區–一些希望實施的組,因為他們從中受益。簡單性卻並非以這種相同的方式來支援,這就是經濟學家所謂的非排他性商品,不是每個人都從中受益。這意味著支持者總是可以為他們的特定用例指出具體的好處,而反對者則聲稱更為抽象的缺點。結果是,對任何給定特徵附加條件的反對者往往數量較少,更容易被忽略。導致不斷增加功能,並簡化了功能。
擺脫這種明顯的不斷新增功能的迴圈並不容易。我們可以輕鬆地說“拒絕所有功能需求”即可,但是這樣做的專案最終將發現自己根本無法滿足使用者的需求!我們的方法必須更嚴格地衡量:我們需要花大量的時間來考慮一項新功能將如何給我們的所有使用者帶來負擔,但是現實中我們卻需要花費大量的時間來思考一項新功能將如何使我們的某些使用者受益。
我們還應該花時間思考如何設計新功能,以維持Fred Brooks所謂的系統“概念完整性”的方式(banq注:領域概念的邏輯完整性),而不是僅僅新增一些新內容。
 
banq注:經常看到一句話:除非你的系統異常複雜,否則不要用XXX(XXX代表DDD微服務等),這種觀點是靜止觀點,複雜性是隨著時間增加不斷累積的,功能需求不斷增加,那麼複雜性就不斷增加,提前預見到這種複雜性Complex,使用complcated複雜思維去解決,否則技術債務累積,每前進一步非常累,最後專案失敗。
 

相關文章