CCPM(クリティカルチェーン・プロジェクトマネジメント)とは?大型プロジェクトにはCCPMを取り入れよう【プロジェクトマネジメント講座 第6章】

 2023.01.19  株式会社システムインテグレータ

システム開発プロジェクトにおいて、もっとも避けたい納期の遅延。
余裕たっぷりのスケジュールや工数の計画ではコストがかかり過ぎてしまうので、いかに適正なバッファを積むことができることができるかが、納期とコストの最適化において重要です。
そんなバッファの積み方の手法として知られているのが、CCPM(Critical Chain Project Management)。
この記事では、CCPMの基本概念から具体的な方法、実践例まで詳しく解説します。
CCPMに関して解説した資料も無料で公開しておりますので、こちらも合わせてご覧ください。

CCPMとは

CCPM(Critical Chain Project Management:クリティカル・チェーン・プロジェクト・マネジメント)は、プロジェクトの各タスクの予算やスケジュールをぎりぎりに抑えて、その分、プロジェクト・バッファという余裕を設けておく管理手法です。

例えばホームパーティにお客様を招いて10人分のカツサンドを作るとしましょう。豚肉を切り、塩、胡椒をして小麦粉、卵、パン粉を付けるのに20分、キャベツをみじん切りしてマヨネーズをあえるのに10分、パンにバターとマスタードを塗るのに5分、サラダ油を熱してカツを揚げるのに20分、パンにキャベツとカツを挟んで3等分に切るのに5分と見積ると合計60分かかります。

通常、これらの工程はある程度余裕を含んでいます。各工程で見ている余裕を20%とした場合、それらを取っ払ってぎりぎりで計画すると、豚肉の準備16分、キャベツ用意8分、パン4分、カツ揚げ16分、仕上げ4分の合計48分となります。

【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 1図1:CCPM(クリティカル・チェーン・プロジェクト・マネジメント)の考え方

縮めた12分間をプロジェクト・バッファとして別途とっておき、各工程はぎりぎりにした計画で作業を進めます。結果、キャベツのみじん切りに2分多くかかり、カツを揚げるのに3分多くかかったとしましょう。それぞれの2分、3分をプロジェクト・バッファから補充するとプロジェクト・バッファの残は12分-(2+3)分=7分。当初の見積の60分よりも7分早まり53分でおいしいカツサンドが出来上がることになります。

なぜ、このような管理をするのでしょうか。それは人は目の前の目標に向かって進む習性があるので、余裕を含んだ計画値を与えたらその計画通りに作業をしてしまいがちだからです(パーキンソンの法則)。また、夏休みの宿題と同じく期限ぎりぎりになるまで緩んでしまう習性や、早く終わった場合にそれを報告しないという狡さもあります。

タスクに含まれる安全余裕を取り除いた上でタスクをつなげる(チェーンする)。その代わりとして工程の最後にバッファを設けます。そうすると各タスクはできるだけバッファを使わずに進もうと努力してくれるので、たとえオーバーしてバッファを取り崩すタスクがあったとしても全体的には予定期間内に作業を終えることができるのです。

CCPMのメリット

CCPMの主なメリットを3つご紹介します。

スケジュールを可視化できる

CCPMにより、スケジュールを可視化できます
個々のタスクにバッファが存在しないため、タスクに対してどのくらいの時間をかければよいのか分かりやすくなります。日々の作業量が明確になることは、メンバーのモチベーション維持にもつながります。
また、一元管理したバッファは、どのくらい残っているのか一目でわかります。そのため、プロジェクトに遅延が発生した場合に、遅延の速度や程度を把握しやすいのが特徴です。早期に対策を打てるため、プロジェクトを成功に導きやすくなります。

作業の優先順位がわかる

作業の優先順位が明確になります。タスクの進捗状況が分かりやすいため、遅延を明らかにできます。優先順位の高いタスクに優先的にリソースを配分するなどの対策が可能です。
また、プロジェクトのメンバーで全体の進捗状況を共有できるため、優先順位に対して不満が生じにくいのもメリットといえます。

チーム全体の体制を明確化

チーム全体の協力体制を確立するうえでも有効です。CCPMでは全体の進捗状況が分かりやすいため、メンバーは自分のタスクだけでなく、プロジェクト全体を意識できます。そのため、プロジェクト遅延の原因となっているタスクがあれば、自分のタスクでなくても解決しようという意識が働くはずです。結果的に、協力体制を築きやすい環境が構築できると言えます。

