Improvise
今天在改一個以前自己寫的系統。
愈改愈覺得,當初怎麼會這樣設計的? 很多寫法實在看不下去,只好重構一番,把過去的一些設計和架構做些調整和改善。我猜,只要你是職業(不需要是專業)的開發者,肯定也曾有過這樣的經驗。
我們常常覺得過去的東西似乎還有可以改善的空間,所以,系統就這樣在修修補補之中度日。
曾經我覺得這樣子不行,所以花了一些時間認真學習各種pattern、架構設計、框架開發...等知識技能,想說從此之後,應該能高枕無憂,在開發時做出比較能夠長治久安的設計。
結果呢? 跟你猜的一樣,並沒有。系統還是在修修補補中度日。這到底是為什麼?
幾年之後我知道,原因很簡單,因為環境在變,技術在變,需求在變,我們活在一個多變的真實世界,然而我們能控制、能掌握的變數實在太少,少到所有的預先規劃和設計最後看起來都變得可笑。
所以,敏捷(Agile)不相信計畫(Plan),甚至誇張一點說,敏捷不相信有完美的預先設計(Design)。
但注意,這不是完全不要設計,而是,不管當時看起來怎麼完美的設計,你都要有這個心理認知--『日後它一定會變得不完美』。不管你做了什麼樣精細的計畫(Plan)你都要知道,這計畫未來一定會走歪,只要你是活在一個充滿變數與未知的真實世界中。
你不相信?
或許你會問,那為何過去的年代,計畫似乎是有用的,甚至有人手上可以有好幾套劇本,事情的走向總是被掌握在足智多謀、細心計畫的智者手中?
那是因為過去的時代沒有現今的科技與技術,資訊的傳遞也不像現在這麼迅速,當時的世界給了人們一個假象,讓人誤以為自己可以掌握些什麼,能夠控制些什麼,能夠讓事情的走向依照計畫,或是運籌在股掌之間。
也確實,當你手上的資源越多、運算能力越強大,面對的問題越簡單、變數越少、時間越短,那預測和掌握未來的可能性不是不存在。
反之,當你手上的資源越少、變數越多、你就會發現對未來的掌握度趨近於零,事事依照計畫走的可能性根本不存在。
所以我們乾脆不要計劃了? 開發時也不用做任何架構設計?
對,也不對。
對的是這個想法,預先計畫和預先設計並不可靠,這意味著你不能完全倚賴它。
不對的是這個行為,你不能完全不做任何計劃或設計,你只是不該再像是以前那樣鉅細靡遺地去設計,並要求所有人照著劇本走,期待規劃好了就不會再改變。
會不會很矛盾? 對我來說完全不會,因為這就是人生。
那,面對真實世界中這種無法預測、無法規劃的狀況,解決方案是什麼?
答案其實簡單到你無法想像。
就是『變強』,僅此而已。
所以當人有說,敏捷開發(Agile Development)相對倚賴一個素質比較高的團隊,我是不會出聲反對的。
當你無法預測、無法規劃,那倚賴的就是團隊的素養、反應、與能力。(註1)
人生也是這樣,如果你沒有足夠的資源來規畫你的人生,那解決方案就是,一直累積你的實力,直到面對任何問題都能夠逢凶化吉。
所以我愈來愈喜歡阿德勒的哲學觀:『過去已經消失、未來根本還不存在,為了過去懊悔沒有意義,對未來做過多的計畫不切實際,你真正能掌握的,其實只有今天而已。』
至於今天怎麼用,就看你自己。
-------------------
(註1:當然,再加上迭代,可以讓你的問題變得相對簡單)
留言