1. 程式人生 > >敏捷開發一千零一問系列之三十四:如何弄清楚專案需求(需求開發步驟)?

敏捷開發一千零一問系列之三十四:如何弄清楚專案需求(需求開發步驟)?

這是敏捷開發一千零一問系列的第三十三篇。(在這裡提問之一之二之三問題總目錄

也是敏捷開發使用者故事系列的第十篇(欄目目錄)。

問題

需求清晰到什麼程度可以進行開發?一定要弄清楚需求才能開發嗎?怎樣才能弄清楚需求?注意下面的分析是在基於合同的專案開發的語境中的。產品和網際網路需求開發的過程,日後另有討論。

分析與步驟

以下文字摘錄於群聊天記錄,未做深入修改,見諒。

專案語境

如果只分兩種,那麼整體上有兩種專案:一種是做專案,對方要了東西,一手交錢一手交貨;一種是做產品,需求不明,甚至連客戶都不明,需要自己挖掘。其他的都是圍繞著兩種,偏向一方,比如“產品-專案型”,就是定製產品。

第一步:需求範圍

首先要意識到一個問題:“弄清需求的最高目的是什麼?”需求的內容很多,但對專案型開發而言,“需求 進度 質量 成本”最重要的是成本。也就是說,專案盈利 = 合同 - 成本,如果成本保不住,其他的免談。

所以,保住專案盈利,也就是合同金額大於成本,是最重要的。

這時候,“需求的範圍”比“需求的細節”更重要,也就是說在弄清楚需求範圍之前,不能開始專案,或盲目開始專案。但弄清楚需求的細節之前,卻可以,或至少風險不大。

所以如果我面對一個這樣的專案,第一件事情是勾勒一下需求的輪廓,也就是他讓我做什麼不做什麼。這個不定下來,連合同都不能簽訂的,別說專案開工了。

具體方法,就是我在部落格裡邊寫過的“業務資料+業務操作”的方法,這個是FPA裡邊的概念。
如果想了解更多,請參考http://blog.csdn.net/column/details/agile.html?page=2 之六及之後的文章。
如果方法正確得當,大約一天的時間可以確認十個人年的工作不成問題(需要客戶頭腦清醒)。

有了需求的輪廓,就可以進入下一步了。但下一步是什麼?這是個問題。

第二步:優先順序排序

需求中肯定有:1. 很多不明確的部分 2. 很多最後做不完的東西 3. 最後被客戶改動的東西 4. 很多後來客戶又提出來的東西……

因此,嘗試弄清楚需求才進行開發,基本上不現實。在曾經的年代,當“客戶”僅限於軍隊,航空,航天,氣象,銀行(當年的銀行業務非常簡單明確)……的時候,這一切還是可行的,但現在越來越不現實了。

所以第二步最好是:弄清楚需求最終交付多少,能把錢拿回來(注意我們在討論專案而非產品)
第二步的最佳方法,是優先順序排序。不過要注意方法,因為客戶從來不會說自己的某些需求是可以捨棄的,但實際上可以。

有幾個問題很重要:

1. 不要問“你覺得什麼是可以不要的”(應該問:“你覺得什麼是必不可少的”)

2. 不要問“你覺得什麼是最後做的”(應該問“你覺得什麼是應該先做的”)

……等等,總之實際上不難掌握。

但另外一點比較困難,就是乙方需要有人能站在“高於客戶”的位置看待專案需求,從而先客戶一步理解優先順序。看起來很難,但未必。

因為客戶看似很懂業務,但也很侷限於自己的業務範圍。而乙方則不同。乙方一般面對多個客戶,還要理解一些方法論層面的內容,還要去研究多個競爭對手的產品,所以實際上視野要廣闊得多。因此超越客戶做優先順序判斷,並非一個真正的難題。

有了優先順序,就能做到幾件事情:

1. 保證最後即使延期、做不完(接近100%可能會發生),不會太影響交付和收款

2. 知道先做哪些,然後去找客戶核對,然後進一步前進。

現在到了需求開發的第三步了,先回顧一下:

第一步:理解需求範圍;第二步:優先順序排序

第三步:開發需求

公認的好方法是原型法,但有兩種原型法,一種適合瀑布,一種適合敏捷(或迭代)

拋棄型原型:在最開始的時候做一個東西,用於和客戶溝通以便確認需求,然後按照溝通出來的需求進行開發。

拋棄型原型在需求確認後基本上就不用了,扔掉了。所以,可以選擇各種快速工具,乃至於Excel、圖形軟體之類的來做。

演進型原型:原型不被扔掉,而是作為產品,自身接受客戶的直接評審(應該說是“使用和反饋”更好),然後再在這個基礎上修改。

實際上,整個敏捷開發中的“可執行軟體”,其實就是這個演進型原型。

很難直接比較這兩種原型方法哪種好。

拋棄型原型在軟體開發的初期經常使用,因為那時候瀑布模型居多,而且軍工、航空航天這類專案,需求一旦確定就不需要經常改動了;而且,也缺少一個現實的環境去“漸進地驗證需求”,比如阿波羅登月一共才10多次,必須提前把需求和方案想清楚。

而現在的網際網路開發則正好相反,演進型原型更適合。首先網際網路界極難對未來做預測(看看Nokia、MS就知道了),其次“客戶”或“使用者”多數都是一盤散沙,收集需求的手段很有限。因此一個在市場中直接接受檢驗的產品,是更好的方法。

從工作產品中直接接受反饋的方法有很多。如果大家用過AppStore或者AndroidStore,就會發現使用者要反饋一個問題,只需要幾秒鐘的時間。我們自己做的產品(就是火星人,是直接託管在網路上的管理系統),則有一個後臺的記錄檔案跟蹤客戶使用過哪些功能,來了解客戶的行為,以進一步進行改進。