淺析離岸軟件開發(fā)項目的成功概率
前言:
軟件開發(fā)項目的成功,取決于很多相互作用、綜合影響的因素,因此我們無法找到一種辦法來保證軟件開發(fā)項目能夠100%獲得成功。
但在軟件開發(fā)領(lǐng)域,通過采取一些特定的做法或?qū)嵺`,可以大大提高軟件項目的成功機會,因而我們有必要去發(fā)現(xiàn)并采納這些做法和實踐。
不管是離岸開發(fā)還是在岸開發(fā),有很多通用的方法和實踐都能提高軟件項目的成功概率,但本文的目的不是去說明這些通用的做法。
本文關(guān)心的僅僅是在離岸軟件開發(fā)這個環(huán)境中,顯得相對比較突出的問題,或者是相對比較容易出現(xiàn)問題的部分。
文中所提到的內(nèi)容,大多來自于作者在相關(guān)領(lǐng)域的工作經(jīng)驗,希望這些經(jīng)驗?zāi)軌驅(qū)Υ蠹耀@得離岸軟件開發(fā)項目的成功,有所幫助。
問題:離岸軟件開發(fā)有什么特別?
離岸軟件開發(fā)過程中所遇到的問題,大多數(shù)都跟在岸開發(fā)相似,但主要因為距離上的限制以及時區(qū)的不同,有幾點跟軟件項目成敗密切相關(guān)的要素變得突出起來:
首先是團隊之間的協(xié)同一致,變得更加困難,這既包括在岸團隊和離岸團隊之間就工作內(nèi)容方面的協(xié)調(diào)一致,也包括兩個團隊之間就項目進展的同步;
其次是溝通的壁壘增加了,這主要包括團隊之間的信息共享和知識傳遞壁壘,可能的影響是增加了由誤解信息導(dǎo)致的返工和浪費;
再則就是位于兩個不同地點的團隊之間,容易產(chǎn)生不信任的現(xiàn)象,這將影響團隊合作的順利度和有效性,增加很多不必要的成本;
先說團隊之間的協(xié)同問題,在離岸軟件開發(fā)中,大家可能遇到過下面這些問題:
這邊團隊進行的改動,導(dǎo)致對岸團隊的代碼編譯失敗,影響了對方工作的正常進展;
這邊團隊check in的內(nèi)容,導(dǎo)致了對岸團隊的變更丟失,其中一方不得不回滾或者重做相關(guān)的工作;
雙方的代碼整合過程超出了預(yù)期時間很多,而且充滿痛苦,這引起人員的不滿和系統(tǒng)的不穩(wěn)定;
雙方的工作內(nèi)容出現(xiàn)重復(fù);
對方報告的Bug無法重現(xiàn);
不難看出這些問題都有一個共性,就是雙方的協(xié)調(diào)一致沒有到位。就個人的經(jīng)驗,采取以下做法將有助于降低這些問題發(fā)生的概率和影響:
雙方一開始就應(yīng)該建立起公共代碼庫,共同基于這套代碼進行開發(fā),并采取持續(xù)集成的做法經(jīng)常性同步代碼;
建立并遵循共同的規(guī)則,譬如每天Check in,并且check in之后,必須編譯通過才能下班;
盡量使用共同的開發(fā)工具和環(huán)境,譬如相同版本的控件和相同的測試環(huán)境;
經(jīng)常性同步,譬如定期合并Branch和Trunk;又譬如每周共同舉行兩次遠程站立會議;
采用相同的實踐并盡量使其有所交叉,譬如離岸在案團隊都采用2周一次的迭代,在每個迭代末共同舉行演示會議等;
離岸環(huán)境下,溝通方面的問題主要在于難以開展面對面的溝通以及時區(qū)的差異可能導(dǎo)致兩個團隊沒有彼此交疊的時間,常見問題有:
難以在不見面的情況下描述清楚需求,或者難以理解客戶的需求描述;
對需求文檔的相關(guān)疑惑得不到及時解答,進而影響進展;
做出來卻發(fā)現(xiàn)并不是客戶真正想要的;
那么如何去應(yīng)對這些問題呢?個人經(jīng)驗中比較有效的做法有:
一開始就建立多種溝通渠道,至少要保證雙方都知道彼此的IM,Email和電話;并且計劃固定的溝通時間,譬如每周二、周四溝通,每次是下午的13點到15點等;
盡量用有記錄可尋的方法來溝通需求,譬如更多地用書面文件來代替口頭溝通,若口頭溝通,也盡量錄音并留存;
若用文檔傳遞需求,***把格式固定下來,盡量多用圖片和表格,少用文字;User Story和Test Case是很有效的需求溝通辦法;
非文檔類型的需求傳遞,原型是***的方法,最質(zhì)樸的原型就是手工畫的草圖,將其掃描或拍照;一段錄制的視頻資料也可以考慮;
盡量用產(chǎn)品去溝通,譬如每周或者每兩周向客戶演示一次產(chǎn)品并獲取反饋;
建立共同的信息平臺,譬如Wiki
總之,溝通的順暢度和有效性對離岸環(huán)境下項目的成敗影響很大,可能首先是一定要確保雙方都能花足夠的時間在溝通上(因為經(jīng)常有些客戶不愿意在這方面花時間),其次才是采用各種溝通的方法來增強溝通的效果。如果你是發(fā)包方,切忌當(dāng)甩手掌柜的想法,如果實施者對產(chǎn)品沒有深入的認識,如何把產(chǎn)品做好呢?
至于信任問題,離岸環(huán)境下也是比較突出的,因為除了有形的產(chǎn)出外,雙方一般都看不到彼此在做些什么,如果共事者之間沒有一定的信任,對項目的成功將是有害無利的。我遇到過的有兩種情況:
發(fā)包方對接包者的不信任- 發(fā)包者心里擔(dān)心自己的資源被浪費,所以他會想辦法設(shè)置種種要求和限制,以此確保團隊不會分心其它事情;實際上團隊這邊本來是全心投入的,現(xiàn)在為了滿足這些要求和限制,不但增加了很多額外的工作負擔(dān),而且團隊成員覺得不被信任,缺乏干勁。
雙方的團隊成員之間互相猜疑- 我遇到過一個項目,開發(fā)人員之一認為對方的某個開發(fā)人員需求描述得不夠清楚,一直把需求退回去,而對方人員認為需求已經(jīng)夠清楚了,不愿進一步反饋,這就導(dǎo)致有些任務(wù)在需求這個環(huán)節(jié)被延誤,整體工作進展很慢,雙方就是因為缺乏信任而不愿共同合作來解決這個問題。
我相信這類由于缺乏信任而引發(fā)項目進展受阻的現(xiàn)象應(yīng)該還有很多,這也是為什么要進行團隊建設(shè)的原因之一。在離岸環(huán)境下如何改善這種情況?以下建議可以參考:
增加雙方見面的機會,無論是商務(wù)訪問還是視頻會議,只要能讓雙方互相看到,感受到對方個體的真實存在,那種感覺會比只看得到冷冰冰的代碼、文本和屏幕要好很多;
建立共同解決問題的機制,譬如每個迭代結(jié)束后,大家一起開會進行總結(jié)回顧,討論共同的問題;
主動并有規(guī)律性地進行信息共享和披露;
除了上面提到的這些做法,良好的任務(wù)拆分也可提高離岸軟件開發(fā)項目的成功概率,推薦的做法是把工作內(nèi)容按照功能特性進行拆分,這樣做的主要目的是避免業(yè)務(wù)邏輯層面的耦合性,以減少不同團隊之間的溝通協(xié)調(diào)需要。如果是把項目外包給個人或者是能力還未達到勝任系統(tǒng)級設(shè)計的團隊,那么在拆分任務(wù)時,盡量把任務(wù)分得細小而明確也是比較有益的做法,因為小而明確的任務(wù)利于實施和管理,使得項目更加可控。
以上是在離岸軟件外包環(huán)境下,軟件開發(fā)項目中比較常見的三個問題及其對策,歡迎補充和探討。
原文鏈接:http://www.cnblogs.com/cavenran/archive/2011/07/25/
success_in_outsourcing_software_development.html
【編輯推薦】