CCPMのデメリット

部署間の協力がないと成り立たない

CCPMは部署間の協力がないと機能しません。CCPMはプロジェクト全体を俯瞰できるのが強みです。その結果として、全体のバランスを考慮したリソース配分や、ほかの部署への協力体制が実現しやすくなります。しかし、これらのメリットは、各部署が自らのタスク以外に協力しようという意識がなければ成立しません。もともと部署間の交流が少ない場合は、メリットを活かしにくいといえます。
また、バッファが共有されているために、かえって浪費される恐れがあります。各タスクが出し合ったバッファを、すべて自分の部署で消費してしまおうと考えるメンバーもいるかもしれません。

短期プロジェクトには不向き

CCPMは短期プロジェクトには向いていません。短期プロジェクトであればもともと各タスクのバッファがあまり多くないためです。メンバーにとっては、非常に期限の迫った状態で作業をさせられることになるため、不満が生じやすくなります。また、そもそもバッファを確保することが困難な場合もあります。
チーム内に不満が生じないように、全体のバッファは消費しても良いという考えを浸透させることが大切です。各タスクの余裕を全体のバッファとして一元管理する以上、CCPMでは遅延を前提と考えなければいけません。バッファは使わずにとっておくものではなく、それが0にならないよう全体の状況を把握するための指標として用いましょう。

CCPMは経営にも効果が大きい

実は当社(システムインテグレータ)は2011年度から経営にもCCPMを導入し、大きな成果を上げています。経営にCCPMを導入とはどういうことなのか説明しましょう。通常、会社の予算(売上・利益)は各部門の予算の積上げ(逆に会社の予算を各部門に割り振りということでも同じ)となります。

① Σ各部の予算=全社の予算
この式だと、すべての部門が予算達成して初めて会社の予算が達成されることになります。逆に言えば、どこかの部門がコケてしまうと会社の予算も未達になってしまうリスクがあります。

そこで全社予算を決めた後で、各部の予算を5%積上げることによりバッファを用意します。どこかの部門がコケてもバッファから取り崩してカバーできるので会社の予算が達成されやすいのです。
② Σ各部の予算=会社の予算+バッファ(各部の予算×5%)

一見すると各部が予算に加えて努力目標を持つ方式に似ていますが、各部ごとに努力目標(バッファ)を持つのではなく、全体でバッファを持つことに意味があります。自分のバッファだと安心して使うことができますが、全体の共有バッファだと使うことに抵抗感があるからです。

このように会社経営にCCPMを取り入れた結果、年度によってバッファの詰める量や取り崩した量の変更はありましたが、CCPM導入前に比べて安定して予算達成ができるようになりました。この効果が期待以上だったので、以後、当社は経営だけでなく、大型開発プロジェクトに対してもCCPMを適用しているのです。

CCPMの具体的なやり方

CCPM的管理手法を導入する場合、どのように計画を立てて管理していくかを考えてみましょう。

ぎりぎりの計画(ABP: Aggressive but Possible)

「ぎりぎりの計画」とはどういうものでしょう。安全余裕を取り除くと言っても、人によりそれでも余裕を残すタイプとやり過ぎてしまうタイプがいます。一般的には確率50%、つまりその計画で収まる場合と収まらない場合が半々になるくらいでと言われていますが、そんな数値を持ち出したところで“ぎりぎり”の精度が高まるわけでもありません。

精度の高い「ぎりぎりの計画」を立てるコツはWBSをきちんと分解することです。分解された個々のタスクを“順調に行ったとして”と仮定して計画を立てることにより、全体の予定が“ぎりぎり”となるのです。


正規の計画(HP: Highly Possible)

いずれにしても「ぎりぎりの計画(内部目標)」と「正規の計画(外部公表値)」の両方を見積らなければ、どれくらいバッファにまわせるかが決定できません。計画を立てる順番としては、「ぎりぎりの計画」を立てた後に、余裕を加えて正規の計画を立てたいところですが、実際には「正規の計画」を立てた後で、余裕を取り除いた「ぎりぎりの計画(内部目標)」を立て、その差分をバッファとしてスタートする方が現実的です。 


バッファ捻出の工夫

