隨便說說
先說什么樣的情況不適合xp
1. 大型和超大型的軟件項(xiàng)目
受限于溝通成本和人力資源限制, 大一點(diǎn)的軟件項(xiàng)目很難有效實(shí)施xp,即便是把團(tuán)隊(duì)拆分成多個(gè)xp小組,隨著規(guī)模的擴(kuò)大,也會(huì)面臨溝通機(jī)制失效而徹底失控的局面。
而xp強(qiáng)調(diào)以人為本,強(qiáng)調(diào)充分發(fā)揮個(gè)體程序員的能力,強(qiáng)調(diào)有效溝通,對(duì)程序員本身的綜合素質(zhì)(注意不是單純的技術(shù)能力)是有相當(dāng)要求的,對(duì)于大型項(xiàng)目,正如DEATH TO MARCH中的指出的, 人力資源永遠(yuǎn)都是一個(gè)問題, 規(guī)模越大的項(xiàng)目可以獲得的合格程序員就越少, 越容易失控。

20個(gè)人在xp團(tuán)隊(duì)是個(gè)很尷尬的數(shù)字,對(duì)于一個(gè)團(tuán)隊(duì)來說,太大,拆分成2個(gè)團(tuán)隊(duì),又有點(diǎn)多余,而對(duì)于新建的xp團(tuán)隊(duì)來說,應(yīng)該從小規(guī)模做起,6-8人組比較妥當(dāng)。


2. 做不到和用戶穿一條褲子的項(xiàng)目

xp和很多人的想法完全相反,他真正的核心在于站在用戶的立場(chǎng)上去考慮軟件開發(fā), 所以如果項(xiàng)目團(tuán)隊(duì)做不到這種立場(chǎng)的轉(zhuǎn)換,則必然失敗,而反過來,如果用戶還是抱著那種收鑰匙的態(tài)度做項(xiàng)目,不愿意或者沒有能力在項(xiàng)目中全程參與,那么也基本意味著失敗了, 用戶缺乏合作條件時(shí)固然可以使用有經(jīng)驗(yàn)的分析員或項(xiàng)目經(jīng)理代表用戶,但是可以預(yù)計(jì)大部分情況下,大部分項(xiàng)目會(huì)缺乏這樣富有經(jīng)驗(yàn)?zāi)苡行ёシ€(wěn)用戶需求的人。而更大的問題是,現(xiàn)在業(yè)界的一貫作風(fēng),包括18mo,hp這樣的公司,對(duì)用戶也是堅(jiān)持一種坑蒙拐騙,軟硬兼施的態(tài)度,效果可想而知,所以xp一般在企業(yè)內(nèi)部會(huì)更容易實(shí)施。

這條實(shí)際是xp能否正確實(shí)施的關(guān)鍵,如果做不到這點(diǎn),就不要玩xp。相當(dāng)多的xp團(tuán)隊(duì),實(shí)際上也沒有做到這點(diǎn), 很多人錯(cuò)誤的把xp理解為程序員的狂歡,因此而極力鼓吹xp,這也是xp獲得壞名聲的一個(gè)原因。

3.  boss,qc,團(tuán)隊(duì)成員未能結(jié)成共識(shí), 團(tuán)隊(duì)內(nèi)部結(jié)構(gòu)不合理也缺乏對(duì)敏捷開發(fā)的認(rèn)可。

對(duì)于boss和qc部門來說, xp項(xiàng)目的初期往往呈現(xiàn)出一種極度的混亂,要把這種混亂過渡到正常的,有序的混亂,需要相當(dāng)?shù)臅r(shí)間,xp項(xiàng)目在初期因此很容易被cancel了。如果不能和boss,qc部門做有效的溝通,那么需要花很多的精力在這些無謂的工作上。比如說,xp團(tuán)隊(duì)是把qc做為開發(fā)人員的責(zé)任,要求qc全程融入開發(fā)過程,而一些大公司的qc部門,更習(xí)慣和開發(fā)團(tuán)隊(duì)分開工作,只承擔(dān)過程檢查和質(zhì)量驗(yàn)收的工作,這是有問題的。

一個(gè)理想的團(tuán)隊(duì)結(jié)構(gòu)是接近金字塔的結(jié)構(gòu),有層次,而層次和各層之間能緊密耦合(具有良好的溝通協(xié)商機(jī)制), 但是很多中小公司往往不具備這樣的結(jié)構(gòu)。很多有經(jīng)驗(yàn)的程序員,尤其在國(guó)內(nèi),往往缺乏有效溝通和交流的能力,他們更習(xí)慣于單兵作戰(zhàn),不擅長(zhǎng)協(xié)作和團(tuán)隊(duì)學(xué)習(xí),這些程序員在實(shí)施xp的過程中往往會(huì)成為巨大的阻力,直接導(dǎo)致xp項(xiàng)目實(shí)施的失敗。我個(gè)人的經(jīng)驗(yàn),花費(fèi)巨大的精力試圖去轉(zhuǎn)換這部分程序員,基本是不可能完成的任務(wù)。

