絞殺榕樹應用
2004 年 6 月 29 日
當辛蒂和我前往澳洲時,我們在昆士蘭海岸的熱帶雨林待了一段時間。這個地區的自然奇觀之一是巨大的絞殺榕。它們的種子在樹木的上層樹枝發芽,並逐漸沿著樹幹向下生長,直到在土壤中生根。經過多年,它們長成奇幻而美麗的形狀,同時勒死並殺死作為它們寄主的樹木。

這個隱喻讓我想到一種方法,可以用來描述如何改寫一個重要的系統。我的職業生涯有很大一部分都在從事關鍵系統的改寫。你可能會認為這是一件容易的事,只要讓新的系統執行舊系統的功能即可。然而,它們總是比看起來複雜得多,而且充滿風險。龐大的切換日期迫在眉睫,壓力也隨之而來。雖然新功能(總是會有新功能)受到歡迎,但舊功能必須保留。甚至舊的錯誤也常常需要加入改寫的系統。
另一種方法是逐漸在舊系統周圍建立一個新系統,讓它在幾年內緩慢成長,直到舊系統被勒死。這樣做聽起來很困難,但我越來越認為這是那些沒有嘗試過的事情之一。特別是我注意到有幾個基本的策略效果很好。基本策略是事件攔截,它可以用來逐漸將功能移至絞殺榕,並啟用資產擷取。
我的同事 Chris Stevenson 最近參與了一個專案,並獲得了極大的成功。他們在 XP 2004 上發表了一篇 第一篇論文,而我希望有更多論文能描述此專案的更多面向。他們尚未達到舊應用程式被扼殺的地步,但他們已為企業提供了有價值的功能,讓團隊有信譽可以進一步發展。即使他們現在停止,他們也獲得了巨大的投資報酬率,這比許多重新編寫的成果還要多。
考慮採用扼殺無花果應用程式而非全面重新編寫的最重要原因是風險降低。扼殺無花果可以穩定地提供價值,而頻繁的版本發布讓您可以更仔細地監控其進度。許多人仍然不考慮採用扼殺無花果,因為他們認為這將花費更多成本,我對此並不認同。由於您可以使用扼殺無花果進行較短的版本週期,因此您可以避免許多重新編寫時常會產生的不必要功能。
這裡有另一個重要的想法,在設計新應用程式時,您應該以一種方式設計它,以便於未來扼殺它。讓我們面對現實,我們今天所做的就是編寫明天的舊式軟體。透過讓未來更容易新增扼殺無花果,您就能讓今天的作品優雅地消失。
進一步閱讀
Paul Hammant 有一個 使用此方法的案例研究摘要。
修訂
2019 年 4 月 29 日將網址和名稱變更為扼殺無花果應用程式
我認為這篇文章是一個很好的比喻,但沒想到它會如此受到歡迎(最近幾個月,每月瀏覽量超過 3000 次)。受到歡迎很好,但有一個問題。原始文章標題為「扼殺應用程式」,而當使用時,此模式通常稱為「扼殺」。但它的用法通常與其比喻根源分開,並帶有令人不快的暴力意味。
因此,有些人主張避免或更改名稱。我對此沒有任何重大異議,自原始文章發布以來,我自己的文章中就沒有使用過這個名稱。但嘗試重新命名時會遇到麻煩,一旦一個名稱植入社群的腦海中,就非常難以消除。
最近我想到了一個小小的調整,可能會對事情有所幫助。如果我將文章重新命名為「扼殺無花果應用程式」,並盡可能使用「扼殺無花果」一詞,那麼希望透過加強名稱的比喻連結(這是名稱的重點),可以減少暴力的意味。由於這是一個小的變更,也許它會廣泛傳播到值得一試的地步,而且它不需要花費太多力氣,所以值得一試。