前置き
TOC(制約理論)は、「静的な分析ツール」としてではないです。
アジャイルの「スプリント」という短いイテレーションの中で「動的に実践する」ための、非常に洗練された運用サイクルに応用できます。
TOCをアジャイルに組み込むということは、
「スプリントという短い期間内なら、ボトルネックは(近似的に)動かない」
という近似的仮定(メンタルモデル)を置き、その仮定が正しかったかをスプリントレビューで検証する、という科学的な実験のサイクルを回すことです。
もしも1週間という単位でスプリントを区切って、前提が変わってしまうようなら、
スプリントの区間をさらに短く調整する必要があります。
この「TOC駆動型アジャイルスプリント」のフレームワークを、ステップとサブステップに分解して、説明していきたいと思います。
このフレームワークは、TOCの5ステップをScrumのイベント(特に計画、レビュー、レトロスペクティブ)にマッピングすることで、継続的な改善ループを形成します。
フェーズ1:スプリント計画 (Sprint Planning)
目的
今スプリントで集中すべき「単一の制約」を定義し、それに対する改善計画を立てる。
ステップ1.1: 制約の特定 (TOC Step 1)
サブステップ
前回のスプリントレビュー(フェーズ3)で特定された
「今、組織のデリバリーにおける最大のボトルネックは何か?」 という事実データ
(例:E2Eテストの実行時間)を、チーム全員で再確認します。
成果物
「今スプリントで我々が倒すべき制約は、E2Eテストである」という共通認識。
ステップ1.2:制約の徹底活用(改善計画の立案)(TOC Step 2)
サブステップ
特定されたボトルネック(E2Eテスト)に対し、ECRS原則を用いて
「コストをかけずにスループットを最大化する」 ための具体的な改善タスクをブレインストーミングします。
・(E) 排除:不要なテストケースを排除するタスク。
・(C) 結合:複数のテスト環境構築ステップを結合し、時間を短縮するタスク。
・(R) 順序変更:直列なテストを並列に実行できるよう順序変更するタスク。
・(S) 単純化:テストロジックやアサーションを単純化するタスク。
成果物
ECRSに基づいた、具体的な改善ストーリー(PBI)群。
ステップ1.3:他のプロセスの従属(スプリントバックログの構築)(TOC Step 3)
サブステップ
スプリントのWIP(仕掛品) を、ボトルネックの改善にのみ集中させます。
活動
チームは
「今スプリントは、ボトルネック解消(E2Eテスト改善)に全力を注ぐ。
したがって、新しい機能開発(非ボトルネック)のPBIは、今スプリントでは原則として受け入れない」
という合意を形成します。
成果物
ボトルネック改善タスクを中心としたスプリントバックログと、それを反映したスプリントゴール(例:「E2Eテストの実行時間を50%削減する」)。
フェーズ2:スプリント実行 (Sprint Execution)
目的
ボトルネックの改善計画(TOCステップ2, 3)を実行する。
ステップ2.1:改善計画の実行
チームはスプリントバックログに従い、ECRSで定義された改善タスク(パイプラインのリファクタリングなど)を実行します。
ステップ2.2:前提の維持
このフェーズでは、前提条件は意図的に固定します。
スクラムマスターやチームは、スプリントの前提(「ボトルネックはE2Eテストである」)が崩れるような、突発的な仕様変更や、非ボトルネック作業の割り込み(TOCステップ3の違反)からスプリントゴールを守ります。
ここで前提がコロコロ変わるようなものを受け入れるから、プロジェクトが炎上しやすくなるんです。
フェーズ3:スプリントレビュー & レトロスペクティブ (Sprint Review / Retrospective)
目的
実行結果を検証し、仮説(前提)の正しさを評価し、次の制約を特定します。
この評価の際に、自分たちの開発プロセスなどを批判的に精査するために、
事前に定義したデータを用いて、批判的に振り返る のです。
ステップ3.1:[検証] 改善プロセスの有効性レビュー
このスプリント期間中のプロセス自体に問題はなかったか?
メトリクスを定量的にみて精査するレビューを行います。
一度に一気にいろいろなものをレビューするのは、関心がごちゃ混ぜになっているのでやめましょう。
サブステップ
まず、スプリントゴール(例:「E2Eテストの実行時間を50%削減する」)が達成できたか否かに関わらず、計画したECRSのプロセス自体が有効だったかを振り返ります。
定量データ
(E)不要なテストを10件排除しようとしたが、依存関係のせいで5件しか排除できなかった。
(R)順序変更(並列化)は成功し、リードタイムが20%短縮した。
といった アジャイルメトリクス(仕様変更時のコード行数、タスクの消化状況など) を元に精査します。
ステップ3.2:[検証] ボトルネック解消の検証 (TOC Step 4)
改善の結果、ボトルネック(E2Eテスト)自体は解消されたか?を 事実データ(Four Keysなど) で判定します。
判定A (解消失敗)
「LTは依然としてE2Eテストで律速(ボトルネック)のままだ」。
→ TOCステップ4 (強化) へ進みます。
「ECRSだけでは不十分だった。
よって、次のスプリントでは、より高価な解決策(例:テスト用インフラの増強、アーキテクチャの変更)を計画(ステップ1.2)する必要がある」
と判断します。
判定B (解消成功)
「LTが劇的に改善し、E2Eテストはもはやボトルネックではない!」
→ 下記のステップ3.3に進みます。
ステップ3.3:[検証] 前提(制約)の移動を検証 (TOC Step 5)
「そもそもの前提は変わっていないだろうか?」 という、前提が動いていないか?という検証をここで行います。(※批判的思考がここではマストになります。)
サブステップ
ボトルネックが解消された場合、必ず「次」のボトルネックがシステム上のどこかに出現します。
活動
全体のプロセス(VSDM - バリューストリームマップ)を再度見渡し、新しいボトルネックを特定します。
分析結果
「E2Eテスト(旧ボトルネック)は2時間になった。しかし、その後のStaging環境への手動デプロイ(新ボトルネック)が今や8時間かかっている」という前提の変化を発見します。
ステップ3.4:[結論] 次のスプリント計画へのインプット
上記の新しい前提をもとに、次のスプリント計画で、
「どの部分が制約なのか? そこへの解消方法は?」をチームで議論し合います。
ステップ3.3の分析結果(新しい制約は手動デプロイである)を、次のスプリント計画(フェーズ1)へのインプットとして確定させます。
ただし、ここですぐに次のフェーズに行かないで、一回立ち止まってください。
ここからが、私なりのスクラムの工夫としての水平思考の盛り込みです。
※水平思考(ラテラルシンキング)の導入
この時に、すぐに次の制約の解消の計画を立てるのではなく、一回「前提を疑う」をやってください。
一度【制約から意図的に離れて考える】、別の視点から考え直してみるという、
水平思考 を実践してみることで、間違った制約に向き合わなくてよくなります。
①. ステップ3.1&ステップ3.2に全く問題がないことが判明したとする。
②. ステップ3.2で制約を解消したら、時間を空けずに利害関係者にフィードバックをもらいます。
③. この時に「そう!!これがよかったんだ!」という声が出ない、微妙な反応が返ってきたら、そもそもの大前提を疑い、再定義します。
意図的に、
「いま自分たちが【制約】と思い込んでいるものは、他のどんな視点から見たら
【制約】ではなくなるだろうか?」
と問い直すのです。
この水平思考の導入は、マーケティング戦略~システム企画まで、幅広く使えます。
これをスプリントに盛り込むか、盛り込まないかで開発生産性は劇的に変化します。
わたしは、この
批判的思考+水平思考+TOCをスクラムに掛け合わせる
ことにより、組織のアジャイルマインドが養われると思っています。
まとめ
このループ(フェーズ1〜3)と、振り返りや検証時の批判的思考での精査、およびスプリント計画前の段階での、水平思考を使った前提の再定義こそが、TOCをアジャイルに実践し、継続的に改善し続けるための具体的なメカニズムです。
水平思考を使うには、その前段階で自分たちのメンタルモデルを批判的に観察する必要があります。
この図は引用してきたものですが、この3つの思考をスクラムに盛り込むことで、
自分たちの思い込みをいかに排除して、素早さの維持や想定外の障害への対応力をつけることこそが、アジャイルの実践だといえないでしょうか。

