程序员如何精确评估开发时间?
一個程序員能否精確評估開發時間,是一件非常重要的事情。如果你掌握了這項技能,你在別人的眼里就會是這樣:
-
靠譜
-
經驗十足
-
對需求很了解
-
延期風險小
-
合格的軟件工程師
-
正規軍,不是野路子
評估開發時間的重要性
首先,在一個項目中,所有的環節都是承上啟下的,上一個環節結束的時間節點正是下一個環節開始的節點。那么在一個項目或者一次迭代正式啟動前,所有的環節都應該有個時間評估。以一次APP需求迭代為例,項目計劃像這樣:
1.UI設計圖 11.01 - 11.03(3工作日)
2.API接口討論與設計 11.04(1工作日)
3.移動端開發 11.05 - 11.15(8工作日)
4.后端具備聯調條件:11.11
5.產品體驗 11.16 - 11.17(2工作日)
6.測試11.18 - 11.25(5工作日)
7.發布11.26
根據項目計劃,各個部門自己要分配人員和時間。如果其中一個環節延期了,那么后面的各個環節都要順延,就會造成損失。
其次,對于程序員來說,一個清晰的開發計劃有助于自己有條不紊地開展工作,也能避免疏漏某個功能點。評估時間的過程,也是對需求詳細拆分的過程,了解要做什么,做成什么樣子。
在評估的過程中,根據專業知識和經驗,充分預估會遇到的風險,怎樣的解決方案,預留多少時間?都想好了的話,項目也就沒啥風險了。
然而,開發時間評估,最大的好處是程序員受益。認真地評估開發時間,會讓你在開始動手寫代碼之前搞清楚要怎么寫,每個模塊的設計心理得有個譜。從宏觀上拆分模塊,然后詳細地分解任務,具體到一個很小的功能點。
這樣你就能清晰地設計代碼,而不是堆代碼。也避免了很多時候寫著寫著發現不對,然后拉到重來的境地。就是要讓你動手寫代碼之前胸有成竹!
初學者為什么評估不準?
如果你的項目經常delay,那么八成是時間評估不準。
剛畢業的學生被問到什么時候可以完成的時候,腦門一拍:“三天”,實際上兩個星期過去了還沒完成。
這里有一張表,看看你是不是這樣子,對號入座:
越是老程序員越是“膽小”,評估時間越準。
如何精確評估開發時間
最近幾年,我都是以小時為單位進行時間評估的,有沒有覺得有點恐怖?長期以來這樣的習慣讓我收獲頗多。這得感謝我之前的領導,三年前強迫我們這樣做,剛開始很抵觸,后來才體會到其中的甜頭。
1、任務拆分
拿到新需求后,對其進行充分了解,不清楚的就去問清楚,然后對其進行模塊化。之后,再進行技術上的拆分。由大到小,再到細節。細到什么程度呢?細到一個按鈕的實現,細到一個點擊動作是要用按鈕還是要用手勢的定奪,最好能細到代碼塊的劃分。
這個能力是需要鍛煉的,做好拆分,然后在實際開發過程中根據實際時間花銷,回顧時間評估的準確性,以便讓下次更準確。慢慢地,就會越來越精確,評估時間有依有據,不再是拍腦門給出的時間。下面看一個例子:
2、合理認知時間
一天工作八小時,但你不可能專注地連續八小時在編寫代碼。一天的工作中,有開會、討論、階段性休息(刷新聞、喝咖啡、發呆)的時間開銷,真正有效時間其實不足六小時,雜事多的話可能是四五個小時。
3、預留buffer(緩沖區)
首先明確,預留buffer不是讓你隨便增加預估量,而是要明確知道buffer是給那些事情用的。要考慮到一下幾點:
首先是溝通時間,你開發的時候不可能是悶著頭一直寫代碼。要和UI設計師溝通,要和產品經理溝通,有可能還需要和組內的人溝通技術上的事情,以及和別的技術小組對接的問題。
等待時間。如果牽扯多部門協作,會有很多等待時間,因為你不能保證別的部門就能準確按照計劃時間完成的。雖然等待過程中你可以安排其他任務,但你不能保證其他任務就能剛好填充等待時間,更何況任務切換也需要時間成本。
突發狀況。例如,bug修改、需求微調、對接人請假。
不確定時間。和其他部門有交集的工作,最好多預留buffer。比如移動端和后臺聯調。后端信誓旦旦給你說11.11號可以進行聯調,這次聯調總共5個接口。如果你簡單地認為他們給你提供的接口沒問題,并且能順利請求回來數據,預計一天聯調時間足以,那你就等著delay吧。11.10號你已經準備好了所有聯調準備,如果數據能正確返回,你的解析功能都是OK的,因為你之前用假數據已經處理的好好的。到了11號,你請求第一個接口就報錯了,然后在即時通訊軟件上問他們怎么回事,半個小時后給你回了“不好意思,地址變了,你用這個試試”。又錯了……。終于回來數據了,然后發現缺少兩個字段……。就這樣,第一個接口調通已經快下班了。(當然很多后端技術人員也是很靠譜的,舉這個例子只是為了讓多考慮)
以上是可能會出現的狀況,實際中有可能只是出現了一部分,這要根據實際情況而定。并不是讓你能多預留buffer就多留,畢竟每個項目的時間都是很緊張的。一般buffer留在15%-25%。
4、回頭看
在實際開發過程中,測量實際花費時間,并與估算相比較。如果有些地方相差較大,就要看差在哪里,然后在下次預估中避免相同的差錯。
總結
編程經驗不等同于估算經驗。一個不被包含在估算流程中的開發者將不會擅長估算。同樣,如果實際的時間花費不被測量和用于與估算比較,那么將沒有反饋來學習。
最后,每個程序員都應該具備估算的技能。為磨練這個技能,接手每個任務時,先決定你要做什么。然后在開始之前估算任務所需時間。最后測量實際花費時間,并與估算相比較。同樣比較你實際完成的與計劃完成的。這樣你將會既提高你對一個任務包含細節的理解,同樣也提高了你的估算技能。
盡管進行了精確估算,也不能保證每個項目都會100%精確。偶爾會遇到一些突發情況和沒預估到的風險是不可避免的。那么面對風險,有一些原則可以幫助你:
-
報風險時間置前,如果開發開始或者任何過程有可能導致項目延期或者需求無法實現的時候就報警,不要等加班能實現或者存在僥幸心理;
-
對于不確定的需求,一定要溝通到位;
-
涉及到交互細節,必須提前溝通好,充分明確細節;
-
技術可行性方案提前調查清楚。
總結
以上是生活随笔為你收集整理的程序员如何精确评估开发时间?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试:Spring Boot 中的条件注
- 下一篇: Java 如何优雅的实现时间控制