前段時間,我出任項目經(jīng)理承接了一個中型軟件項目,公司再三叮嚀我一定要尊重客戶,充分滿足客戶需求。項目開始比較順利,辛辛苦苦熬了幾個月的通宵,基本保持項目的正常進度,客戶相當(dāng)滿意。但進入后期以來,客戶頻繁的需求變更卻帶來很多額外工作。
需求變更不但越來越多,更可怕的是為了節(jié)省時間,客戶不再向我申請變更,而是直接找程序員商量。程序員疲于應(yīng)付,往往直接改程序而不做任何記錄,很多相關(guān)文檔也忘記修改。很快就出現(xiàn)一個問題,就是需求、設(shè)計和代碼無法保持一致,甚至沒有人能說清楚現(xiàn)在系統(tǒng)到底改成什么樣。后來因頻繁出現(xiàn)改好的錯誤又重新出現(xiàn),客戶投訴表示無法容忍這種低下的項目管理水平。這讓我很無奈,疑惑自己到底錯在哪里。
什么是需求變更?
(1)什么是需求分析?
要知道需求變更是什么,首先要知道什么是需求分析。
需求分析是一個復(fù)雜的問題。作為軟件開發(fā)人員,一定了解軟件工程學(xué),而這門科學(xué)的第一步就是需求分析。打開任何一本軟件工程的書籍,翻看目錄就知道需求分析的地位。軟件需求分析是整個軟件開發(fā)最關(guān)鍵的一個輸入。和傳統(tǒng)的生產(chǎn)企業(yè)相比較,軟件需求具有模糊性、不確定性、變化性和主觀性的特點,它不像生產(chǎn)汽車、電腦等硬件的需求,是有形的、客觀的、可描述的、可檢測的。因此,軟件需求是軟件項目最難把握的問題。
簡單的說:需求分析是指理解客戶需求,就軟件功能與客戶達(dá)成一致,估計軟件風(fēng)險和評估項目成本代價,最終形成開發(fā)計劃的一個復(fù)雜過程。需求分析主要包括:業(yè)務(wù)需求、客戶需求和功能需求三個部分。業(yè)務(wù)需求意為客戶對產(chǎn)品的目標(biāo)或者要求,客戶需求意為客戶在使用產(chǎn)品過程中需要完成的一系列任務(wù),功能需求則指定了產(chǎn)品系統(tǒng)必須提供的功能。
(2)什么是需求變更?
在軟件開發(fā)過程中,開發(fā)經(jīng)理所要面對的將是一系列和多方面的考驗。其中,最讓開發(fā)經(jīng)理頭痛的就是需求變更。根據(jù)軟件工程思想定義,需求說明書一般要經(jīng)過論證,如果在需求說明書經(jīng)過論證以后,需要在原有需求基礎(chǔ)上追加和補充新的需求,或?qū)υ行枨筮M行修改和削減,均屬于需求變更。而且,客戶變更需求是軟件開發(fā)與生俱來的特性,也是一個無法避免的事實。
需求變更好比是萬惡之源,為項目的正常開展帶來不盡的麻煩。需求變更的表現(xiàn)形式是多方面的,如客戶臨時改變想法、項目預(yù)算增加或減少、客戶對功能的需求改變等。需求變更問題是每個開發(fā)人員最頭痛的問題。因為一旦發(fā)生了需求變化,就不得不重新修改設(shè)計、重寫代碼、修改測試用例、調(diào)整項目計劃等。這時,如果開發(fā)團隊缺少明確的需求變更控制過程或采用的變更控制無效,很可能會造成開發(fā)進度拖延、成本超支、人員士氣低落,而且越往后的需求變更產(chǎn)生的風(fēng)險將越大,甚至導(dǎo)致整個項目失敗。
【需求變更無可避免】
對于需求變更,我們總認(rèn)為能夠完全掌握它,可實際情況是——需求變更往往在所難免。以前出現(xiàn)這種情況時,總覺得很沮喪,覺得自己的工作做得還不細(xì),有些內(nèi)容要讓用戶簽字確認(rèn)就好了。可在經(jīng)過多次需求變更的痛苦后,才恍然大悟:軟件開發(fā)的需求變更是無可避免的。
(1)三極世界和需求變更的必然性
需求、客戶、開發(fā)人員是一個三極世界。這三極的溝通是很不容易的??蛻粝蛭覀兲咸喜唤^地描述需求,開發(fā)者聽得頭暈?zāi)X脹,但又不得不根據(jù)這些來理解需求。有的時候我們也會派好幾撥人輪番折騰客戶,這樣客戶也暈頭轉(zhuǎn)向,巴不得趕快需求調(diào)研結(jié)束。這樣的需求調(diào)研像透過布滿小水珠的玻璃看世界一樣,即使能夠看清輪廓,但細(xì)節(jié)的丟失在所難免。
之所以這樣,是有原因的:第一,是因為客戶自己對需求進行了過濾,有時是因為客戶對需求的理解也不準(zhǔn)確,有時是客戶的視角與我們的不同。第二,是開發(fā)者對需求的理解偏差。有可能是由于缺乏知識,開發(fā)者對需求理解錯了;還可能是開發(fā)團隊內(nèi)部造成的偏差,比如需求調(diào)研人員往往同時做好幾個項目,在調(diào)研完成后便不在開發(fā)團隊中,這樣偏差便在所難免。還有就是內(nèi)部溝通、人員更替造成的偏差。因此,在這樣一個三極世界,需求變更是必然的。
(2)合同簽訂馬虎,沒有真正明白客戶需求
當(dāng)我以合同上沒有規(guī)定的需求不予開發(fā)時,客戶搬出銷售人員的承諾這一招,更讓我?guī)缀跬卵?。銷售人員在簽訂合同時缺乏對客戶需求的認(rèn)真對待,導(dǎo)致需求描述不清,為開發(fā)帶來了許多困惑和后患。例如,銷售人員有時為使客戶能夠快速地簽訂合同,往往草率決定和片面同意客戶提出的需求。當(dāng)客戶提出新的需求時,往往是銷售人員一看“應(yīng)該”只是一個小小的修改,沒有太大的影響,所以直接答應(yīng)能變更。
該問題的關(guān)鍵是合同簽署得太爛,沒有把需求明確再簽合同,而且也沒有把需求變更的流程寫入合同。如果在簽合同前就把客戶需求弄清楚,后期就根本不需要頻繁地變更需求。簽訂合同時明確定義開發(fā)需求的范圍,可以為以后各項開發(fā)工作的開展奠定好的基礎(chǔ)。
【需求變更為何沒完沒了?】
在軟件開發(fā)中,最常抱怨的是這樣一個問題:客戶為什么總是反反復(fù)復(fù)?造成需求變更沒完沒了的原因,可以是這樣幾個方面存在問題。
(1)沒有明確的需求變更流程沒有明確的需求變更管理流程,就會使需求變更變得泛濫,在這一點上我嘗盡了苦頭。并不是所有的變更都要修改,也不是所有變更都要立刻修改,明確需求變更管理流程的目的是為了決定什么類型的變更需要修改和什么時候修改。比如單純的界面風(fēng)格問題,就可以先不修改,或者規(guī)劃一下修改的時間待到以后進行優(yōu)化。另外,對于核心功能的修改沒有嚴(yán)格把關(guān)流程,有些小需求看起來工作量不大,但是哪些銷售人員或者客戶沒有考慮到的細(xì)節(jié)問題實際上需要花費開發(fā)人員相當(dāng)長的時間去完成,從而是撿了芝麻掉了西瓜,得不償失,使開發(fā)進度失控和資源浪費。
(2)沒有讓客戶知道需求變更的代價對變更的影響沒有進行成本評估是需求變更泛濫的根本原因,這是我從單純的技術(shù)人員轉(zhuǎn)變到統(tǒng)籌兼顧成本管理的轉(zhuǎn)變點之一,當(dāng)然為了這一點我也付出了血與淚,為此飽受公司領(lǐng)導(dǎo)和客戶的重重抱怨和責(zé)備。變更都是有代價的,應(yīng)該要評估變更的代價和對項目的影響,要讓客戶了解需求變更的后果。如果客戶不知道需求變更付出的代價,對開發(fā)人員的辛苦就會難以體會。在評估代價(包括成本、時間等多方面)過程中,可以請客戶一起做判斷:“我可以修改,但您能接受后果嗎?”
【如何有效控制需求變更?】
需求變更對軟件開發(fā)項目成敗有重要影響,既不能一概拒絕客戶的變更要求,也不能一味地遷就客戶,所以實施需求變更之前必須做好控制。需求變更控制的目的不是控制變更的發(fā)生,而是對變更進行管理,確保變更有序進行。
(1)明確合同約束,建立需求基線需求變更給軟件開發(fā)帶來的影響有目共睹,所以在與客戶簽訂合同時,可以增加一些相關(guān)條款,如限定客戶提出需求變更的時間,規(guī)定何種情況的變更可以接受、拒絕或部分接受,還可以規(guī)定發(fā)生需求變更時必須執(zhí)行變更管理流程。雖然軟件開發(fā)合同很難在簽訂之初就能夠精確定義每項需求,單靠合同是幫不上忙的,但也不能忽視合同的約束力。
明確和樹立需求基線是需求變更的依據(jù)。在開發(fā)過程中,需求確定并經(jīng)過評審后(客戶參與評審),建立第一個需求基線。此后每次變更并經(jīng)過評審后,都要重新確定新的需求基線,做到小需求可以變更,但大方向要力保不頻繁變更。例如,對于項目中的需求,可以實行分級管理,以達(dá)到對需求變更的控制和管理。
(2)建立變更審批流程在實踐中,人們往往不愿意為小的需求變更去執(zhí)行正規(guī)的需求管理過程,認(rèn)為降低開發(fā)效率,浪費時間。正是這種觀念才使需求變更變得不可控,最終導(dǎo)致項目的失敗。因此,小的需求變更也要經(jīng)過正規(guī)的需求管理流程,否則會積少成多,積重難返。
明確需求變更審批環(huán)節(jié)、審批人員、審批事項、審批流程。這么做的目的有兩個:一是將客戶下達(dá)變更的流程盡可能地規(guī)范化,減少張嘴就來的非必要、非緊急、非合理、非高層領(lǐng)導(dǎo)意圖的無效變更。二是留下書面依據(jù),為今后可能的成本變更和索賠準(zhǔn)備好“變更賬”。凡未履行審批程序的“變更”,一律是無效變更不予受理。
(3)分級管理變更,定時批量處理軟件開發(fā)項目中,“客戶永遠(yuǎn)是對的”和“客戶是上帝”并不完全正確,因為在已經(jīng)簽定的項目合同中,任何新需求的變更和增加除了影響項目的正常進行以外,還影響到客戶的成本投入收益。因此,用戶不斷提出對項目進度有重大影響的需求對雙贏也并不是好事。
當(dāng)遇到客戶提出需求,不及時處理可能會使項目不能驗收通過時,也不能一味拒絕不予開發(fā)。因此,當(dāng)客戶堅持變更新需求時,可以建議客戶將新需求按重要和緊迫程度劃分檔次,作為需求變更評估的一項依據(jù)。例如,每周或每兩周甚至每月召開一次需求變更專題會議,集中研究處理這些零碎變更事項,主動控制好工作節(jié)奏,盡量避免由于處理零碎變更而影響項目進度。針對會議結(jié)果可向客戶正式提交一份需求變更計劃,注明變更引起的時間、成本、工期代價和增加工作量等。要求客戶配合需求變更計劃,確定變更時限,控制變更規(guī)模,過時變更不候,離譜變更不做,保大局棄小變。
(4)安排專職人員負(fù)責(zé)變更管理有時開發(fā)任務(wù)較重,開發(fā)人員容易陷入開發(fā)工作中而忽略了與客戶的隨時溝通。因此,需要安排一名專職的需求變更聯(lián)絡(luò)人員,負(fù)責(zé)與客戶及時交流,跟蹤和匯報需求變更完成進度和情況。同時,可以成立項目變更控制小組,負(fù)責(zé)裁定接受哪些變更,小組由項目所涉及的多方人員共同組成,應(yīng)該包括客戶方和開發(fā)方的決策人員在內(nèi)。
(5)確認(rèn)客戶是否接受變更的代價要讓客戶認(rèn)識到變更都是有代價的,要和客戶一起判斷需求變更是否依然進行。例如,變更是沒有問題的,但是要明確客戶能否接受由此引起的如進度延遲、費用增加、效率下降等問題。一般來說,如果客戶認(rèn)為該變更是必須的(不是其上級領(lǐng)導(dǎo)拍腦袋提出的)就會接受這些后果。通過與客戶協(xié)商,這樣開發(fā)團隊即使沒有回報,也不會招致公司和客戶雙方的埋怨。
如果客戶認(rèn)為該變更雖然有必要但是可以暫緩,雙方簽署備忘錄后留待以后解決。如果客戶認(rèn)為該變更可有可無,多數(shù)情況下會取消變更。這樣即可防止頻繁變更,也讓客戶認(rèn)識到不是所有的需求都需要變更。
以上方法和措施的落地還需要通過IT工具來實現(xiàn),才有可能實施到位,這種事情如果是依靠人來監(jiān)督,很難成功!所以引進PLM系統(tǒng)+研發(fā)管理顧問的指導(dǎo)----該問題就不難解決啦!
......歡迎交流......
評論