四方山話/同人ゲームを完成させるためのヒント/CCPM編

Last-modified: 2016-03-18 (金) 11:56:40

ここではCCPM(Critical Chain Project Management)をベースに説明する。基本編の差分のみ書いている。*1

CCPMの概要

  • TOC(Theory Of Constraints;制約条件の理論)に基づく全体最適化されたプロジェクトマネジメント手法
  • 各タスクを保護するのではなく、プロジェクト全体(クリティカルチェーン)を保護する点、プロジェクトの遅れと進みを後工程に伝搬させる点が最大の特徴
  • 従来の(基本編で紹介した)手法に較べ、約25%工期を短縮できる
    • 工期短縮(スループット)を重視している。一方、コストワールドの指標(例えばリソースの稼働率)は重視していない
  • 人間の行動心理・行動特性にも配慮している

例えば、基本編で使ったガントチャートは、CCPMでは次のように変わる。

gannt2.gif

従来の手法CCPM
タスクはなるべく早く開始するタスクはなるべく遅く開始する
計画通り進むよう管理する作業は半分くらい遅れても構わない
個々のタスクを管理するプロジェクト全体を管理する
必要なモノを必要なときに後工程に引き渡す完了したらすぐ後工程に引き渡す

ポイント

WBSを作るところまでは基本編とだいたい同じ。厳密には基本編ほど詳細にタスクを分解する必要はない。*2

シングルタスク

リソース(もっぱら作業者)の重複をなくし、リソースのパフォーマンスを最大限に発揮させる。

  • 作業者に複数の作業を同時並行させるより、1つの作業に集中した方が作業効率は上がる*3

クリティカルチェーン

「作業工程上の従属関係」と「リソースが限られているために発生する従属関係」の双方を考慮した上で、最も時間的に長く掛かるタスクの繋がりのこと。作業完了に要する期間を決定する。

  • クリティカルパスからリソースも重複しないようタスクを配置したものがクリティカルチェーンと考えれば良い

プロジェクトバッファ

プロジェクトを保護するための時間的余裕は、全てクリティカルチェーンの最後に配置する。これをプロジェクトバッファと呼ぶ。*4

  • 時間的余裕の量がスケジュール上に現れるので、現場の不信感を払拭できる*5
    • 同時にプロジェクト遅延時の危機感も共有できる。
  • 各タスクはギリギリの日数(予定通り完了する確率が50%)でスケジュールする
    • 予定通り完了する確率が90%程度の日数で見積もってもらい、バッサリ半分程度(正確には56%か)に調整するというのも手だ*6
  • プロジェクトの遅れも進みも後工程に伝播させる
    • もし、クリティカルチェーン上のあるタスクが1日遅れたら、プロジェクトバッファを1日消費。以降のタスクが1日後ろにずれる
    • 逆に、1日早く完了したら、プロジェクトバッファが1日増加。以降のタスクが1日前倒しされる
  • プロジェクトバッファの日数はクリティカルチェーンの50%程度を見込む
    • あるタスクの遅れは別のタスクの進みにより打ち消し合うため、プロジェクトバッファをクリティカルチェーンの半分の日数にしても納期を守ることができる(中心極限定理)
    • 従来の手法に較べて約25%工期を短縮できる

合流バッファ

  • クリティカルチェーンに合流するチェーン(タスクの繋がり)がある場合、合流の直前に時間的余裕を設ける。これを合流バッファと呼ぶ
  • 合流バッファは、非クリティカルチェーンで生じる遅れから、クリティカルチェーンを保護する
  • 合流バッファの日数は合流するチェーンの50%程度を見込む
  • 合流バッファを挿入すると、クリティカルチェーンより非クリティカルチェーンの方が長くなることがある。このような場合、合流バッファを短くする、タスクの配置を見直す、リソースを追加するなどして、ギャップ(クリティカルチェーン上の隙間)を取り除く*7

バッファマネジメント

  • リーダーは、このプロジェクトバッファ/合流バッファの残り日数を管理する
    • バッファの消費ペースが速ければ、プロジェクトに何らかの問題が発生していることが判る
  • プロジェクトを遅らせる人間の行動心理・行動特性を抑止
  • 仮にタスクが遅れてもバッファで保護できる

buffer.gif

その他

  • 納期に間に合う限り、タスクはなるべく遅く開始する
    • プロジェクト進行中、何らかの問題が発生して、そのタスクが無駄になる可能性もある。タスク開始のタイミングさえ誤らなければ問題ない
  • プログラムマネジメントに関しても配慮がなされている*8

CCPMのメリット

  • 働く意欲を引き出す
    • タスクを早く完了させるため、チームワークの活性化、ノウハウ伝達の活発化が促される
  • プロジェクトの進捗具合は、プロジェクトバッファの消費具合で簡単に把握できるようになる
  • 従来の(基本編で紹介した)手法に較べ、約25%工期を短縮できる*9