國(guó)內(nèi)程序員的文化里面, 以技?jí)喝耸且粋€(gè)核心, 如果一個(gè)團(tuán)隊(duì)缺乏塔尖的技術(shù)leader,是很難組織起有效的溝通文化的,這和很多外包團(tuán)隊(duì)不同,他們的leader并不需要有太強(qiáng)的技術(shù)能力。而這個(gè)leader如果只是一個(gè)單純的技術(shù)上的geek,不是一個(gè)不喜歡團(tuán)隊(duì)學(xué)習(xí)的人,或者還沒學(xué)會(huì)如何把手下當(dāng)牛使, 實(shí)施xp也有相當(dāng)大的風(fēng)險(xiǎn)。

一個(gè)xp團(tuán)隊(duì)的建設(shè),在早期leader需要花費(fèi)大量的精力和大家達(dá)成共識(shí),讓大家認(rèn)可和接受xp的工作模式,盡可能在項(xiàng)目的早期讓成員體會(huì)到其中的好處,但是在國(guó)內(nèi)缺乏有效的顧問團(tuán)隊(duì)的情況下, coach這個(gè)角色很難找到合適的,也只能完全靠摸索。所以項(xiàng)目的早期往往能決定成敗。xp強(qiáng)調(diào)的是發(fā)揮人的主動(dòng)性,如果無法讓團(tuán)隊(duì)成員真正理解,支持這一點(diǎn),同意自發(fā)的改變他們傳統(tǒng)的工作模式,全靠boss或者leader的強(qiáng)制推行的話(這實(shí)際就是xp極力反對(duì)的),是注定失敗的。

如果無法改變團(tuán)隊(duì)成員結(jié)構(gòu),無法和團(tuán)隊(duì)成員達(dá)成共識(shí),則應(yīng)該尊重團(tuán)隊(duì)人員的實(shí)際能力和意愿,采取更合適的開發(fā)方法。

國(guó)內(nèi)的xper在推行xp的過程中,都很容易忽略一點(diǎn),國(guó)內(nèi)程序員文化和西方程序員文化是截然不同的 ,鬼子越是精英的人,越喜歡合作,國(guó)內(nèi)剛好相反。所以在國(guó)內(nèi)最容易組建的xp團(tuán)隊(duì),往往是由1,2個(gè)骨干和大量菜鳥構(gòu)成的,白紙最好畫。一些彼此關(guān)系融洽,長(zhǎng)期合作的老鳥,也很適合組成xp團(tuán)隊(duì)。

上面說的是什么樣的情況不適合做xp,實(shí)際上,我用了2,3年的時(shí)間才逐漸明白這些東西。至于如何做好xp,那是一個(gè)很長(zhǎng)很長(zhǎng)的話題,而正如我前后所提,大部分項(xiàng)目并不適合做xp, 圖壁哦鬧得圖壁,你需要先考慮清楚這個(gè)問題。

順便解釋一下xp的某些誤區(qū)

1. xp很適合做engineering的項(xiàng)目,很多xp項(xiàng)目都是這個(gè)類型的, 實(shí)際上,我最早接觸的xp概念來自hp, 國(guó)內(nèi)最早開始推廣xp的人也來自hp的電子商務(wù)團(tuán)隊(duì)。不過因?yàn)榍懊?的原因, xp最適合做大企業(yè)內(nèi)部的項(xiàng)目,或者產(chǎn)品研發(fā)性質(zhì)的項(xiàng)目。

2. xp和scrum沒有等同關(guān)系, xp和scrum,iconix,crystal,fdd都是Agile運(yùn)動(dòng)的主力, 如果說他們之間有關(guān)系的話,那個(gè)關(guān)系就是agile的核心,軟件開發(fā)以人為本。
scrum和icons相對(duì)xp沒有那么激進(jìn),更適合那種傳統(tǒng)上已經(jīng)建立了過程管理機(jī)制的團(tuán)隊(duì)。fdd是個(gè)很好玩的東西, 創(chuàng)建者更是一個(gè)傳奇,有興趣的同學(xué)可以找找看看。 弄清楚xp和agile的區(qū)別,你會(huì)明白,你其實(shí)還有很多選擇。

【G:xp算是agile中最激進(jìn)的一種了,有個(gè)老板曾經(jīng)說過,辛辛苦苦幾十年一下回到解放前】

