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