ベロシティの安定化

今回はアジャイル開発における「ベロシティの安定化」について、僕の考えをまとめようと思います。 アジャイル開発をしていて、バーンダウン上に現れるベロシティーが安定せず、計画通りにうまくいってるかわからない、リリースの着地予定がわかりづらいと思ったことはないでしょうか?僕はこのあたりに悩んだことがなん度もあり、なんとかしたいなぁと思っていました。そこで色々な書籍を読んだり、自分で実践してみて効果があったものについてまとめようと思います。

ベロシティとは?

まずベロシティとは何かについて軽く説明します。色々な定義があると思いますが、ここでは対象となるチームにおいて、1イテレーションあたりで消化できるストーリーポイントの合計とします。

なぜベロシティを安定させたいか

冒頭でも触れましたが、そもそもなぜベロシティを安定させたいかについて僕なりの考えを説明します。すばり理由は「より正確にリリースのタイミングを予測」ためです。リリースのタイミングが予定より、遅れているか、早いかを知ることで、色々なステークホルダーに対するコミュニケーションの仕方を変えることができます。予定より遅れそうなのでリソースを増やしてほしいであったり、リリースが早くなりそうだからPRを打つタイミングを早めた方がいいなどの経営的な意思決定を支えることができます。 ではベロシティが安定していないとどうなるかといいますと、いつリリースされるかの予測がとてもしづらい状況になってしまします。例えば、1イテレーション目が2pt、2イテレーション目が10pt、3イテレーション目が4ptだとします。平均をとってこのチームのベロシティを(2+10+3)/3=5ptとすると、リリースまでに40ptのとき、40pt/5pt=8イテレーションで開発が終わると予測することができます。ただ正直2pt、10pt、3ptもぐらぐらしたバーンダウンを見て、本当に8イテレーションで終わると自信をもって自分たちが言えるか、他の人が納得できるか結構微妙だと思っています。たまたまその3つの平均をとったときのベロシティが5ptなだけでは?と捉えられてしまいます。一方これが例えば、1イテレーション目が4pt、2イテレーション目が6pt、3イテレーション目が5ptだとします。このときベロシティが5ptと説明されると割と皆さん納得できるのではないでしょうか?開発チーム側も自信を持ってリリースの予測を伝えることができます。

どうやって安定させるか

ではどうやってベロシティを安定させるのでしょうか?いくつか効果がありそうなものを3つご紹介します。

リリースに拘る

1つ目がリリースに拘るです。ポイントはDoneにならないと計上されないので、いかにリリースに拘るかが重要です。CI/CDパイプラインは常に整備しておく出会ったり、B/Gデプロイメント、フィーチャートグルなどを活用して、安全、安心にリリースできる仕組みを整えることが重要です。(ここでいうリリースはお客様に公開するだけでなく、内部的なリリースも含めてリリースと呼んでいます)

ストーリーを細かく分割する

2つ目がストーリーを細かく分割するです。極端な例で言うと、1週間では終わらないストーリーがあると、その1週間は0ptになってしまい、次のイテレーションに大きく計上されることになってしまいます。ストーリーが細かいとイテレーションのはじめでもDoneとなるストーリーの数が以前より増えると思います。それに後述するリファクタリングのレベルの調整がしやすくなります。

リファクタリングのレベルを調整する

3つ目がリファクタリングのレベルを調整するです。 順調に進んでいる時に大きめのリファクタリングをし、消化が悪い時は少なうことで、ベロシティを平準化させることができいます。例えば、普段ベロシティ8ptぐらいのチームで、現在、イテレーションの半分で6pt消化できているとなれば、余裕があると認識ができ、もう少し気になるところをリファクタリングしようといった行動がとりやすくなっていきます。このリファクタリングによって未来のベロシティを向上させることができるので、とてもいい効果があると思います。

1イテレーションの長さを長くする

4つ目は1イテレーションの長さを長くするです。ここはメリデメがあり個人的にはそこまでおすすめはしません。基本的にイテレーションが短いほどベロシティは不安定になります。終わり切らないストーリーが発生しやすくなったり、思ったより重いストーリーが重なってしまったりするからです。一方イテレーションが長いと、変化への対応が遅くなると言うデメリットがうまれます。ここはバランスが大事なところです。僕のおすすめは1週間のイテレーションにして、ストーリーの分割でベロシティを安定化させる方がいいかなと思っております。

まとめ

以上僕が考えるベロシティの安定化をさせたい理由とその方法でした。一方でベロシティを制御しにいくものではないと言う考えもあるとは思います。しかし、僕個人としては一定意識してコントロールすることのメリットは大きいとお思い上記の考えを述べさせていただきました。 以上お読みいただきありがとうございます。