軟件開發的項目周期大體分為3個階段:獲取需求和定義產品、開發和測試、部署和運維。
在獲取需求和定義產品階段,需要防止的不是進度太慢而是過快、過草率。特別是對于創業公司的產品經理來說,很可能因為看到開發人員無事可做而感到壓力,所以盡快完成產品定義,而沒有充分了解市場和競爭對手信息,沒有與合作伙伴充分溝通,沒有做深入的思考。這些因倉促而隱藏的問題,發現得早則導致開發階段大量返工,發現得晚則導致產品上線后不受歡迎。常聽一些人說現在互聯網開發,講究快速迭代和敏捷,邊做邊想,返工也正常。這是一個誤解。快速迭代指的是將不同版本之間的周期縮短,小步快跑,而不是在一個版本的周期內來回折騰。
在開發和測試階段,項目管理重在跟蹤進度和保持溝通—用集成和演示跟蹤進度,基于Bug溝通問題。要做到各個模塊外部接口相對清晰穩定,并盡早完成各個模塊間的集成,最晚不超過開發周期的1/4時間。第一次集成之后,就應該開始每日集成和每周演示。每日集成使得測試團隊每天能同步測試最新的代碼,幫助開發團隊盡早發現問題并及時了解技術細節上的進度;每周演示使產品經理、項目經理和管理層能從用戶的角度感受產品,使他們對產品有信心。集成和演示是項目管理的心跳,合理利用它們,有助于及時把握項目的健康程度。無論開發流程多敏捷,工程師能力多強,記錄和跟蹤Bug都是必不可少的。開發團隊和測試團隊的溝通都應該基于Bug,才能言之有物。開發工程師每次提交代碼都應該記錄是針對哪個Bug的,每日工作簡報都應該寫今天關/開了哪些Bug。要在每日晨會(站著開,一般15分鐘內)時說好,今天打算解決哪些Bug,其中有哪些點不清楚,需要和誰溝通。
在后期部署和維護階段,要快速響應。考驗的是團隊成員的責任心和抗壓能力。系統運維工程師要深夜工作,因為部署可能要在流量低的時候進行;項目經理要保持能隨時溝通,做出快速而準確的決定,鼓勵團隊并做出表率;一旦出現高危害Bug,開發團隊要在24小時內準備好補丁。Amazon的做法比較有趣:在產品剛上線一段時間內,開發工程師要保持24小時開機。如果自己負責的模塊中出現高危害Bug,那么很可能會在深夜被系統運維工程師叫醒。這樣不僅能保證快速響應,還能讓工程師意識到:前期代碼不好好寫,后期就別指望能好好睡覺了。
每個項目經理都希望能有效地控制項目進度。但這件看似簡單的事情,實際操作起來卻常常不盡如人意。即使在成熟的大公司里,有著完善的項目管理流程,配備著一流的團隊,項目延期事件還是頻頻發生。這里分析主要的三個原因。
很多項目經理,項目完成得很好,計劃也做得很漂亮,卻總是計劃趕不上變化。原因在于,有些時候,按工作量預估的發布日期卻得不到領導的同意,領導有時會說我們現在就是和時間賽跑,這個項目必須在某某時間發布。這將致使計劃推倒重來,一切都要趕進度。而對于其他團隊成員來說,這份計劃沒有同他們商量,無異于強壓任務。項目還沒開始,抱怨聲就不絕于耳。因此,項目工具選得好、任務劃分細致清楚只是做好技術的基礎,更重要的是項目計劃要得領導和團隊成員的認同,并愿意為之全力以赴。總之,想做好項目計劃,要做好以下三點。項目計劃前,先和產品經理、上級領導溝通好,確定這個項目的輕重緩急。團隊成員要達成一致意見,項目經理不可獨斷專行。項目計劃要細化到天、功能點要責任到人、確定里程碑點。
需求中的功能點要在PRD(產品需求文檔)中羅列清楚,業務流程要寫得完整清晰,交互細節要體現在視覺稿中。要組織項目組所有成員參加PRD評審,評審時要針對具體的問題,給出明確的處理意見。暫時不能確認的問題,問題跟進人要在限定時間內給出反饋,項目經理可以制定問題跟進表格。項目進行中的需求變更,盡量在前期提出。在項目管理的過程中,當前期的需求和計劃都確
定后,項目經理不能只顧著跟進開發和測試的進度,也要階段性地和需求方多溝通,讓他們及時反饋意見。不要等到臨發布時,產品經理跑過來說“我要的不是這樣的,這里要改一下”。永遠不要把問題留到最后一分鐘,要超前一步,留有余地。下面是一個真實的案例。案例情景:該項目的整個周期為2個月,有3輪功能測試。當第3輪功能測試結束時,也就是即將進入預發布階段時,產品經理才給出用戶反饋并要求按用戶的反饋修改。改動的地方涉及到頁面的樣式、文案、SQL語句和校驗邏輯等,總共可能有20多個文件要被改動。項目經理建議只改頁面的樣式和文案,其他部
分先不要改,等下次升級維護時再改,否則可能會影響發布。而在多次交涉無果的情況下,開發人員只能硬著頭皮修改,測試人員只能再重新測一輪。雖然大家努力地按需求方的要求做了,但項目延期已不可避免了。
為某項目臨時組建的團隊往往來自不同部門,團隊成員之間不熟悉,此時,要為團隊建立一個溝通通道,確保溝通順暢。常用方式為:建立一個內部網絡空間,所有文檔資源統一存放,供團隊成員共享;利用即時聊天工具,建立一個項目群,每天通報項目進度;建立項目郵件組,所有變更達成一致后,發送郵件確認;每天要開15分鐘晨會,每周一次周會,每周發送項目周報;跨團隊項目,最好申請獨立的項目室,所有項目組成員坐在一起工作,降低溝通成本。
項目管理的目的是能夠按照預定的成本、進度和質量要求順利地對人員、產品、過程和項目進行分析和管理。在項目管理中,有些細節需要引起項目經理的重視。
即先做少量的規劃,再根據實踐過程中得到的信息來做進一步的規劃,這樣可提高項目的可行性。試圖預測未來的規劃很難奏效,除非你是個預言家,否則應該盡量在項目中根據經驗做規劃和日程安排。
首先,要按可交付物安排日程,而不是按功能;其次,要以迭代的方式安排日程;再次,要使用難度較低的工具安排項目日程。過度追求完美的項目時間表可能意味著在實際項目中浪費更多的時間。
日程安排是由整個項目團隊共同制定的,因此,每個人都要對日程有信心。不過,天有不測風云,總會發生點兒意外,所以我們要做足夠的時間規劃,而且要使用波浪式規劃,這樣才可以隨著環境的變化靈活地更新日程安排。
在組織項目時,項目經理要盡量避免浪費時間的會議。要讓團隊將注意力集中在項目上,這是最簡單、最有效的方式。在幫助團隊朝著合理的交付截止日期前進時,要保證團隊不受外界干擾和影響。如果會議對于任何人都毫無價值,那就取消掉;同時準許團隊成員不參與無法貢獻和收獲價值的會議。也許有些團隊成員會不高興,認為你覺得他們不夠重要從而不能參加會議。要跟他們解釋清楚,你不讓他們參會是因為他們太重要了。
如果只能繪制一個圖表,那就選擇速度圖。速度圖集三種度量方式為一身:需求、已完成工作和時間。雖然無法從中看到自己希望了解的缺陷率或成本,卻能從該圖中對項目的整體進度有所掌握。使用速度圖可以使你在一張圖中同時度量多個趨勢:整體需求數量和已完成工作,其中包括所有的測試、文檔以及項目需要等其他內容。這是最有用的圖表,是項目經理的好朋友。但要注意,速度圖只是獲取數據的工具,不是目的。
從項目開始就要堅持“減少技術債務”的原則,讓測試與開發同步進行。測試會將項目的風險展現在眾人面前,大家越早看到這些風險越好。在采納順序式生命周期的項目中,要讓測試人員參與到需求分析階段,詢問他們關于產品需求的反饋;在采用迭代式生命周期的項目中,要請測試人員幫助評估原型;使用增量式生命周期的項目,只要有可供測試的部分,就可以讓測試人員盡早開始測試功能;在實施敏捷的項目中,要確保測試人員與開發人員一起工作,以開展技術層面的測試。同時,還要讓測試人員與產品負責人一起,編寫面向客戶層面的測試。