バッファの捻出を、次の手順で行うとしましょう。
① WBSを展開する
② 個々のタスクを見積り、合計を正規の計画とする。
③ 個々のタスクの余裕分を取り除き、合計をぎりぎりの計画とする。
④ 正規の計画―ぎりぎりの計画=バッファとして準備する
この時に、難しいのは③の作業です。どの程度を余裕とみなすかは人に依存しますので、人に依ってはほとんどバッファが出てこないケースがあります。そのため、当社では正規の計画から一律20%を余裕としてスコーンとバッファにまわすという荒っぽいやり方を採っています。


管理上の注意点

CCPMでプロジェクト管理する場合、個々のタスクの進捗と同時にバッファの残を管理します。バッファの数値を残量に応じて緑⇒黄⇒赤と色を変えるのもよくやる方法です。この場合単純に残量に応じて色を変える方法と進捗と残量の関係に応じて色を変える方法があります。 【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 2

例えば、表1のように4つのタスクからなるプロジェクトで、各タスクの計画値の合計が3000、バッファを600取っていたとしましょう(つまり実行予算は3600)。タスクAでバッファを100使い、タスクBで50返し、タスクCで250使ったとするとタスクC完了時点でバッファ残量は300となります。もう少し頑張れるならタスク単位でバッファ使用量を把握するだけでなく、さらにタスク単位・月単位でバッファ使用量を管理します。

【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 3表1:タスク単位でバッファ使用量を管理

CCPMにはコストとスケジュールの2つの要素があります。コストのバッファ管理は表1のように簡単ですが、スケジュールのバッファは、クリティカルパスを考慮しなければなりません。

クリティカルパス上のタスクが遅れた場合は、バッファを取り崩さなければなりませんが、そうでないタスクが遅れたのであれば、トータルスケジュールに影響がないのでバッファはそのままです。つまり、スケジュールのCCPMを考える場合は、どれがクリティカルパスなのかをきちんと認識しておく必要があるのですCCPMCCCritical Chainである所以です)。

アローダイアグラムとは

クリティカルパスを算定するのに、アローダイアグラムをよく使います。アローダイアグラムはPERT図(Program Evaluation and Review Technique Chart)とも呼ばれる図法で、プロジェクト全体の納期をキープするために、タスクの関連状況を分かりやすく図示したものです。

先ほどのカツサンドを作成する作業を奥さんと2人でやったとしましょう。キャベツとパンの準備を奥さんに任せてアローダイアグラムで描くと図2のようになります。

【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 4

図2:アローダイアグラム(PERT図)

この図を見ると、たとえ奥さんと手分けしたとしても、豚肉の準備をしないと揚げる工程に入れないし、カツが揚らないと仕上げのカットができない、という関係が一目でわかります。

つまり、豚肉の準備20分、カツを揚げる20分、仕上げのカット5分、の合計45分より早くできるパス(ルート)はありません。この最短のルートのことをクリティカルパスと呼び、その合計の値がプロジェクト全体に必要な工期になるのです。

アローダイアグラムについてはこちらの記事で詳しく解説しています。
アローダイアグラム(PERT図)とは?書き方・読み方についてわかりやすく解説

クリティカルチェーンとクリティカルパス

ところで図1の計画では60分だったのに、図2では45分というのはどういうことでしょうか。それは図1は自分一人で作業する想定だったのに対し、図2は奥さんに手伝ってもらう想定だという違いです。

これがクリティカルチェーンとクリティカルパスの違いです。クリティカルチェーンがリソースを考慮した計画なのに対し、クリティカルパスはリソースを考慮しない(いくらでもつぎ込める)前提で最短いくらかを求めるものです。図1のガントチャートも、奥さんと2人で作業するなら豚肉の準備とキャベツ&ハムの準備を並行して行えるので45分で計画を立てることができます。リソースは人だけとは限りません。包丁が1本だけ、まな板が1つだけ、2人が並んで作業できる場所がない、なども十分考えられます。

この2つは組み合わせて利用することもあります。最初にリソースを考えずにクリティカルパスを考え、その後で用意できるリソースに照らし合わせてクリティカルチェーンを考えるという方法です。まあ、現実には手っ取り早く最初からクリティカルチェーンで考えることが多いでしょうが、納期最優先という場合はクリティカルパスを求めてから必死にリソースを探すというアプローチもあるでしょう。

