頑張りすぎないソフトウェア見積り

こんにちは、エンジニアの岡本です。 主にBUYMAの出品者向け機能のサーバーサイドの開発を行っています。

この記事は Enigmo Advent Calendar 2023の1日目の記事です。

今年のアドベントカレンダーは生成AIの話題が各所でたくさん提供されると思いますが、私はソフトウェア開発における見積り、そして私がプロジェクトの計画を立てる上で実践していることについてご紹介しようと思います。

プロジェクト当初になんとなく立てた見積りが甘くて、リリース予定日が近づいているのに差し込みタスクが発生したり不備が発覚したりで、当初のスケジュールから遅れを出し、精神的に苦しい思いをしてしまうという経験が私にはあります。

見積りと計画立てに科学的なアプローチを取り入れたいという思いから、まず先人の知恵を求めました。

見積りを科学的に解説する本を探していたときに「ソフトウェア見積り 人月の暗黙知を解き明かす」という名著と出会いました。

通読した時点で、自身の経験と照らし合わせた上で以下の感想を持ちました。

  • 100%正確な見積もりは不可能

  • 3点見積りなどはちゃんとやろうとするのは難易度が高そう…

  • なんでも良いので、各タスクの規模感をカウントできるようにすると良いらしい

これらの感想を持った上で、以下では実際に現場で工夫して取り組んでいることを紹介します。

作業スケジュールを立てる上での工夫

タスクを切ってコードを書くだけではないので、以下の工程もスケジュールに組み入れるようにしています。

  • プロジェクト開始時点で「QA」「QA過程で判明した不具合修正」「リリース作業」もサイズを見積もっておく

  • 遅れることはあっても、早まることは基本的にないということで1~2週間程度作業バッファを初めから入れておく

見積もりに慣れていなかった頃、この二つをやっていなかったために失敗したことがありましたが、これらを意識するようになってからは大幅にスケジュールがずれることは無くなった感覚があります。

ストーリーポイント

人月などを試したことがありますがいい感触でなかったので、ストーリーポイントを使ってみることにしました。

プロジェクト管理方法はJiraで行っています。Jiraは見積もりという観点においては「ストーリーポイントが定義できる」という点が良いと思っています。

基準となるタスクを決めて、それを2ポイントと定義しています。フィボナッチ数に基づいて、振り返りミーティングにてスプリント計画を行うときに各タスクにポイントを割り振っています。基準タスクよりもすぐ完了できそうなら1ポイント、それよりも1日くらいプラス必要なら3ポイント、1スプリント(今のチームでは1週間)内で完結できるなら5ポイントという感じです。

1個のタスクに当てられるポイントの最大値は13と決めているのですが、大体のタスクは2~5ポイントくらいになるように分割されています。

私がいるチーム(squad)ではおよそ1年以上試行錯誤をしながらこのような方針でスケジュールを管理するようになっています。もしかしたら他にもいい方法があるかもしれないですが、その場合は適切にアップデートしていきたいと思っています。

現時点での結論

100%正確な見積りは不可能であると割り切った上で、各タスクの規模を数えられる形で単位化するという考えのもと、スプリントを計画・実行しています。

見積りの重要性を理解しつつも、実装の正確性やスピードの向上に焦点を当てることがソフトウェアエンジニアにとって重要な課題であると考えています。

私からは以上です。お読みいただきありがとうございました。

明日の記事は採用チームの廣島さんが登場します。


株式会社エニグモ すべての求人一覧

hrmos.co