the DevOps journey (1) - 敏捷開發不相信時程預測?
這一篇,我們來討論敏捷開發中怎麼看待時程預估,以及迭代開發的重要性… 到底專案時程能不能預測? 這是一個常常困擾初踏入敏捷開發領域的新手的問題。 你一定聽到過有人說(甚至,其實 上一篇 推薦的Martin Fowler的文章中也提到過),敏捷開發不太相信可以進行準確的時程預測,我特別用『預測』這個字,而非預估。中文很有意思,這兩個字很接近,但有那麼一點點的不同。 前面 提到過,既然真實世界裡面的 需求根本不可能固定 ,開發人員的素質(每個人每天的產出)也不太可能統一,那我們幾乎已經宣告無法掌握軟體開發專案中,最重要的兩個變因,那這樣怎麼可能精準的預測出開發時程呢? Martin Fowler在早期的文章中,幾乎是直接告訴你,預測是不可能的。 但這件事情非常弔詭,大概所有開發人員都明白,在需求不確定的狀況下,要精準的預測專案時程、計算出人天數,是幾近不可能的事情。但 好笑 有趣的地方就在於,幾乎所有的軟體專案的業務或PM,都會要求你在專案起始前,在一切模糊的前提下,估出人天數以便於 報價 。 壓在合約裡面的驗收日期和報價耶!? 難到不需要更詳細的資訊以便於精細計算嗎? 這是繼 上一篇 提到的軟體開發迷思之後,另一個超級經典、行之有年、卻嚴重違反常識/常理的軟體開發迷思。同樣的問題又來了,難道從來沒有人覺得哪裡怪怪的嗎? 我相信有,但你會碰到各種壓力,告訴你整個業界都是這樣幹的,你區區一個程式設計師想改變這個慣例? 不可能。 因此,開發人員只能習慣性的在時程預估裡面保留一些buffer,業務/PM報價時再加一些Buffer,然後客戶的採購砍一些作為折扣,done,成交。後面就看彼此的運氣了… 不能預估,怎麼辦? 這篇文章一開始的 那張圖 很貼切,它描繪出了理想狀況與真實世界之間的差異, 上一篇 說過,兩個軟體專案的需求不可能完全一樣,因為 完全一樣 你就根本不需要新的專案,買個套裝軟體或直接copy一份即可。因此,我們知道每一個軟體專案都是新的開始,既然是新的開始, 沒做過的事情要預估時間,這本來就是一種賭博 。 這也是軟體開發和工程專案差異很大的地方,傳統的工程專案施工較容易預估人天,因為施工方法固定,需求固定,常常只是在可以控制變因的狀況下,重新做一次而已,但軟體開發不是,每一個專案都是一場新的冒險。 我常開玩笑的跟業務說,你真要我這樣報