Model system dynamics with stocks (accumulations), flows (rates of change), and feedback to quantitatively predict behavior over time
Stock and Flow Diagrams, pioneered by Jay Forrester at MIT and refined by Donella Meadows in "Thinking in Systems", are the foundational tool for quantitative system dynamics modeling. Where Causal Loop Diagrams show qualitative feedback structure, stock-flow diagrams add mathematical precision: stocks (accumulations you can measure at any moment), flows (rates that fill or drain stocks), and converters (calculations/parameters). Meadows' core principle: "If you understand the dynamics of stocks and flows, you understand a good deal about the behavior of complex systems."
The key insight: all dynamic behavior comes from how stocks accumulate and deplete through flows. A bathtub fills (inflow) and drains (outflow) - the water level (stock) at any moment equals initial level plus all inflows minus all outflows. This simple structure explains inventory dynamics, population growth, skill acquisition, market share shifts, and epidemic spread. Stocks create inertia (can't change instantly), flows create momentum, and the interplay generates oscillation, overshoot, collapse, and equilibrium.
Stocks are elements you can see, measure, or count at any given moment. They are nouns that accumulate over time. Stocks change slowly and create system inertia.
Stock identification:
Notation: Rectangle or bold text: [Stock Name]
Examples:
Flows are rates that increase or decrease stocks over time. Flows are verbs - actions happening now. Flows can change instantly (turn faucet on/off).
Flow identification:
Notation: Arrow with valve symbol: →|>→ pointing into (inflow) or out of (outflow) stock
Examples:
Converters are parameters, constants, or calculations that influence flows. Connectors show information links (not material flows).
Converters:
Notation: Circle or plain text: (Converter Name)
Connectors: Thin arrows showing information flow (what influences what)
Specify equations for each flow and converter. Stocks automatically integrate flows (stock = previous stock + inflows - outflows).
Flow equations:
Sales rate = marketing spend × conversion rateAdoption rate = contacts × adoption probability × (1 - market saturation)Production rate = desired inventory - actual inventory / adjustment timeStock equations (implicit):
Stock(t) = Stock(t-1) + (Inflows - Outflows) × dtExample:
[Customer Base]New customers/month = marketing spend × 0.02 × (market size - customer base)Churn/month = customer base × 0.05 (5% monthly churn)Market size = 10,000 (constant), Marketing spend = revenue × 0.3Run the model forward in time (simulation). Compare output to observed behavior. Adjust equations and parameters until model reproduces reality.
Simulation questions:
Validation tactics:
Situation: Manufacturing company struggling with inventory oscillation - alternating between stockouts and excess inventory.
Application:
Step 1 - Define stocks:
[Inventory] (units)[Orders in Pipeline] (units ordered but not yet arrived)Step 2 - Define flows:
Arrival rate = Orders in Pipeline / lead time (lead time = 4 weeks)Sales rate = 100 units/week (constant demand)Order rate = desired inventory - actual inventory / adjustment timeArrival rate (same as inflow to Inventory)Step 3 - Define converters:
Desired inventory = 8 weeks × sales rate = 800 unitsLead time = 4 weeks (supplier delay)Adjustment time = 2 weeks (how fast we correct deviations)Step 4 - Mathematical relationships:
Order rate = (800 - Inventory) / 2 (order to close gap in 2 weeks)Step 5 - Simulate:
Intervention: Change order rate equation to account for pipeline:
Order rate = (desired inventory - actual inventory - orders in pipeline) / adjustment timeOutcome: Stock-flow model revealed that ignoring pipeline orders caused oscillation. Simple equation change (adding pipeline awareness) stabilized system without changing lead time or demand.
Situation: Epidemic spreading through population - model to predict healthcare capacity needs.
Application:
Stocks:
[Susceptible] - can be infected[Infected] - currently sick[Recovered] - immune after recoveryFlows:
Susceptible → Infected (infection rate)Infected → Recovered (recovery rate)Equations:
Infection rate = contact rate × transmission probability × Susceptible × Infected / PopulationRecovery rate = Infected / illness durationConverters:
Contact rate = 10 people/dayTransmission probability = 0.02 (2% per contact)Illness duration = 14 daysSimulation results:
Outcome: Model shows healthcare capacity planning (need 2,800 beds without intervention, 800 with lockdown). Stock-flow structure reveals why "flattening curve" works - reduces peak load by spreading infections over time.