軟體工程師如何估算專案時間

2021-08-19 12:59:33 字數 2716 閱讀 8529

原文:the software engineer』s essential time estimation guide

作者:kat busch

翻譯:雁驚寒

譯者注:本文介紹了軟體工程師在開發過程中進行時間估算的原因和方法,從而可以更加合理地安排專案進度。以下是譯文。

我的乙個產品經理朋友最近跟我提起她遇到的問題:「軟體工程師永遠不會估算他們的專案需要多長時間。我能做什麼呢?「 兩位ceo最近也告訴了我同樣的事情。

我們的工程師也都證實了這一點。我曾經看到過原本預估只要兩天就能完成的專案最終卻花了4個月的時間。在這種情況下,即使是採用「只需把時間翻倍」的經驗也比實際情況差了乙個數量級。這可能會對業務產生真正的影響。我曾經見到過一家公司為了一場發布會而竭盡全力,但是最終還是推遲了幾個月。

站在較高的層次來看,問題出在工程師估算的時間與pm、經理、公關人員以及其他所有人估算的時間不一致上。大多數地工程師從本能上想的是,如果一切按照計畫進行,寫出乙個可以執行的原型所需的最短時間。但是,那些受阻的下游部門想要知道的是專案什麼時候能夠為發布準備就緒,這完全就是另外一回事了。

對於工程師來說,掌握估算技能是一段終身的旅程。如果忽視它,這會讓你以及與你直接或間接接觸的每個人造成麻煩。掌握估算技能能讓你在同事中脫穎而出,你的同事會把你跟專業、穩定和高質量的工作聯絡在一起。

讓我先回答一下從工程師那裡聽到最多的問題:「為什麼要這麼麻煩估算時間?」許多任務程師抱怨這是乙個額外的開銷。 「如果我加把勁全力去做的話,很快就能完成了!」

進行估算主要有兩個原因:存在外部依賴,以及需要確定優先順序順序。

任何有效的事情都不會在真空中發生。專案通常都具有外部依賴性,例如跟非工程團隊(通訊、金融、公關、客戶支援)、其他工程團隊甚至終端使用者之間的協調。與外部依賴協調通常是經理、pm或ceo的工作。這意味著最有資格做出時間估算的人(工程師)並不是最需要估算結果的人。這種不對稱性導致了最主要的緊張關係。

時間估算也是確定工作優先順序順序的關鍵。 「物有所值」是工程中的一項重要指標,沒有經過真正的估算就不值「錢」。即使你正在開發的功能是世界上最棒的東西,如果你花時間做乙個全面估算的話,你可能也會意識到需要花太多時間來完成。

假設你正在開發乙個專案,它能使**的速度提公升50%,但在相同的時間內,你可以完成兩個專案,這些專案能使**快40%。如果你不花點時間做乙個初步估算的話,你永遠都不會知道自己本來可以做出乙個更快的**!

現在大家都同意時間估算在絕大多數情況下都是必須的,下面我們就討論一下估算技巧吧。

我們低估時間是因為我們想的是「寫出乙個基本版本需要花多長的時間?」

但是交付出去的東西要比基本版本龐大得多。你需要考慮編碼、測試、除錯以及優化程式所花費的時間。別忘了還有開會、訪談、**評審、傳送郵件等事情。

我們低估的另乙個原因是我們在編碼的過程中總是會遇到「未知的未知數」。而這些是不可能完全預料到的。也許你的ide要進行更新而中斷了你的專案,然後你不得不花一整天的時間去弄好環境。你的估算是無法將這個也考慮進去的。

但是我們的估算依然能夠做得比最初的直覺要準得多。以下是我的做法:

在開始乙個重要的專案之前,你應該已經有了乙份技術計畫或者設計文件了。用這個來讓其他人知道你在做什麼並且獲得反饋。技術計畫是開始進行時間估算的理想的地方。當你在關注技術細節時,你發現的那些未知的未知數就已經在魔術般地改進你的估算了。也許你會意識到你可能要把某個庫更新到最新版本,這個可能要花你一天的時間。你甚至還可能會意識到自己本來打算要用的乙個庫根本就不存在,得自己寫。

