個々のタスクに時間的な余裕を配置しても、プロジェクト全体を守るための安全余裕としては機能しないことをすでに書きました。
その原因となるものが2つあります。
一つは、プロジェクトそのもののシステム上の特性。もう一つは、プロジェクトを実際に行う人間の行動特性です。
ここではシステム上の特性を説明します。
プロジェクトは、いくつかのタスクから成り立ちます。
あるタスクが、別のタスクが作り出すものや状態(アウトプット)を利用しなければ開始できない、あるいは、そのアウトプットを待たずに開始することが著しく良くない場合、この二つのタスク間には「依存関係」があると言います。
プロジェクトを実行するための流れ(フロー)は、このタスクの依存関係によって決まります。
「プロジェクトに含まれるタスク間には依存関係がある。」
この依存関係のつながりで最も長い時間のかかる経路が「クリティカル・パス」です。
クリティカル・パスの長さが、プロジェクト全体の長さを決定しています。
クリティカル・パス上にあるタスクの遅れは、プロジェクト全体の遅れにつながります。
逆に、クリティカル・パス上にないタスクの遅れは、必ずしもプロジェクト全体にまでは影響しません。
クリティカル・パスではない経路(非クリティカル・パス)は、システムの特性上もともと時間的な余裕を持っているからです。
したがって、非クリティカル・パス上のタスクに配置した時間的な余裕は、プロジェクト全体を守るために必ずしも役立ってはいません。
重要なポイントは、配置した時間的な余裕がクリティカル・パスを遅れから守るために機能するかどうかです。
クリティカル・パスを守るために役立たない時間は、安全余裕とは言えません。
すでに述べた原理原則1’を考慮すれば、次の原則が導かれます。
原理原則2;「クリティカル・パスを守るために、安全余裕(バッファー)をクリティカル・パスの後ろにまとめて配置する。」
「クリティカル・パスを守ることが、プロジェクトを遅れから守ることになる。」
ことに反対する人はいないでしょう。
しかし、クリティカル・パスを”本当に”守るためには、非クリティカル・パスを軽く見てはいけません。
タスクの依存関係のなかには、多対一の関係があります。これを「統合ポイント」と呼びます。
複数の先行タスクのアウトプットを利用しなければ開始できない後続タスクがある場合、後続タスクの開始できるタイミングは最も完了の遅い先行タスクによって決定されます。
他の先行タスクがいくら早く完了しても、最も遅いタスクが完了するまで後続タスクは始めることができません。
したがって、複数の先行タスクの実行時間のばらつきのうち、もっとも遅れた結果だけが後続タスクに伝わります。
「多対一の依存関係(統合ポイント)では、一番遅れた時間だけが後ろに伝播する。」
統合ポイントにおいて、複数の先行タスクのうちのすべてのタスクが同時に完了しないために、後続タスクがいずれかのタスクの完了を待っていて開始できない状況を「統合ポイントにおける非同期」と呼びます。
統合ポイントにおける非同期がプロジェクトに悪影響を及ぼすのは、クリティカル・パスが早く終わっているにも関わらず、合流してくる非クリティカル・パスが遅れる場合です。
クリティカル・パスの遅れは、そのままプロジェクトの遅れになるからです。
統合ポイントにおける非同期は、関係する各タスクに配置しておいた時間的な余裕を一気に消費します。
さらに困ったことに、この非同期現象はタスクの内部レベルでも発生しています。
タスクに含まれる作業を開始する際に、必要な材料や道具、機械、スキルを持った人間、情報などが揃っていなくて、待ち時間が発生した経験はありませんか?
必要なモノがすべて揃った(同期された)状態でなければ、タスクは始められないか、もしくは始めたとしても完了できないことは、みなさん一度は経験済みと思います。
タスクの内部レベルでの非同期は、タスクに個別に用意していた時間的な余裕を消費してしまいます。
プロジェクト全体でみたときに、この非同期現象が実際に発生しているのかどうかは、タスク間の依存関係を明確に定義していなければはっきりとは確認できません。
したがって、現状ではまったく意識しないままに、非同期によって時間的な余裕が浪費されている疑いがあります。
クリティカル・パスが遅れることなくスムーズに進捗するようにするためには、非クリティカル・パスをクリティカル・パスに同期させる必要があります。
非クリティカル・パスをクリティカル・パスに同期する確実な方法は、非クリティカル・パスがクリティカル・パスよりも常に早く終わっているようにしておくことです。
そのために、統合ポイントに安全余裕(バッファー)を配置します。
これより原理原則2は次のように拡張されます。
原理原則2’;「クリティカル・パスを守るために、安全余裕(バッファー)をクリティカル・パスの後ろと統合ポイントにまとめて配置する。」
システム上の特性による時間の浪費を防ぐためには、依存関係を明確にしクリティカルパスを特定した上で、「クリティカル・パスを守るために、安全余裕(バッファー)をクリティカル・パスの後ろと統合ポイントにまとめて配置する」ことが必要なのです。
さらに、当たり前のことですが、タスクの開始にあたっては、
「タスクを実行するために必要なモノや条件がすべて揃っていることを確認してから始める。」
ことが必要です。