如何提高離岸軟件開發項目的成功概率?

前言:

  • 軟件開發項目的成功,取決於很多相互作用、綜合影響的因素,因此我們無法找到一種辦法來保證軟件開發項目能夠100%獲得成功。
  • 但在軟件開發領域,通過採取一些特定的做法或實踐,可以大大提高軟件項目的成功機會,因而我們有必要去發現並採納這些做法和實踐。
  • 不管是離岸開發還是在岸開發,有很多通用的方法和實踐都能提高軟件項目的成功概率,但本文的目的不是去說明這些通用的做法。
  • 本文關心的僅僅是在離岸軟件開發這個環境中,顯得相對比較突出的問題,或者是相對比較容易出現問題的部分。
  • 文中所提到的內容,大多來自於作者在相關領域的工作經驗,希望這些經驗能夠對大家獲得離岸軟件開發項目的成功,有所幫助。

問題:離岸軟件開發有什麼特別?

離岸軟件開發過程中所遇到的問題,大多數都跟在岸開發相似,但主要因爲距離上的限制以及時區的不同,有幾點跟軟件項目成敗密切相關的要素變得突出起來:

  • 首先是團隊之間的協同一致,變得更加困難,這既包括在岸團隊和離岸團隊之間就工作內容方面的協調一致,也包括兩個團隊之間就項目進展的同步;
  • 其次是溝通的壁壘增加了,這主要包括團隊之間的信息共享和知識傳遞壁壘,可能的影響是增加了由誤解信息導致的返工和浪費;
  • 再則就是位於兩個不同地點的團隊之間,容易產生不信任的現象,這將影響團隊合作的順利度和有效性,增加很多不必要的成本;

先說團隊之間的協同問題,在離岸軟件開發中,大家可能遇到過下面這些問題:

  1. 這邊團隊進行的改動,導致對岸團隊的代碼編譯失敗,影響了對方工作的正常進展;
  2. 這邊團隊check in的內容,導致了對岸團隊的變更丟失,其中一方不得不回滾或者重做相關的工作;
  1. 雙方的代碼整合過程超出了預期時間很多,而且充滿痛苦,這引起人員的不滿和系統的不穩定;
  1. 雙方的工作內容出現重複;
  2. 對方報告的Bug無法重現;

不難看出這些問題都有一個共性,就是雙方的協調一致沒有到位。就個人的經驗,採取以下做法將有助於降低這些問題發生的概率和影響:

  1. 雙方一開始就應該建立起公共代碼庫,共同基於這套代碼進行開發,並採取持續集成的做法經常性同步代碼;
  1. 建立並遵循共同的規則,譬如每天Check in,並且check in之後,必須編譯通過才能下班;
  2. 儘量使用共同的開發工具和環境,譬如相同版本的控件和相同的測試環境;
  1. 經常性同步,譬如定期合併BranchTrunk;又譬如每週共同舉行兩次遠程站立會議;
  1. 採用相同的實踐並儘量使其有所交叉,譬如離岸在案團隊都採用2週一次的迭代,在每個迭代末共同舉行演示會議等;

離岸環境下,溝通方面的問題主要在於難以開展面對面的溝通以及時區的差異可能導致兩個團隊沒有彼此交疊的時間,常見問題有:

  1. 難以在不見面的情況下描述清楚需求,或者難以理解客戶的需求描述;
  1. 對需求文檔的相關疑惑得不到及時解答,進而影響進展;
  2. 做出來卻發現並不是客戶真正想要的;

那麼如何去應對這些問題呢?個人經驗中比較有效的做法有:

  1. 一開始就建立多種溝通渠道,至少要保證雙方都知道彼此的IMEmail和電話;並且計劃固定的溝通時間,譬如每週二、週四溝通,每次是下午的13點到15點等;
  2. 儘量用有記錄可尋的方法來溝通需求,譬如更多地用書面文件來代替口頭溝通,若口頭溝通,也儘量錄音並留存;
  3. 若用文檔傳遞需求,最好把格式固定下來,儘量多用圖片和表格,少用文字;User StoryTest Case是很有效的需求溝通辦法;
  4. 非文檔類型的需求傳遞,原型是最好的方法,最質樸的原型就是手工畫的草圖,將其掃描或拍照;一段錄製的視頻資料也可以考慮;
  5. 儘量用產品去溝通,譬如每週或者每兩週向客戶演示一次產品並獲取反饋;
  6. 建立共同的信息平臺,譬如Wiki

總之,溝通的順暢度和有效性對離岸環境下項目的成敗影響很大,可能首先是一定要確保雙方都能花足夠的時間在溝通上(因爲經常有些客戶不願意在這方面花時間),其次纔是採用各種溝通的方法來增強溝通的效果。如果你是發包方,切忌當甩手掌櫃的想法,如果實施者對產品沒有深入的認識,如何把產品做好呢?

至於信任問題,離岸環境下也是比較突出的,因爲除了有形的產出外,雙方一般都看不到彼此在做些什麼,如果共事者之間沒有一定的信任,對項目的成功將是有害無利的。我遇到過的有兩種情況:

  1. 發包方對接包者的不信任 - 發包者心裏擔心自己的資源被浪費,所以他會想辦法設置種種要求和限制,以此確保團隊不會分心其它事情;實際上團隊這邊本來是全心投入的,現在爲了滿足這些要求和限制,不但增加了很多額外的工作負擔,而且團隊成員覺得不被信任,缺乏幹勁。
  1. 雙方的團隊成員之間互相猜疑 - 我遇到過一個項目,開發人員之一認爲對方的某個開發人員需求描述得不夠清楚,一直把需求退回去,而對方人員認爲需求已經夠清楚了,不願進一步反饋,這就導致有些任務在需求這個環節被延誤,整體工作進展很慢,雙方就是因爲缺乏信任而不願共同合作來解決這個問題。

我相信這類由於缺乏信任而引發項目進展受阻的現象應該還有很多,這也是爲什麼要進行團隊建設的原因之一。在離岸環境下如何改善這種情況?以下建議可以參考:

  1. 增加雙方見面的機會,無論是商務訪問還是視頻會議,只要能讓雙方互相看到,感受到對方個體的真實存在,那種感覺會比只看得到冷冰冰的代碼、文本和屏幕要好很多;
  2. 建立共同解決問題的機制,譬如每個迭代結束後,大家一起開會進行總結回顧,討論共同的問題;
  1. 主動並有規律性地進行信息共享和披露;

除了上面提到的這些做法,良好的任務拆分也可提高離岸軟件開發項目的成功概率,推薦的做法是把工作內容按照功能特性進行拆分,這樣做的主要目的是避免業務邏輯層面的耦合性,以減少不同團隊之間的溝通協調需要。如果是把項目外包給個人或者是能力還未達到勝任系統級設計的團隊,那麼在拆分任務時,儘量把任務分得細小而明確也是比較有益的做法,因爲小而明確的任務利於實施和管理,使得項目更加可控。

以上是在離岸軟件外包環境下,軟件開發項目中比較常見的三個問題及其對策,歡迎補充和探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章