ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

スケジュール計算とラグとカレンダーの関係

はじめに

ラグは先行アクティビティに対して後続アクティビティの開始を遅らせる時間の事です。本エントリではスケジュール計算にカレンダーを適用することで、ラグの調整を必要とするケースがあることを説明します。

カレンダーの影響を受けるラグ

ソフトウェア開発のプロジェクトを考えます。
このプロジェクトのタスクには「テスト」と「バグ修正」があります。「テスト」を進めてから「バグ修正」に取り掛かるため、この2つのタスクに3日間のラグを設定します。

カレンダーを適用しないスケジュールを示します。

f:id:pato_taityo:20160624103008p:plain

次にカレンダー(土日休み)を適用します。

f:id:pato_taityo:20160624103018p:plain

ラグには土日が含まれています。果たしてこれは想定通りといえるでしょうか?
このケースのラグは「テスト」を「バグ修正」に対して3日間分先行させるために設定しました。ですが、カレンダー適用後は「テスト」が実質1日分しか作業しておらず、想定と合っていません。
同様の問題は土日を考慮して設定したラグがスケジュール調整を受けて土日を挟まなくなった場合にも発生します。この場合は必要以上のラグとなります。
このように、ラグが休日の影響を受けるケースではスケジュール調整の都度、ラグの設定を見直す必要があります。

カレンダーの影響を受けないラグ

建設プロジェクトを考えます。
コンクリートの打設から固まるまでの3日間をラグとして設定します(ちなみに、実際の養生期間はもっと日数が必要なようです)。

カレンダーを適用しないスケジュールを示します。

f:id:pato_taityo:20160624103200p:plain

次にカレンダー(土日休み)を適用します。

f:id:pato_taityo:20160624103209p:plain

今回のケースであればラグの調整が不要です。なぜなら、コンクリートが固まるのに必要な日数は休日の影響を受けないからです。
ただ、このようなケースではスケジュール効率化のため、ラグが休日をまたぐようにスケジュール調整している場合があります。このような場合、スケジュール調整の際にタスクもしくはカレンダーの見直し(休日の変更)が必要となるかもしれません。

ワークアラウンド

ラグとカレンダーの関係(影響の有無)を設定したくても、ツールが対応していない場合もあると思われます。これに対する一つの案として、タスクに個別のカレンダーを設定可能であれば、ラグをタスクで表現する方法がありそうです。
つまり、ラグと同じ期間のタスクを作り、ラグに代えて前後のタスクとの依存関係をセットします。そして、ラグを置換したタスクには適切なカレンダー(土日休みもしくは休み無しなど)を設定します。こうすることで、スケジュール調整の際に全体のカレンダーに影響を受けず、ラグ(を置換したタスク)の計算が行われることを期待できます。

f:id:pato_taityo:20160624103218p:plain

ただ、この方法は本来タスクでないもの(ラグ)をタスクで表現しているという問題があります。
また、ツールでタスクに個別のカレンダーを設定でき、かつツールが個別に設定されたカレンダーでスケジュール計算を行う必要があります。手元のツールではスケジュール計算がうまくいかず、このワークアラウンドの有効性を実証できませんでした。
より良い解決案などありましたら、コメントいただけますと幸いです。

まとめ

ラグにはカレンダーの影響を受ける場合・受けない場合があります。カレンダーの影響を受ける場合はスケジュール調整と合わせてラグの調整が必要となります。また、カレンダーの影響を受けない場合でもリソース効率化の面から調整の必要な場合があります。
タスクのラグを設定する際にはそのラグが何を意味しているのかを考え、カレンダーの影響を考慮する必要があります。

また、ツールによってラグとカレンダーの扱いは様々だと思われます。お使いのツールがどのような方針でラグとカレンダーを扱うか把握し、活用していくことが必要となります。