異地分布式軟件開發(fā)(Distributed Software Development)是指由多個位于不同地理位置的團(tuán)隊進(jìn)行同一個軟件項目的開發(fā)過程。這個詞越來越頻繁的出現(xiàn)在各種技術(shù)媒體中。
異地分布式軟件開發(fā)不同于外包,它建立在平等關(guān)系的兩個團(tuán)隊之間。通常是一個公司的不同分公司或辦公室間的協(xié)作,他們之間大多不存在博弈的合同關(guān)系。而外包是指一個公司將其軟件系統(tǒng)的開發(fā)委托給另一個公司或組織完成。二者之間是合同的甲乙方關(guān)系。
但無論是異地分布式軟件開發(fā)或是外包,可以接觸到實際客戶的一端一般稱為on-site,另一端可相應(yīng)的稱為off-site,他們可以根據(jù)地理位 置分為三類:on-shore(在岸,指在同一個國家或同一個時區(qū)內(nèi)),near-Shore(近岸,在接近的國家和地區(qū)中)和off-Shore(離 岸,通常在時差8小時以上)。如下表。
offsite on shore near shore off shore Distributed Development 北京辦公室 - 西安辦公室之間 印度分公司 - 中國分公司 硅谷總公司 - 中國或印度分公司 Outsourcing Development 北京某公司 – 廣州另一公司 東京某公司 - 大連另一公司 歐洲某公司 - 中國另一公司
異地分布式開發(fā)的組織方式
異地分布開發(fā)的組織方式有很多種。最常見的一種是公司將完整的團(tuán)隊組織結(jié)構(gòu)分布在兩地,每個團(tuán)隊都有本地項目經(jīng)理,需求分析師,開發(fā)者以及測試。同時公司設(shè)定項目總負(fù)責(zé)人角色,負(fù)責(zé)兩地的溝通與協(xié)調(diào)。
有的公司將需求分析人員放在on-site一端,開發(fā)者、測試人員和項目經(jīng)理在off-site一方,同時在本地也保持常規(guī)的需求分析師。也有公司將測試人員和開發(fā)人員分放在不同地方,一方面開發(fā),另一方面利用時差,在夜間測試并在第二天及時反饋測試結(jié)果。
各種組織方式都有其不同的適用場合。然而他們的共同點在于,都是注重micro-management,即加強在本地團(tuán)隊中項目管理和協(xié)調(diào),而不是由一個人同時直接管理兩地的活動。同時,也盡量保證團(tuán)隊兩邊都具有項目協(xié)調(diào)人、本地項目經(jīng)理、需求分析師等輔助角色。
基本原則:極盡交流之能事
異地分布軟件開發(fā)面臨的最大問題是交流問題。隨著人員距離的增加,交流效率將大大降低(參見Alistair Cockburn的文章),同時交流成本將極大提高。很多時候on-site一端團(tuán)隊不能把正確的需求傳遞到off-site一端,這直接造成產(chǎn)品質(zhì)量的下降。
為了使避免這種情況,應(yīng)盡量采用一切手段來提高交流的效果。例如,項目經(jīng)理和團(tuán)隊成員都需要了解其他人的工作狀態(tài),一個技巧是可以將你的MSN或Y!名稱后綴寫上你在做哪一塊的需求。并可以隨時和同事通過IM進(jìn)行交流。
每天的定時會議將成為很重要的一個很重要的交流方式。如果團(tuán)隊的人數(shù)較少,大家可以按照站立會議的方式在電話會議系統(tǒng)中說明自己的情況和遇到的問 題。如果人數(shù)較多,一種可替代的方式是每個團(tuán)隊自己進(jìn)行每日例會,并由個項目的項目經(jīng)理和需求分析人員進(jìn)行另外的會議以便協(xié)調(diào)工作。
如果兩個團(tuán)隊時差較大,例如中國北京時間和美國東部時間時差12-3小時,想要進(jìn)行直接的電話會議交流很困難。如果遇到3個處于不同時區(qū)的團(tuán)隊,更 是經(jīng)常不可能找到一個合適的時間來進(jìn)行任何的會議。在國際化的公司中,起早貪黑的進(jìn)行幾地的電話會議很常見,但這卻不適用于整個開發(fā)團(tuán)隊。對這種情況,每 日的開發(fā)狀態(tài)郵件是很有用的。每日開發(fā)結(jié)束后由項目經(jīng)理或成員來根據(jù)團(tuán)隊的情況來撰寫一天的總結(jié),并發(fā)送給遠(yuǎn)端的團(tuán)隊。
交流的障礙經(jīng)常發(fā)生在陌生人之中,如果兩地的開發(fā)人員互不熟悉,可以考慮將雙方人員的照片貼在墻上,以增加熟悉感?尚械脑,進(jìn)行可視會議和當(dāng)面的會談。盡量減少陌生感,使交流效果提升。
任何交流方式都比不上面對面的交流。異地開發(fā)時,off-site一端很容易丟失on-site一端與客戶交流的語義上下文和環(huán)境。如果情況允許, 公司應(yīng)該設(shè)立常規(guī)的出差和輪換制度。讓一部分的團(tuán)隊成員到另一端,見一見一起工作的同事,了解一下客戶的需求和感受一下不同的環(huán)境。
敏捷開發(fā)過程的改進(jìn)
般的敏捷過程中,都會有一個初始階段,在這個階段了解開發(fā)需求和制定發(fā)布計劃。要進(jìn)行這樣的活動,最理想的辦法是讓所有人都出差到on-site一 端,一起了解需求和建立共識。這將會對后面的開發(fā)有很大幫助。如果由于人數(shù)或成本不可行,至少要派遣所有的需求分析師和項目經(jīng)理、協(xié)調(diào)人以及部分測試人員 到場參與。對于迭代一級的計劃,應(yīng)該由兩地的項目經(jīng)理和需求分析師提前進(jìn)行計劃會議并做出決定。
日常的項目管理工作中,采用卡片墻的方式只適用in-house的開發(fā)。在異地開發(fā)中,為了使得每個團(tuán)隊都可以了解到團(tuán)隊任務(wù),至少需要在兩邊開發(fā)室都設(shè)立卡片墻,并保持同步?梢圆捎迷诰工具幫助進(jìn)行項目跟蹤,例如Mingle或Trac,都是適用的在線工具,同時也是在線Wiki或共享知識庫。
項目協(xié)調(diào)人,應(yīng)當(dāng)制定完善的交流計劃和交流機制。例如前文提到的每日的例會和每日開發(fā)狀態(tài)郵件,每周的需求交流計劃,問題的提出和反應(yīng)機制等等。這些應(yīng)當(dāng)制定成為團(tuán)隊守則來遵循,并隨著實際情況的變化修訂。交流不怕多,只怕不充分。
一個共享的代碼版本控制系統(tǒng)是必須的。例如在公司內(nèi)網(wǎng)建立一個SVN并通過VPN來使用。On-site和off-site團(tuán)隊可建立自己單獨的持 續(xù)集成環(huán)境,但需要保持系統(tǒng)環(huán)境的一致。兩方的開發(fā)人員都應(yīng)該保證每日離開辦公室前的提交通過集成。這樣可以避免異地團(tuán)隊開始開發(fā)不至于被失敗的集成所耽 擱。
基本的敏捷時間必不可缺,例如測試,尤其是功能測試。On-site的QA應(yīng)當(dāng)在需求確定的時候制定好驗收條件。一個描寫良好的驗收條件會對開發(fā)人員有所幫助。尤其是在On-site一端不能及時解答問題的時候,會起到很大的作用。
每個迭代結(jié)束時,應(yīng)盡量安排一個兩地同步的演示會議。讓所有人都在電話會議上看到這個迭代的成果。迭代后的總結(jié)與回顧也應(yīng)當(dāng)兩地一起進(jìn)行,如果人數(shù)和條件不允許,可以分別進(jìn)行,并互相通報回顧結(jié)果和改進(jìn)方法。
離岸團(tuán)隊的參與度
多團(tuán)隊中,處于on-site的成員由于可以接觸到客戶,他們的話語權(quán)可能會被放大,使得on-site一邊的人傾向于命令式的消息傳遞,直接指派 需求和開發(fā)進(jìn)度,而忽視了對需求背景情況和上下文進(jìn)行介紹。這種情況可能造成off-site一端團(tuán)隊產(chǎn)生抵觸心里,從而導(dǎo)致項目的失敗。
解決方法是提高off-site團(tuán)隊的參與度。如制度性的進(jìn)行人員輪換,讓兩端的團(tuán)隊成員有所接觸,并互相熟識。定期組織兩個團(tuán)隊的共同活動。如果 都處于一個時區(qū),可以考慮進(jìn)行每周的Learning Lunch,大家在互相能看到視頻的情況下一起吃飯和聽講座。講座內(nèi)容可以是任何話題,例如一些項目相關(guān)的技術(shù)決策等等。
不要忽視offsite團(tuán)隊的任何意見和建議,他們在很多時候能從另一個側(cè)面對項目提出見解。鼓勵offsite團(tuán)隊決策和發(fā)起討論,這樣可以提高他們的參與度。
實施異地開發(fā)的最初目的是為了降低人力成本和運營成本,一些跨時區(qū)的異地開發(fā)還可以提高時間利用效率,實現(xiàn)全球24小時開發(fā)。然而,異地開發(fā)帶來了高昂的交流和管理成本,如果處理不當(dāng)將直接導(dǎo)致項目或產(chǎn)品的失敗。
近年來隨著國內(nèi)軟件公司業(yè)務(wù)的發(fā)展,異地開發(fā)項目將會越來越多。全球化的進(jìn)程也會使得外國公司開展更多類似的開發(fā)。異地開發(fā)項目將會逐漸發(fā)展和普遍?梢韵胂,多年以后,如果一個公司沒有異地開發(fā)的團(tuán)隊,將會是多么的令人詫異。
|