Tbpgr Blog

Recruiting Operations tbpgr(てぃーびー) のブログ

TOC( Theory of Constraints )

f:id:tbpg:20150530011709j:plain

概要

TOC( Theory of Constraints )

ターゲット

システム開発従事者。

経緯

所属組織で、 TOC が必修になりました。
さっそく、一番取っつきやすい「ザ・ゴール(コミック版)」を読んだので、 [1] その内容をもとに具体的事例を考えて理解を深めることにします。

例示は理解の試金石 」って偉い人が言ってました。 [2]

TOC とは?

TOCTheory of Constraintsの略で、あるシステムの目的を 継続的に最大化することを狙います。

TOC の 5 Step

TOC では以下のステップで問題を解決していきます。

1. 制約の特定
2. 制約の活用
3. 他のすべてを制約プロセスの決定に従わせる
4. 制約の能力を高める
5. 1 に戻る

ある炎上プロジェクトを例にとってみる

ある炎上プロジェクトの結合テストフェーズを具体例としてみる。
書籍の説明に出てくる例がシンプルな工場の例だったため、今回の例の説明が適切かちょっと自信がないです。

1. 制約の特定

あるプログラマ Y さんが担当する一部のプログラムのバグが非常に多く、
そのバグ対応が収束せず結合フェーズのテストが進みません。

テストチームは Y さんのプログラムがネックで すすめられないテストケースが増えていきます

Y さんが作成した 高難度かつ低品質のプログラムが制約です。

2. 制約の活用

該当担当者は、 仕様誤認実装ミス による バグが非常に多い
実装ミスが多いのは、 簡潔なプログラムを書くスキルが低い ためである。
仕様誤認が多いのは、 せっかちで・あわてもので・頑固という気質 の持ち主であるためである。

ただし、 該当業務の経験が多い こと・ プログラムを実装するのが早い こと、
というメリットがあるため 一見ものすごい勢いで進捗を生み出している ように見えます。
そのため 難易度の高いプログラムを複数担当 していました、

彼が書くプログラムは彼以外が読み解くことは難しく、彼自身もスパゲッティに絡まり続けていました。
まずは、コードフォーマッター・静的解析ツール・重点的なレビューにより
一定品質の保守性を確保できるよう、対策を講じました。

3. 他のすべてを制約プロセスの決定に従わせる

  • Y さんの対応待ちで手が空いた開発者は Y さんのバグ修正の一部を引き取ります。
  • ある担当者は、 Y さん対策のために ツールの検証・導入 を行います。
  • ある担当者は、レビュー強化のために Y さんのレビューに注力 します。
  • 空いたポジションは、他の待ち要員が埋めます。
  • Y さんが持っていた雑多なタスクは他のメンバーが巻き取ります。

4. 制約の能力を高める

コードフォーマッター・静的解析ツール・重点的なレビューを行ったものの、 Y さんは

  • 指示を守らない
  • ツールを無視する
  • 自動でツールを適用しても手動で戻す
  • 学習をしない
  • 頑固なため、一つ一つを納得させるための時間が非常に長くなる

といった反応で、一定の効果はあったもののボトルネックは解消されませんでした。
結局のところ、 アサインミスが最大の制約 ( ボトルネック ) という結論に。

Y さんには低難度プログラムの担当のみを残し、難易度が高く繰り返しバグが発生しているプログラムについては、
一番優秀な開発者である H さんにアサイン変更し、リファクタリングしてもらいます。
結果、そのプログラムは本質的には高難度ではなく、 Y さんが高難度に実装しただけということも分かりました。

5. 1 に戻る

無事制約はあっさりと解消しました。 すると、次は Z さんのプログラムでテストが進まなくなりました。 また、 H さんがリファry

補足

ドラム・バッファ・ロープ

一本道の道路があります。9台の車と1台のバイクすべてが目的地に着くことが目的です。
車もバイクも追い抜きはできません。
この場合は、オンボロバイクが非常に遅かったとします。
目的達成の時間はバイクの速度に影響されます。

この際に、全体のリズムをあわせ、進行速度を一定にすることでボトルネックを解消するのが ドラム
前後の影響を受けないように間隔をあけるのが バッファ
必要以上に感覚が開かないようにするのが ロープ です。

改善前

改善後

長期効果

長期的に見れば、

  • 採用・教育システム
  • 社員の技術力判定とアサイン能力

制約( ボトルネック ) だろう。

考えられる対策

  • 技術力があり、継続学習の習慣がある人材を採用する
  • Y さんは実装が早く業務知識もあるため、 保守性の高いプログラムの実装法を覚えれば化ける可能性が高い
    • 技術面の教育
      • 可読性・保守性に関わる技術をできる人材が正社員にはいない
        • プロジェクト内部の協力会社にはスキルを持つ人材がいるが、外部の人間のため教育担当にはなれない
        • 社内に教育者になれる人材を育成する
        • H さんを最高の条件で必死に口説き落とす
        • 社内に技術教育の仕組みを作る
    • モチベーション管理
      • 継続学習を生むための工夫
      • 成果と評価が結びつく評価制度
    • 恒常的な激務の解消
      • 学習時間の確保
      • 体調良化
      • リラックス
      • モチベーションの向上
  • 社員の技術力把握と適切なアサイン
    • アサイン担当のマネージャーが技術を把握している必要がある

書籍

ザ・ゴール コミック版

ザ・ゴール コミック版

参考資料

脚注