開発期間見積もりとバッファ
アプリ開発のプロジェクトマネージャーとして、開発者が開発期間の見積もりの際にバッファをきちんと取らなかったためにスケジュールが遅延するという状況を最近見たので、我々は開発期間見積もりの際に何を考慮していて、何をバッファに詰め込んでいるのか、ということを考えました。
前提として、我々のチームではアジャイル開発を行っていて、スクラム開発でしばしば行われるようなイベントもいくつか取り組んでいます。 また、開発工数ではなく、開発期間という言葉を使っていますが、これはプロダクトに関する実作業だけではなく、その他の要素も含めた、開発期間の見積もりについての検討なのでこのように表現しています。
まずは我々のチームのアプリ開発者が、ある機能を開発している最中に発生する作業を洗い出すとこんな感じです。(すべてがいつも発生する作業ということではないですが)
開発
- 技術調査
- システム設計
- 実装(Pull Request出すとこまで)
- 動作確認
- Pull Requestに対するレビュー指摘事項の修正
- 不具合修正
- 他のメンバーのコードレビュー
コミュニケーション
- ミーティング
- チームメンバーのヘルプ
- チーム外への報告、連絡、相談
キャッチアップ
- 休暇など、不在期間のキャッチアップ
- 使用する技術の習得
- チーム・開発方針への順応
プロジェクト進行
- タスク整理
- プロセス改善
運用
- 問い合わせ対応
- エラー原因調査
- チーム外部からの質疑応答
- ドキュメント作成
また、開発期間増大の要因を洗い出すとこんな感じです。
- 詳細要件待ち
- デザイン待ち
- 他者担当の開発待ち
- 要件漏れ・追加・変更
- 隠れタスクの発見
- 対象範囲の拡大
これら以外にも細々とした作業や、期間増大要因はありますが、パッと思いつく限りで書き出してみてもこれだけのものがあります。 そしてこれらの中で、見積もりの際になんとなく頭に思い浮かんでいる作業は見積もりに含まれていて、それ以外の作業と開発期間増大要因はバッファに含まれていると思います。
恐ろしいです...
私が開発者として期間を見積もる際、思い浮かんでいたのは「開発」のカテゴリに挙げたいくつかの作業だけだったような気がします。 それ以外はすべてバッファですが、バッファをたくさんとるのはなんとなく後ろめたい気持ちでした。 ですが、実際にはバッファにはとても多くの作業と開発期間増大要因が含まれていたのです。
ちゃんとバッファを取りましょう。 あと、チームで見積もりを行う際には、どの作業を見積もりに含め、どの作業をバッファに詰め込むのかを話し合いで統一しておくのが良さそうです。