見積もりのずれ

最近、見積もりをしてから仕事に取り掛かるようにしている。プロのソフトウェアエンジニアとして見積もり能力は重要だと思う(たぶん)。「それ、簡単にできますよ(どやぁ」と放言して、できたのは半年後なんてのはプロとはいえない。

ちゃんと見積もって実績を評価してみたら、見積もりのずれは作業の遅れではなく、作業時間の不足から起こりがちだなと気づいたというお話。

見積もりの仕方

自分は次のように見積もりをする。

  1. 直感で全体の見積もり:「まあ、この機能なら1ヶ月くらいで出せるでしょ」
  2. 作業項目への分割:「作業的には、既存実装の調査、モデル側実装、ビュー側実装、テスト、バグ修正、リリース作業、かな。」
  3. 時間単位で見積もり:「これは2時間くらい、これは6時間くらい、あーこれは重そうだから16時間くらいかかりそう…」
  4. 足し算:「全部で120時間か…」
  5. 遅延係数1.5をかける:「1.5 をかけると180時間か…1ヶ月じゃおわんねーな」

脇道にそれるが、何を持って「作業終了」とするかは事前にマネジメント側と認識をあわせておくべき。しかし、「自分の作業物に一切手を加えないでプロダクション環境にリリースできる状況」を作業終了としておけばほとんどの場合でマネジメント側と認識がずれることはない。すなわち、設計、実装、コードレビュー、再修正、テスト、テストバグ修正、リリース準備とリリース、をすべて作業に含んでおく。

遅延係数

ほとんどのソフトウエアエンジニアは楽観的で自分の能力を過大評価し、作業の難易度を甘く見る。例に漏れず自分も楽観的である。「金曜までに終わるな」と思った作業は、大抵、次の週の半ばにリリースされる(or マージされる)。さすがに5年くらい仕事してると、こういう自分の性質を理解しているので、最終的な見積もりを出す時には直感の値に係数1.5をかける。

ちなみに 1.5 をかけると自分の直感と比較してだいぶスケジュールが伸びることになる。直感と反するので不安になる。こんなにも時間がかかるなんて無能だと評価されないだろうか…。しかし、仕事は信頼感の方が大事。見積もりには不安を抑える力も必要だ。

仕事は早いに越したことはない。しかし、できると言った期間にできてないのは困る。もし、早く終わらせたいのであれば、作業量を調整するかより腕の立つエンジニアを連れて来てもらうしかない。これはマネジメント層の問題であり、ソフトウェアエンジニア個人にはどうしようもない。

遅延係数の正体

さて、ようやく本題。

この遅延係数 1.5 の正体は何だろうか。この 1.5 は自分の能力の過信率だと考えていた。すなわち、自分は自分の能力を 1.5 倍過信している。直感による見積もりでは、作業をその分だけ過小評価している。と。

しかし、そうではなかった。

自分の作業にはポモドーロを導入している。これによって明確に集中した作業時間を計測することができるようになった。週のポモドーロ総数は大抵 40〜45 だ。調子のいい日は 12 程度確保できるが、調子が悪かったり打ち合わせが入ると 5〜6 だったりする。

この実績ポモドーロ数と作業見積もりの値を比較すると、実は見積もりの値は正確であることがわかった。すなわち、5〜6 時間を見積もったタスクは 10 ポモドーロ程度かかっている。ということは、この遅延係数は自分の作業自体の遅延ではない。

実は、見積もった値を日にちに変換する際に問題があった。8 時間勤務で、オーバーヘッド含めても7時間程度は作業できると考え、7時間で一日に変換していた。しかし、7時間の作業といえば14ポモドーロである。こんなにも集中して作業するのはほぼ無理だ。実測は平均で8~9である。実際、4~5時間がいい線である。

これが遅延係数の正体だ。

まとめ

結局のところ、ちゃんと集中して作業する時間を確保することこそが、遅延を回避する一番の方法だということだ(自分にとってね)