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