kazasiki's blog

プログラミングとかゲームとか

期限が複数ある場合のバーンダウンチャートの書き方

この記事では、プロジェクトにおいて期限が近いタスク群Aと期限が遠いタスク群Bがあるときにどのようにバーンダウンチャートを運用すると良いかを書く。 あくまでも提案のようなもので、こうすると必ずうまくいくという類いのものではないので注意してほしい。

バーンダウンチャートとは?

バーンダウンチャートをご存知だろうか。驚いたことに日本語のwikipediaの記事がなかったのだが、backlogの解説記事を読むと、以下のように書いてある。

「期限までに全ての作業を消化できるのか?」ということが一目で分かるグラフです。 バーンダウンチャートでは縦軸に「作業量」、横軸に「時間」を割り当てて残りの作業量がグラフ表示されます。時間が進むと残りの作業量が減っていくので、右肩下がりのグラフになります。

私がspreadsheetで書いた雑な図がこちら。この図では幸運にも期日通りに作業が完了している。

f:id:kazasiki:20180720231451p:plain:w600

進捗が芳しくない場合は 実線が理想線よりも上にある という形でひと目で分かるようになる。作業が終わらない不幸なプロジェクトは以下のようになる。

f:id:kazasiki:20180720232238p:plain:w600

複数の期限がある場合にどうするか

さて、バーンダウンチャートの紹介はここまでにして本題に入ろう。 基本的にバーンダウンチャートはチームに対して大きなタスクが1つだけあり、それには単一の締切(もしくはマイルストーン)があるという前提で書かれるものだ。 その大きなタスクを細かいタスクに分けて、その経過を見ることで全体の進捗を推し量る手法だ。 ただ、現実にはそんなにわかりやすい状況はあまりない。チームとして複数のタスクが同時進行し、そのタスクにはそれぞれ違う締切が切られている場合も多いだろう。

最初に述べたとおり、期限が近いタスク群Aと期限が遠いタスク群Bがあるときにどのようにバーンダウンチャートを書くと良いだろう? 前提として、タスク群の優先度は考慮しない。基本的にはA群とB群のどちらも必ず終わらせる必要があるし、進捗が悪くなれば残業なり、人を増やして対応するとする。

まず、A群とB群でそれぞれバーンダウンチャートを書くというのはどうだろう?これはうまく機能しない。図を書くまでもない。 例えば、A群の締切が5日後で、残りの作業量が4日分だったとする。また、B群の締切が10日後で、残りの作業量が8日分だったとする。 どちらも単体であれば、終わりそうに見えるが、A群→B群で順序で作業した場合、総作業量は12日分であり、B群の締切には2日分間に合わない。 別々にバーンダウンチャートを書いている場合、このことには気づきにくい。

最も簡単な解決策は、A群のバーンダウンチャートの上に、B群のバーンダウンチャート積み上げることだ。要するに、期限が近い方を下に置き、遠い方を上に積み上げていくグラフにする。 例えば以下の図のようにする。この図は作業Aは間に合ってるが作業Bは間に合っていない。

f:id:kazasiki:20180721002526p:plain:w600

この図は先程の説明とほぼ同じ状態になっている。作業想定は50h/日で、A群は4日分の200hを5日で、B群は8日分の400hを10日でやろうとしている。全体として600hを10日でやろうとする。 A群をこなすだけなら速度は想定より低い40h/日でも足りる。だが、A+B群をこなそうとすると、60h/日は必要だ。(わかりすくするために50h/日の補助線を緑で引いた)

この図ではお行儀よくA群を全て終わらせてからB群に取り掛かってるが、そうでなくてもこの図は同じように機能する。 これを通常のバーンダウンチャートと同じようにチーム単位や、個人単位で見ることが出来れば、速度の遅れやキャパシティの超過は同じように追えるだろう。

察しのいい人はわかると思うが、B群単体の理想線は引いても意味がない。なぜならA群の作業をしている間、B群の作業は進捗しないからである。A群と並列で作業している間は、B実線がB理想線よりも上にくるのは当然であり、そんな図を見ても意味がない。A群とB群にどのくらい作業量を振り分けるかを計画できているなら計画線(理想線とは別に実績の計画を書く線)は引けるが、そんな芸当ができるケースは正直そんなにないと思う。

あなたが使っているバーンダウンチャート作成ツールがこういった形式の出力にうまく対応できることを祈る。