リーンソフトウェア開発には決定を遅らせるというプラクティスがあります。拙速に物事を決定するのではなく、最終責任時点と呼ばれる、それ以上遅らせると問題が生じるタイミングまで決定を遅らせて、オプション(選択肢)を残しておきます。
Leanとは贅肉がなく引き締まった様子を表す言葉ですが、オプションを維持するにはアソビが必要だと考えています。しかし、それはリーンやその元となったトヨタ生産方式ではどのように考えられているのだろうと、ずっと疑問でした。
CCPMとの出会い
最近CCPMを知って、というか簡単には知っていたのですがTOC/TOCfEの勉強会に出るようになって、CCPMでは理想時間で見積もって計画を立てておいて、全体のバッファを管理するというイメージがなんとなくわかりました。そこで、CCPMもトヨタ生産方式の流れなので、リーンのプラクティスと合わせて考えてみました。
考えてみて気づいたのは、実はバッファは予想外の問題に対処する余裕でなく、プロセス設計上のアソビなのではないかということです。オプションを維持する目的で、個々のタスクにバッファを取らせず、バッファをまとめておくのではないかということです。
CCPMでは、普通に計画すると人間は各作業にバッファを取りながら見積もってしまうので、それらを取り払ってまとめておく事で効率的に作業できる。と説明されることが多い様ですが、実はそれだけではなく、もっと理論的な面があると思います。
従来の見積もり
リスクの定義を考えると
リスク=発生時の影響 × 発生確率
とされていて、これを各作業と共に積み上げて見積もるというのが、従来の方法です。
問題が発生しないなら、早く作業が完成するはずです。しかし、滅多にそのような事はありません。
もしかすると、よく言われる様に人間は楽な方に流れがちなので、問題が起きない場合もリスク込みの計画でゆっくり作業をしてしまうのかもしれません。あるいは、仕様変更など本来は計画にない作業を、別の問題用のバッファの工数で実施してしまうのかもしれません。
問題が発生した場合を考えてみます。リスク用の工数から作業を実施しますが、リスクには1以下の発生確率が掛けられていますので、これだけでは不十分です。そこで、残業やスケジュールの延長によってこの工数を確保する事になります。
このように、従来のリスク見積もりを各作業に割り当てる方法では、うまくいかないのです。
バッファをまとめる
そこで、各作業でリスクを見積もってもそれを各作業に積み上げるのではなく、プロジェクト全体のバッファに積み上げます。このようにすると、以下のようなメリットがあります。
- 理想時間に合わせて作業するので、問題が生じない場合には理想時間で開発できる
- 理想時間を超える理由が示されるので、問題解決や仕様変更の工数が明確になる
- リスクの見積もりが正しければ、複数のリスクが統計的に扱える様になって、問題の発生時にバッファの工数で解決できる可能性が高くなる
つまり、CCPMは理想時間で見積もられる本来の作業と、関連するリスクの見積もりを分離し、リスクを統計的に扱う手法だと思います。
CCPMのバッファを試算する
たとえば、25%の確率で発生する問題の解決に4人日が必要なリスクが4つあるとします。それぞれのリスクを単独で見積もるなら1人日なので、作業の見積もり誤差の解消や細かな仕様変更によってすぐに消えてしまうでしょう。
もし、見積もり通りに4つのうちの一つの問題が発生しても、確保できるのは1人日しかないので、3人日の工数があふれてしまうことになります。
しかし、リスクをまとめておくならば、全体で4人日を確保できます。もし、見積もり通りに1つだけ問題が発生すれば、バッファの工数で問題を解決できますので、計画通りに作業が完了します。
このように、リスクの定義からバッファの取り方を考えると、CCPMがなぜうまくいくかが説明できると思います。
オプションの確保を考える
ここで、オプションを確保する事を考えてみます。オプションを確保する場合もリスクと同様に考える事ができます。
まず、計画を立てる場合には最も少ない工数ですむ場合の工数で計画を立てておきます。そして、最も多くかかる場合の工数との差分をバッファに積んでおきます。
こうすると、必要に応じてバッファを取り崩して全てのオプション(選択肢)を実現できる様になります。リスクではないので複数を集めて統計的に扱う必要はありません。
ここで大切なのは、オプションを問題にしてしまわないことです。最終責任時点よりも前に決定して作業を開始すればバッファ工数内で納まりますが、仮決定で進めると手戻りが発生します。このような場合はオプションとしてではなく、予めリスクとして見積もるべきでしょう。
アソビは設計するもの
アソビはただの余裕ではありません。鉄道のレールとレールの隙間や、橋脚と橋桁隙間、などの様に熱による膨張や地震の揺れを計算して設計するものです。
開発の見積もりではリスクやオプションを計算して積み上げていました。しかし、それを計画する際のバッファの取り方や最終責任時点の考慮が足りず、うまく実践できなかったのです。
これは人生でも同じです。計画的にアソビを作って勉強をしていれば、多くのオプションを確保できます。しかし、アソビを余裕と考えて無駄に過ごしたり、アソビは要らないと仕事ばかりしているなら、未来はないでしょう。
リーンやCCPMなどトヨタ生産方式につながるもの、それは技術者が本来知っておくべきものかもしれません。