Programmer Time Translation Cheatsheet -or- Why

An experienced project manager I used to work with claimed that he took the programmers’ time estimates, multiplied by pi and converted to the next time magnitude to get the true number. 1 day converts to 3.14 weeks. He had learned the hard way that programmers are bad at estimating times. To get a more precise conversion, I’ve created a translation table for programmers’ time estimations, trying to narrow down where things go wrong.

Estimate The Programmer Thinks What the Programmer Forgot Actual Time

30 seconds There’s just a small change to the code to be done. I know exactly what to type and where. It takes 30 seconds to type. Time for starting the computer, the development environment and getting the right source. The time to build, test, check in and document the fix 1 hour

5 minutes It’s a minor thing, I just have to look up the exact syntax on google and fix it. It’s quite rare to find exactly the right information on the first try. Even if it is found, it probably needs some adjustments before it works. Add time for building, testing etc. 2 hours

1 hour I know how to do it, but it’s some code to write so it will take some time. 1 hour is too tight to have any margin for unforeseen problems. Something always fails. 2 hours

4 hours It’s some code to write, but I roughly know the step. I know the Wizzabanga module of our standard framework can do it, but I have to check the documentation on exactly how to call it. This is probably the only realistic estimation. It is large enough to have some margin for unexpected problems, while the task is still small enough to grasp. 4 hours

8 hours I first have to refactor the Balunga class into two, then I’ll add a call to the Wizzabanga code and finally add the new fields to the GUI There’s a lot of dependencies on the Balunga class from different parts of the system. About 40 different files have to be adjusted. The newly added field in the GUI has to be added in the database as well. 8 hours is too large to grasp completely. There will be more steps than the programmer thought of when estimating. 12-16 hours

2 days It’s really quite a lot to code. I have to add some new tables to the database, a GUI for those and then the logic to read and write data to the tables. 2 days of work is too large to overview for most developers. There will surely be things that are missed. Not just small things, but entire major pieces of functionality required will be forgotten during the estimation. 5 days

1 week Ouch… that’s a HUGE task. I don’t have a clue on how to do it, but I can’t say I don’t know. One week should be enough, I hope, I really hope, but I can’t ask for more or they’ll think I’m not competent enough. The task is way too large to get an understanding of for most programmers. It has to be sent back to an architect that can help splitting it in smaller parts and provide some direction how it should be solved. The architect might find a simple way to do it – or find that there’s a lot more work than expected. 2-20 days

Time estimation is hard. Every programmer has an interval where the estimations are realistic. Going below that interval means that the overhead (building, testing checking in code) was overlooked. Going above that interval means that the task is too large to overview.

For junior developers, the interval might even be non existing. They overlook the overhead while on the same time any non-trivial task is too large for them to overview. I’d say that an experienced developer should get anything between 0.5 hours and 24 hours right. Above 24 hours a breakdown is needed. It can be done in the head and then summed to 60 hours by the developer – but even someone experienced need to have manageable chunks to think of.

It is also important to understand that experience in programming is not the same as experience in estimation. A developer that’s not involved in the estimation process won’t get good at estimation. Also if actual time spent is never measured and compared to the estimates, there is no feedback to learn from.

Eventually, every programmer will have use for estimation skills. To prepare for that, decide when things are done for each task you take on. Then estimate the task before starting. Finally count the time spent and compare that to the estimate. Also compare what you actually had to do to your own definition of done. That way you’ll improve both your understanding of all the details involved in a task, as well as improve your estimation skills.

-------------------------------------------------------

プログラマーの時間見積もり用のカンニングペーパー すなわち、

なぜプログラマーは時間の見積もりが下手なのか」

経験あるプロジェクトマネージャーの私は、プログラマーの時間の見積もりには

時間がかかるという主張についてよく話し合ったものだ。円周率をかけ、

本当の数字を得るために次の大きさに変換する。1日を3.14週に変換する。

彼はプログラマーの時間の見積もりが下手だということを苦労して学んだ。

より正確な換算を行うために、私はプログラマーの時間見積もりについての変換テーブルを作り、

間違いを減らそうとした。

