thinking-feedback-loops について
システムの時間的な振る舞いを分析し、成長、振動、停滞を生む強化ループ、バランスループ、遅延を特定する思考スキルです。動的な問題を対象に、ループ構造から介入の方向を探ります。
主な機能
- 01強化ループとバランスループの識別
- 02変数間の因果関係のマッピング
- 03振動を生む遅延の特定
- 04現在支配的なループの判定
- 05ループ構造に基づく介入方向の探索
活用シーン
- 01システムが成長または縮小し続ける理由の分析
- 02目標付近での振動の調査
- 03変化への抵抗の理解
- 04応急処置が裏目に出た理由の説明
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tjboudreaux/ cc-thinking-skills --skill thinking-feedback-loopsインストール後、Claude Code で/thinking-feedback-loopsを入力して読み込まれたか確認します。
詳細
フィードバックループ分析
概要
フィードバックループ分析(Donella Meadows 著「Thinking in Systems」)では、動的システムが時間の経過とともにどのように振る舞うかを説明します。ループは変化を増幅させる(強化型)か、目標に向けて安定させる(調整型)かのいずれかです。原因と結果の間に遅れがあると、振動が生じます。システムが制御不能に成長する、崩壊する、振動する、あるいは変化を拒む場合、その原因はループ構造にあります。
基本原則: システムの振る舞いは、フィードバック構造から生まれます。振る舞いを変えるには、ループを変えます。
トリガーカード
システムに動的な振る舞い(暴走する成長、振動、変化への抵抗)が見られる場合:
- 振る舞いを分類する: 成長/崩壊 → 強化型ループを探します。振動 → 遅れを伴う調整型ループを探します。停滞 → 支配的な調整型ループを探します。
- ループをたどる: どの変数が自身にフィードバックしていますか?因果関係を方向(+/-)とともにマッピングします。
- レバレッジを見つける: 遅れを短縮する、ループのゲインを変える、または暴走する強化型ループに調整型ループを追加します。
動的な振る舞いがない場合(静的な原因、または一度限りの原因)は、分析を省略して修正します。システム全体のマッピングには、thinking-systems を使います。すでにマッピングされたループの介入箇所を選ぶには、thinking-leverage-points を使います。
使用する場面
- システムで暴走する成長や崩壊が見られる(支配的な強化型ループが疑われます)
- 目標に落ち着かず、その周辺で振動する(調整型ループに遅れがあると疑われます)
- 停滞している/変化に抵抗している(支配的な調整型ループが疑われます)
- 「明らかな」修正が逆効果になり、その理由を知る必要がある
System behavior is puzzling or problematic?
→ Is it growing/shrinking unexpectedly? → Look for REINFORCING LOOPS
→ Is it oscillating around a target? → Look for DELAYS in BALANCING LOOPS
→ Is it stuck/resistant to change? → Look for dominant BALANCING LOOPS
使用しない場面
- システム全体の構造(コンポーネント、ストック、フロー、サービス間の原因)をマッピングする必要がある — 代わりに
thinking-systemsを使います。フィードバックループ分析は振る舞いを引き起こす特定の動的ループに焦点を絞ります。systems はまず全体像をマッピングします。 - すでにマッピングされたシステムの介入箇所を探している —
thinking-leverage-points(Meadows の 12 段階の階層)を使います。フィードバックループ分析は どのループが支配的か を示し、leverage-points は そのループのどこに働きかけるか を示します。 - 症状にループのない単一の静的な原因がある(固定されたバグ、一度限りの不適切な設定)→ そのまま修正します。
- 時間の経過に伴って振る舞いが変化していない — モデル化する動的要素はありません。
基本概念
1. 強化型ループ(正のフィードバック)
強化型ループは変化を同じ方向に増幅させ、成長または減少を引き起こします。指数関数的な振る舞いを生み出します。持てば持つほど、さらに得る(または失う)という仕組みです。
構造: A → B を増加させる → A を増加させる(または:A → B を減少させる → A を減少させる)
┌─────────────────────────────────────────────────────────┐
│ REINFORCING LOOP (R) │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Users │───(+)──▶│ Content │ │
│ └──────────┘ └────┬─────┘ │
│ ▲ │ │
│ │ (+) │
│ │ │ │
│ └────────────────────┘ │
│ │
│ More users → More content → More users (Growth) │
│ OR: Fewer users → Less content → Fewer users (Death) │
└─────────────────────────────────────────────────────────┘
特徴:
- 指数関数的な成長または崩壊
- 自己成就的予言
- 「富める者がますます富む」ダイナミクス
- 好循環(有益な場合)
- 悪循環(有害な場合)
ソフトウェアの例:
Retry Storm Loop:
Service slow → Clients retry → More load → Service slower → More retries
(Vicious cycle toward outage)
Technical Debt Loop:
Shortcuts → Bugs → Firefighting → Less time → More shortcuts
(Vicious cycle toward collapse)
Cache Stampede Loop:
Cache miss → Backend load → Slower fills → More misses → More load
(Reinforcing under expiry)
2. 調整型ループ(負のフィードバック)
調整型ループは変化に対抗し、システムを目標または均衡に向けて押し戻します。目標を追求する振る舞いを生み出します。
構造: 現状と目標の差 → 是正措置 → 差を縮小
┌─────────────────────────────────────────────────────────┐
│ BALANCING LOOP (B) │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Goal │ │ Actual │ │
│ │ State │ │ State │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ └──────────┬────────────────────┘ │
│ ▼ │
│ ┌──────────┐ │
│ │ Gap │ │
│ └────┬─────┘ │
│ │ │
│ (-) │
│ ▼ │
│ ┌────────────┐ │
│ │ Corrective │ │
│ │ Action │────────▶ Closes gap │
│ └────────────┘ │
└─────────────────────────────────────────────────────────┘
特徴:
- 目標を追求する振る舞い
- 変化への抵抗
- 安定性(うまく機能している場合)
- 振動(遅れがある場合)
ソフトウェアの例:
Auto-scaling Loop:
Load increases → Gap from target → Scale up → Load per instance decreases
(Goal: maintain target response time)
Backpressure Loop:
Queue depth rises → Producers throttled → Arrival rate drops → Queue drains
(Goal-seeking to bounded queue)
Circuit Breaker Loop:
Error rate exceeds threshold → Breaker opens → Load sheds → Service recovers
(Goal: maintain availability)
3. 遅れ
遅れとは、原因と結果の間にある時間です。システムの振動や不安定性を引き起こす主な要因です。
┌─────────────────────────────────────────────────────────┐
│ DELAY EFFECTS │
│ │
│ Action ───────[DELAY]─────────▶ Effect │
│ │
│ Short delay: System responds smoothly │
│ Long delay: Overshoot and oscillation │
│ │
│ Examples: │
│ • Code deploy → [Cache TTL] → Users see change │
│ • New hire → [Ramp-up time] → Productivity impact │
│ • Feature ship → [Adoption] → Metric movement │
│ • Training → [Skill development] → Performance gain │
└─────────────────────────────────────────────────────────┘
遅れが振動を引き起こす理由:
Without delay:
Gap detected → Correction → Gap closes → Done
With delay:
Gap detected → Correction → [DELAY] → Gap persists →
More correction → [DELAY] → Original correction arrives →
Overshoot → Gap in opposite direction → Oscillation
典型例:シャワーの温度
Too cold → Turn hot → [Delay: water travels through pipes] →
Still cold → Turn hotter → Hot water arrives → Too hot! →
Turn cold → [Delay] → Still hot → Turn colder →
Cold water arrives → Too cold! → Oscillation continues
よくあるシステムパターン
パターン 1:指数関数的な成長
構造: 単一の支配的な強化型ループ
┌─────────┐ ┌─────────┐
│ Revenue │─(+)─▶│ Invest- │
│ │ │ ment │
└────▲────┘ └────┬────┘
│ │
(+) (+)
│ │
└────────────────┘
Growth
振る舞い: J カーブ型の成長(逆方向に進む場合は崩壊)
例:
- スタートアップの急成長期
- ウイルスの拡散
- 複利
- 技術的負債の蓄積
介入: 暴走する前に、調整型ループを見つけるか作り出します
パターン 2:目標追求(振動を伴う)
構造: 大きな遅延を伴う調整ループ
┌────────┐ ┌────────┐
│ Goal │ │ Actual │
└───┬────┘ └───┬────┘
│ │
└───────┬───────┘
▼
[Gap]
│
(-)
│
▼
┌────────────┐
│ Correction │───[DELAY]───▶ Effect
└────────────┘
挙動: 目標の周辺で振動し、振幅は遅延の長さによって変わります
例:
- 在庫管理(ブルウィップ効果)
- 採用サイクル(過剰採用 → 解雇 → 人員不足 → 過剰採用)
- 機能の優先順位付けの揺れ
- パフォーマンス最適化の反復
介入: 遅延を短縮し、修正の規模を抑え、安定までに長い時間がかかることを受け入れます
パターン 3:成長の限界
構造: 強化ループが最終的に調整制約にぶつかります
┌─────────────────────────────────────┐
│ │
▼ │
┌────────┐ ┌─────┴────┐
│ Growth │──(+)──▶ Success ──(-)──▶│ Resource │
│ Effort │ │ Limit │
└────────┘ └──────────┘
│
└──(+)──▶ Results (initially)
挙動: S 字カーブ――成長、停滞、その後の停滞または衰退
例:
- 市場の飽和
- チーム拡大の限界
- システムの容量制約
- 機能の枯渇
介入: 制約にぶつかる前に特定し、対処します
パターン 4:負担の転嫁
構造: 症状への対処策が根本的な解決策を損ないます
┌──────────────┐
│ Problem │
│ Symptom │
└──────┬───────┘
│
┌────────────┼────────────┐
▼ │ ▼
┌───────────┐ │ ┌───────────────┐
│ Quick │ │ │ Fundamental │
│ Fix │ │ │ Solution │
└─────┬─────┘ │ └───────┬───────┘
│ │ │
(+) │ (+)
│ │ │
▼ │ ▼
Symptom relief ────────┘ Root cause fixed
│ ▲
(-) │
▼ │
Motivation to ─────────────────────┘
fix root cause
挙動: その場しのぎへの依存が進み、根本的な能力が衰えます
例:
- 英雄的な火消しと、システム全体の信頼性向上
- 残業と、採用やプロセス改善
- 手作業による回避策と、自動化
- 外部コンサルタントと、社内の能力
介入: 症状に対処しながら、根本的な解決策に意図的に投資します
パターン 5:エスカレーション(軍拡競争)
構造: 競合する 2 つの強化ループ
┌─────────┐ ┌─────────┐
│ Party A │──▶ │ Party B │
│ Action │ ▲ │ Action │
└────┬────┘ │ └────┬────┘
│ │ │
(+) │ (+)
│ │ │
└───────┴────────┘
Threat
挙動: リソースの枯渇または介入まで、相互にエスカレーションが進みます
例:
- 競合他社間の機能競争
- 会議の増殖
- プロセスや官僚的手続きの蓄積
- アラート疲れの悪循環
介入: 合意、制約、または捉え直しによってループを断ち切ります
システム内のループを特定する
ステップ 1:変数をマッピングする
時間とともに変化する、関連するすべての量を列挙します。
Team productivity system:
- Team size
- Individual workload
- Code quality
- Technical debt
- Bug rate
- Firefighting time
- Feature velocity
- Morale
ステップ 2:因果関係を描く
各ペアについて、「A は B に影響を与えるか? どの方向に影響するか?」と問いかけます。
(+) Same direction: A increases → B increases, A decreases → B decreases
(-) Opposite direction: A increases → B decreases
ステップ 3:ループをたどる
矢印をたどって出発点に戻ります。負の符号の数を数えます。
Even number of (-) = Reinforcing loop
Odd number of (-) = Balancing loop
ステップ 4:支配的なループを特定する
システムの挙動は、現在支配的なループによって決まります。
- 指数関数的に増加しているか? 強化ループが支配しています
- 振動しているか? 遅延を伴う調整ループがあります
- 安定しているか? 調整ループがうまく機能しています
- 低下しているか? 強化ループが逆方向に働いています
レバレッジポイント
支配的なループを見つけたら、動かせる範囲で最も影響力の高い点に介入します。遅延やループのゲインを変えることは、パラメーターを調整するより効果があります。ルールを変えることは、その両方より効果があります。Meadows の 12 段階の完全な階層については、thinking-leverage-points を参照してください。ここでは改めて導き出す必要はありません。
適用フレームワーク
問題のあるシステムを分析する
## Feedback Loop Analysis: [System Name]
### Current Behavior
[Describe: growing, declining, oscillating, stuck]
### Key Variables
- [List stocks and flows]
### Loop Diagram
[Draw or describe the loops]
### Identified Loops
| Loop Name | Type | Variables | Currently Dominant? |
|-----------|------|-----------|---------------------|
| | | | |
### Delays Present
| Delay | Duration | Effect |
|-------|----------|--------|
| | | |
### Leverage Points
| Level | Intervention | Expected Effect |
|-------|-------------|-----------------|
| | | |
### Recommended Intervention
[Highest-leverage, lowest-risk option]
システム思考との統合
thinking-systems:システム全体の構造をマッピングし、サービス間の原因をたどりますthinking-feedback-loops:動的な挙動を引き起こす具体的なループを特定して分析しますthinking-leverage-points:介入する場所を選びます(Meadows の 12 段階の階層)
検証チェックリスト
- 時間とともに変化する主要な変数を特定した
- 方向(+/-)を含めて因果関係をマッピングした
- 少なくとも 1 つの強化ループをたどった
- 少なくとも 1 つの調整ループをたどった
- 重大な遅延を特定した
- 現在支配的なループを特定した
- 複数のレベルでレバレッジポイントを特定した
- 適切な影響力を持つ介入を選択した
- 介入による意図しない影響を考慮した
主な質問
- 「ここで何が自分自身にフィードバックされているか?」
- 「これは自己強化型か、それとも自己修正型か?」
- 「このシステムが目指している目標は何か?」
- 「遅延はどこにあり、どれくらいの長さか?」
- 「現在、どのループが支配的か?」
- 「何が起きれば、別のループが優勢になるか?」
- 「利用できる中で最も影響力の高い介入は何か?」
- 「X を変えたら、どのループに影響するか?」
メドウズの知恵
「システムを制御したり、解明したりすることはできません。しかし、システムとともに踊ることはできます。」
「システムの中で最も見えにくい要素である、その機能や目的こそが、システムの振る舞いを左右する最も重要な要因であることがよくあります。」
「定量化できるものだけでなく、重要なものにも注意を払いましょう。」
システムは解くべき謎ではなく、理解し、働きかけるべきパターンです。効果的な介入には、制御に対する謙虚さと、フィードバックへの注意が必要です。