在大型 ERP 項(xiàng)目開發(fā)時(shí),有多個(gè)子團(tuán)隊(duì),每個(gè)子團(tuán)隊(duì)有多位工程師。昨日和某個(gè)子團(tuán)隊(duì)的項(xiàng)目經(jīng)理聊天時(shí),我強(qiáng)調(diào)專人負(fù)責(zé)各層開發(fā)的重要,也就是 DB、Business、UI 各有不同工程師負(fù)責(zé),橫向分割工作,而不是一個(gè)工程師負(fù)責(zé)一個(gè)功能,DB、Business 和 UI 通通一個(gè)人包了,變成直向分割,其要點(diǎn)如下:
• 每個(gè)工程師熟悉的技術(shù)不同,UI 需要 Ajax、Web、ASP.NET,中間層熟 Web Service、Domain Know How、DB 層熟 T-SQL 與數(shù)據(jù)庫對(duì)象撰寫。讓每個(gè)人專精自己的技術(shù),但不必學(xué)其他用不到的技術(shù)。
• 一層由一個(gè)人或一群人負(fù)責(zé),可避免重復(fù)開發(fā)。因?yàn)槿粑覍?UI,call 我寫的 Business service,再 call 自己寫的預(yù)存程序,其間一定會(huì)藏有許多自己開發(fā)上便宜行事的作法,但不利于別人呼叫。因此兩個(gè)人有功能近似的需求時(shí),會(huì)自己寫自己用的 Service 或 Stored Procedure,而不去嘗試重復(fù)使用別人已經(jīng)開發(fā)的。因?yàn)檎覄e人開發(fā)過的近似功能很麻煩,且若不合用,對(duì)方也不見得會(huì)幫我改。到最后,DB 內(nèi)一大堆近似的預(yù)存程序、檢視、函數(shù),中間層服務(wù)有一大堆近似的類別、方法。若商業(yè)邏輯層或數(shù)據(jù)庫層都是專人寫,則該人可以防止重復(fù)開發(fā)。
• 各團(tuán)隊(duì)模塊間,其商業(yè)邏輯或開發(fā)技術(shù)的交流較為單純,比較能有跨團(tuán)隊(duì)的橫向溝通,而不會(huì)彼此功能抵觸卻不知道。
• 每一層呼叫另一層時(shí),就在建立標(biāo)準(zhǔn)與除錯(cuò),因?yàn)槟臣缀艚心骋覍懙姆?wù)時(shí),就會(huì)要求標(biāo)準(zhǔn)化,并替商業(yè)邏輯除錯(cuò),而非某乙任意寫作。以后在模塊間互相呼叫時(shí)才有可能。
若個(gè)人開發(fā)各自功能,好像找一群人來建房子,甲負(fù)責(zé)廚房、乙負(fù)責(zé)浴室、丙負(fù)責(zé)客廳、丁負(fù)責(zé)臥室...結(jié)果每個(gè)人都砌了墻、開了門...但彼此的門對(duì)不太上,從客廳要進(jìn)臥室時(shí),一開門就撞墻了,因?yàn)閮蓚€(gè)門沒有標(biāo)準(zhǔn)。我們應(yīng)該要甲負(fù)責(zé)整地、乙負(fù)責(zé)砌磚、丙負(fù)責(zé)水電、丁負(fù)責(zé)裝潢...等等。
該項(xiàng)目經(jīng)理反問,這樣不好管,團(tuán)隊(duì)的默契也難以養(yǎng)成。以往哪項(xiàng)功能沒寫出來,盯那個(gè)人即可,現(xiàn)在某甲說某乙沒寫,某乙說某丙沒寫。我建議是應(yīng)該形成團(tuán)隊(duì)壓力,讓大家知道團(tuán)隊(duì)進(jìn)度是卡在哪層的服務(wù),在等哪個(gè)人。
而團(tuán)隊(duì)開發(fā)默契本來就是需要時(shí)間培養(yǎng),分層負(fù)責(zé)開發(fā)初期的確較為混亂,不容易立刻讓高手一下子就做好單支從頭到尾可測試的功能,但長期而言,分工才能培養(yǎng)專精人才,有了合作默契與慣例后就不會(huì)混亂。
項(xiàng)目經(jīng)理也強(qiáng)調(diào)組織的配置是工程師 Pool,所以隨時(shí)調(diào)配任一工程師可獨(dú)立完成整個(gè)功能。我的建議是變成多個(gè)專業(yè)人才 Pool,就這個(gè)例子而言,是劃分成 UI、AP Service、DB Pro 三個(gè) Pool,若哪個(gè)子團(tuán)隊(duì)缺哪層的工程師,就由專業(yè) Pool 調(diào)配。
最后,他雖然沒有接受我的建議,但有溝通總是好的。開發(fā)模式與文化的轉(zhuǎn)變比導(dǎo)入新產(chǎn)品和技術(shù)還難。
項(xiàng)目經(jīng)理勝任力免費(fèi)測評(píng)PMQ上線啦!快來測測你排多少名吧~
http://www.vanceur.cn/pmqhd/index.html