程式設計師-PM怎麼讓專案預估的時間更加準確
專案時間的估算對專案的成敗至關重要。專案時間管理包括了專案按時完成所需的各個過程。但是,在實際專案中,經常出現專案延期,估算嚴重不準確的現象。
一個我曾經共事過的很有經驗的專案經理曾宣稱說,他會拿程式設計師估計出的時間乘以π值,然後再提高一個數量級,這樣得出的才是正確的開發所需要的時間。1天時間經過變換後是3.14周。他經過慘痛的教訓才認識到程式設計師預估的時間都是不靠譜的。為了能更精確的對程式設計師估計的時間進行換算,我建立了一個時間換算表,重點說明究竟是什麼地方出了問題。
估計時間 | 程式設計師的思考 | 程式設計師忽略的事情 | 真正所 需時間 |
---|---|---|---|
30秒 | 只需要對程式碼進行很小的改動就搞定了。我清楚的知道程式應該在哪裡做修改、怎麼修改。只需要30秒時間。 | 啟動電腦的時間,啟動開發環境的時間,獲取原始碼的時間。編譯、測試、提交程式碼和文件修改的時間。 | 1小時 |
5分鐘 | 一個小問題,我只需要上谷歌上查查它正確的語法就能搞定。 | 你不可能第一次就能精確的查詢到正確的資訊,就算是找到了,在使用它之前你也需要對它做一些調整。還有編譯、測試的時間等。 | 2小時 |
1小時 | 我知道該怎麼做,但是這需要寫一些程式碼,所以要花一些時間。 | 1小時時間太緊張,沒有給任何未預料到的事情留下餘地。總有一些你預料不到的事情。 | 2小時 |
4小時 | 這需要寫一些程式碼,但我基本知道該怎麼做。我知道我們的標準框架裡的Wizzabanga模組能做這個事情,但我需要去查查文件看如何正確的呼叫它。 | 這可能是唯一一個符合現實的估計。在任務不是很大、能夠處理的情況下,它給未預料到的問題留下了足夠的時間。 | 4小時 |
8小時 | 我首先要重構Balunga類,把它拆分成兩個,然後在Wizzabanga模組里加入呼叫程式碼,最後在介面上新增一個新的表單域。 | 系統的很多地方都對Balunga類有依賴關係。大概有40多個檔案需要調整。介面上新新增的屬性的同時資料庫裡也要新增欄位。8小時是十分理想的狀況的時間。程式設計師在估計時間時總忽略了還有很多其它事情要做。 | 12-16小時 |
2天 | 這需要寫很多的程式碼。我需要在資料庫中新增一些新表,用一個介面來顯示它們,然後還要寫存取它們的邏輯程式碼。 | 對大多數程式設計師來說,2天時間能完成多少東西都是很難說的。肯定會有一些東西被遺忘。並不是指一些小的東西,一些主要功能上的重要東西也有可能在你估計時被遺漏。 | 5天 |
1周 | 哇塞…這可是個大任務。我還不知道如何實現它,我不是告訴你我不知道如何做。一週時間應該足夠了,但願,希望能夠,但我不會要求更多的時間,不然的話他們會說我能力不行。 | 這樣一個任務對於大多數程式設計師來說都很難理解消化。這個任務應該發回給架構師,讓他把任務拆分成更小的模組,對各模組應該如何執行給出一些指導。架構師應該能找到實現它的一些簡單的方法——或者認識到這個任務的工作量比他預期的要多。 | 2-20天 |
預估時間本身就很難。每個程式設計師的估計都會跟真正需要的時間有些差距。估計時間短了說明有些事情被忽略了(編譯,測試,提交程式碼)。估計時間超了說明任務太大,難以理解。
對於資歷較淺的程式設計師,這種估計誤差是混亂的,他們經常會輕視一些任務,同時又對一些稍微有難度的任務過分高估。我認為,對一個有經驗的程式設計師,一個任務的時間應該在半小時到24小時之間,超出24小時的任務都需要拆分。程式設計師在腦中想一想可能會認為要60小時,但實際上即使是很有經驗的程式設計師也需要將任務分成可控的模組再來分析做決定。
還有一個很重要的需要認識到的一點是,程式設計上的經驗並不等同於時間估計上的經驗。一個從沒有做過工期估計的程式設計師不會擅長估計時間。如果不去拿真正需要的時間和估計出的時間進行比較,你不可能從其它反饋資訊之得到正確估計時間的經驗。
每個程式設計師都會用到評估技巧。為了提高你的這項技能,你可以在你從事的每個任務上進行鍛鍊。在任務開始時先預估開發所需時間,拿它跟你最終真正用掉的時間進行對比。這樣,你不僅在對任務細節的理解上有提高,同時也提高了你對時間預估的技能。
專案時間估算其實是有章可循的
總結起來我覺得,對時間的預估與風險的控制關聯非常密切,預估時間長短根據風險進行評估;比如,專案實現技術複雜度,人員狀態,人員到位情況,資源到位情況等。當然預估時間還要考慮其他很多因素,比如成本,質量等因素。
預估完時間後在實際專案推進過程中,專案經理充當的更應該是一個實時監控、糾偏的角色,根據掌握的專案進度情況,提前預知風險,並採取必要的措施,使專案按計劃平穩的向前推進。
簡單總結下。拋個問題,專案管理過程中,由於技術複雜度評估不足或者需求變更導致專案延期,你作為PM會怎麼去處理這種情況呢?