CCPMのデメリット

  • 従来の手法とは考え方がかなり異なるため、導入の敷居が高い
    • リレーランナーカルチャー
      • 前工程から仕事が来たら直ちに着手し、終れば直ちに次工程に渡す組織風土の形成が必要(必要なリソースに対しては作業開始日を何日か前からマメに通知、遅れが発生しないようにする)
      • 仕事を外注するときも、早期完了したらボーナスを与えるなどしてリレーランナーカルチャーに染める必要がある
    • 計画より遅れても担当者を叱責するなどペナルティを与えてはならない(怠けていたのでもない限り)
      • 遅れは普通に起きることとしてプロジェクトバッファに織り込み済みなので問題ない
  • 可能な限り完璧なスケジュールが求められる
    • CCPMは最短期間でプロジェクトを完了させることを目標としており、頻繁なスケジュール見直しを想定していない
    • ソフトウェア開発(ゲームソフト含む)のように、要求(成果物)が不明確な状態で始まるプロジェクト、要求(成果物)が途中で変化しやすいプロジェクトには不向き
  • CCPMに対応しているプロジェクトマネジメントソフトが少ない
    • 例:Microsoft Projectでは有料のアドオンがある

ノベルゲーム制作におけるアレンジ案

案なだけで後は各チームでアレンジすれば良いだろう。

デメリットに書いた通り、CCPMはソフトウェア開発(ゲームソフト含む)には不向きなため、反復型開発モデルの要素を一部取り入れることで欠点を補う。ポイントは以下の通り。*10

  • 企画段階(企画、プロットやハコ書き、キャラ原案、設定…)までは従来と同じ方法で実施、実際の開発に入った段階でCCPMに切り替える*11
  • イテレーション(反復)と呼ばれる短い期間単位(1~3ヶ月位)で、都度、何をどこまで実現するか目標を定め、WBSに分解し、スケジュールし、実際に作業して行く
    • つまりイテレーションとは短期間のプロジェクトである*12
      • イテレーション期間は1ヶ月、2ヶ月、3ヶ月のいずれか(一ヶ月刻み)
    • このイテレーションを何度か繰り返し、ソフトウェアを徐々に完成させていく
  • プロジェクトバッファ、合流バッファは多めに確保しておく(早期完了が優先事項ではないので)
    • プロジェクトバッファの日数はクリティカルチェーンと同じ~それ以上でも構わない。合流バッファも同様

用語

学生症候群
締め切り間際になってから作業を開始する人間の行動特性。日本では一夜漬け
悪いマルチタスキング
複数(特に3以上)のタスクを少しずつ万遍なく進めてしまうこと。思考の切り替えや段取りに余計な時間を消費するため却って所要時間が延びる上に、経験曲線効果も働きにくい
早期完了の未報告(ソフトウェアエンジニアリング症候群)
タスクが予定より早く終わっても報告することなく、納期になるまで次工程に引き渡さない人間の行動特性(その間、成果物の見直しや品質の向上などをして日数を使い切ってしまう)*13
パーキンソンの法則
仕事の量は与えられた時間を全て使い切るまで膨張する(第一法則)…が本来の意味。プロジェクトマネジメントの世界では、与えられた日数をあるだけ使い切ってしまう人間の行動特性を指す

*1 基本編にCCPMの考え方を一部盛り込んでいるため、若干内容が重複していることに注意されたい。
*2 後述の中心極限定理に従えば、タスクを細かく分解すればするほど日数の予測精度が悪化するためだ。
*3 当たり前の話に聞こえるが、実際の現場では複数のプロジェクトに組み込まれるのが普通だ。
*4 中心極限定理の証明・説明に関してはWikipediaなどを参照されたい。身近な例は保険だろう。ガンになったら100万円の保険金が下りるとして、保険の加入者が1万人いたら、保険会社は100億円用意しなくてはならないのだろうか? そうではないはずだ。実際に用意する金額は、加入者数×ガンになる確率×100万程度で良い。ガンになる人、ならない人で打ち消し合うので、保険会社が用意する金額は少なくて済むのである。
*5 上司に「このタスクの計画日数は○○日です」と申請したら、強引に何日かカットされた経験はないだろうか? こうなってしまったらお終いで、以降、部下は上司への不信感と保身から「予め何日かカットされることを見越した計画日数」を申請し始め、本当は何日あればタスクが完了するのか絶対に明かさなくなる。
*6 ただし、事前にCCPMについて説明しておかないと、スタッフとの信頼関係が失われるので注意。
*7 ただし、ここでは工期短縮を優先していないため隙間は放置しても良いと思う。
*8 ここでは特に述べない。
*9 ただし、同人ゲームのように本業の合間に作業するケースでは、工期短縮について考えなくて良いと思う。
*10 このイテレーションは基本編で紹介した手法と組み合わせても有効。
*11 これは後述のアジャイル開発に合わせただけだ。別に初回イテレーションからCCPMで実施しても構わないと思う。
*12 完全な長期計画が立てられないので、制御可能な期間に分割しているわけだ。
*13 手を抜いていると思われたら自分に不利だし、逆に、仕事の速い優秀なスタッフと見なされたら、次のタスクの日数を削られるかも知れず、やはり自分に不利だ。早く報告するメリットがないのである。