想要知道技術計畫裡應該要考慮哪些東西,可以看看alicia chen的這篇文章。關鍵點之一是消除跟pm或者其他利益相關者之間的分歧,這樣最後才不會把東西做錯而不得不重新開始。

估算技術計畫裡每乙個步驟完成所需的時間。這通常涉及到對細節的研究(「是不是已經有現成的庫來實現這個了?」)。根據專案的性質,丟擲乙個簡單的原型可能有助於暴露很多潛在的痛點。

現在你已經有乙個初步的時間估算了,不過我們還要考慮上文提到過的很多東西。

一旦你把所有這些交付所需的時間開銷都考慮進去了,你就會看到自己的時間估算跟專案的實際發布時間會更加匹配。是的,實際情況會比估算的更長。是的,你可能會在縮短工期上受到壓力。但是,當大家都知道可以依賴你時,他們會欣賞你的估算。

是的,在專案完成之後再回過頭來看看你的時間估算感覺是一種痛苦。但是這種回顧就是你可以學到東西的時候,並且下次能做得更好。

你肯定會看到你估算的能力隨著時間的推移而得到提公升。你甚至可以在這個時候找到一些有助於整個團隊的偉大見解。

盡早地、經常地跟別人溝通你的時間表和變化。如果你在發布前乙個月讓你的經理知道你正在使用的乙個庫被發現了乙個新的安全漏洞,你將不得不重頭開始的話,他們將有時間通知公關、財務或者使用者說版本需要推遲。

跟相關參與者進行溝通也會讓他們為你提供可影響你估算的重要資訊。某位設計師可能會說:「哦,如果那個花絮動畫需要整整一周才能做出來的話,我們乾脆砍掉好了。」pm可能會補充說:「這只是乙個在使用者研究中進行實驗的原型。這次迭代我們不需要做太多的bug大掃除。」經理可能會說:「你有一半的時間都用在開會上了?讓我來幫你解決這件事!」

對於工程師來說,不要屈服於壓力,為了取悅上級而報告比實際情況要短的時間。誠實地說明你的估算和變化的方法,這顯得你更加的專業。

對於涉及到的其他任何人來說,尊重估算出來的時間是很難的,這需要乙個過程。你只有坐下來砍掉發布時不需要的功能才能減少時間。嘮叨是不可能把時間減下來的。

我們永遠都無法完美地估算出專案的時間。唯一的辦法就是開放溝通、有惻隱之心以及堅定地確定優先次序。

如何成為Google軟體工程師?

原文 http www.google.com.hk intl zh cn jobs lifeatgoogle meet 招聘的流程?簡歷篩選 訪談 現場面試 offer發放 面試包括哪些內容?如何對申請人的工程技能進行評估?我們會根據以下四個方面來進行評估 如何準備面試?認識google員工?和他聊...

如何成為明星軟體工程師

如今,每家公司都似乎成了科技公司。從軟體創業公司到投機性投資公司 製藥巨頭和 巨頭,它們都越來越多地加入到軟體業務行列.質量不僅成為了乙個必需品,更成為了乙個競爭優勢。因為眾多公司圍繞軟體而競爭,開發軟體的人 軟體工程師正顯得越發重要。但是,你該如何發現那種百裡挑一的程式設計師呢 1.盡可能找乙個這...

軟體工程師如何應對面試

軟體工程師如何應對面試 做軟體的人都討厭面試,我也一樣。可為了找工作,提薪水又不得不面對面試這一關。做軟體時間長了,人會變得內向,不太善於表達自己,可是面試是乙個自我推銷的過程。其實正確的態度是應該把面試當作軟體人的人生常態。軟體行業的特點決定了做軟體的人經常需要變換工作。即使進了微軟這樣大企業裡,...