844 lines
26 KiB
Markdown
844 lines
26 KiB
Markdown
|
||
# Behavior-Over-Time Graphs
|
||
|
||
## When to Use This Skill
|
||
|
||
Use behavior-over-time (BOT) graphs when:
|
||
- **Predicting future states**: "What will customer count be in 6 months?"
|
||
- **Comparing scenarios**: "With intervention vs without intervention"
|
||
- **Communicating urgency**: "Look how fast debt is growing!"
|
||
- **Demonstrating time-to-crisis**: "We have 14 months before capacity saturated"
|
||
- **Validating models**: Overlay actual vs predicted behavior
|
||
- **Explaining delays**: "Why solutions take 3 months to show results"
|
||
|
||
**Don't use BOT graphs when**:
|
||
- You don't know the structure yet → Start with causal loop diagram (CLD)
|
||
- You need to show feedback loops → Use CLD with polarity markers
|
||
- You want current state only (no trajectory) → Use stock-flow diagram
|
||
- Data too uncertain to plot → Use qualitative archetype analysis
|
||
- Audience needs WHY not WHEN → Use CLD to show causal logic
|
||
|
||
**Key insight**: BOT graphs answer "What happens over time?" with concrete numbers and dates. Use them AFTER you've mapped structure (CLD) and calculated values (stock-flow), to communicate dynamics visually.
|
||
|
||
|
||
## The 7-Step Construction Process
|
||
|
||
**Build BOT graphs systematically. Never jump to the final graph without validating each step.**
|
||
|
||
### Step 1: Identify What to Plot (Stock vs Flow)
|
||
|
||
**Rule**: BOT graphs typically show STOCKS (accumulated quantities), not flows (rates).
|
||
|
||
**Why**: Stakeholders care about "How bad is the problem?" (stock level) more than "How fast is it changing?" (flow rate).
|
||
|
||
**Test**: Can you measure this at a single instant without reference to time?
|
||
- YES → Stock (plot it)
|
||
- NO → Flow (consider plotting the stock it affects instead)
|
||
|
||
**Examples**:
|
||
- ✅ Plot: Customer Count (stock)
|
||
- ❌ Not: Customer Acquisition Rate (flow) - unless specifically analyzing flow behavior
|
||
- ✅ Plot: Bug Backlog (stock)
|
||
- ❌ Not: Bug Arrival Rate (flow)
|
||
- ✅ Plot: Technical Debt Points (stock)
|
||
- ❌ Not: Debt Accumulation Rate (flow)
|
||
|
||
**Exception**: Plot flows when analyzing flow behavior itself (e.g., "Development Velocity over time")
|
||
|
||
|
||
### Step 2: Determine Time Scale (Granularity and Range)
|
||
|
||
**Two decisions**: How fine-grained? How far forward?
|
||
|
||
**Granularity** (X-axis intervals):
|
||
- **Hourly**: Real-time monitoring, very fast dynamics
|
||
- **Daily**: Operational metrics (deployments, incidents)
|
||
- **Weekly**: Sprint-level analysis
|
||
- **Monthly**: Business metrics (MRR, customer count)
|
||
- **Quarterly**: Strategic planning
|
||
- **Yearly**: Long-term trends
|
||
|
||
**Decision criteria**:
|
||
- Match measurement frequency (if customers tracked monthly, use monthly)
|
||
- Show intervention timeframe (if intervention monthly, don't use yearly)
|
||
- Avoid unnecessary noise (daily SaaS revenue too volatile, use monthly)
|
||
|
||
**Range** (how far forward to project):
|
||
|
||
**Rule of thumb**: Show **2-3× the time constant** of the system
|
||
|
||
**Time constant (τ)** = Time for system to reach ~63% of equilibrium (from stocks-and-flows-modeling)
|
||
|
||
**Examples**:
|
||
- Customer growth τ = 8 months → Plot 16-24 months
|
||
- Bug backlog τ = 2 weeks → Plot 4-6 weeks
|
||
- Technical debt τ = infinity (unbounded) → Plot until crisis or intervention
|
||
|
||
**Practical**:
|
||
- Show intervention point + outcome period (decide at month 3, show months 0-12)
|
||
- Include phase transitions (growth → crisis → stabilization)
|
||
- Don't over-extend (24 months for 2-week problem dilutes insight)
|
||
|
||
|
||
### Step 3: Calculate Values (Using Stock-Flow Equations)
|
||
|
||
**Never eyeball the curve**. Calculate stock levels using formal equations from stocks-and-flows-modeling.
|
||
|
||
**Standard formula**:
|
||
```
|
||
Stock(t+1) = Stock(t) + Δt × (Inflow - Outflow)
|
||
```
|
||
|
||
**Process**:
|
||
1. Identify initial condition: Stock(0) = ?
|
||
2. Calculate flows for each time period
|
||
3. Apply formula iteratively
|
||
4. Verify units: Stock in [X], Flows in [X/time], Δt in [time]
|
||
5. Validate: Does equilibrium match calculation? (Set Inflow = Outflow)
|
||
|
||
**Example - Bug Backlog**:
|
||
```
|
||
Backlog(0) = 50 bugs
|
||
Inflow = 30 bugs/month (constant)
|
||
Outflow = 0.8 × Velocity (bugs/month, stock-dependent)
|
||
Velocity = 40 points/sprint, 2 sprints/month
|
||
|
||
Month 0: 50 bugs
|
||
Month 1: 50 + (30 - 0.8×40×2) = 50 + (30 - 64) = 16 bugs
|
||
Month 2: 16 + (30 - 0.8×40×2) = -18 bugs → Floor at 0 bugs
|
||
Equilibrium: Inflow < Outflow, backlog drains to 0
|
||
```
|
||
|
||
**Common mistake**: Guessing values instead of calculating. If stakeholders question, you must defend with math.
|
||
|
||
|
||
### Step 4: Select Graph Type
|
||
|
||
**Decision tree**:
|
||
|
||
**Is the data continuous or discrete?**
|
||
- **Continuous** (smooth accumulation) → **Line graph** ✓ (default)
|
||
- **Discrete** (step changes) → **Step function**
|
||
|
||
**Do you want to emphasize magnitude?**
|
||
- **YES** → **Area chart** (fills area under line)
|
||
- **NO** → **Line graph**
|
||
|
||
**Are you comparing discrete time periods?**
|
||
- **YES** → **Bar chart**
|
||
- **NO** → **Line graph**
|
||
|
||
**Examples**:
|
||
- Customer growth over time: **Line graph** (continuous accumulation)
|
||
- Headcount changes (hire whole people): **Step function** (discrete jumps)
|
||
- Quarterly revenue comparison: **Bar chart** (discrete periods)
|
||
- Technical debt accumulation: **Area chart** or **Line** (either works, area emphasizes magnitude)
|
||
|
||
**Default**: When unsure, use **line graph**. It's the most versatile and widely understood.
|
||
|
||
|
||
### Step 5: Choose Scale (Y-Axis Range)
|
||
|
||
**The 70-80% Rule**: Maximum value in your data should occupy **70-80% of the Y-axis range**.
|
||
|
||
**Formula**:
|
||
```
|
||
Y_max = Data_max / 0.75
|
||
```
|
||
|
||
**Example**:
|
||
- Data maximum: 60 debt points
|
||
- Y-axis max: 60 / 0.75 = 80 points ✓
|
||
|
||
**Why 70-80%?**
|
||
- Provides visual buffer (not cramped at top)
|
||
- Makes growth impactful (not tiny slope in vast space)
|
||
- Industry standard for clear visualization
|
||
|
||
**Common mistakes**:
|
||
- ❌ Y-axis = 120 when data max = 60 (only 50% occupied, wastes space)
|
||
- ❌ Y-axis = 65 when data max = 60 (92% occupied, cramped, hard to see trend)
|
||
- ✅ Y-axis = 80 when data max = 60 (75% occupied, perfect)
|
||
|
||
**When to start Y-axis at non-zero**:
|
||
- **Use 0 baseline** when showing absolute change (customer count growth 0 → 7,000)
|
||
- **Use non-zero** when showing small variations around large baseline (server uptime 98.5% → 99.2%)
|
||
- **Warning**: Non-zero baselines can mislead. If using, annotate clearly.
|
||
|
||
**Logarithmic scale**:
|
||
- Use when data spans multiple orders of magnitude (1 → 1,000 → 1,000,000)
|
||
- Use when exponential growth makes linear scale unreadable
|
||
- **Always label** "logarithmic scale" explicitly
|
||
|
||
|
||
### Step 6: Add Annotations (Events, Phases, Thresholds)
|
||
|
||
**Annotations reveal WHY the curve behaves the way it does.**
|
||
|
||
**Types of annotations**:
|
||
|
||
**1. Event markers** (vertical lines at intervention points):
|
||
```
|
||
│
|
||
↓
|
||
[INTERVENTION]
|
||
```
|
||
- Product launch, infrastructure investment, policy change
|
||
- Mark the TIME of the decision/event
|
||
|
||
**2. Phase labels** (text for regions):
|
||
```
|
||
[GROWTH PHASE] [CRISIS] [STABILIZATION]
|
||
```
|
||
- Mark distinct system behaviors over time periods
|
||
|
||
**3. Threshold lines** (horizontal lines for critical values):
|
||
```
|
||
─────────────── Capacity Limit (100 customers/month)
|
||
─────────────── Crisis Threshold (200 bugs)
|
||
```
|
||
- Show when system crosses critical boundaries
|
||
|
||
**4. Annotations density limit**: **Max 5-7 annotations per graph**
|
||
- More than 7 → Cluttered, unreadable
|
||
- If you need more, split into multiple graphs
|
||
|
||
**Placement**:
|
||
- Events: Vertical line at X position, label above or below
|
||
- Phases: Text box or bracket spanning time period
|
||
- Thresholds: Horizontal line with label at end or middle
|
||
|
||
**Priority**: Annotate the 3 most important events/thresholds, not everything.
|
||
|
||
|
||
### Step 7: Validate (Quality Checklist)
|
||
|
||
**Before presenting any BOT graph, check**:
|
||
|
||
✅ **Units clearly labeled on both axes?**
|
||
- Y-axis: "Technical Debt (story points)"
|
||
- X-axis: "Time (months)"
|
||
|
||
✅ **Scale follows 70-80% rule?**
|
||
- Data_max / Y_max between 0.70 and 0.80?
|
||
|
||
✅ **Time range shows full story?**
|
||
- Intervention point + enough time to see outcome?
|
||
- Shows equilibrium or steady state if system reaches it?
|
||
|
||
✅ **Annotations clear and not cluttered?**
|
||
- ≤7 annotations total?
|
||
- Labels don't overlap?
|
||
|
||
✅ **Graph type appropriate for data?**
|
||
- Continuous data → Line
|
||
- Discrete changes → Step function
|
||
- Time period comparison → Bar
|
||
|
||
✅ **Readable at presentation size?**
|
||
- Can you read axis labels from 10 feet away?
|
||
- Are data lines thick enough?
|
||
|
||
✅ **Validated against stock-flow calculations?**
|
||
- Do plotted values match your calculated spreadsheet?
|
||
- Did you verify equilibrium point?
|
||
|
||
✅ **Comparison method clear (if multiple scenarios)?**
|
||
- Different line styles (solid vs dashed)?
|
||
- Legend shows which line is which?
|
||
|
||
**If any check fails, FIX before presenting.** Wrong scale or missing units destroys credibility.
|
||
|
||
|
||
## ASCII/Text Visualization Standards
|
||
|
||
**Character set for text-based graphs**:
|
||
```
|
||
│ ─ ┌ ┐ └ ┘ ╱ ╲ ● ○ ▲ ▼ ┼ ├ ┤
|
||
```
|
||
|
||
**Axis notation**:
|
||
```
|
||
Y-Axis Label (units)
|
||
│
|
||
80│
|
||
│
|
||
60│
|
||
│
|
||
40│
|
||
│
|
||
20│
|
||
│
|
||
0└───┬───┬───┬───┬───┬───┬───
|
||
0 2 4 6 8 10 12
|
||
X-Axis Label (units)
|
||
```
|
||
|
||
**Data line styles**:
|
||
- **Solid line**: ─── (primary scenario, baseline)
|
||
- **Dashed line**: ╌╌╌ or - - - (alternative scenario, comparison)
|
||
- **Markers**: ● (data points), ▲ (intervention), ▼ (crisis event)
|
||
|
||
**Multiple scenarios on same graph**:
|
||
```
|
||
80│ ┌───●─── Scenario A (solid)
|
||
│ ┌─○┤
|
||
60│ ╌─┘ │ ○╌╌╌ Scenario B (dashed)
|
||
│ ╌─┘ │
|
||
40│ ╌─┘ │
|
||
│╌─┘ │
|
||
20│ │
|
||
└──────────────┼──────────
|
||
0 3 6 9 12 months
|
||
▲
|
||
INTERVENTION
|
||
```
|
||
|
||
**Spacing and readability**:
|
||
- Leave 2-3 character spaces between axis ticks
|
||
- Align numbers right-justified on Y-axis
|
||
- Keep X-axis labels centered under tick marks
|
||
|
||
**Template** (copy and modify):
|
||
```
|
||
[Y-AXIS LABEL] (units)
|
||
│
|
||
MAX│
|
||
│
|
||
75%│ ┌───
|
||
│ ┌─┘
|
||
50%│ ┌─┘
|
||
│ ┌─┘
|
||
25%│ ┌─┘
|
||
│ ┌─┘
|
||
0 └───┬───┬───┬───┬───┬───┬───
|
||
0 1 2 3 4 5 6
|
||
[X-AXIS LABEL] (units)
|
||
```
|
||
|
||
|
||
## Multi-Variable Framework
|
||
|
||
**When you need to plot multiple variables**, choose strategy systematically:
|
||
|
||
### Strategy 1: Dual Y-Axis (Same Graph, Two Scales)
|
||
|
||
**When to use**:
|
||
- ✅ Variables have **causal relationship** (team size drives velocity)
|
||
- ✅ Different units (engineers vs story points)
|
||
- ✅ Similar time dynamics (both change over same period)
|
||
- ✅ Viewer needs to see correlation visually
|
||
|
||
**Example**: Team Size (left axis: engineers) + Velocity (right axis: points/sprint)
|
||
|
||
**Limitations**:
|
||
- Hard in ASCII (need clear labeling)
|
||
- Max 2 variables (more is confusing)
|
||
|
||
|
||
### Strategy 2: Separate Panels (Stacked, Shared X-Axis)
|
||
|
||
**When to use**:
|
||
- ✅ Variables from **different domains** (technical vs human)
|
||
- ✅ Very different scales (0-100 bugs vs 1-10 morale)
|
||
- ✅ Want independent Y-axes for clarity
|
||
- ✅ More than 2 variables
|
||
|
||
**Example**:
|
||
```
|
||
Bug Backlog (bugs)
|
||
200│ ╱───
|
||
│ ╱──
|
||
100│╱──
|
||
0 └───────────
|
||
|
||
Morale (1-10)
|
||
10│────╲
|
||
│ ╲
|
||
5 │ ──╲
|
||
0 └───────────
|
||
0 3 6 months
|
||
```
|
||
|
||
**Benefit**: Each variable has appropriate scale, viewer can cross-reference via shared time axis
|
||
|
||
|
||
### Strategy 3: Normalized 0-100% (Same Scale)
|
||
|
||
**When to use**:
|
||
- ✅ Relative trends matter more than absolute values
|
||
- ✅ Comparing variables with very different units
|
||
- ✅ Showing patterns, not magnitudes
|
||
|
||
**Example**: Customer % vs Revenue % vs Team % (all normalized to 0-100%)
|
||
|
||
**Warning**: Loses actionability. "Customer % = 75%" doesn't tell stakeholder "we have 7,500 customers."
|
||
|
||
**Use sparingly**: Only when pattern visualization is the goal, not decision-making.
|
||
|
||
|
||
### Decision Matrix:
|
||
|
||
| Variables | Strategy | Example |
|
||
|-----------|----------|---------|
|
||
| 2 related, different units | Dual Y-axis | Team Size + Velocity |
|
||
| 3+ from different domains | Separate panels | Bugs + Morale + Debt |
|
||
| Need pattern, not magnitude | Normalized 0-100% | Multi-metric dashboard |
|
||
| 2 same units | Single axis, overlay | Scenario A vs B customers |
|
||
|
||
|
||
## Comparison Strategies
|
||
|
||
**Showing "with intervention vs without intervention":**
|
||
|
||
### Method 1: Overlay (Same Graph)
|
||
|
||
**Best for**:
|
||
- Similar scales (both scenarios fit 70-80% rule on same Y-axis)
|
||
- Direct visual comparison
|
||
- 2-3 scenarios maximum
|
||
|
||
**Technique**:
|
||
- Solid line = Baseline
|
||
- Dashed line = Alternative
|
||
- Markers differentiate: ● vs ○
|
||
- Legend shows which is which
|
||
|
||
**Example**:
|
||
```
|
||
7000│ ○╌╌╌ With Investment (+5%)
|
||
│ ╌─┤
|
||
6000│ ╌─┘ │ ●── Baseline
|
||
│ ╌─┘ ●─┘
|
||
5000│ ╌─┘ ●─┘
|
||
│ ╌──●─┘
|
||
4000│●─┘
|
||
```
|
||
|
||
|
||
### Method 2: Side-by-Side (Separate Graphs)
|
||
|
||
**Best for**:
|
||
- Different scales (Scenario A: 0-100, Scenario B: 0-500)
|
||
- Many scenarios (4+)
|
||
- Independent analysis
|
||
|
||
**Technique**:
|
||
- Graph 1: Scenario A
|
||
- Graph 2: Scenario B
|
||
- Shared time axis
|
||
- Separate Y-axis scales
|
||
|
||
**Use**: When overlay would be cluttered or scales incompatible
|
||
|
||
|
||
### Method 3: Stacked Panels (Vertically Aligned)
|
||
|
||
**Best for**:
|
||
- Showing multiple aspects of same scenario
|
||
- Different variables (customers, revenue, cost)
|
||
- Aligned time for cross-reference
|
||
|
||
**Technique**:
|
||
- Panel 1: Primary metric
|
||
- Panel 2: Secondary metric
|
||
- Panel 3: Tertiary metric
|
||
- Shared X-axis, independent Y-axes
|
||
|
||
|
||
## Phase/Region Marking
|
||
|
||
**Showing "crisis zone" or "stable region":**
|
||
|
||
**Technique 1: Vertical bands** (time periods):
|
||
```
|
||
│ [GROWTH] [CRISIS] [STABLE]
|
||
│ ╱──────╲ ──────────
|
||
│ ╱ ╲
|
||
│╱ ╲────────
|
||
└─────────────────────
|
||
0 3 6 9 12
|
||
```
|
||
|
||
**Technique 2: Horizontal regions** (threshold bands):
|
||
```
|
||
│ ───────── 200 bugs ←─── CRISIS THRESHOLD
|
||
│ ╱──────
|
||
│ ╱── [SAFE ZONE]
|
||
│╱──
|
||
└────────
|
||
```
|
||
|
||
**Technique 3: Text labels with brackets**:
|
||
```
|
||
│ ╱──────
|
||
│ ╱── └──[Peak: Crisis Mode]
|
||
│╱──
|
||
└─────
|
||
```
|
||
|
||
**When to use**:
|
||
- Complex dynamics with distinct phases (growth, plateau, decline)
|
||
- Critical thresholds (capacity limits, SLA boundaries)
|
||
- Multi-phase interventions (before, during, after)
|
||
|
||
|
||
## Common Mistakes Catalog
|
||
|
||
### 1. Y-Axis Too Large
|
||
|
||
**Mistake**:
|
||
```
|
||
120│
|
||
│ ┌───── (Data only reaches 60)
|
||
60│ ┌─┘
|
||
│ ╱
|
||
0 └──────────
|
||
```
|
||
**Problem**: Wastes 50% of space, minimizes visual impact
|
||
**Fix**: Apply 70-80% rule → Y-max = 80
|
||
|
||
|
||
### 2. Y-Axis Too Small
|
||
|
||
**Mistake**:
|
||
```
|
||
65│┌───────── (Data hits 60, cramped!)
|
||
│││
|
||
60││
|
||
└──────
|
||
```
|
||
**Problem**: Exaggerates tiny changes, looks volatile
|
||
**Fix**: Provide 20-30% buffer above max value
|
||
|
||
|
||
### 3. Missing Units on Axes
|
||
|
||
**Mistake**:
|
||
```
|
||
│ "Technical Debt" ← What units? Story points? Hours? $$?
|
||
└── "Time" ← Days? Weeks? Months?
|
||
```
|
||
**Fix**: Always label with units: "Technical Debt (story points)", "Time (months)"
|
||
|
||
|
||
### 4. Time Range Too Short
|
||
|
||
**Mistake**: Showing months 0-3 when intervention at month 3 (cuts off outcome)
|
||
**Fix**: Extend to month 6-12 to show result of intervention
|
||
|
||
|
||
### 5. Time Range Too Long
|
||
|
||
**Mistake**: Showing 24 months for 2-week bug fix project (dilutes insight)
|
||
**Fix**: Match time range to problem scale (weeks for bugs, months for customers, years for strategy)
|
||
|
||
|
||
### 6. Too Many Annotations
|
||
|
||
**Mistake**: 15 labels, arrows, boxes → Unreadable clutter
|
||
**Fix**: Limit to 5-7 most important events/thresholds
|
||
|
||
|
||
### 7. Wrong Graph Type
|
||
|
||
**Mistake**: Bar chart for continuous accumulation (treats smooth growth as discrete jumps)
|
||
**Fix**: Use line graph for continuous, step function for discrete, bar for period comparison
|
||
|
||
|
||
### 8. Misleading Non-Zero Baseline
|
||
|
||
**Mistake**:
|
||
```
|
||
99.5│ ╱─── (Looks like 10× growth!)
|
||
│ ╱
|
||
99.0│╱
|
||
```
|
||
**Reality**: 99.0% → 99.5% is only +0.5% absolute change
|
||
**Fix**: Either use 0 baseline OR annotate "Y-axis starts at 99%" prominently
|
||
|
||
|
||
### 9. Overlaying Incompatible Scales
|
||
|
||
**Mistake**: Plotting Customers (0-10,000) and Revenue ($0-$100) on same Y-axis without dual-axis
|
||
**Fix**: Use dual Y-axis (left: customers, right: revenue) or separate panels
|
||
|
||
|
||
### 10. Missing Key Events
|
||
|
||
**Mistake**: Curve changes slope at month 6, no annotation explaining why
|
||
**Fix**: Mark event: "▲ Infrastructure Investment" at month 6
|
||
|
||
|
||
## Audience Adaptation Template
|
||
|
||
**Create different versions for different audiences systematically.**
|
||
|
||
### Technical Version (Engineers, Analysts)
|
||
|
||
**Language**:
|
||
- Use precise terms: "Equilibrium", "Time constant", "Stock-dependent outflow"
|
||
- Show equations: `Debt(t+1) = Debt(t) + 15 - 5`
|
||
- Include units: "story points", "bugs/week"
|
||
|
||
**Detail level**:
|
||
- All calculations shown
|
||
- Validation checks documented
|
||
- Alternative scenarios with sensitivity analysis
|
||
- Limitations and assumptions listed
|
||
|
||
**Visual complexity**:
|
||
- Multi-panel graphs acceptable
|
||
- Dual Y-axes if needed
|
||
- Detailed annotations (formulas, thresholds)
|
||
|
||
**Focus**: HOW and WHY (mechanics, validation, replication)
|
||
|
||
|
||
### Executive Version (Board, C-Suite)
|
||
|
||
**Language**:
|
||
- Use business terms: "Debt stabilizes", "Crisis trajectory", "ROI"
|
||
- Hide equations (show result only)
|
||
- Use business units: "% of team capacity", "months to crisis"
|
||
|
||
**Detail level**:
|
||
- Key insights only (no intermediate calculations)
|
||
- Single clear recommendation
|
||
- ROI or cost-benefit comparison
|
||
- Risk framing ("Without action, we reach crisis in 6 months")
|
||
|
||
**Visual complexity**:
|
||
- Single clean graph (not multi-panel)
|
||
- Simple annotations (plain English, no jargon)
|
||
- Clear comparison (with vs without intervention)
|
||
|
||
**Focus**: WHAT and SO WHAT (outcomes, decisions, impact)
|
||
|
||
|
||
### General Audience (Team, Stakeholders)
|
||
|
||
**Language**:
|
||
- Minimal jargon
|
||
- Clear labels ("Bug Count", not "Defect Density")
|
||
- Intuitive units (days/months, not time constants)
|
||
|
||
**Detail level**:
|
||
- Enough to understand trend, not full derivation
|
||
- Key events marked
|
||
- Why it matters explained in one sentence
|
||
|
||
**Visual complexity**:
|
||
- Simple line graph
|
||
- 3-5 annotations maximum
|
||
- Pattern should be obvious (up, down, stable)
|
||
|
||
**Focus**: UNDERSTANDING (what's happening, why it matters)
|
||
|
||
|
||
### Systematic Translation Process:
|
||
|
||
| Aspect | Technical | Executive | General |
|
||
|--------|-----------|-----------|---------|
|
||
| **Language** | Equilibrium, τ, ΔS | Stabilizes, timeline, change | Levels off, when, difference |
|
||
| **Detail** | All calculations | Key insights | Main pattern |
|
||
| **Visual** | Multi-panel, dual-axis | Single clean graph | Simple line |
|
||
| **Equations** | Show formulas | Hide formulas | Hide formulas |
|
||
| **Units** | Precise (story points) | Business (% capacity) | Intuitive (days) |
|
||
| **Focus** | How/Why | What/So What | What/Why it matters |
|
||
|
||
**Process**: Create technical version first (complete), then simplify for executive/general by removing detail and translating language.
|
||
|
||
|
||
## Integration with Other Skills
|
||
|
||
### BOT + Stock-Flow Modeling
|
||
|
||
**Workflow**:
|
||
1. **Stock-Flow**: Build equations, calculate values, find equilibrium
|
||
2. **BOT Graph**: Visualize those values over time
|
||
3. **BOT Graph**: Show trajectory toward (or away from) equilibrium
|
||
|
||
**Example**: Stock-flow calculates "Bug backlog drains to 0 in 4 weeks", BOT graph shows the decline curve
|
||
|
||
|
||
### BOT + Causal Loop Diagrams
|
||
|
||
**Workflow**:
|
||
1. **CLD**: Map feedback loops, identify reinforcing vs balancing
|
||
2. **Stock-Flow**: Quantify the stocks and flows in loops
|
||
3. **BOT Graph**: Show how loops create growth, decline, or oscillation over time
|
||
|
||
**Example**: CLD shows "Debt → Slow Velocity → Pressure → Shortcuts → Debt (R loop)", BOT graph shows exponential debt growth
|
||
|
||
|
||
### BOT + System Archetypes
|
||
|
||
**Workflow**:
|
||
1. **Archetype**: Recognize pattern (Fixes that Fail, Escalation)
|
||
2. **Stock-Flow**: Model the specific instance
|
||
3. **BOT Graph**: Show characteristic behavior (symptom relief then return worse)
|
||
|
||
**Example**: "Fixes that Fail" archetype → BOT shows quick fix working temporarily (months 1-3), then problem returning worse (months 4-6)
|
||
|
||
|
||
### BOT + Leverage Points
|
||
|
||
**Workflow**:
|
||
1. **Leverage Points**: Identify intervention options (parameter vs structure change)
|
||
2. **Stock-Flow**: Model each intervention's impact
|
||
3. **BOT Graph**: Compare scenarios visually (intervention A vs B vs do nothing)
|
||
|
||
**Example**: BOT shows "Hiring (Level 12): Small improvement, Quality (Level 10): Reaches equilibrium"
|
||
|
||
|
||
### Complete Workflow:
|
||
|
||
1. **Unknown problem** → Start with **Causal Loop Diagram** (map structure)
|
||
2. **Familiar pattern** → Match to **System Archetype** (leverage known interventions)
|
||
3. **Need numbers** → Build **Stock-Flow Model** (quantify stocks, flows, equilibrium)
|
||
4. **Show dynamics** → Create **BOT Graph** (visualize trajectory over time)
|
||
5. **Choose intervention** → Apply **Leverage Points** (rank options)
|
||
6. **Communicate decision** → Use **BOT Graph** + **Leverage Points** (show impact of choice)
|
||
|
||
**BOT graphs are communication and prediction tools** - use them AFTER structure (CLD) and calculation (Stock-Flow) to show "what happens over time."
|
||
|
||
|
||
## Red Flags: Rationalizations to Resist
|
||
|
||
### "I can eyeball the curve"
|
||
|
||
**Reality**: Intuition fails on non-linear dynamics, delays, equilibrium points.
|
||
|
||
**Counter**:
|
||
- Exponential growth looks slow until it's not (then it's too late)
|
||
- Delays create overshoot your intuition won't predict
|
||
- Equilibrium isn't obvious (is it at 5,000 customers or 20,000?)
|
||
|
||
**Test**: Sketch your intuitive curve, then calculate. If they match, calculation was quick confirmation. If they don't, your intuition would have misled stakeholders.
|
||
|
||
|
||
### "Math takes too long"
|
||
|
||
**Reality**: 10 minutes of calculation vs months of wrong decisions.
|
||
|
||
**Counter**:
|
||
- Stock-flow calculation: 10-15 minutes in spreadsheet
|
||
- Drawing wrong curve: Stakeholders make $100K decisions based on it
|
||
- Wrong trajectory = wrong intervention = wasted resources
|
||
|
||
**Test**: Time to calculate vs cost of error. If error >$10K and decision not easily reversed, CALCULATE.
|
||
|
||
|
||
### "Let's make it look dramatic for the board"
|
||
|
||
**Reality**: Manipulated graphs destroy credibility permanently.
|
||
|
||
**Counter**:
|
||
- Non-zero baseline tricks can be spotted (lost trust forever)
|
||
- Exaggerated Y-axis makes real data look silly when revealed
|
||
- Board members aren't stupid - they'll ask questions
|
||
|
||
**Test**: If your graph would look different with accurate scale, you're manipulating. Use honest scale, let the real data speak.
|
||
|
||
|
||
### "Too many details, keep it clean"
|
||
|
||
**Reality**: "Clean" without context is ambiguous; "simple" ≠ "simplistic"
|
||
|
||
**Counter**:
|
||
- Removing intervention annotation: Now curve's slope change is mysterious
|
||
- Removing threshold: Now viewer doesn't know when crisis hits
|
||
- Removing units: Now "60" means nothing
|
||
|
||
**Test**: Can stakeholder make correct decision with this graph? If annotations are needed for that, they stay.
|
||
|
||
|
||
### "It's obvious what will happen"
|
||
|
||
**Reality**: Equilibrium points, overshoot, phase transitions are NOT obvious.
|
||
|
||
**Counter**:
|
||
- "Obviously grows forever" → Actually stabilizes at equilibrium
|
||
- "Obviously stabilizes" → Actually oscillates due to delays
|
||
- "Obviously smooth curve" → Actually has crisis dip (infrastructure limit)
|
||
|
||
**Test**: Ask three people to sketch their mental model. If they draw different curves, it's NOT obvious. Model it.
|
||
|
||
|
||
### "We don't have time to calculate"
|
||
|
||
**Reality**: Presenting wrong trajectory wastes everyone's time.
|
||
|
||
**Counter**:
|
||
- Meeting starts in 30 min → 15 min to calculate, 15 min to draw
|
||
- Presenting without calculation → "How did you get these numbers?" → Credibility lost
|
||
- Stakeholders make multi-month plans based on your graph → Worth getting right
|
||
|
||
**Test**: Is this graph for decision-making or just discussion? If decision-making, calculate. Always.
|
||
|
||
|
||
### "The actual data won't match anyway"
|
||
|
||
**Reality**: Models predict DYNAMICS (trends), not exact values.
|
||
|
||
**Counter**:
|
||
- You're right absolute numbers may be off ±20%
|
||
- But DYNAMICS are accurate: "Growth then plateau" vs "Unbounded growth"
|
||
- Overlay actual data when available, refine model
|
||
- Imperfect model > no model > wrong intuition
|
||
|
||
**Test**: Model shows "stabilizes at 5,000-7,000 customers in 12-18 months" - even if exact is 6,200 customers at 14 months, you captured the right behavior for decision-making.
|
||
|
||
|
||
## Summary
|
||
|
||
**Behavior-over-time graphs** visualize system dynamics over time:
|
||
|
||
**7-step construction process**:
|
||
1. Identify what to plot (stocks, not flows)
|
||
2. Determine time scale (granularity and range)
|
||
3. Calculate values (using stock-flow equations)
|
||
4. Select graph type (line, area, step, bar)
|
||
5. Choose scale (70-80% rule)
|
||
6. Add annotations (events, phases, thresholds, max 5-7)
|
||
7. Validate (checklist before presenting)
|
||
|
||
**ASCII standards**:
|
||
- Consistent character set: │ ─ ┌ ┐ └ ┘ ╱ ╲ ● ○
|
||
- Clear axis labels with units
|
||
- Templates for common patterns
|
||
|
||
**Key rules**:
|
||
- 70-80% scale rule (data_max = 70-80% of Y-axis)
|
||
- 2-3× time constant for range
|
||
- <7 annotations maximum
|
||
- Always calculate, never eyeball
|
||
|
||
**Multi-variable strategies**:
|
||
- Dual Y-axis: Related variables, different units
|
||
- Separate panels: Different domains, independent scales
|
||
- Normalized: Pattern focus, not magnitude
|
||
|
||
**Audience adaptation**:
|
||
- Technical: All details, equations, validation
|
||
- Executive: Key insights, business language, ROI
|
||
- General: Main pattern, minimal jargon, why it matters
|
||
|
||
**Integration**:
|
||
- BOT + Stock-Flow: Calculate then visualize
|
||
- BOT + CLD: Structure then dynamics
|
||
- BOT + Archetypes: Pattern then trajectory
|
||
- BOT + Leverage Points: Compare interventions
|
||
|
||
**Resist rationalizations**:
|
||
- "Eyeball it" → Intuition fails on non-linear systems
|
||
- "No time" → 15 min calculation vs wrong decisions
|
||
- "Make it dramatic" → Manipulation destroys credibility
|
||
- "Keep it clean" → Context matters for decisions
|
||
- "It's obvious" → Equilibrium, overshoot, phases aren't obvious
|
||
|
||
**The discipline**: Calculate values, choose scale systematically, validate before presenting, adapt to audience.
|
||
|
||
**The payoff**: Show concrete predictions with timelines, compare scenarios visually, communicate urgency effectively, enable data-driven decisions.
|