更改需求是很多程序員兄弟頭疼的事情,因?yàn)樾枨蟮母淖钪苯拥挠绊懢褪枪ぷ髁康亩溉簧仙?,?duì)于已經(jīng)工作量很大的我們來說無疑是一件雪上加霜的事情。然而,我們總是會(huì)聽到領(lǐng)導(dǎo)說“客戶就是上帝”,當(dāng)客戶有更改需求的需要,作為技術(shù)人員也必須主動(dòng)迎合客戶的需要,這同時(shí)也給我們帶來較大的工作壓力。那么,作為程序員,如何優(yōu)雅地應(yīng)對(duì)更改需求,以便更好地適應(yīng)職業(yè)發(fā)展的需要呢?
在提出具體的建議之前,筆者認(rèn)為對(duì)項(xiàng)目開發(fā)的需求規(guī)劃和可行性分析做一個(gè)較為詳細(xì)的討論是很有必要的。
在軟件的生命周期中,需求規(guī)劃是一項(xiàng)重要環(huán)節(jié),在軟件項(xiàng)目開發(fā)的過程中,如果突然更改需求,勢(shì)必會(huì)打亂軟件的生命周期,從而使開發(fā)過程陷入一種比較尷尬的境地。在網(wǎng)上也有很多關(guān)于吐槽更改需求的帖子,把更改需求比喻成將咖喱牛肉炒飯改成蛋炒飯,再從蛋炒飯改成番茄雞蛋炒面。這樣的更改需求無異于將需求規(guī)劃推到重來,讓之前開發(fā)人員所付出的辛苦付之東流。所以為了避免這樣的事情發(fā)生,在做開發(fā)之前需要將系統(tǒng)的功能“實(shí)現(xiàn)什么”作為鐵板釘釘?shù)哪繕?biāo)。
將“實(shí)現(xiàn)什么”確定好之后,才可以去討論“如何去實(shí)現(xiàn)”。經(jīng)驗(yàn)豐富的程序員都能夠做到將客戶需求的更改轉(zhuǎn)化為實(shí)現(xiàn)方法的調(diào)整,這樣能夠避免將自己的開發(fā)思路打亂。在對(duì)“實(shí)現(xiàn)什么”整理的過程中,將需要實(shí)現(xiàn)的目標(biāo)規(guī)范成描述完整、清晰規(guī)范的文檔以及相關(guān)的性能,當(dāng)然,還有各種可能發(fā)生變更情況的預(yù)案。
說到這里,如何優(yōu)雅地應(yīng)對(duì)更改需求就可以轉(zhuǎn)化為如何成為一名技術(shù)過硬、經(jīng)驗(yàn)豐富的程序員之一問題了。
技術(shù)篇——準(zhǔn)確的需求評(píng)估與合理地可行性分析
準(zhǔn)確的需求評(píng)估源于對(duì)對(duì)需求的深刻理解,如何將普通人的想法轉(zhuǎn)化成程序員的編程思想,這就需要將需求深入到設(shè)計(jì)層面。不僅要會(huì)委婉地拒絕不合理的設(shè)計(jì),還要能提出可以替代的、合理的方案。所做的這一切都是為了避免出現(xiàn)開發(fā)過程中的頻繁更改??尚行苑治隹梢詭椭覀?cè)谧龊眯枨笤u(píng)估的基礎(chǔ)上讓需求更好地固定下來。
首先是技術(shù)上的可行性:確定好需求的實(shí)現(xiàn)是在團(tuán)隊(duì)的技術(shù)能力范圍內(nèi),例如前端、后端、服務(wù)器、數(shù)據(jù)庫的開發(fā)人員配備,有無以前可用的經(jīng)驗(yàn),這些最好做到清單化。在此基礎(chǔ)上,就可以開始對(duì)系統(tǒng)的架構(gòu)進(jìn)行梳理,做到安全性、可維護(hù)性、可擴(kuò)展性。所以不要急于寫代碼,梳理好思路,編碼效率更高。
其次是風(fēng)險(xiǎn)的可控性:如果發(fā)生需求的更改該如何應(yīng)對(duì)?最好的辦法是在架構(gòu)不變的情況下,擴(kuò)展功能,豐富接口。開發(fā)好預(yù)留地,可以讓我們?cè)陂_發(fā)的過程中應(yīng)對(duì)自如。
還有就是高質(zhì)量的代碼:整齊美觀、注釋充分,有良好的可讀性和復(fù)用性,即便沒有文檔的輔助也可以隨查隨改,這樣能夠大大提高在開發(fā)周期中編碼階段的效率。
經(jīng)驗(yàn)篇——從容淡定地應(yīng)對(duì)開發(fā)過程中可能出現(xiàn)的情況
從容淡定,源于對(duì)技術(shù)的自信,作為開發(fā)者,扎實(shí)的技術(shù)結(jié)合著經(jīng)驗(yàn)面對(duì)各種開發(fā)需求才能練就火眼金睛。
避免盲目自信,準(zhǔn)確定位問題:從事開發(fā)不是為了炫技,避免追求簡便而為后續(xù)更改造成不必要的障礙,諸如頻繁地調(diào)用、多層套嵌都需謹(jǐn)慎。在客戶未提出更改需求之前不要被自己存在的問題所打倒。所以,debug技能對(duì)于優(yōu)秀的程序員來講必不可少。
善于溝通,引導(dǎo)客戶:客戶提出的需求自然有他的道理,所以和客戶溝通的目標(biāo)是要探尋客戶的需求邊界。敏感地捕捉客戶的需求點(diǎn),讓客戶成為我們開發(fā)流程中的合作伙伴。產(chǎn)品經(jīng)理是我們的戰(zhàn)友,在某種程度上,我們說服的對(duì)象更多的是PM。要知道,世界上沒有任何一套軟件系統(tǒng)或信息系統(tǒng)是完美無缺的,所以不必為了完美而和PM爭論得面紅耳赤,讓更改需求更多的是一種對(duì)軟件的改進(jìn),這樣才能在開發(fā)過程中應(yīng)對(duì)自如。