軟件組織中什么是最重要的呢?團(tuán)隊(duì)和開(kāi)發(fā)管理。今天我們的主要話題就是圍繞著團(tuán)隊(duì)和開(kāi)發(fā)管理展開(kāi)的。
在很多場(chǎng)合,我們都聽(tīng)到人們說(shuō)“人才是最重要的資產(chǎn)”,我想,這不是一句空話。有了人才就有一切,這是一個(gè)真理。對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō)更是如此。當(dāng)然,對(duì)人才的關(guān)注并不意味著要人才堆積甚至浪費(fèi),人才浪費(fèi)反而會(huì)影響整個(gè)團(tuán)隊(duì)。
人才只是一個(gè)個(gè)的點(diǎn),如果沒(méi)有形成一個(gè)有效的團(tuán)隊(duì),人才再多也毫無(wú)意義。軟件開(kāi)發(fā)是一個(gè)需要協(xié)同作戰(zhàn)的工作,團(tuán)隊(duì)是軟件開(kāi)發(fā)工作的基本組織,因此形成一個(gè)有效的團(tuán)隊(duì)是軟件組織成功的基礎(chǔ)。
很多時(shí)候,團(tuán)隊(duì)作戰(zhàn)聽(tīng)起來(lái)容易做起來(lái)難。有一次,我和一個(gè)大型軟件企業(yè)的CTO聊起了軟件組織的模式,他打了一個(gè)比方,說(shuō)軟件開(kāi)發(fā)就象做外科手術(shù),外科主任應(yīng)該是技術(shù)最強(qiáng)的人,熟知每一項(xiàng)技術(shù)細(xì)節(jié)的人,所以軟件組織的領(lǐng)導(dǎo)也應(yīng)該是技術(shù)最全面,每個(gè)細(xì)節(jié)都精通的人。軟件開(kāi)發(fā)真的象醫(yī)生看病做手術(shù)嗎?我們來(lái)看看這里面有什么不同。醫(yī)生通常面對(duì)的是一個(gè)病人,通常處理的是一個(gè)個(gè)案,當(dāng)然一個(gè)復(fù)雜的手術(shù)也需要麻醉、影像、護(hù)士、助手的配合才能完成。一個(gè)軟件項(xiàng)目呢?軟件項(xiàng)目也有大小的區(qū)別,小的項(xiàng)目一個(gè)人處理所有環(huán)節(jié),前端、業(yè)務(wù)邏輯、數(shù)據(jù)庫(kù);大的項(xiàng)目通常有一個(gè)團(tuán)隊(duì)共同完成,需求分析、結(jié)構(gòu)設(shè)計(jì)、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試,中間貫穿配置管理、流程管理等等,可由幾人、幾十人、幾百人的團(tuán)隊(duì)共同完成。當(dāng)領(lǐng)導(dǎo)幾十人、幾百人的團(tuán)隊(duì)的時(shí)候,項(xiàng)目的成功與否不光是領(lǐng)導(dǎo)者的技術(shù)能力所能夠決定的了,更重要的是領(lǐng)導(dǎo)者的管理能力和領(lǐng)導(dǎo)能力決定的了??梢?jiàn),不同軟件企業(yè)的CTO對(duì)軟件組織的模式認(rèn)識(shí)也是不同的。
既然我們認(rèn)識(shí)到了團(tuán)隊(duì)是一個(gè)軟件組織的基本作戰(zhàn)單位,那么我們應(yīng)該怎樣建立一個(gè)樣團(tuán)隊(duì)呢?我們建立的團(tuán)隊(duì)?wèi)?yīng)該包含哪些模塊呢?我們可以從一下幾個(gè)方面入手來(lái)對(duì)我們面對(duì)的問(wèn)題先進(jìn)行一個(gè)分析:
團(tuán)隊(duì)的技術(shù)要求是什么?
團(tuán)隊(duì)要具有哪些功能模塊?
什么樣的員工適合我們的團(tuán)隊(duì)?
下面我們來(lái)分析一下以上3個(gè)問(wèn)題。
團(tuán)隊(duì)的技術(shù)要求是什么?
通常,我們需要分析一下我們工作的技術(shù)要求。我們可以把軟件系統(tǒng)作一個(gè)簡(jiǎn)單的分類(lèi):
基礎(chǔ)系統(tǒng),如操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、服務(wù)器系統(tǒng)
專(zhuān)業(yè)系統(tǒng),如人工智能、大型索引系統(tǒng)
應(yīng)用系統(tǒng),如BOSS、BI系統(tǒng)
在這些系統(tǒng)中,也存在不同的分工。尤其是應(yīng)用系統(tǒng),分工更為繁多,比如:系統(tǒng)分析工程師、架構(gòu)工程師、核心層開(kāi)發(fā)工程師、業(yè)務(wù)層開(kāi)發(fā)工程師、表現(xiàn)層工程師、美工、項(xiàng)目管理人員、測(cè)試人員,等等。不同的系統(tǒng)具有不同的技術(shù)要求,比如實(shí)時(shí)系統(tǒng)和信息系統(tǒng)的要求就不一樣,常見(jiàn)的實(shí)時(shí)系統(tǒng)如電信系統(tǒng),要求任何時(shí)候都不能中斷,而信息系統(tǒng),比如簡(jiǎn)單的OA系統(tǒng),短暫的停頓造成的影響不是很大。因此在建立軟件組織的時(shí)候需要考慮所從事軟件項(xiàng)目的技術(shù)要求,我們首先要考慮我們開(kāi)發(fā)的是什么系統(tǒng),它的技術(shù)要求是什么,并在此基礎(chǔ)上考慮軟件組織的構(gòu)成人員的要求。這個(gè)道理其實(shí)很簡(jiǎn)單,通常沒(méi)有人為了OA系統(tǒng)的開(kāi)發(fā)去招聘研究算法的博士。同時(shí),對(duì)系統(tǒng)技術(shù)要求的過(guò)低估計(jì)通常會(huì)造成很低的客戶滿意度,也不利于組織的能力的提升。因此我們要仔細(xì)分析組織的技術(shù)要求,同時(shí)考慮組織未來(lái)發(fā)展的要求,盡量做到合理估計(jì)組織技術(shù)能力需求。
團(tuán)隊(duì)要具有哪些功能模塊?
很多人都看過(guò)軟件工程方面的書(shū),在實(shí)踐中我們基本也是按照規(guī)范去做的,現(xiàn)在,我們簡(jiǎn)單總結(jié)一下一個(gè)軟件組織應(yīng)該具有的能力:需求分析,架構(gòu)設(shè)計(jì)、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試、配置管理、流程管理、過(guò)程管理等等。但并不是任何規(guī)模的軟件組織都要完全建立獨(dú)立的組織來(lái)完成上述的功能,很多時(shí)候軟件團(tuán)隊(duì)也是可以人員復(fù)用的,比如設(shè)計(jì)和編