クリティカルパスについてはこちらの記事でも詳しく解説しています。
なぜ現場はクリティカルパスを使ってプロジェクト管理していないのか?

CCPMの課題

CCPMの課題はいかにぎりぎりの計画を見積もれるかということです。各タスクの安全余裕を取り除いてそれを集計するにしても、正規見積の20%をスコーンとカットするにしても、実行部隊からすると余裕のない状態で作業をさせられる感がつきまといますので、巧妙に見えない形で安全余裕を持とうとしたりしがちです。

肝心なのはバッファを使って赤くなっても問題じゃないということを全員が共有することです。バッファがマイナスになって初めて予算オーバーとなるのですから、バッファを使ったからと言って責めない雰囲気作りを心がけるようにしましょう。

CCPMとOBPM

当社は1000万円以上のプロジェクトに対してCCPMを行っています。まず、各タスクの原価を普通に見積もって実行予算(画面1上部の51,239,000円)を承認し、実行時には各タスクの原価を2割カットしたぎりぎりの計画を設定します。

各タスクのぎりぎりの計画を月別に集計し、その合計(画面右端の原価と販間費の合計)がぎりぎりの計画となります。このぎりぎりの計画に対して、毎月の実際原価が置き換えられ(画面の例では6月までが実績)、過去の実際原価+今後の計画の合計(画面右端の原価30,418円と販間費10,958円)と実行予算との差がバッファの残りということになります。

バッファの減り具合はEVM を見ると一目瞭然です。画面2のEVMに切り替えると実行予算(PV:赤)と実コスト(AC:緑)の計画と実績がグラフ表示されます。このPV-ACがプロジェクト・バッファの残ということになります。

【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 5

画面1:実行予算(外部公開値)とぎりぎりの計画(内部目標)を月次で管理

【第6章】大型プロジェクトにはCCPMを取り入れよう:CCPM とは 6

画面2:EVMグラフでバッファの残りを確認

 


この記事の著者

umeda_2023

株式会社システムインテグレータ 代表取締役会長
梅田 弘之

1995年に株式会社システムインテグレータを設立。2006年東証マザーズ、2014年東証第1部、2021年東証スタンダード上場。ECパッケージ「SI Web Shopping」や開発支援ツール「SI Object Browser」、統合型プロジェクト管理システム「OBPM Neo」など独創的なアイデアの製品を次々とリリース。また、ERP「GRANDIT」をコンソーシアム方式で開発。2019年に著書「AIのキホン」を出版し、現在はThinkITで「エンジニアならしっておきたいGPTのキホン」を連載中。


RELATED POST関連記事


RECENT POST「プロジェクト管理」の最新記事


プロジェクト管理

スコープマネジメントとは【プロジェクトマネジメント講座 第8章】

プロジェクト管理

プログラムマネジメントとは?プロジェクトマネジメントとの違いやマネージャーの役割を解説

プロジェクト管理

ガントチャートとは【プロジェクトマネジメント講座 第9章】

プロジェクト管理

WBSとは?目的やメリット、作成方法について解説【プロジェクトマネジメント講座 第7章】

CCPM(クリティカルチェーン・プロジェクトマネジメント)とは?大型プロジェクトにはCCPMを取り入れよう【プロジェクトマネジメント講座 第6章】

OBPM Neo TOPへ

ブログ購読のお申込み

人気資料ランキング

'; if(tableOfContentsShowTop) { $('#hs_cos_wrapper_post_body').prepend(res); } else { if($('.Blog-Detail .blog-section .post-body h2').first().prev().length > 0) { $('.Blog-Detail .blog-section .post-body h2').first().prev().after(res); } else { $('#hs_cos_wrapper_post_body').prepend(res); } } bindAnchorLinkClickEvent(); } }); }); function bindAnchorLinkClickEvent() { $('#toc-box a[href^="#"]').on('click', e => { let target = e.target.hash.slice(1) let headerOffset = -80 let $ele = $(`#${target}`) if($ele.length) { e.preventDefault() let offset = $ele.offset().top + headerOffset - 40 $('html, body').animate({ scrollTop: `${offset}px` }, 400) if(target.slice(0, 6) != 'block-' && 'pushState' in history) { history.pushState({}, '', e.target.href) } } }) }