軟件開(kāi)發(fā)項(xiàng)目經(jīng)理的起源
在一個(gè)軟件團(tuán)隊(duì)里, 不同的人有不同的投入, 我們?cè)?豬,雞和鸚鵡的故事里已經(jīng)說(shuō)明了. 不同的人還要在團(tuán)隊(duì)中擔(dān)負(fù)不同的任務(wù), 我們也要講一下.
開(kāi)發(fā)人員 (大部分內(nèi)容在: 現(xiàn)代軟件工程講義 2 工程師的能力評(píng)估和發(fā)展)
項(xiàng)目經(jīng)理 ( 這篇博客 )
測(cè)試人員 ( link)
1. 微軟PM 的來(lái)歷
大部分公司的項(xiàng)目經(jīng)理叫 Project Manager, 微軟的經(jīng)理叫 Program Manager, 這有什么本質(zhì)的區(qū)別么?
微軟曾經(jīng)也是一個(gè)創(chuàng)業(yè)公司, 兩個(gè)創(chuàng)始人都是 dev, 招聘的新成員也大多是像他們一樣的開(kāi)發(fā)人員, 這其中就有一個(gè)叫 Charles Simonyi的超級(jí)程序員 (當(dāng)然還有像 Steve Ballmer 那樣的超級(jí)銷(xiāo)售人員, 這里按下不表)。
1974 年, Charles Simonyi 在Xerox PARC 開(kāi)發(fā)了 WYSIWYG (所見(jiàn)即所得) 的字處理軟件 Bravo, 成為 PARC 的 Alto 個(gè)人電腦的重要應(yīng)用軟件。
(作為時(shí)間的參照:
同一年, Steve Jobs 從印度回來(lái), 加入Atari 公司打工, 因?yàn)槠渌麊T工不能忍受他的傲慢態(tài)度和衛(wèi)生習(xí)慣, 他只好上夜班。
同一年, Bill Gate 在哈佛大學(xué)讀 2 年級(jí), 他第二年看到了個(gè)人電腦的曙光 – MITS Altair 8800, 于是退學(xué)創(chuàng)立了 Microsoft.
)
1981 年, Charles 加入了微軟公司, 領(lǐng)導(dǎo) Word 和其他辦公軟件的開(kāi)發(fā)。 很多開(kāi)發(fā)人員聚集在一起, 怎么工作呢? 如果大伙做的是搬磚的體力勞動(dòng) (我很喜歡用搬磚的例子), 那么在一定限度內(nèi), 人員的增長(zhǎng)和項(xiàng)目復(fù)雜度的增長(zhǎng)是線性的關(guān)系; 程序開(kāi)發(fā)就有些不同, Charles 發(fā)現(xiàn)項(xiàng)目管理的復(fù)雜度似乎是和人員數(shù)量的平方成正比。 一個(gè)團(tuán)隊(duì)里有 4 個(gè)成員, 就有 6 種雙向依賴和交流的途徑, 然后增加一位新成員, 就要增加 4條新的雙向依賴交流的途徑。 對(duì)于 N 個(gè)成員的團(tuán)隊(duì)來(lái)說(shuō)交流的途徑總數(shù)是 n * (n-1) /2, 這種 N 平方的增長(zhǎng)是不可持續(xù)的。
怎么辦? Charles 想到了一個(gè)辦法 - 他提議把程序員分成 Master Programmer 和 Slave Programmer, MP 和其他成員交流, 了解需求, MP 只寫(xiě)抽象的偽代碼, 或者對(duì)功能的描述; SP 根據(jù)MP 的文檔, 實(shí)現(xiàn)具體的功能。 SP 只用和 MP 交流。 這樣不就大大減少了交流的成本么?
這個(gè)想法在理論上是好的, 但是在實(shí)際上, 沒(méi)有人想做 Slave Programmer, 剛加入團(tuán)隊(duì)的成員問(wèn) - 為什么我們不能當(dāng) Master Programmer? 這次改革***不了了之。
但是, 隨著軟件復(fù)雜度的提高, 用戶需求的多樣化, 市場(chǎng)競(jìng)爭(zhēng)的日益激烈, 光有程序員和銷(xiāo)售人員是不夠的。 我們需要專門(mén)人才來(lái)做下面的事:
怎么讓軟件變得可用 (usable), 有用 (useful)
銷(xiāo)售人員把顧客的需求直接告訴開(kāi)發(fā)人員, 但是開(kāi)發(fā)人員往往聽(tīng)不懂。 我們需要專人來(lái)把市場(chǎng)/銷(xiāo)售人員那一套 MBA 的套路翻譯成程序員能懂的功能說(shuō)明 (spec)
一個(gè)產(chǎn)品團(tuán)隊(duì)要做很多事, 這些事往往是程序員不愿意花時(shí)間的:
和客戶交談, 組織用戶調(diào)查, 發(fā)現(xiàn)用戶需求
了解和比較競(jìng)爭(zhēng)對(duì)手的產(chǎn)品
怎么改進(jìn)團(tuán)隊(duì)的流程
誰(shuí)都不愿意做, 誰(shuí)都沒(méi)有能力做好, 大家寧愿盯著屏幕寫(xiě)代碼。 怎么辦呢? 這時(shí)候有另一個(gè)聰明人出現(xiàn)了, 一個(gè)叫 Jabe Blumenthal 的程序員提出了 Program Manager (PM) 的頭銜, 并成為了微軟***個(gè) PM (1984年). PM 做什么呢?
2. PM做開(kāi)發(fā)和測(cè)試之外的所有事情
Program Manager 和一些公司的 Project Manager 的區(qū)別:
Project Manager | Program Manager |
是團(tuán)隊(duì)的行政領(lǐng)導(dǎo), 帶領(lǐng)大家在項(xiàng)目中工作。 |
和大家平等工作, 推動(dòng)團(tuán)隊(duì)完成軟件的功能。 |
通常是團(tuán)隊(duì)和外界打交道的唯一代表 | 一個(gè)團(tuán)隊(duì)可以有很多PM |
對(duì)項(xiàng)目的功能有***的決定權(quán) | 和其他團(tuán)隊(duì)成員一起形成決議 |
管事也管人 | 管事不管人 |
不一定做具體工作 | 一定做具體工作 |
在別的團(tuán)隊(duì)中, 也有產(chǎn)品經(jīng)理的職位, 例如這個(gè)博客 (和書(shū)) http://iamsujie.com.
問(wèn): 目前微軟公司有哪幾類的PM?
答: 有做功能設(shè)計(jì)的PM; 有些需要很深的 Computer Science 的專業(yè)知識(shí) (如 Visual Studio, SQL server, Windows Server, Bing Search 等團(tuán)隊(duì)的PM ), 有些需要對(duì)商業(yè)和客戶很強(qiáng)的了解能力 (如 Office 應(yīng)用軟件的PM ), 有些需要廣泛的經(jīng)驗(yàn)和知識(shí)面, 商業(yè)拓展能力 (如 MSN 部門(mén)的 PM); 有些是驅(qū)動(dòng)流程的PM, 例如推動(dòng)幾百人的團(tuán)隊(duì)完成一個(gè)版本的開(kāi)發(fā), 又如保證 WP7 在幾十個(gè)不同硬件上能發(fā)布; 也有專門(mén)深入某一領(lǐng)域的 PM (如 localization/globalization); 還有和研究人員合作, 做技術(shù)轉(zhuǎn)化的 PM。
問(wèn): 既然PM 這么厲害, 為什么不讓他們領(lǐng)導(dǎo)開(kāi)發(fā)人員和測(cè)試人員, 這樣 PM 工作起來(lái)不就是更有利了么?
答: 首先, 我們認(rèn)為好的產(chǎn)品設(shè)計(jì)是在平等討論 (甚至爭(zhēng)論) 的基礎(chǔ)上產(chǎn)生和完善的, 如果討論的一方同時(shí)又是另一方的老板, 則無(wú)法進(jìn)行平等和無(wú)拘束的討論。
其次, PM 的產(chǎn)品是 spec (規(guī)格說(shuō)明書(shū)), PM 要憑自己的能力, 把用戶的需求展現(xiàn)成 dev/test 能夠了解, 能夠執(zhí)行的語(yǔ)言, 從而贏得同伴的信任和尊敬。 如果PM 同時(shí)又是其他人的老板, 則不必寫(xiě)太好的 spec, 用命令即可說(shuō)服別人。 再次, PM 不一定是很好的行政經(jīng)理, 硬把管理不同專業(yè)的 dev/test 的任務(wù)加到PM 頭上, 反而會(huì)壞事。 關(guān)于這個(gè)問(wèn)題, 這里也有一篇討論.
問(wèn): PM ***的, 最獨(dú)特的貢獻(xiàn)是什么?
答: 保持團(tuán)隊(duì)的平衡。
一個(gè)軟件產(chǎn)品幾乎做不到同時(shí)又多又快又省。 在別的領(lǐng)域也類似, 中國(guó)在大躍進(jìn)期間提出了 多快好省的要求。 ***只得到一個(gè) “多” - 人多。 (參見(jiàn) 軟件工程的估計(jì))
大部分優(yōu)秀的團(tuán)隊(duì)可以做到兩個(gè):
多, 快, 但是不省
多, 省, 但是不快
快, 省, 但是不多
PM 要帶領(lǐng)團(tuán)隊(duì)選擇哪兩個(gè)是最重要的, 哪一個(gè)是可以犧牲的。
還有許多不那么優(yōu)秀的團(tuán)隊(duì)也許勉強(qiáng)可以做到一個(gè):
多, 但是不快, 不省
省, 但是不多, 不快
快, 但是不省, 不多
當(dāng)然還有一些團(tuán)隊(duì)一個(gè)目標(biāo)也達(dá)不到, 中途作鳥(niǎo)獸散了。
問(wèn): 我們團(tuán)隊(duì)有幾個(gè)程序牛人, 參加過(guò) ACM 比賽什么的, 他們寫(xiě)的程序都不用測(cè)試, 為什么還要 PM? 如果PM 也來(lái)開(kāi)發(fā), 是不是項(xiàng)目進(jìn)展更快?
答: 程序 和 軟件有區(qū)別, 請(qǐng)看: http://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html
其次,在下面的圖中, 團(tuán)隊(duì)有很多劃船的牛人, 也有一個(gè)拿著話筒的舵手. 如果這個(gè)舵手也開(kāi)始劃船, 后果會(huì)怎么樣?
可能小船的速率會(huì)快一些, 但是小船的方向, 穩(wěn)定性會(huì)出問(wèn)題。 你愿意船很快, 但不穩(wěn), 而且***到了一個(gè)以前沒(méi)計(jì)劃的地方?
問(wèn): PM 文化的盛行有副作用么?
答: 任何方法或文化都有優(yōu)點(diǎn)和缺點(diǎn), 由于大部分決定都是經(jīng)過(guò)平等的討論協(xié)商折中的到的, 一個(gè)后果是 “design by committee”, 一些產(chǎn)品不能很快跟上市場(chǎng)變化, 在需要個(gè)人特色的方面, 如設(shè)計(jì)/UI, “committee”設(shè)計(jì)出來(lái)的東西大多中規(guī)中矩, 但是很多方面了無(wú)新意。
3. PM 的能力要求和任務(wù)
成為一個(gè)團(tuán)隊(duì)的PM, 需要哪些能力呢?
學(xué)習(xí)能力:在一個(gè)新領(lǐng)域中能很快上手
觀察理解能力:能理解用戶, 站在用戶的角度上考慮問(wèn)題, 觀察發(fā)現(xiàn)用戶不善于表達(dá)的需求, 觀察團(tuán)隊(duì)成員的言外之意, 老板/客戶/利益相關(guān)人的弦外之音.
分析管理能力:每天項(xiàng)目中發(fā)生的事情千頭萬(wàn)緒, 能夠分析出重點(diǎn), 找到優(yōu)先級(jí), 做決定…
一個(gè)項(xiàng)目和個(gè)人一樣, 每天都會(huì)碰到各種問(wèn)題:
重要而緊急的 //網(wǎng)站崩了!
//程序員二柱突然說(shuō)他要離職!
重要而不緊急的 //按照流量和內(nèi)容的發(fā)展趨勢(shì), 三個(gè)月后, 目前的架構(gòu)似乎撐不住, 但是現(xiàn)在還湊合…
//程序員們都不寫(xiě)文檔, 他們?nèi)齻€(gè)月前說(shuō)等忙過(guò)之后會(huì)寫(xiě)的, 但是…
不重要而緊急的 //老板的老板問(wèn)到了項(xiàng)目的進(jìn)度! 要寫(xiě)一個(gè)PPT,請(qǐng)若干人征求意見(jiàn)
不重要且不緊急的 //…
PM 如何處理這些事情呢?
交流能力, 處理沖突的能力:其他角色碰到?jīng)_突一般會(huì)來(lái)找 PM. PM 也要鼓勵(lì)團(tuán)隊(duì)成員保持斗志。
一定的專業(yè)能力: 寫(xiě)代碼, 玩轉(zhuǎn)Excel, PPT, Visio, 甘特圖, 會(huì)PS, 有文字功力, 能寫(xiě)有人讀的博客, 總得有幾招絕活吧!
在一個(gè)項(xiàng)目中, PM 的具體任務(wù)是什么呢?
帶領(lǐng)團(tuán)隊(duì)形成團(tuán)隊(duì)的目標(biāo)/遠(yuǎn)景, 把抽象的目標(biāo)轉(zhuǎn)化為可執(zhí)行的, 具體的, 優(yōu)美的設(shè)計(jì)。
管理軟件的具體功能的生命周期 (需求/設(shè)想/設(shè)計(jì)/實(shí)現(xiàn)/測(cè)試/修改/發(fā)布/升級(jí)/遷移/淘汰)。
創(chuàng)建并維護(hù)軟件的功能說(shuō)明書(shū) (specification), 讓它成為開(kāi)發(fā)/測(cè)試的及時(shí)準(zhǔn)確的指導(dǎo), 而不是障礙。
代表客戶和用戶的利益, 主動(dòng)收集用戶反饋, 預(yù)期用戶新的需求。 協(xié)調(diào)并決定各種需求的優(yōu)先級(jí)。
分析并帶領(lǐng)其他成員形成對(duì)缺陷/變更需求的一致意見(jiàn), 并確保實(shí)施。
帶領(lǐng)其他成員確保項(xiàng)目保持 功能/時(shí)間/資源 的合理平衡, 跟蹤項(xiàng)目進(jìn)展, 確保團(tuán)隊(duì)發(fā)布讓客戶滿意的軟件。
收集團(tuán)隊(duì)項(xiàng)目管理和軟件工程的各種數(shù)據(jù), 客觀地分析項(xiàng)目實(shí)施過(guò)程中的優(yōu)缺點(diǎn), 推動(dòng)項(xiàng)目成員持續(xù)改進(jìn), 從而提振士氣。
成功的PM 如果得到團(tuán)隊(duì)成員的支持, 會(huì)是什么樣?
成為項(xiàng)目流程的主人 - 驅(qū)動(dòng)流程, 會(huì)議, scrum, 進(jìn)度
代表團(tuán)隊(duì), 向上級(jí)/伙伴團(tuán)隊(duì)/客戶/市場(chǎng)報(bào)告項(xiàng)目進(jìn)展
不用自己寫(xiě)一行代碼,也同樣可以積極地影響項(xiàng)目和產(chǎn)品
PM 如果得不到到團(tuán)隊(duì)成員的支持, 會(huì)是什么樣?
在各種會(huì)議或流程中浪費(fèi)大家的時(shí)間, 發(fā)一些大家不讀的 “Status Mail”.
不能凝聚團(tuán)隊(duì), 形成共識(shí)
對(duì)團(tuán)隊(duì)的狀態(tài)不了解, 也不能有效和準(zhǔn)確地向有關(guān)方面報(bào)告團(tuán)隊(duì)的情況, 獲得支持
對(duì)項(xiàng)目和產(chǎn)品造成負(fù)面的影響。
4. PM 們的故事
講了這么多條條框框, 我們還是講幾個(gè)故事吧:
A) 是不是所有的好功能都是由PM 主導(dǎo), 一步一步根據(jù)用戶需求,按照用戶場(chǎng)景設(shè)計(jì),然后可用性測(cè)試等等步驟之后得來(lái)的?
功能本天成,妙手偶得之——一個(gè)來(lái)自微軟的故事。[注3]
約摸在1985年,微軟的一個(gè)叫Steve Hazelrig的工程師正在寫(xiě)Mac Excel 版本的打印功能,那時(shí)候激光打印機(jī)很貴,而且離辦公室也不近。他懶得經(jīng)常跑到打印機(jī)那兒取打印紙,檢查打印效果,就寫(xiě)了一個(gè)小程序,把要輸出到打印機(jī)的圖像顯示在屏幕上,還有一個(gè)放大鏡功能可以把局部放大以檢查每個(gè)像素的位置及效果。這時(shí)一個(gè)PM路過(guò)看到了這個(gè)小工具,說(shuō),這么酷的東西,為啥不做成一個(gè)功能呢?
所以后來(lái)微軟的編輯軟件都有“打印預(yù)覽”這一功能。然而,用戶們并沒(méi)有正式地要求這一功能。
B) PM 怎么說(shuō)服聰明的同事
這個(gè)故事在 [注4, 注5] 中都提到了. 在Macintosh 研發(fā)的過(guò)程中, 由于計(jì)算能力的限制, 計(jì)算機(jī)的圖形顯示非常緩慢. 一位聰明的程序員展示了他的新算法, 能很快地畫(huà)圓形和橢圓. 當(dāng)他得意地展示給 Steve Jobs 看的時(shí)候, (作為一個(gè)不懂編程技術(shù)的 PM,Steve 應(yīng)該表示仰慕才對(duì)…) Steve 看了之后, 反問(wèn) - 你能繼續(xù)改進(jìn), 讓圓角的矩形框顯示速度加快么? 程序員說(shuō): 這個(gè)太難了, 也沒(méi)有必要. 橢圓不是挺好的么? Stevel 為了說(shuō)服同事, 建議兩人到外面散步, 然后指出現(xiàn)實(shí)世界中的各種告示牌都是用 圓角的矩形框 來(lái)實(shí)現(xiàn),走了一圈, 同事就被說(shuō)服了。 過(guò)了幾天, 圓角的矩形框也可以很快速地在屏幕上顯示了。
C) PM 的分析能力和韌性
能把市場(chǎng), 我方的優(yōu)勢(shì)和劣勢(shì), 創(chuàng)新的機(jī)會(huì)講得頭頭是道, 也是一種能力。 在軟件工程課上我們講過(guò) NABC 方法。 喬布斯在 NeXT 公司時(shí)那樣也做過(guò)很有說(shuō)服力的分析:
注意, 這么厲害的 PM, 分析的這么透徹, 但是 NeXT 的產(chǎn)品還是失敗了.
但是喬布斯沒(méi)有氣餒, 又投入了另一個(gè)公司的運(yùn)作 – Pixar.
你有這些能力么?
原文鏈接:http://www.cnblogs.com/xinz/archive/2011/11/07/2239150.html
【編輯推薦】