3. 大部分號(hào)稱是xp的項(xiàng)目實(shí)際都不是xp,原因請(qǐng)對(duì)照上面3條和下面的6。基于國(guó)內(nèi)程序員文化和國(guó)外的巨大差異,還有業(yè)界的生存空間的慘烈狀況等等,單純的xp很難玩。在我看過的幾個(gè)公司,所謂的xp都變成老板玩程序員的游戲或者變成程序員玩老板的游戲。xp在國(guó)內(nèi)已經(jīng)變成一個(gè)符號(hào),一種時(shí)尚。 有個(gè)笑話,我以前一個(gè)同事管理的項(xiàng)目,某人要辭職回家去研究xp,說要花半年時(shí)間在家里獨(dú)自刻苦鉆研,徹底掌握xp精髓再出來工作,弄得我哭笑不得。


4. 國(guó)內(nèi)大公司做CMMI,CMM是主流, 表面上 CMM和xp是完全對(duì)立的東西,最容易引起直接沖突的是文檔問題,但是實(shí)際沒有根本意義上的沖突,可惜能真正理解到這一層的人不多,所以對(duì)于實(shí)施CMM、CMMI或者強(qiáng)調(diào)過程化的公司,XP注定是很容易失敗的。玩rup平穩(wěn)的多,雖然罕見有人能玩好,但是至少能多解決一些人的就業(yè)問題

5. 傳統(tǒng)的軟件工程和學(xué)院派,最主要是服務(wù)商強(qiáng)調(diào)的是通過制度和工具來回避人力資源的問題,不管好汗孬種全部螺絲釘花,大家都流水線。而xp強(qiáng)調(diào)的是極度發(fā)揮個(gè)人的能力來提高軟件開發(fā)效率間接解決人力資源的問題, 這2者代表了解決方式的兩個(gè)極端,所以xper和傳統(tǒng)教授學(xué)者整天打架。 有趣的是,我認(rèn)識(shí)的一個(gè)很有見地的一個(gè)美國(guó)名牌商學(xué)院的教授,也極力支持前者,并再三鼓吹工具終究能代替一般程序員,呵呵,我覺得有趣的原因是他在技術(shù)問題上發(fā)表過一些相當(dāng)有水準(zhǔn)和這個(gè)觀點(diǎn)根本是對(duì)立的文章,看來還是屁股決定了腦袋的立場(chǎng)。
[G:其實(shí)人家是商學(xué)院的,當(dāng)然要支持了,這叫市場(chǎng)策劃]

6. xp的那些最佳實(shí)踐都不是xp首創(chuàng)的, 這些實(shí)踐只是業(yè)界對(duì)軟件開發(fā)過程中的一些有效經(jīng)驗(yàn)的總結(jié),所以同樣可以使用在其他類型的開發(fā)過程中,并取得很好的效果。 xp中最難接受的2個(gè)實(shí)踐TDD和PP也是如此,用在別的過程里一樣困難,但是用好了一樣舒服。而xp的獨(dú)特在于強(qiáng)調(diào)這些實(shí)踐的綜合利用,利用彼此之間是互補(bǔ)和互相推動(dòng)關(guān)系來達(dá)到最佳效果,所以一直有不實(shí)踐所有最佳實(shí)踐就不是xp的說法。 比如TDD和PP, 某些人對(duì)TDD方式產(chǎn)生的代碼質(zhì)量有質(zhì)疑,而xp中實(shí)際是通過PP來彌補(bǔ)單純TDD的代碼覆蓋率問題的。 所以我個(gè)人覺得,選擇什么樣的開發(fā)方法, 都應(yīng)該看一下xp和rup的相關(guān)東西,能開闊你的思路,當(dāng)然里面的大量問題,都只能通過實(shí)踐才能吃透。

作為一個(gè)項(xiàng)目管理者應(yīng)該明白一點(diǎn), 沒有任何方法和過程是萬能的,有效的項(xiàng)目管理應(yīng)該關(guān)注的是如何用好手中的牌,盡可能的玩好這一局, xp只是其中的一種可能性選擇而已。

xp的精髓在一些傳統(tǒng)的著作里面都可以找到,推薦看一下人月神話, Death to MARCH , xp中文系列書籍里面有一本玩者致勝(play to winning?),對(duì)我?guī)椭艽螅梢钥纯矗?另外國(guó)內(nèi)有個(gè)人寫了一本關(guān)于xp實(shí)踐的書,里面的經(jīng)驗(yàn)教訓(xùn)總結(jié)的非常好,基本都是當(dāng)年我曾經(jīng)碰到過的,也絞盡腦汁要解決的,很值得讀,好像叫極限編程的實(shí)踐與鏡像之類的吧。不好意思,離開軟件開發(fā)這個(gè)行業(yè)好幾年了, 記不準(zhǔn)確了。 另外如果下定決心要這么玩的話,現(xiàn)在已經(jīng)有條件可以請(qǐng)顧問了,建議請(qǐng)TW中國(guó)的人來顧問一下,這可以省掉很多彎路,否則,可能光為怎么做是xp都pk半年。