讀了Sumtec的繼續思考,感觸很多,隨便寫點東西。
Sumtec在他的post裡面談到了一個問題,就是軟體開發要以客戶為導向,而不是技術為導向;換句話說,就是要做面向客戶的軟體開發。客戶是對產品或項目買單的人,我們辛苦的努力,最後能換回多少人民幣,關鍵就是客戶了。面向客戶的開發,能夠維繫和客戶的良好關係,減少返工次數,降低風險,最終提高開發效率,保證按時交付。
那麼如何做好面向客戶的軟體開發呢?我認為要把握住下面這幾點:
1、把滿足客戶的需求作為團隊共同的願景
通常,項目組內不同分工的人員都把完成自己的本職工作定義為自己成功的標準。需求人員的成功就是儘可能大範圍地捕獲客戶的需求;系統架構設計師的成功就是設計一個穩定適應性強的架構;開發工程師的成功就是編寫出滿足系統設計文檔要求的代碼;測試工程師的成功是保證系統沒有已知的bug... ...這些目標在一起,此消彼長,卻不能保證整個組內有一個共同的目標。但是,當滿足客戶的需求這個願景為團隊所有成員所接受並且贊同的時候,在很多小問題上的爭議將蕩然無存,因為所有人都知道,大家是為了一個共同的目標去努力的;同時,這還能建立起合作和信任,這比所有人技能的總和還要大。
2、選定客戶可控的軟體生命期模型
Sumtec談到了瀑布模型在開發中帶來了種種問題。確實如此,瀑布模型不適合做面向客戶的開發。因為在瀑布模型面前,只有走完整個模型,客戶才能看到他要的東西;換句話說,客戶在整個項目周期中,對項目是不可視的。不可視的項目周期給客戶一種對項目失去控制的感覺,這會引發很多問題,比如進度計劃,比如需求變更,等等。
階段交付,通常是受客戶歡迎的模型。這樣,客戶對整個項目的進展情況,有了直觀的認識。很多更改進度計劃或者提出進一步需求的想法,會被客戶主動拋棄,因為客戶知道了,這對項目會帶來什麼後果。同時,在每次交付之後,都能矯枉過正,最大化地滿足客戶需求。
3、弄清楚真正的客戶是誰
這個問題非常重要!
通常,客戶會派出代表來提出需求,監控項目進行。但是,在很多時候,這個代表根本無法對項目做出決定性的決定!在他身後,有著更大的領導在指揮。這也是在項目進行中,客戶代表會提出很多不合理要求的原因。在項目啟動階段,務必要通過各種手段,對這一情況深入瞭解,然後在項目進行中,做好對幕後領導的彙報工作(哪怕只是對宏觀問題的郵件抄送也比什麼都不做強很多)。
4、準確捕捉客戶需求
客戶對自己的需求往往是十分模糊的,即使提出書面的需求說明書,也不過是一個草案,無法指導開發進行。但是,當客戶看到開發出來的東西的時候,通常思維會變得活躍起來,會提出很多進一步的需求。開發方的需求人員,應該善於利用這一點,使用介面原型法,誘導客戶提出更多的需求出來。
5、控制客戶需求範圍
客戶的需求在天花板上,而我們的產品在地下。
客戶由於不懂軟體開發,會提出很多很多不切合實際、很難滿足的需求;通常,客戶還會認為他們提出的需求很容易實現。所以,一定要在項目啟動階段,把客戶需求從天花板上拉下來,甚至放到地下踩兩腳!
這個工作可以由產品經理、顧問來做。在客戶提出具體需求前,先給客戶方進階領導以及負責人提供免費的產品培訓。讓客戶瞭解產品到底能解決什麼問題,不能解決什麼問題;按行業慣例和規範,每種問題都是如何解決的。這樣,就把客戶的想法規範到一個小筐筐裡面,他們只能把自己無知的想法咽到肚子裡,而不是吐給你。
6、對需求變更的態度
不管項目群組成員做得多麼好多麼到位,需求變更是遲早會出現的。教條式的全盤拒絕變更以及完全迎合客戶,滿足所有變更都是不可取的。較好的態度是接受對項目影響不大的變更,以此保持和客戶的關係。
7、維繫和客戶的關係
在每個裡程碑都搞一個和客戶的慶祝活動,經常發一些印有團隊標誌的紀念品,最重要的是,要偶爾給客戶代表的上司發郵件,稱讚客戶公司和客戶代表幾句。
做這些應該找市場部、銷售部的同事幫忙,他們往往更在行。