網(wǎng)站項(xiàng)目成功管理實(shí)踐
Posted on 2007-08-09 16:31 ricki 閱讀(353) 評(píng)論(0) 編輯 收藏 所屬分類: IT網(wǎng)文在開始做http://133.newsky.cn之前,我已經(jīng)明白網(wǎng)站的開發(fā)與產(chǎn)品開發(fā)沒有什么不同。不過在2004年離開微軟中國(guó)研發(fā)中心Office組的時(shí)候,我對(duì)網(wǎng)站開發(fā)仍一無所知,這主要是因?yàn)槲抑皼]有任何互聯(lián)網(wǎng)研發(fā)的背景。雖然對(duì)傳統(tǒng)軟件產(chǎn)品的研發(fā)管理比較有經(jīng)驗(yàn),但從未接觸過Internet相關(guān)的項(xiàng)目。
從零開始與網(wǎng)站開發(fā)親密接觸
去年我接手第一個(gè)網(wǎng)站項(xiàng)目http://www.okooo.com開發(fā)時(shí),并沒有做網(wǎng)站的經(jīng)驗(yàn),只能試著按照以前我參與做Microsoft Office時(shí)的方法來做:
首先是打造一個(gè)便于公司內(nèi)部溝通交流的內(nèi)部網(wǎng),其中包含“傳統(tǒng)軟件”研發(fā)需要的三個(gè)工具:文檔庫(kù)(存放公司各項(xiàng)目的文檔)、CVS(保存項(xiàng)目的各種源代碼)、BugFree(記錄項(xiàng)目的各種缺陷);
然后,抓住“需求、開發(fā)、測(cè)試”三個(gè)環(huán)節(jié):
l 要做好規(guī)劃、明確需求。為什么要做這個(gè)網(wǎng)站、要達(dá)到什么目標(biāo)?特別是需求,要詳細(xì)到每個(gè)頁面的每個(gè)區(qū)域放置什么內(nèi)容。網(wǎng)站需求應(yīng)該由對(duì)業(yè)務(wù)最熟悉的人來定義,他負(fù)責(zé)按照我要求的規(guī)范(詳細(xì)程度)來寫出每一部分需求文檔,并放入文檔庫(kù)中。每完成一個(gè)頁面定義,我就召集開發(fā)、測(cè)試人員來閱讀、討論,這樣全部需求寫完的時(shí)候,項(xiàng)目組成員對(duì)整個(gè)網(wǎng)站就有了一個(gè)清晰的認(rèn)識(shí)。
l 需求明確才進(jìn)入開發(fā)階段。首先是定義數(shù)據(jù)庫(kù)——有多少?gòu)埍怼⒚繌埍碇杏卸嗌賯€(gè)字段。我和開發(fā)組長(zhǎng)反復(fù)討論,搞清楚這些表定義能否涵蓋全部需求,這是最關(guān)鍵的一步,決定著下面編碼能否順利進(jìn)行。數(shù)據(jù)庫(kù)定義后,就是網(wǎng)站后臺(tái)管理的編碼實(shí)現(xiàn),也就是對(duì)一張張表進(jìn)行管理(增、刪、改)。當(dāng)后臺(tái)管理完成時(shí),項(xiàng)目的大部分就大功告成了。用戶看到的前臺(tái)頁面僅僅是內(nèi)容展示——把一張張表中的數(shù)據(jù)取出來按照最初的需求放置到頁面的各個(gè)位置。所有的代碼都用CVS管理起來。
l 網(wǎng)站測(cè)試和開發(fā)同步進(jìn)行。后臺(tái)管理每完成若干張表的管理,測(cè)試人員立即開始測(cè)試。這就像流水線,開發(fā)完一部分,立刻測(cè)試;同樣的,網(wǎng)站前臺(tái)展示開發(fā)時(shí)也一樣需要測(cè)試人員跟進(jìn)。發(fā)現(xiàn)的每一個(gè)Bug都用BugFree記錄下來跟蹤處理過程。
l 數(shù)據(jù)統(tǒng)計(jì)跟上。網(wǎng)站后臺(tái)各個(gè)表的任何改動(dòng)要準(zhǔn)確記錄,決不允許出現(xiàn)不知道誰修改了數(shù)據(jù)庫(kù)內(nèi)容的情況。其次,網(wǎng)友訪問網(wǎng)站的日志要做好統(tǒng)計(jì),每天結(jié)束的時(shí)候就能準(zhǔn)確的看到當(dāng)天的用戶訪問數(shù)據(jù)。這些數(shù)據(jù)對(duì)網(wǎng)站運(yùn)營(yíng)極其重要。
四個(gè)月后,我的第一個(gè)網(wǎng)站項(xiàng)目順利上線。所有參與該項(xiàng)目的同事感覺都很新鮮,因?yàn)橐郧八麄冊(cè)谧鼍W(wǎng)站時(shí),基本上是一個(gè)人“包干”一個(gè)頻道,簡(jiǎn)單構(gòu)思一下就開始寫程序、邊寫邊想、相互獨(dú)立。后來,我跟一位曾在某門戶網(wǎng)站工作過的高級(jí)工程師朋友介紹了上面的做法,他非常認(rèn)同和贊賞,得到他的認(rèn)可我也很興奮。
隨后接觸到的很多網(wǎng)站技術(shù)人員,讓我發(fā)覺作坊式做法同樣存在于互聯(lián)網(wǎng)公司,網(wǎng)站在重復(fù)多年前傳統(tǒng)軟件的老路:一個(gè)“大蝦”很厲害,搞定一個(gè)頻道或一個(gè)網(wǎng)站的方方面面,離開他誰都玩不轉(zhuǎn);代碼中處處留著他的靈感,人走了,網(wǎng)站維護(hù)就成了大難題:沒有文檔、沒有統(tǒng)一的編碼規(guī)范、沒有測(cè)試記錄。
其實(shí)無論傳統(tǒng)軟件、網(wǎng)站、還是游戲等等軟件產(chǎn)品/項(xiàng)目,都是程序員用一行行代碼敲出來的,只要像微軟軟件研發(fā)那樣抓住需求、開發(fā)、測(cè)試這三個(gè)環(huán)節(jié),其管理都極其類似。因此當(dāng)我進(jìn)入http://133.newsky.cn網(wǎng)站項(xiàng)目的時(shí)候,信心十足:我能把它管好!
打造一個(gè)網(wǎng)站開發(fā)的品牌項(xiàng)目
在我加入金環(huán)天朗的時(shí)候,這個(gè)網(wǎng)站就已經(jīng)存在了,而最開始的計(jì)劃也只是對(duì)原有的網(wǎng)站進(jìn)行局部改版。但是等我深入了解后,大吃一驚:
u 規(guī)劃/需求:原有網(wǎng)站沒有經(jīng)過認(rèn)真規(guī)劃就匆忙上馬,只有部分的簡(jiǎn)單示意圖,對(duì)于每個(gè)頁面具體區(qū)域的功能描述和邏輯過程還是依賴口頭溝通。沒有獨(dú)立的后臺(tái)管理,依賴于WAP業(yè)務(wù)的后臺(tái),內(nèi)容展示力不從心。
u 頁面設(shè)計(jì):美工因?yàn)檫€有其它工作所以有一定程度的拖延,沒有時(shí)間觀念,整個(gè)設(shè)計(jì)方案沒有經(jīng)過整體評(píng)估,導(dǎo)致后來許多細(xì)節(jié)沒有按照計(jì)劃實(shí)現(xiàn),頁面設(shè)計(jì)先后由兩人分頭獨(dú)立完成,導(dǎo)致部分風(fēng)格不一致。
u 開發(fā):技術(shù)實(shí)現(xiàn)一直處在救火的狀態(tài),沒有規(guī)劃,沒有步驟,沒有主次之分,沒有時(shí)間觀念。代碼的結(jié)構(gòu)非常散亂,沒有可用的文檔查詢,開發(fā)人員走了,給以后接手的人帶來極大的麻煩。代碼沒有規(guī)范、沒有注釋。歸結(jié)起來就是可讀性很差。
u 測(cè)試:沒有任何測(cè)試,開發(fā)人員簡(jiǎn)單試一試就直接上線了!
u 內(nèi)容:網(wǎng)站內(nèi)容維護(hù)沒有專人負(fù)責(zé),逐漸處于無人答理的狀態(tài)。
總之,原來的網(wǎng)站有太多不盡人意之處,和同類網(wǎng)站比起來差距較大,市場(chǎng)人員無法推廣,技術(shù)人員很難維護(hù),動(dòng)不動(dòng)就出錯(cuò)。只能另起爐灶,推倒重做一個(gè)全新的網(wǎng)站。
對(duì)一家SP公司而言,做網(wǎng)站是打通讓用戶消費(fèi)的通道。從常遠(yuǎn)看,內(nèi)容為王,但短期內(nèi)通道為王:就是讓用戶很容易找到公司提供的內(nèi)容。因?yàn)閃AP業(yè)務(wù)非常依賴于運(yùn)營(yíng)商的門戶排名,一個(gè)業(yè)務(wù)放在運(yùn)營(yíng)商WAP門戶上,第一屏和第二屏有著本質(zhì)的不同,愿意翻到第2屏上的用戶可能少一半或更多!所以SP要想盡一切辦法來擺脫對(duì)門戶的唯一依賴,必須能用別的通道讓用戶很方便的找到你的業(yè)務(wù)。而網(wǎng)站就是最好的宣傳通道,是公司產(chǎn)品最重要的展示平臺(tái)。網(wǎng)站研發(fā)的目標(biāo)就是盡快打通聯(lián)通、移動(dòng)用戶的消費(fèi)通道,把公司生產(chǎn)出來的產(chǎn)品(圖、鈴、文字)方便地展示給更多的手機(jī)用戶。
這個(gè)http://133.newsky.cn網(wǎng)站是面向中國(guó)聯(lián)通用戶的,其設(shè)計(jì)目標(biāo)是:
Ø 1~3年內(nèi)不需要改動(dòng)大框架
Ø 公司業(yè)務(wù)內(nèi)容的精美展示、銷售平臺(tái)
Ø 在同行中有很強(qiáng)的競(jìng)爭(zhēng)力
Ø 老板可以拿出來給投資人演示
為了達(dá)成這個(gè)設(shè)計(jì)目標(biāo),我和項(xiàng)目組花了近一個(gè)月的時(shí)間來制定完整規(guī)劃。
|
規(guī)劃 |
需求 |
美工 |
開發(fā) |
測(cè)試 |
運(yùn)營(yíng) |
2005-2-18 |
收到老板Email,項(xiàng)目啟動(dòng) |
|
|
|
|
|
2005-3-22 |
完成規(guī)劃 |
啟動(dòng)前臺(tái)展示需求的定義 |
|
|
|
|
2005-4-04 |
|
開始后臺(tái)管理需求定義 |
|
|
|
|
2005-4-12 |
|
完成需求定義。確定后面的時(shí)間進(jìn)度:6/15正式上線運(yùn)營(yíng)! |
開始后臺(tái)管理頁面設(shè)計(jì) |
開始網(wǎng)站數(shù)據(jù)庫(kù)的設(shè)計(jì) |
|
|
2005-4-15 |
|
|
|
完成“后臺(tái)管理詳細(xì)設(shè)計(jì)”的文檔 |
|
|
2005-4-16 |
|
|
|
開始后臺(tái)管理的編碼 |
|
|
2005-4-21 |
|
|
開始前臺(tái)展示頁面設(shè)計(jì) |
|
|
|
2005-4-26 |
|
|
|
完成后臺(tái)管理的編碼 |
|
|
2005-4-28 |
|
|
|
|
引入測(cè)試組,開始后臺(tái)管理的測(cè)試 |
|
2005-5-10 |
|
|
|
兩名新人到崗,開始前臺(tái)展示的編碼 |
|
|
2005-5-23 |
|
|
|
|
|
確定運(yùn)營(yíng)組成員及分工 |
2005-5-31 |
|
|
|
主要編碼結(jié)束 |
|
|
2005-6-08 |
|
|
|
|
測(cè)試完畢 |
開始錄入內(nèi)容 |
2005-6-12 |
|
|
|
|
|
內(nèi)容全部上線 |
2005-6-15 |
http://133.newsky.cn正式上線運(yùn)營(yíng),向公司全體同事通報(bào)! |
|||||
2005-6-22 |
完成Postmortem(項(xiàng)目總結(jié)),為下個(gè)移動(dòng)網(wǎng)站項(xiàng)目做準(zhǔn)備 |
明確的研發(fā)流程應(yīng)該是一個(gè)開發(fā)團(tuán)隊(duì)的固定資產(chǎn),從這點(diǎn)上,我建立了一套項(xiàng)目研發(fā)流程,并為其提供工具支撐:
Ø 認(rèn)識(shí)老網(wǎng)站的現(xiàn)狀、確定新網(wǎng)站的設(shè)計(jì)目標(biāo);對(duì)新網(wǎng)站的總體設(shè)計(jì)圖紙進(jìn)行反復(fù)討論,確定網(wǎng)站研發(fā)的四個(gè)總原則(靈活的后臺(tái)、以專題為網(wǎng)站細(xì)胞、豐富的資訊、翔實(shí)的內(nèi)容);明確人員分工、并預(yù)告項(xiàng)目執(zhí)行的幾個(gè)關(guān)鍵點(diǎn)。
Ø 在沒有公司內(nèi)部網(wǎng)的情況下,我先搭建兩個(gè)工具:用于保存各種文檔和源代碼的TortoiseCVS(客戶端)+CVS(服務(wù)器端),用于缺陷管理的BugFree。為每個(gè)項(xiàng)目搭建一個(gè)CVS模塊,其中都有四個(gè)子目錄:Spec(需求文檔)、Design(設(shè)計(jì)文檔)、Code(源代碼)、Test(測(cè)試文檔)。
示意圖:網(wǎng)站項(xiàng)目的CVS目錄
然后是人力資源,我在規(guī)劃中提出了非常明確的人力資源需求:
Ø 前臺(tái)需求定義:1人(蔡志宏)
Ø 后臺(tái)需求定義:2人(劉振飛、朱偉波)
Ø 美工設(shè)計(jì)制作:1人
Ø 開發(fā):3人
Ø 測(cè)試:5人
Ø 運(yùn)營(yíng):5人
然而,當(dāng)時(shí)的情況卻是項(xiàng)目組人員遲遲無法到位:美工只有一個(gè)兼職的、時(shí)間無法保證;只有一個(gè)開發(fā)組長(zhǎng);沒有測(cè)試人員;網(wǎng)站運(yùn)營(yíng)人員不能確定。針對(duì)這樣的情況,我的任務(wù)還包括了招聘相關(guān)人員及時(shí)到位。
在整體上完成上述工作以后,時(shí)間已經(jīng)是
網(wǎng)站需求特別難以確定,為了解決這個(gè)問題,我將整個(gè)需求定義劃分為三個(gè)主要的部分:
1.網(wǎng)站前臺(tái)展示的定義
我首先和負(fù)責(zé)定義需求的蔡志宏確定了需求Spec文檔模板,然后他根據(jù)首頁、二級(jí)、三級(jí)頁面逐個(gè)頁面、逐個(gè)模塊的去定義:展示什么內(nèi)容,大概的模樣(最終樣式由美工負(fù)責(zé))。這樣每個(gè)頁面都被分解成一塊塊的“部件”,一個(gè)“部件”由一份Spec描述,比如下面是“首頁公告欄區(qū)域需求定義”Spec的示意圖。
示意圖:首頁公告欄區(qū)域的需求定義Spec
每完成若干相關(guān)聯(lián)的Spec,我就召集美工、開發(fā)人員開會(huì)討論(本應(yīng)該也叫上測(cè)試和運(yùn)營(yíng)人員,但當(dāng)時(shí)還沒有人),大家站在不同的角度去看看有無問題,并最終確認(rèn)下來。
2.聯(lián)通用戶消費(fèi)流程的定義
用戶消費(fèi)流程涉及到收費(fèi)問題,必須把每個(gè)細(xì)節(jié)都要搞清楚。這個(gè)需求由我負(fù)責(zé),先形成一份PPT文檔,在大范圍內(nèi)征求大家的意見,然后細(xì)化每個(gè)細(xì)節(jié):從用戶訪問我們的首頁開始,如何登錄,如何轉(zhuǎn)向聯(lián)通網(wǎng)站,如何扣費(fèi)等每個(gè)細(xì)節(jié)必須想到。
3.網(wǎng)站后臺(tái)管理的定義
根據(jù)網(wǎng)站前臺(tái)的需求,我和開發(fā)組長(zhǎng)朱偉波來設(shè)計(jì)數(shù)據(jù)庫(kù)定義,確定多少?gòu)埍怼⒚繌埍碇杏惺裁醋侄巍H缓髲倪\(yùn)營(yíng)人員的登錄頁面開始設(shè)計(jì),用PPT把每張頁面的示意圖以及邏輯關(guān)系都展示出來,然后把需求、開發(fā)、美工召集起來一起討論,看看是否符合運(yùn)營(yíng)人員的習(xí)慣、是否有遺漏的地方。
需求文檔要想清楚后再寫下來,讓別人讀得懂。定義好的需求Spec是整個(gè)項(xiàng)目開發(fā)的“合同”,馬虎不得。在需求定義的3周中(其中前臺(tái)展示的需求用了2周、后臺(tái)管理的需求用了1周),每寫出來若干相關(guān)的需求文檔,就在項(xiàng)目組內(nèi)討論一次,最終明確下來。需求文檔一旦成型以后,就必須嚴(yán)格按照需求文檔編寫設(shè)計(jì)代碼,盡量控制需求的變化。這不但要求我們?cè)谧铋_始的需求分析階段做好最充分的準(zhǔn)備工作,而且還需要作為項(xiàng)目經(jīng)理的我,頂住一些來自各方意見的壓力。幸運(yùn)的,我們團(tuán)隊(duì)還是非常好的堅(jiān)持下來了:
示意圖:上線后的首頁公告欄區(qū)域——完全根據(jù)Spec中的需求定義來實(shí)現(xiàn)
然而,另外的一個(gè)問題是,需求文檔很容易“老舊”、跟不上最新的變化,需求定義人也懶得去更新,因?yàn)殚_始編碼后誰都不去注意需求文檔了。為了解決這個(gè)問題,我就在后臺(tái)管理的每一張表的維護(hù)頁面上,增加一個(gè)“Spec”按鈕,點(diǎn)擊后就可以看到相關(guān)的需求文檔Spec列表了。這樣做有兩個(gè)好處:一方面運(yùn)營(yíng)人員可以很方便的看到最初是怎么設(shè)計(jì)這塊功能的;另一方面也把需求定義者的工作暴露在全體同事面前,文檔寫的好壞是一目了然。
示意圖:每個(gè)后臺(tái)表管理頁面上都有個(gè)Spec按鈕,指向?qū)?yīng)的需求文檔列表
充分的需求定義保證了整個(gè)項(xiàng)目能夠準(zhǔn)時(shí)完工,這也是我們這個(gè)項(xiàng)目能夠取得圓滿成功的原因之一。需求確定之后,后面開發(fā)、測(cè)試的時(shí)間就基本明確下來了。
有了完整的需求文檔后,接下來就進(jìn)入開發(fā)階段。如同前面提及的,首先需要完成的是數(shù)據(jù)庫(kù)的設(shè)計(jì)。其實(shí)早在需求定義期間,我和朱偉波就已經(jīng)開始數(shù)據(jù)庫(kù)定義,確定多少?gòu)埍怼⒚繌埍碇杏惺裁醋侄巍N覀兓ㄙM(fèi)了三天左右的時(shí)間來對(duì)后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行詳細(xì)的設(shè)計(jì),并產(chǎn)生出設(shè)計(jì)文檔。
示意圖:新天地網(wǎng)站2005版后臺(tái)數(shù)據(jù)庫(kù)定義.doc
然而,光有需求和詳細(xì)設(shè)計(jì)文檔還不夠,開發(fā)團(tuán)隊(duì)需要保持要一種一致的風(fēng)格,這一點(diǎn)要求所有的程序員對(duì)代碼有責(zé)任感。因此在這個(gè)階段之前(3/16~4/12),我就讓公司所有的Java工程師多次討論,并最后確定一份“編碼規(guī)范”,這樣網(wǎng)站真正開始寫代碼的時(shí)候,就有一個(gè)明確的規(guī)范來約束代碼的書寫。
對(duì)于軟件項(xiàng)目來說,經(jīng)常會(huì)有一些出乎意料的情況發(fā)生。比如,本來計(jì)劃有兩個(gè)開發(fā)人員做后臺(tái)管理,結(jié)果因?yàn)樯蜿柭?lián)通的一個(gè)合作項(xiàng)目需求緊急配合,只好臨時(shí)抽調(diào)一個(gè)人去支援,畢竟網(wǎng)站是公司內(nèi)部可以控制的,導(dǎo)致后臺(tái)開發(fā)只有朱偉波一個(gè)“光桿司令”,那一段他連續(xù)十余天加班到晚上11:30!這樣高強(qiáng)度、高壓力的工作狀態(tài),不是每個(gè)程序員都能承受的。經(jīng)過朱偉波的努力,終于在十天時(shí)間內(nèi)將所有的后臺(tái)編碼全部完成(
緊接下來,從
在這個(gè)項(xiàng)目之前,整個(gè)公司是沒有測(cè)試人員的!這不得不讓我大為驚訝,一個(gè)SP公司沒有測(cè)試怎么行!所以在這個(gè)項(xiàng)目進(jìn)行的同時(shí)我啟動(dòng)測(cè)試人員招聘工作,最終成立了一支5人組成的測(cè)試組,負(fù)責(zé)所有業(yè)務(wù)的測(cè)試。
當(dāng)網(wǎng)站后臺(tái)管理編碼完成后,4/28立即啟動(dòng)測(cè)試工作:后臺(tái)管理中的首頁管理、動(dòng)畫、聲音、彩圖、專題、資訊由專人負(fù)責(zé)測(cè)試,發(fā)現(xiàn)一個(gè)問題就在BugFree中記錄一個(gè)Bug。通過BugFree的跟蹤和記錄,可以讓某些問題不必累積到最后才解決。隨著網(wǎng)站前臺(tái)展示開發(fā)在5月中旬啟動(dòng),測(cè)試工作也在并行跟進(jìn):每個(gè)頻道、每個(gè)頁面都有專人負(fù)責(zé)檢查,這樣盡可能的把各種潛在的問題揪出來,免除后患。
示意圖:用BugFree來管理網(wǎng)站項(xiàng)目中的Bug
很遺憾的是,因?yàn)闇y(cè)試組搭建的比較晚、測(cè)試任務(wù)又比較重,他們需要花費(fèi)很長(zhǎng)時(shí)間去熟悉公司的各種業(yè)務(wù),所以在這個(gè)網(wǎng)站項(xiàng)目中,對(duì)測(cè)試文檔部分(比如測(cè)試用例)我并沒有要求,只要把問題發(fā)現(xiàn)出來上Bug就好了。這就是項(xiàng)目管理中的Trade-Off:抓住主要矛盾、抓大放小。這個(gè)項(xiàng)目結(jié)束后,測(cè)試組已經(jīng)逐步成熟、磨合好了,我才開始強(qiáng)調(diào)測(cè)試文檔的重要性,每個(gè)業(yè)務(wù)測(cè)試時(shí)一定要同步完成相關(guān)的測(cè)試文檔(計(jì)劃、用例、測(cè)試結(jié)果等),測(cè)試時(shí)就按照相關(guān)的測(cè)試文檔進(jìn)行。這樣以后復(fù)測(cè)就能省掉很多時(shí)間,換個(gè)人測(cè)試也很方便上手。
經(jīng)過一個(gè)多月的努力,測(cè)試組的同事基本上完成了網(wǎng)站所有頻道、頁面的檢查工作(
研發(fā)人員做出來的網(wǎng)站只是一個(gè)空空的框架,沒有實(shí)際的內(nèi)容填上去,網(wǎng)站就無法上線——打個(gè)比方,研發(fā)人員把“大樓”蓋好了,還需要運(yùn)營(yíng)人員把“內(nèi)部裝修”做好。然而面對(duì)人員的稀缺和內(nèi)部調(diào)整,一直到
在此期間,整個(gè)項(xiàng)目組都進(jìn)入了最后的沖刺階段。為了確保
示意圖:項(xiàng)目最后突擊的日志
值得慶祝的日子到來了。
ü 做出來的網(wǎng)站符合最初的規(guī)劃和需求定義;
ü 按照需求定義完成的時(shí)候(
ü 整個(gè)項(xiàng)目執(zhí)行過程中,規(guī)劃、需求、開發(fā)、測(cè)試等環(huán)節(jié)均按照預(yù)定軌道前進(jìn),沒有出現(xiàn)大的紕漏。
整個(gè)項(xiàng)目組成員在網(wǎng)站上線后都非常興奮,這應(yīng)該是公司到目前最成功的一個(gè)項(xiàng)目管理實(shí)踐。公司領(lǐng)導(dǎo)對(duì)這個(gè)項(xiàng)目的研發(fā)表示非常滿意。現(xiàn)在的情況是,休整2周后,
網(wǎng)站和產(chǎn)品開發(fā)沒有什么不同!
按我整理的時(shí)間表和項(xiàng)目計(jì)劃,對(duì)照微軟的流程,你會(huì)發(fā)現(xiàn),我完全是按照微軟“傳統(tǒng)軟件”的研發(fā)流程去管理這個(gè)網(wǎng)站項(xiàng)目,略有不同的地方是,這個(gè)網(wǎng)站項(xiàng)目的時(shí)間跨度比較小(只有4個(gè)月),而且人力資源有限,美工、開發(fā)、測(cè)試三個(gè)環(huán)節(jié)我只能是并行處理、流水作業(yè),以盡量縮短項(xiàng)目的整體時(shí)間。
|
規(guī)劃和需求階段 |
開發(fā)階段 |
測(cè)試階段 |
發(fā)布階段 |
主參與人 |
Planner與PM驅(qū)動(dòng) |
開發(fā)人員推動(dòng) |
測(cè)試人員推動(dòng) |
PM,產(chǎn)品經(jīng)理,運(yùn)營(yíng)管理等執(zhí)行 |
階段成果 |
目標(biāo)描述 (Vision) 詳細(xì)需求文檔 (Spec) 日程進(jìn)度表 |
M1, M2, … Code Complete |
集成測(cè)試 Bug-Fix, Check-in Dogfood Beta1, beta2, … (Triage) Zero Bug Release |
Show-Stopper bug Release Candidate(RC) Sign-off RTM (Ready To Release) |
我也算是“把微軟先進(jìn)的軟件研發(fā)理念和中國(guó)中小企業(yè)的具體情況相結(jié)合”吧,其中最難的是把項(xiàng)目研發(fā)流程的理念灌輸給全組同事以統(tǒng)一認(rèn)識(shí),并能有效的執(zhí)行下去。很多時(shí)候要靠我不斷的去PUSH各個(gè)環(huán)節(jié),做的比較累,但在完成之后,很有成就感,尤其是針對(duì)一個(gè)團(tuán)隊(duì)不斷發(fā)展和成熟,所做的努力是顯而易見的。
背景說明è四個(gè)人的角色分工:
劉振飛:項(xiàng)目經(jīng)理,負(fù)責(zé)整個(gè)項(xiàng)目的規(guī)劃、協(xié)調(diào)工作。2005-1-1加盟公司。
蔡志宏:需求定義,從頭參與規(guī)劃。2004-11-8加盟。舊版網(wǎng)站的非正式“項(xiàng)目經(jīng)理”。
朱偉波:開發(fā)組長(zhǎng),并參與規(guī)劃和后臺(tái)管理的需求定義。2005-2-22加盟,項(xiàng)目剛啟動(dòng)。
張春艷:測(cè)試組長(zhǎng),負(fù)責(zé)北京分公司所有業(yè)務(wù)的測(cè)試工作。2005-3-7加盟。測(cè)試組在項(xiàng)目前期(規(guī)劃、設(shè)計(jì))參與較少,整個(gè)測(cè)試組是隨著這個(gè)項(xiàng)目逐步建立的。
《程序員》:劉振飛,你好。對(duì)于任何一個(gè)項(xiàng)目來說,項(xiàng)目經(jīng)理所面臨的責(zé)任都是最大的。這尤其表現(xiàn)在整個(gè)項(xiàng)目是否有明確的目標(biāo)。請(qǐng)你談?wù)勀惝?dāng)時(shí)對(duì)http://133.newsky.cn這個(gè)項(xiàng)目的看法,而當(dāng)時(shí)明確的項(xiàng)目目標(biāo)是怎樣一步步制定出來的?
劉振飛:明確的目標(biāo)是整個(gè)項(xiàng)目組齊心協(xié)力努力的“指南針”。作為項(xiàng)目組長(zhǎng),首先要把Stakeholder們對(duì)項(xiàng)目的要求吃透、并從技術(shù)上把握可行;然后要讓整個(gè)團(tuán)隊(duì)理解這個(gè)目標(biāo):做什么、為什么、怎么做、如何分工、何時(shí)做出來、分階段到達(dá)什么狀態(tài)。
我是分三步確定目標(biāo)的。首先是了解舊網(wǎng)站的情況。經(jīng)過和原來負(fù)責(zé)舊網(wǎng)站研發(fā)的蔡志宏以及開發(fā)和美工人員深入溝通后,我發(fā)現(xiàn)舊網(wǎng)站是個(gè)“爛泥灘”,所以把實(shí)際情況解釋給管理層,說服他們另起爐灶,推倒重做一個(gè)全新的網(wǎng)站。
第二步是吸取舊網(wǎng)站的教訓(xùn),確定新網(wǎng)站的總體構(gòu)想、設(shè)計(jì)原則、新版“圖紙”。我、蔡志宏、朱偉波還有當(dāng)時(shí)的美工形成一個(gè)“核心小組”,反復(fù)開會(huì)討論,結(jié)合公司現(xiàn)有的業(yè)務(wù)及人力資源情況,逐步明確圖片、鈴聲、文字這三類主要的WAP內(nèi)容如何在網(wǎng)站上有效展示。
第三步是把“核心小組”的整體思路報(bào)告給管理層和項(xiàng)目組成員,聽取大家的反饋意見,逐步明確這個(gè)網(wǎng)站的目標(biāo)和設(shè)計(jì)方案。我分別在3月9日、17日、21日召集會(huì)議,給眾人介紹我們第二步的討論成果,請(qǐng)大家站在不同的角度去審核,不斷吸取合理化建議并最終達(dá)成一致意見。最后明確這個(gè)項(xiàng)目的目標(biāo)如下圖所示:
示意圖:整體規(guī)劃統(tǒng)一整個(gè)項(xiàng)目組的前進(jìn)方向
其實(shí)我還跟項(xiàng)目組內(nèi)部講過另外兩個(gè)“非正式”但更長(zhǎng)遠(yuǎn)的目標(biāo):
(1)把整個(gè)項(xiàng)目流程管理好,給公司樹立一個(gè)“樣板工程”:項(xiàng)目應(yīng)該這么做;
(2)通過這個(gè)項(xiàng)目打造有良好素養(yǎng)的團(tuán)隊(duì),逐步培養(yǎng)大家正規(guī)的項(xiàng)目研發(fā)意識(shí)。
示意圖:用了1個(gè)月的時(shí)間來進(jìn)行規(guī)劃,確定目標(biāo)、統(tǒng)一思想
《程序員》:定義需求的時(shí)候統(tǒng)一的指導(dǎo)思想是什么?在項(xiàng)目進(jìn)行中,需求的變更是怎樣管理的?你是否曾經(jīng)面對(duì)來自上層的壓力,怎樣面對(duì)?需求工程師是否能理解,并按照預(yù)期的規(guī)劃工作?
蔡志宏:我們一開始就意識(shí)到網(wǎng)站的核心功能并不是諸如導(dǎo)航條擺在左邊還是右邊的問題,而是要讓公司產(chǎn)品能夠得到最好的展示,為此確定我們要做展示的幾個(gè)核心部分。我們犧牲掉部分美觀來換取一種整齊劃一的思路。這就像大型超市一樣,也許每一個(gè)貨物區(qū)都有自己的的貨架擺放形式會(huì)更好,但是同一個(gè)形式也有它自己的優(yōu)勢(shì)。
對(duì)于SP的網(wǎng)站來說,關(guān)鍵是你有一張好圖吸引用戶,不是花哨的頁面來蠱惑他,蠱惑用戶將付出超出產(chǎn)品制作本身的很大的精力,這是實(shí)戰(zhàn)經(jīng)驗(yàn)。花哨的頁面布局形式能夠在最初上線的時(shí)候讓所有人滿意,但是在運(yùn)作的過程中會(huì)發(fā)生很多的問題,因?yàn)闉榱嘶ㄉ冢L(zhǎng)期下來是要付出技術(shù)、美工等很多精力的。
核心的展示模塊確定之后,我們也面臨了這個(gè)圖標(biāo)放到右邊好看,那個(gè)文字放到左邊好看等一些需求變更建議,有些建議來自于高層,但是這都沒有影響到需求的最終定義。當(dāng)然,一些細(xì)節(jié)上的建議仍然被采納,這個(gè)隊(duì)伍雖然是“武斷”的,但還是個(gè)開放的隊(duì)伍。
盡管在初期的規(guī)劃非常完善,然而限于時(shí)間要求,有些想法在該目前的項(xiàng)目中仍然沒能實(shí)現(xiàn)。
示意圖:把網(wǎng)站各頁面分成模塊,分塊定義,形成需求Spec文檔
朱偉波:以前在別的公司做項(xiàng)目時(shí)就是因?yàn)樾枨蟛粩嘧兏鼏栴},遇到過很大的麻煩,所以這個(gè)項(xiàng)目一開始時(shí)我就再三強(qiáng)調(diào)需求的重要性。目前公司的開發(fā)模式還比較簡(jiǎn)單。領(lǐng)導(dǎo)一句話做什么就做什么,什么需求以及文檔都是開發(fā)人員根據(jù)自己的理解來做,往往在開發(fā)中途可能由于各種原因領(lǐng)導(dǎo)的要求產(chǎn)生了變化。這樣導(dǎo)致需求不斷變更,直接影響了開發(fā)的進(jìn)度。了解了這個(gè)情況后我就直接找過振飛,認(rèn)真地談過這個(gè)問題,并一再?gòu)?qiáng)調(diào)要重視它。很高興振飛在這方面很支持我的看法,讓大家都知道不可以隨便改需求。
當(dāng)然在開發(fā)過程中由于公司的業(yè)務(wù)要求,產(chǎn)品經(jīng)理(蔡志宏)有過幾次需求的變更。我的態(tài)度還是比較強(qiáng)硬,大的需求一定不能隨便動(dòng)(因?yàn)轫?xiàng)目時(shí)間很緊,開發(fā)人員遲遲未能到位,需求要是不斷變更,對(duì)開發(fā)人員是致命打擊)。經(jīng)常和蔡志宏溝通,盡量保持一致意見。我記得快做完后臺(tái)管理時(shí)出現(xiàn)了一個(gè)致命的漏洞,極大的壓力也造成了情緒上的不穩(wěn)定,還好在總體設(shè)計(jì)時(shí)我就就注意到了擴(kuò)展的靈活性,所以在大家的精心協(xié)助下很順利的達(dá)成一致的意見,并最終在規(guī)定的時(shí)間里完成了項(xiàng)目的開發(fā)。
劉振飛:完整準(zhǔn)確的需求定義決定著整個(gè)項(xiàng)目的成敗。需求對(duì)項(xiàng)目組的作用就像劇本對(duì)電影劇組的重要性一樣。同樣的,項(xiàng)目一旦進(jìn)入開發(fā)實(shí)現(xiàn)階段時(shí),只能做局部的小改動(dòng)、最好是不要?jiǎng)印槭裁催@個(gè)項(xiàng)目規(guī)劃要花掉整體1/4的時(shí)間?我就是要在一開始的時(shí)候,讓大家集思廣益,把各種情況都擺出來、理清楚,把以后可能的潛在變化都消滅在這個(gè)階段。同時(shí)我一再給公司領(lǐng)導(dǎo)、蔡志宏(詳細(xì)需求定義者)灌輸這樣的理念:需求必須明確、大家討論清楚,然后就不能輕易改動(dòng)了,所以多花些時(shí)間在前期規(guī)劃、書寫Spec及討論上是非常劃算的。看起來“浪費(fèi)”了不少時(shí)間在文檔書寫和討論上,但卻節(jié)省了未來大量的維護(hù)時(shí)間。
五一節(jié)后按計(jì)劃開始網(wǎng)站前臺(tái)展示的開發(fā)工作,我突然收到部門領(lǐng)導(dǎo)的Email,問能否停止這個(gè)第1步聯(lián)通網(wǎng)站項(xiàng)目,轉(zhuǎn)向原計(jì)劃第2步那個(gè)移動(dòng)網(wǎng)站的研發(fā)。我立即給領(lǐng)導(dǎo)解釋:項(xiàng)目到這個(gè)階段就像登山到了半山腰,所有人都憋著一口氣瞄準(zhǔn)山頂,這個(gè)時(shí)候突然告訴大家“咱們爬錯(cuò)了,趕緊換旁邊那座山”吧,隊(duì)員們會(huì)是什么感覺?所謂“一鼓作氣,再而竭,三而衰”。當(dāng)時(shí)那個(gè)項(xiàng)目還不具備啟動(dòng)的條件;況且我也需要通過這個(gè)項(xiàng)目來磨合隊(duì)伍。還好我說服了他,這件事沒有影響到項(xiàng)目組。
作為項(xiàng)目經(jīng)理,一定要從善意的角度去理解領(lǐng)導(dǎo)的“多變”和需求的變化。但作為一線指揮官,要在項(xiàng)目前期做規(guī)劃和需求定義時(shí)集思廣益,盡可能避免可以預(yù)測(cè)的變化。當(dāng)變化來臨時(shí),要把真實(shí)的狀況摸清楚——一些變化是必須接受的,一些是討論后可以變通接受的,還有一些是要想法拒絕的:你需要拿出負(fù)責(zé)任的決策,不能盲目服從。
《程序員》:在項(xiàng)目規(guī)劃過程中,你是怎樣預(yù)測(cè)進(jìn)度的?最關(guān)鍵的開發(fā)環(huán)節(jié)是如何保證進(jìn)度的?采用了哪些方法來保證進(jìn)度能及時(shí)有效、保質(zhì)保量地執(zhí)行?
朱偉波:作為開發(fā)組長(zhǎng),首先在項(xiàng)目規(guī)劃中就要根據(jù)需求明確可能用到的技術(shù),并初步估算時(shí)間。但最重要的是需要充分的考慮環(huán)境因素,如領(lǐng)導(dǎo)的支持程度、人員的到位時(shí)間、以及需求的精確程度、甚至公司做項(xiàng)目的風(fēng)格(取決于領(lǐng)導(dǎo)的風(fēng)格)等。項(xiàng)目是不是會(huì)經(jīng)常的變動(dòng)、能否得到大家的支持,都是我要事前需要考慮的,有了這些信息,就可以大致估算項(xiàng)目的開發(fā)實(shí)際需要多長(zhǎng)時(shí)間了。
為保證質(zhì)量,我們事先需要認(rèn)真的做總體概要設(shè)計(jì),這樣對(duì)以后的開發(fā)起到了一個(gè)很好的指導(dǎo)作用。采用一個(gè)好的架構(gòu)對(duì)項(xiàng)目成功的重要性不言而喻,對(duì)以后的擴(kuò)展性、維護(hù)都起到很好的作用。在這個(gè)項(xiàng)目里我和振飛都重視這一點(diǎn),振飛特意多給我一天的時(shí)間來做該項(xiàng)目的設(shè)計(jì)工作。
再一個(gè)就是上面提到的,定義需求時(shí)一定要考慮周全、把握好,不能說變就變。
劉振飛:在3月21日完成規(guī)劃時(shí)老板問我:網(wǎng)站何時(shí)可以做出來?我說必須等到詳細(xì)需求明確以后才能知道。隨后的半個(gè)多月,我和幾個(gè)同事共同把需求文檔整理出來,直到4月12日的集體會(huì)議上,才非常明確地寫下各個(gè)階段的進(jìn)度。并將項(xiàng)目最后的日期定為6月15日。這其中產(chǎn)生了幾十份Spec。
當(dāng)項(xiàng)目進(jìn)度明確后,后面就是監(jiān)督落實(shí)的事情了:需求不清楚時(shí),立即請(qǐng)蔡志宏給出解釋;頁面制作落伍時(shí),緊盯美工人員;開發(fā)完一塊功能,就啟動(dòng)測(cè)試工作。尤其在接近尾聲的時(shí)候,一旦發(fā)現(xiàn)延遲的就立即找出原因,如果在Feature和時(shí)間發(fā)生沖突時(shí),我就需要及時(shí)給開發(fā)人員做出抉擇:Cut Feature還是延遲時(shí)間?
示意圖:項(xiàng)目經(jīng)理要每天關(guān)注各個(gè)環(huán)節(jié)推進(jìn)的速度是否和預(yù)期的一樣
《程序員》:當(dāng)時(shí)你對(duì)公司申請(qǐng)了哪些人力資源?在人員方面的預(yù)計(jì)是怎樣計(jì)算的?打算怎樣利用這些資源?招聘過程中的標(biāo)準(zhǔn)分別是什么?
劉振飛:根據(jù)舊網(wǎng)站的實(shí)踐、公司現(xiàn)有人力資源的情況,然后我們“核心小組”依照以前各自的經(jīng)驗(yàn),確定這個(gè)網(wǎng)站研發(fā)需要的人力資源:
Ø 前臺(tái)需求定義:1人(蔡志宏)
Ø 后臺(tái)需求定義:2人(劉振飛、朱偉波)
Ø 美工設(shè)計(jì)制作:1人
Ø 開發(fā)組:3人(組長(zhǎng)朱偉波)
Ø 測(cè)試組:5人(組長(zhǎng)張春艷)
其中開發(fā)組有2人是新招聘,考慮到這個(gè)項(xiàng)目及未來的工作要求,對(duì)開發(fā)工程師的要求是:有較豐富的Java開發(fā)經(jīng)驗(yàn),為人踏實(shí)肯干、能吃苦。我很高興把偉波招聘進(jìn)來,他的Java功力很深厚,顧全大局,工作認(rèn)真負(fù)責(zé),團(tuán)隊(duì)意識(shí)很強(qiáng)。
測(cè)試組不僅僅為這個(gè)網(wǎng)站服務(wù),而是為整個(gè)北京分公司的業(yè)務(wù)測(cè)試負(fù)責(zé)。我對(duì)測(cè)試人員的要求是:喜歡測(cè)試工作,有測(cè)試經(jīng)驗(yàn),學(xué)習(xí)能力強(qiáng)(因?yàn)?/span>SP是個(gè)新興行業(yè))。我也很高興招聘到春艷這樣有好幾年經(jīng)驗(yàn)的同事,她對(duì)測(cè)試流程、規(guī)范、測(cè)試文檔都非常熟悉,幫我扛住了“測(cè)試”這一重要環(huán)節(jié)。
志宏比我早加盟公司,對(duì)業(yè)務(wù)非常熟悉,有很豐富的互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn)。在項(xiàng)目規(guī)劃和需求定義的時(shí)候,他經(jīng)常會(huì)冒出很多新鮮的創(chuàng)意和點(diǎn)子。項(xiàng)目結(jié)束的時(shí)候我跟他開玩笑:忙乎了四個(gè)月,其實(shí)就是我?guī)е粠腿税阉南敕鋵?shí)了。
《程序員》:團(tuán)隊(duì)其他同事最初是否對(duì)你制定的目標(biāo)非常認(rèn)同?大家認(rèn)為這個(gè)項(xiàng)目與之前所做的項(xiàng)目區(qū)別將會(huì)是在哪里?你是怎樣維系團(tuán)隊(duì)氛圍的?
蔡志宏:我們是抱有革新態(tài)度在做這個(gè)項(xiàng)目的,它從思想上不同于一般的網(wǎng)站。開發(fā)之前,振飛和公司上層有很好的溝通,使這個(gè)項(xiàng)目從上到下有了很好的共識(shí),所以大目標(biāo)明確,也能得到了公司的全方位支持。大家對(duì)做這個(gè)項(xiàng)目為公司帶來的收益和重要性有了理解,加上對(duì)公司的歸屬感,大家就都比較敬業(yè)。
朱偉波:這個(gè)項(xiàng)目是我來公司不久做的第一個(gè)項(xiàng)目,不知道大家以前是怎樣看待項(xiàng)目開發(fā)的。我曾聽到了很多不同的質(zhì)疑:這是內(nèi)部的項(xiàng)目為什么要這么趕呢?為什么一定要在規(guī)定的時(shí)間里完成?這個(gè)項(xiàng)目并不能直接為公司帶來很多效益為什著急去完成呢等等。也許在原來做項(xiàng)目的思想下,大家心里有很多為什么,對(duì)這個(gè)項(xiàng)目還抱著一種試探,并沒有重視它。
但欣慰的是,領(lǐng)導(dǎo)對(duì)這個(gè)項(xiàng)目還是很重視的。我剛來公司,沒有歷史包袱,還是按我原來做項(xiàng)目的成功經(jīng)驗(yàn)按部就班。事后證明我的判斷是對(duì)的——這個(gè)項(xiàng)目和我原來做過的項(xiàng)目,其區(qū)別就是打破一家公司做項(xiàng)目的風(fēng)格。“打破”就帶來壓力!試想,如果這個(gè)項(xiàng)目失敗了,說明該公司原來做項(xiàng)目的混亂風(fēng)格未嘗不可,而我們的努力也就付之一炬了。
由于每個(gè)人的做事風(fēng)格不一樣,也會(huì)有這樣那樣的問題。但是在振飛的揉和下大家還是能很好的融入到這個(gè)項(xiàng)目團(tuán)隊(duì)中,最終解決問題,完成任務(wù)。
張春艷:剛來公司時(shí),分配給我的任務(wù)就是測(cè)試舊版133新天地網(wǎng)站、熟悉聯(lián)通WAP業(yè)務(wù)。在測(cè)試舊版網(wǎng)站過程中,發(fā)現(xiàn)問題不少如下:
1、內(nèi)容不夠豐富,不吸引用戶;
2、頁面的展現(xiàn)力不強(qiáng),感覺比較枯燥;
3、程序不夠穩(wěn)定,常出現(xiàn)HTTP Error 500、404錯(cuò)誤;
4、有些很重要的功能都沒有實(shí)現(xiàn)(如搜索功能);
5、N久也不會(huì)更新一次內(nèi)容(大概是因?yàn)楦乱淮魏苈闊┌桑。?/font>
6、沒有需求、沒有目標(biāo),測(cè)試屬于沒有目的狀態(tài),需要憑借經(jīng)驗(yàn)和感覺進(jìn)行盲目測(cè)試。
對(duì)于測(cè)試這樣的網(wǎng)站,我認(rèn)為沒有太大意義,早應(yīng)該進(jìn)行改版或推翻重做。所以對(duì)振飛制定的項(xiàng)目目標(biāo)十分認(rèn)同,并希望協(xié)助很好完成。我理解這個(gè)項(xiàng)目與公司其他項(xiàng)目區(qū)別:
1、一個(gè)不賺錢但為公司所有賺錢項(xiàng)目服務(wù)的一個(gè)項(xiàng)目;
2、是公司當(dāng)時(shí)唯一有規(guī)劃的項(xiàng)目,讓每個(gè)人都心中有數(shù),到了哪個(gè)時(shí)間段該做什么事。其他項(xiàng)目基本處于混亂的狀態(tài),只有提交到測(cè)試這邊才知道有這么回事;
3、測(cè)試方法不同與其他項(xiàng)目:a、時(shí)間計(jì)劃安排上的不同:有頭有尾,且留給測(cè)試的時(shí)間足夠充裕,對(duì)測(cè)試的質(zhì)量給了一個(gè)很好的前提。其他項(xiàng)目經(jīng)常處于救火狀態(tài),下午提交測(cè)試,下班前就要求完成,沒有思考和準(zhǔn)備的時(shí)間;b、測(cè)試方案和方法上,在可重用的流程上首先啟動(dòng)了Test Case的概念并加以執(zhí)行;c、需求文檔的準(zhǔn)備給測(cè)試做了很好的鋪墊。
劉振飛:項(xiàng)目的目標(biāo)不是我一個(gè)人拍腦殼想出來的,而是結(jié)合領(lǐng)導(dǎo)的要求、公司的實(shí)際情況逐步從小范圍到大范圍反復(fù)討論后確立的,項(xiàng)目組的每個(gè)人在規(guī)劃階段結(jié)束的時(shí)候,都非常明確兩個(gè)問題的答案:這個(gè)網(wǎng)站做成什么樣、為什么。
大家對(duì)整體規(guī)劃認(rèn)識(shí)一致后,后面需求、美工、開發(fā)、測(cè)試、運(yùn)營(yíng)等各個(gè)環(huán)節(jié)的工作就可以“統(tǒng)一思想”,因?yàn)橛辛嗣鞔_的共同奮斗目標(biāo)。作為項(xiàng)目經(jīng)理,我做的就是定期把各個(gè)環(huán)節(jié)的進(jìn)展告訴整個(gè)項(xiàng)目組,做到信息透明。一個(gè)目標(biāo)明確、互相信任、尊重、團(tuán)結(jié)的隊(duì)伍,再把項(xiàng)目組的信息公開出來,就能夠保持良好的團(tuán)隊(duì)氣氛 。
《程序員》:從需求、測(cè)試和開發(fā)各方面看,是否支持你的目標(biāo)?大家對(duì)這個(gè)項(xiàng)目有信心么?信心源自何處?你是怎樣鼓勵(lì)團(tuán)隊(duì)中其他同事的?
蔡志宏:這個(gè)項(xiàng)目中有許多值得討論的事情。首先在各個(gè)環(huán)節(jié)上都有很突出的創(chuàng)新,難得的就是這一點(diǎn),一是因?yàn)楦鱾€(gè)環(huán)節(jié)的負(fù)責(zé)人均是老手,有創(chuàng)新的實(shí)力;二是一些氣氛方面的因素,振飛的專業(yè)精神感染了我們,振飛有時(shí)候比較容易著急,但是他有一個(gè)核心的優(yōu)點(diǎn)就是簡(jiǎn)單,我們基本上不用過多去考慮和他溝通的方式,只要把信息傳達(dá)到了即可,這樣的一個(gè)項(xiàng)目經(jīng)理可以節(jié)約很多的時(shí)間成本和腦細(xì)胞。
現(xiàn)在的一般的公司里面有許多不適合創(chuàng)新性思維的項(xiàng)目經(jīng)理,對(duì)上不會(huì)溝通,對(duì)下也不會(huì)激發(fā),天天板著個(gè)臉,這樣很難做出什么有創(chuàng)新的項(xiàng)目,我覺得程序員寫的是程序,但是程序員并不是一個(gè)程序。
朱偉波:在同一個(gè)目標(biāo)下,我就只有一個(gè)想法是要按時(shí)按質(zhì)的完成項(xiàng)目。很多老員工對(duì)公司原來開發(fā)的模式感覺不是很好,都希望能換一種模式。在這種心理下都希望能很好的完成項(xiàng)目,來證明自己;同時(shí)也可以在規(guī)范法下學(xué)到很多新的做法,所以大家的熱情都比較高,希望通過正規(guī)的開發(fā)流程學(xué)到很多以前學(xué)不到的規(guī)范,這對(duì)參于項(xiàng)目的人員來說是一個(gè)很好的經(jīng)歷。
當(dāng)遇到困難時(shí),我們都能坐下來很好的商量、討論。再有就是領(lǐng)導(dǎo)的大力支持,讓我們對(duì)這個(gè)項(xiàng)目看到了很大的希望,讓大家都能把熱情投入到項(xiàng)目里。
張春艷:從完成這個(gè)項(xiàng)目的測(cè)試來說,信心源自明確的目標(biāo)、合理的計(jì)劃及各部分之間的配合。對(duì)測(cè)試組來說,蔡志宏需求的配合和朱偉波開發(fā)部的配合都不錯(cuò)。測(cè)試組提出的疑問及Bug會(huì)及時(shí)得到開發(fā)組的回復(fù),或是解決或是經(jīng)振飛確認(rèn)可以延期解決或可以不解。不會(huì)出現(xiàn)有一個(gè)問題沒人搭理的情況。
劉振飛:經(jīng)過2004年第一個(gè)網(wǎng)站的實(shí)踐,我非常有信心,可以把在微軟Office組學(xué)到的產(chǎn)品研發(fā)流程和項(xiàng)目管理方法移植到網(wǎng)站項(xiàng)目中。每個(gè)環(huán)節(jié)的同事在每個(gè)階段應(yīng)該做什么事情,要讓每個(gè)人都非常清楚;項(xiàng)目組的任何信息都是公開透明的。同時(shí)作為項(xiàng)目經(jīng)理,不要有任何“官架子”,大家在人格上都是平等的;出了意外情況的時(shí)候我要第一個(gè)及時(shí)做出反應(yīng),給出經(jīng)過認(rèn)真討論、協(xié)商后的可接受的解決方案。
某個(gè)環(huán)節(jié)、某個(gè)人做的好,要在整個(gè)項(xiàng)目組及時(shí)提出表揚(yáng),特別出色的要爭(zhēng)取申請(qǐng)公司的獎(jiǎng)勵(lì);某個(gè)環(huán)節(jié)、某個(gè)人做的不好,私下里要及時(shí)批評(píng),找出原因和解決辦法,避免重復(fù)同樣的錯(cuò)誤。當(dāng)然,關(guān)鍵時(shí)候某個(gè)環(huán)節(jié)比較勞累的時(shí)候,要請(qǐng)相關(guān)的同事撮頓飯、緩口氣,搞研發(fā)的人既是理性的,又是感性的,大家都需要得到認(rèn)可。
《程序員》: 我們看到你的項(xiàng)目管理依賴大量的文檔。目前這種文檔化的方法似乎在開發(fā)人員中不受理解和歡迎,而且在理論界也受到了不少批評(píng),大家怎么看待這個(gè)問題?以團(tuán)隊(duì)成員的親身體驗(yàn)來說,文檔的作用是什么?如何恰當(dāng)?shù)厥褂梦臋n?
蔡志宏:這個(gè)項(xiàng)目在嚴(yán)格的時(shí)間控制下完成的,振飛為每一個(gè)小的環(huán)節(jié)設(shè)置了一個(gè)Deadline,包括一個(gè)小圖標(biāo)的制作,我很佩服他可以這么精確的統(tǒng)計(jì)到工作量,做那么多的Excel表格和PPT來管我們。網(wǎng)站上線之后,我吃驚的發(fā)現(xiàn)在服務(wù)器的CVS目錄里面居然有上百個(gè)這樣的文檔,這些文檔中的有許多是用來記錄每次開會(huì)的情況和隨之而來的工作分配,事無巨細(xì)!我想如果微軟的Office要是這樣做出來的話,那肯定要拿好幾個(gè)電腦來裝這些文件。
朱偉波:文檔是軟件生命周期必不可少的東西。為了讓項(xiàng)目能有一個(gè)清晰且強(qiáng)壯的結(jié)構(gòu),就要做總體設(shè)計(jì),具體到運(yùn)用什么技術(shù),使用該技術(shù)對(duì)我們?nèi)蘸笥惺裁春锰帯⒁袚?dān)那些風(fēng)險(xiǎn),以及采用什么樣的結(jié)構(gòu)來開發(fā)等等,這些都一一記錄下了,為下一步的開發(fā)做好準(zhǔn)備。
在開發(fā)前我們還寫了一份詳細(xì)的概要文檔,這份文檔主要記錄了日后開發(fā)的細(xì)節(jié),比如包路徑、代碼的規(guī)范、需要的輔助類、每個(gè)包下放什么東西、公用類的簡(jiǎn)介、用法等等。這些文檔為日后我們查詢起到了舉足輕重的作用,為后續(xù)補(bǔ)充進(jìn)來的人員起到了很好的引領(lǐng)作用。在開發(fā)過程中依據(jù)這些詳細(xì)的文檔能衡量代碼、判斷思想是否一致、風(fēng)格是否統(tǒng)一等等。
文檔的作用主要是規(guī)范行為和風(fēng)格,讓大家有一標(biāo)準(zhǔn),避免在開發(fā)過程中走一些不必要的彎路。當(dāng)然,在制定文檔時(shí)需要全面考慮——要可實(shí)施。如果事先在寫文檔時(shí)不能考慮周全,那么可能直接導(dǎo)致項(xiàng)目失敗。
張春艷:文檔是主要的工作產(chǎn)品之一,好的文檔可以推進(jìn)后續(xù)的工作順利執(zhí)行。如:好的測(cè)試用例,第一、可以作為執(zhí)行測(cè)試的依據(jù)和參考資料之一;第二、如果公司的測(cè)試人員流動(dòng),新來的測(cè)試人員不會(huì)無從下手;第三、文檔也是公司的財(cái)富之一。
劉振飛:不要去寫那些走形式、對(duì)項(xiàng)目沒有實(shí)質(zhì)意義的文檔,比如變了味的所謂ISO9000或CMM認(rèn)證的那些文檔、極其復(fù)雜混亂的UML文檔:每個(gè)人心里都很清楚那種文檔沒有用處,但還不得不寫,勞民傷財(cái),非常可笑。
文檔的作用就是把問題想清楚、記下來,讓別人能夠看懂、能接手進(jìn)行維護(hù)。比如需求Spec的作用是幫助需求定義人把需求細(xì)節(jié)真正想清楚,對(duì)該模塊進(jìn)行詳細(xì)定義:功能描述、邏輯、界面、如何使用,就是站在用戶的角度去細(xì)化、去說明。需求Spec首先要自己想明白、并以別人能夠理解的文字記錄下來,作為開發(fā)的“合同”。Spec要及時(shí)更新,反映最新的狀態(tài)。
當(dāng)然在實(shí)踐中,中小企業(yè)的項(xiàng)目研發(fā)進(jìn)度都趕的比較急,把文檔細(xì)化到什么程度、如何保持更新,都是比較頭痛的事情。
示意圖:項(xiàng)目有幾十份各種格式的文檔,有效的文檔對(duì)項(xiàng)目成功極其重要
《程序員》:除了文檔,還有那些制度是你在這個(gè)項(xiàng)目中新建立起來的?如何保證這些制度的被理解和被執(zhí)行?
蔡志宏:除了文檔,就是無所不在的Bug Free(http://bugfree.1zsoft.com/)系統(tǒng)了,這讓我想到一句話,“體制化是這樣一種東西,一開始你排斥它,后來你習(xí)慣它,直到最后你離不開它。”開始的時(shí)候大家都比較討厭那個(gè)叫BugFree的那東西,實(shí)在是麻煩,感覺一個(gè)很小的事情都要發(fā)一個(gè)Bug,覺得純粹是在浪費(fèi)時(shí)間。后來發(fā)現(xiàn)這東西有它不可替代的好處,一個(gè)問題從出現(xiàn)開始到最后解決都有它跟蹤,效率反而提高了許多,盡管在后來對(duì)哪些問題應(yīng)該發(fā)Bug進(jìn)行了一些爭(zhēng)論并做了調(diào)整,但是BugFree系統(tǒng)在這個(gè)項(xiàng)目中起到了很重要的作用。
朱偉波:在這次開發(fā)過程中使用了CVS作為我們的版本控制,我們規(guī)定在上傳代碼到CVS時(shí)一定需要寫注釋,以便事后能很快的查詢。在開發(fā)組內(nèi)部開了一個(gè)會(huì)議,我重申了上傳代碼時(shí)寫注釋的重要性,并當(dāng)場(chǎng)上傳了一些不帶注釋的代碼,讓大家來恢復(fù)到我所需要的版本——在這種情況下大家很難一下就恢復(fù)到自己想要的版本。通過這種方法讓大家意識(shí)到自己原先的不規(guī)范的地方,統(tǒng)一認(rèn)識(shí),為保證下一步的研發(fā)打下了堅(jiān)實(shí)的基礎(chǔ)。
還有就是寫程序時(shí)要符合公司的代碼規(guī)范,其實(shí)就是在符合Sun公司的規(guī)范前提下統(tǒng)一我們代碼的規(guī)范性。做到這一點(diǎn)其實(shí)是很難的,大家來著不同的環(huán)境,以前接觸的人也是不同。這就要求大家都堅(jiān)持一個(gè)共同認(rèn)可的標(biāo)準(zhǔn),并嚴(yán)格的執(zhí)行這一標(biāo)準(zhǔn)。我很慶幸的是大家都能很好的堅(jiān)持我們公司制定的代碼規(guī)范,并且在我們公司的代碼檢查中順利的通過了考核。
張春艷:公司在測(cè)試這一環(huán)節(jié)的起步較晚,基本上是在今年的3月份才組建起了一只測(cè)試團(tuán)隊(duì),還有很多人認(rèn)為測(cè)試是一個(gè)可有可無的過場(chǎng)。還好有領(lǐng)導(dǎo)的支持與認(rèn)可,我們測(cè)試組努力把工作做得漂亮,證明自己存在的價(jià)值。用我們的實(shí)戰(zhàn)來告訴大家,測(cè)試不是隨隨便便就能完成的,而是一件有始有終、有流程、有規(guī)范、非常嚴(yán)謹(jǐn)?shù)囊豁?xiàng)保證產(chǎn)品質(zhì)量的工作。
在133網(wǎng)站的測(cè)試中,我們就是這樣證明了測(cè)試組存在的意義:
1、根據(jù)振飛制定的規(guī)劃,我們按時(shí)完成了測(cè)試進(jìn)度,沒有拖延錄入及上線時(shí)間。
2、首次采用Test Case的方法完成下載流程的測(cè)試,并且取得了很好的效果。此次的Test Case還可以移植到以后網(wǎng)站的日常監(jiān)控測(cè)試中。
3、測(cè)試效果體現(xiàn)。(1)保證后期錄入人員在錄入時(shí)不出基本錯(cuò)誤;(2)利用邊界值的測(cè)試方法,提前測(cè)試出錄入后前臺(tái)展示可能不美觀的情況,便于在錄入前給出提示或硬性規(guī)定(如輸入的專題名的長(zhǎng)度等),來保證前臺(tái)的展示效果和錄入的效率;(3)為了使大數(shù)據(jù)量的用戶訪問情況下不出問題,我對(duì)首頁進(jìn)行了100人同時(shí)訪問的壓力測(cè)試。
4、在6月15日上線前,做最后的回歸測(cè)試,保證上線產(chǎn)品的質(zhì)量。通過此輪的測(cè)試,至今還沒有得到公司內(nèi)部或外部對(duì)網(wǎng)站出錯(cuò)問題的反饋。
劉振飛:除了要求需求、開發(fā)、測(cè)試文檔外,我逐步建立了如下制度:
★ 嚴(yán)格的進(jìn)度控制,每個(gè)環(huán)節(jié)都要遵守自己同意的進(jìn)度
★ 用CVS來管理文檔和代碼
★ Java編碼要有規(guī)范
★ 每一個(gè)功能模塊都必須經(jīng)過測(cè)試
★ 項(xiàng)目進(jìn)展情況定期通報(bào)給全組同事
★ 有延遲的時(shí)候要立即提出來,及時(shí)找到補(bǔ)救辦法
★ 項(xiàng)目完了要及時(shí)總結(jié),驗(yàn)尸報(bào)告不是走過場(chǎng)
當(dāng)然我不可能在短短四個(gè)月中通過這一個(gè)項(xiàng)目把這些制度都打造的很完美。關(guān)鍵是通過這個(gè)項(xiàng)目給大家灌輸這些意識(shí),通過以后的工作實(shí)踐不斷強(qiáng)化,真正形成好習(xí)慣。這些制度其實(shí)都是研發(fā)中的基本素質(zhì)、本來就該這么做,所以面對(duì)這么多人、這么多事,我一個(gè)人有時(shí)難免有疲累、孤獨(dú)的感覺,很多時(shí)候只能抓住大的方面,一些細(xì)節(jié)只能忽略了,是很無奈的事情。
《程序員》:盡管133項(xiàng)目的完成已經(jīng)非常不錯(cuò)了,但在你的項(xiàng)目中仍然會(huì)再次提到“驗(yàn)尸報(bào)告”這個(gè)詞,你認(rèn)為項(xiàng)目還有哪些不足之處。
蔡志宏:我是第一次參與“驗(yàn)尸報(bào)告”,感覺很新鮮。的確在最后結(jié)束的時(shí)候,大家和振飛面對(duì)面的單獨(dú)總結(jié)了各個(gè)環(huán)節(jié)的工作,對(duì)整個(gè)項(xiàng)目的運(yùn)作有了更宏觀的視野,大家都站在一個(gè)更加高的角度來看待我們完成的工作。
朱偉波:我覺得一個(gè)人的成長(zhǎng)是在一件事即將結(jié)束的時(shí)候。在做項(xiàng)目時(shí)我沒時(shí)間過多的考慮去用什么新技術(shù)、用什么新概念、會(huì)有什么不足等等。這些都是在項(xiàng)目結(jié)束階段時(shí)我們總結(jié)所得,回顧項(xiàng)目過程時(shí)能發(fā)現(xiàn)有那些不足,這樣就有時(shí)間來考慮在下一個(gè)項(xiàng)目里用什么東西來彌補(bǔ)不足的地方。
我們開發(fā)組和振飛一起總結(jié)出來項(xiàng)目的不足有:(1)美工的工作進(jìn)度緩慢,在很大的時(shí)間里直接影響到開發(fā)的進(jìn)度。(2)我們不應(yīng)該讓美工的開發(fā)和代碼的開發(fā)并行的來完成,使得很多的代碼重復(fù)。(3)代碼的開發(fā)和測(cè)試的同步也是一個(gè)不可取的做法,在測(cè)試組前期測(cè)出的大量Bug,可是當(dāng)研發(fā)繼續(xù)往下走后這些Bug就不存在了。(4)還有一點(diǎn)就是當(dāng)我們完成這個(gè)項(xiàng)目研發(fā)后,網(wǎng)站營(yíng)運(yùn)人員遲遲不能到位,內(nèi)容跟不上。這是我們事先沒有考慮到的。
張春艷:任何一個(gè)項(xiàng)目都不會(huì)十全十美,就像一個(gè)再好的軟件也不會(huì)沒有Bug一樣。不是只有做得不好的項(xiàng)目才需要“驗(yàn)尸報(bào)告”。我覺得“驗(yàn)尸報(bào)告”是這個(gè)項(xiàng)目中很好的一個(gè)環(huán)節(jié)。不僅可以把好的東西繼承下來,還把不足的地方提出來,給以后的項(xiàng)目作為經(jīng)驗(yàn)。
劉振飛:Everything that has a beginning has an end. 項(xiàng)目總結(jié)最重要作用的就是“承前啟后,繼往開來”,表揚(yáng)與自我表揚(yáng)相結(jié)合、批評(píng)與自我批評(píng)相結(jié)合,不能走過場(chǎng)。不僅要在以后的工作發(fā)揚(yáng)光大成功的地方,更要解決這個(gè)項(xiàng)目中曾經(jīng)存在的問題,真正做到“吃一塹長(zhǎng)一智”。
示意圖:133網(wǎng)站項(xiàng)目的“驗(yàn)尸報(bào)告”
通過我這一年多的實(shí)踐,痛感研發(fā)管理不僅僅是某個(gè)項(xiàng)目?jī)?nèi)部管理的事情,它涉及到整個(gè)公司的發(fā)展戰(zhàn)略、領(lǐng)導(dǎo)層素質(zhì)、員工能力、薪酬體系乃至企業(yè)文化的建設(shè),僅僅從項(xiàng)目管理的層面去解決問題的成效將是非常有限的,這是一個(gè)系統(tǒng)工程,靠一人之力來完善是不現(xiàn)實(shí)的。