預估建立軟體所需時間的精細藝術

我真的很想告訴大家我如何估計建立軟體專案所需的時間。

在過去的十年中,我已經被問了數百次這個問題。

  • “我們需要實現這個功能。你需要多長時間?”
  • “請給我一個詳細的概述,這個專案需要多長時間。一個月?兩個月?”
  • “我希望你發布這個。50小時的計費時間夠嗎?”

對於這些問題的答案,通常最多只是一個 賭注。或者只能是 一次躍進的信任,我知道,如果我承諾一個數字,無論實際所需時間短長,這可能都會是我的薪水。

有時候對於長期客戶,我能夠用相超出估計的專案來彌補我所期望完成工作的早期專案,讓客戶知曉。

最終,我只能說 " 我無法估計"。

所以,對於 “我真的很想告訴大家我如何估計建立軟體專案所需的時間” 的答案是:我不行

但我可以估計,沒有人真正能夠估計 建立軟體所需時間,因為這個領域內部的複雜性會對你產生影響。

“真正的工程師” 會發現這很難承認,但我從來不是你典型的真正工程師類型。

當你作為開發者工作時,估計可能是最困難的事情。

以下是一張很棒的參考表格,當你需要估計一個任務時可以使用。

任務 你的估計 你忘記的 實際所需時間
一個小的錯誤修復 2分鐘 我們需要找到在原始碼中有錯誤的函數,進行git pull,檢查我們是否破壞了其他函數,我們需要添加一些測試,執行測試,修復我們破壞的測試,部署,更新錯誤追踪器 2小時
一個小的功能 2小時 你需要修復代碼中待處理的TODO,並查看為什麼有一個 //don't touch this 註解。你需要仔細進行手動測試,加上瀏覽器測試,並檢查為什麼在Edge上的預期結果未達到預期。哦,我們還需要在文檔中更新所有截圖 10小時
改善端點的性能 10小時 你需要準確的基準測試,用於證明你的新實現方法正確運作,並添加以前不存在的10多個測試,否則你會有破壞數以萬計客戶使用的生產代碼的風險 5天
重寫整個前端代碼 3週 你開始使用你正在實驗的新的 更具可擴展性 框架,而不觸及UI,但你遇到了一整套完全新的問題,這次沒有StackOverflow或Google可以幫助,因為這個框架太新了。你遇到了獨特的問題,你需要雇用該庫的維護者來與你合作,但他已經轉向下一個偉大的事物。同時,UI團隊決定完全重寫界面,2次。在中途時間,產品經理希望將產品微調到稍微不同的產品 12個月

這可能是我們缺乏估計的很好估計,但事實上事情也可能相反:你估計需要5天的事情實際上可能只需1天,因為你發現一切都已經就緒,只需要添加它,所需時間比預期的少得多。

有些人可能會高估,預計他們可能會遇到困難,增加他們認為需要的30%。

團隊專案的估計甚至更困難,我甚至不會嘗試。

那麼該怎麼辦呢?

與其詳細估計,我建議與委托你工作的客戶、老闆或其他人進行持續溝通,每周檢查專案進度。而不是預先設定結束時間。

因為終究這個過程永遠不會結束。