時間の見積もりは難しい。全てのプログラマは見積もりと実際の時間に隔たりがある。

オーバーヘッド(ビルド、ソースのテスト・確認)が見落とされることを意味する隔たりは

下振れする。作業が把握するには大き過ぎることを意味する隔たりは上振れする。

若手の開発者については、隔たりすら存在しないかもしれない。

彼らは把握するのに大き過ぎる重要な作業など同じようなとき、オーバーヘッドを見落とす。

経験のある開発者は0.5~24時間ちょうどまではがむしゃらにやるべきだと言うだろう。

24時間以上は解析が必要だ。それは頭の中ですることができ、それから開発者によって

計60時間まで加算される。しかし、経験ある開発者ですら、それについて

管理しやすい単位にする必要がある。

プログラミングについての経験と見積もりについての経験は違うという事を

理解する事もまた重要だ。見積もりのプロセスに関与しない開発者は見積もりがうまくできないだろう。

また、見積もりに関して、実際に費やされた時間が評価・比較されないならば、

そこから得るものはないだろう。

結局、全てのプログラマは見積もりの技術が必要だろう。

あたなが各作業に取り組むのを決める際の準備として。

最後に、費やした時間の計算と見積もりの比較をしよう。

また、あなた自身の定義付けのために実際にすべき事を比較しよう。

それが、作業に関係する全ての詳細に対するあなたの理解の向上と、見積もりのスキルが

向上する方法だ。

見積もり プログラマーの考え プログラマーが何を忘れるか 実際の時間
30秒 小さい変更があるだけで、どこの何を修正すればいいか正確に掴んでいる。30秒あれば修正できるだろう。 コンピューター、開発環境を起動する時間と、修正すべきソースを持ってくる時間。ビルドし、テストし、チェックインして文書を作成するまでの時間。 1時間
5分 たいした事はない、googleで正しい構文を探して修正するだけだ。 正しい情報が最初になかなか見つからない。たとえ見つかったとしても修正する前に多少の調整が必要だろう。 2時間
1時間 何をすればいいかはわかっているが、修正に少々時間がかかるだろう。 予期しない問題のために余裕を持っておくには、1時間は厳しい。たいてい何かしら失敗する。 2時間
4時間 修正をする必要があるが、大体どうすればいいかの手段は知っている。

標準フレームワークであるWizzabangaモジュールで修正できることを知っているが、

それをどうやって使えばいいのか文書を正確に確認しなければならない。

これはたぶん唯一、現実的な見積もりだ。予定外の問題に対する時間も十分だし、

さらに問題を把握する上でも適切な時間だ。

4時間
8時間 まず最初にBalungaクラスを2つにするためのリファクタリングを行わなければならない。

それからWizzabangaコードへの呼び出しを付け加えて、最後にGUIに新しいフィールドを加えるだろう。

システムのあちこちからBalungaクラスへのたくさんの依存がある。約40もの異なるファイルを修正しなければならない。GUIに新しく付け加えられたフィールドは同じようにデータベースに付け加えられなければならない。8時間は完璧に把握するには大き過ぎる(?)見積もる時に

プログラマーの想定より多くのステップが必要になるだろう。

12~16時間
2日間 かなり多くのコードを書く必要がある。データベースとGUIに新しいフィールドを加えて、

テーブルに対してデータを読み書きするロジックも付け加えなければならない。

2日間の作業はたいていの開発者にとって大きすぎる。必ずミスがあるだろう。小さい部分だけではなく、要求される全ての主要な機能の一部は見積もりの間、忘れられてしまうだろう。 5日間
1週間 大変な作業だ。それをどうやってやるかの手がかりすらないが、わからないとは言えない。1週間が妥当だろう。本当にそれぐらいの時間が欲しい。しかし、もっと時間をくれとお願いはできない。無能だと思われるだろう。 その作業は、たいていのプログラマが理解するには大変なものだ。確実にミスがあるだろう。作業を小さく分割するための手助けと、それをどうやって解決すべきかについての方向性の提供ができるアーキテクトに返信しなければならない。アーキテクトはそのためにシンプルな方法を見つけるか、または予想以上に作業があることに気づくだろう。 2~20日間