A validated Causal Loop Diagram with identified feedback loops, stocks and flows exists and serves as structural template for quantitative model.
System Dynamics Simulation
Prerequisite
What needs to be finished first
Stocks and flows are sketched as diagram with units, initial values and assumed rates.
Preparation
What needs to be ready before start
System dynamics tool (Vensim, Stella, Simantics System Dynamics, AnyLogic, BPTK-Py); data sources for initial values and rates; version control (Git, model files plus scripts); spreadsheet for data preparation.
One modeler with system dynamics experience (lead); one to two domain experts for rates and assumptions; one data owner for initial and validation data; one stakeholder or client for scenario selection and interpretation.
Question and time horizon; CLD and stock-and-flow sketch; available historical data for calibration; known policy options; accepted uncertainty range; reporting format.
Several days to weeks
Model folder in repo with /model, /data, /scenarios, /docs. Tool installed and licensed. Calibration dataset imported. Question and time horizon visible in model documentation.
Core question
The one question this method answers
Which dynamic effects and policy levers become visible when qualitative structure is calculated as quantitative model across the time horizon?
Flow
Marker: Phase
| Step | Duration | Action | Hint |
|---|---|---|---|
1Phase 1: Fix question and time horizon | Half day | Define concretely formulated policy or strategy question. Time horizon in steps (for example monthly, 10 years). Success picture for model: what must be answerable at end? | If question is "what will the future look like", it is not answerable. Question must be comparative: effect of measure A vs. B over horizon. |
2Phase 2: Implement model | 3-7 days | Enter stocks and flows in tool. Formulate equations for rates. Model auxiliaries, lookups, time delays. Keep units consistent. Run model without errors. | Units check is mandatory. One mismatch destroys explanatory power. Tools often have built-in units check that must not be disabled. |
3Phase 3: Calibration | 2-5 days | Run model against historical data (hindcast). Adjust parameters so trajectory fits realistically. Document fit metrics (for example RMSE). On mismatch, check structure instead of parameters. | Fine-tuning only parameters to fit data (overfitting) gives no forecast value. Mismatch often shows missing loops that must be structurally added first. |
4Phase 4: Sensitivity analysis | 1-2 days | Define ranges for 5-10 central parameters. Run sensitivity runs (Monte Carlo or structured tornado analysis). Identify robust vs. fragile parameters. | Communicating single-point forecasts suggests precision model does not provide. Sensitivity belongs in every output, otherwise model is misunderstood as oracle. |
5Phase 5: Scenarios and policy tests | 1-3 days | Define clear parameter setting and timeline per scenario. At least 3 scenarios (baseline, measure A, measure B). Results as trajectory curves, not only endpoints. | Endpoint tables often lie: measures work differently short-term than long-term. Trajectory curve shows overshoots, delays and reactions that disappear in endpoint. |
6Phase 6: Interpretation and reporting | Half day | Document results with assumptions, sensitivity and limitations. Stakeholder workshop for interpretation. Archive model with data and scripts as reproducible bundle. | Presenting model without assumptions disclosure invites misinterpretation. Assumptions must be communicated as prominently as results. |
Artifact
What comes out at the end
Repository with model file (Vensim mdl, Stella isd, Python notebook), dataset, scenario configurations, sensitivity reports, trajectory curves (plots), assumptions documentation and stakeholder briefing.
Model with SemVer in Git repo. Structural changes documented per major release. Data snapshots dated, not overwritten. Scenario files as separate files with description.
- Vensim PLE/DSS for established setups
- Stella Architect for visual modeling
- BPTK-Py or PySD for Python-based simulation
- AnyLogic for multi-method models
system-dynamics-simulation-working-template.md
Compact working template for System Dynamics Simulation with context, input, output artifacts, and next step.
System Dynamics Simulation Working Template
Goal
Quantitative simulation model built from stocks, flows, and feedback loops.
Context
When and for what do we use this method?
Input
Which data, observations, decisions, or materials are available?
Execution
Short notes along the runsheet.
Output artifacts
- Simulation model:
- Scenario reports:
Assumptions and open questions
- ...
Decision / next step
Owner, date, and success signal.
Example output
Concrete filled scenario, fictional example
system-dynamics-simulation-beispiel.md
Concrete filled scenario, fictional example
Simulation — Heat-pump subsidy program Saxony 2026-2040 (model v0.4, 2026-05-18)
Question: How strongly does increasing investment subsidy from 30% to 45% reduce CO2 emissions in residential building stock by 2040 compared with baseline path?
Time horizon: 2026-2040, monthly steps.
Stocks: Number of heat pumps, number of gas heaters, cumulative CO2. Flows: Installation rate, retirement rate, heating demand. Key parameters: Installation rate (200-650/month by subsidy level), lifetime (18 years), heating demand (seasonal).
Calibration: Hindcast 2018-2025, RMSE 4.2% for heat-pump stock. Acceptable.
Scenarios:
- Baseline: 30% subsidy, cumulative CO2 by 2040: 84 Mt.
- Scenario A: 45% subsidy from 2027, cumulative 71 Mt (-15%).
- Scenario B: 45% + gas shutdown 2035: 58 Mt (-31%).
Sensitivity: Robust against heating-demand variation (+/-10% gives +/-2 Mt). Fragile against installation capacity (+/-20% gives +/-9 Mt). Policy recommendation: subsidy alone limited, bottleneck is installer capacity.
Limitations: Model ignores electricity-price feedback and district-heating competition.
Pitfalls
Recognize symptoms and steer against them
Point forecasts communicated
Stakeholders quote one single number ("minus 15%") without range.
Always present results as range with sensitivity. Point value in reports without confidence interval is forbidden.
Unit error
Model runs, but values look plausible although units do not fit (for example month vs. year).
Activate tool's units check and never disable. Check manually when migrating between tools. Plausibility check against external benchmark.
Overfitting
Model fits history perfectly, forecasts for subsequent years deviate massively.
Train-test split: calibration on older data, validation on newer. For structural mismatch add loops, do not keep adjusting parameters.
Missing loops
Model shows linear trajectory, reality shows saturation or oscillation.
Re-check CLD and Stock-and-Flow. Balancing loops are often missing (capacity constraints, saturation). Structure problem, not parameter.
Stakeholders without interpretation aid
Stakeholders read plots and draw wrong conclusions about mechanisms.
Short explanation of mechanism per scenario (which loops dominate when). Stakeholder workshop instead of PDF sendout.
Model not reproducible
Six months later nobody can rerun model with same assumptions.
Store model, data and scripts versioned. README with reproduction command. Fix tool version in docs.
Stop criteria
Done signals checkable in under a minute
Finished the runsheet?
Go to the profile for purpose, similar methods, and sources or continue to the next method in the catalog.