1. Introduction
This guideline accompanies Askbeard System Dynamics Studio, a lightweight browser-based prototype for building and simulating stock-and-flow models. It explains the basic ideas of System Dynamics, describes each feature of the prototype, summarises how the field has developed as a research discipline, and lists references for further study. It is written for students, researchers and practitioners who are new to dynamic modelling.
2. What is System Dynamics?
System Dynamics (SD) is a method for understanding how the structure of a system (its accumulations, rates of change, feedback loops and delays) produces its behaviour over time. It was developed by Jay W. Forrester at the MIT Sloan School of Management in the late 1950s, initially to study industrial production and distribution systems (Forrester, 1958, 1961).
Its central idea is that many persistent problems in organisations, economies, public health and the environment are generated endogenously: they arise from feedback within the system rather than from external shocks alone. An SD model makes these feedback structures explicit and simulates them, so that assumptions can be examined and policies tested before they are tried in the real world (Sterman, 2000).
3. Core concepts
| Symbol | Concept | Meaning |
|---|---|---|
| Stock | An accumulation that changes only through flows; the state of the system (for example population, inventory or knowledge). | |
| Flow | A rate that fills or drains a stock per unit of time (for example births per year). | |
| Variable | An auxiliary value calculated from other elements, or a constant parameter (for example birth rate). | |
| Delay | A flow or variable whose output lags behind its input, written with DELAY or SMOOTH functions. Marked with double bars. | |
| Connector | An information link showing that one value is used in another element’s equation. | |
| Source / sink | The model boundary: where a flow comes from or goes to when that quantity is not tracked. |
Feedback loops. Stocks, flows and connectors combine into closed causal loops. A reinforcing loop amplifies change: more population produces more births, which produces more population. A balancing loop counteracts change: more population produces more deaths, which reduces population. System behaviour depends on which loops dominate at a given time (Richardson, 1991; Meadows, 2008).
Causal loop diagrams. A causal loop diagram (CLD) is a qualitative map of the causal structure of a system. Variables are written as words and joined by arrows, called causal links, that show how a change in one variable influences another. Every link has a polarity. A positive link (+) means that if the cause rises, the effect rises above what it would otherwise have been, and if the cause falls, the effect falls; the two move in the same direction. A negative link (−) means that if the cause rises, the effect falls below what it would otherwise have been; the two move in opposite directions (Sterman, 2000).
| Symbol | Element | Meaning |
|---|---|---|
| Positive link | Cause and effect change in the same direction. | |
| Negative link | Cause and effect change in opposite directions. | |
| Reinforcing loop (R) | A loop with an even number of negative links (or none). It amplifies change and produces growth or collapse. | |
| Balancing loop (B) | A loop with an odd number of negative links. It counteracts change and pulls the system towards a goal. |
Following links around a closed chain gives a feedback loop, and its type depends only on the number of negative links it contains. In the population example, more population means more births and more births mean more population (R); more population also means more deaths, which reduce the population (B). Delays on a link are often marked with a double bar. CLDs are valuable for capturing mental models, communicating the feedback structure behind a problem and forming a dynamic hypothesis early in a project (Richardson, 1991; Sterman, 2000). They do not distinguish stocks from flows and contain no equations, so they cannot show on their own how a system will behave over time; a stock-and-flow model is needed for simulation. In the Studio the two are linked: the causal loop view is generated from the stock-and-flow model, and you can add qualitative variables and links of your own (Section 5.2).
Delays. Material and information take time to move through a system: goods are in production, messages are in transit, perceptions adjust slowly. A material delay conserves what flows through it (orders become deliveries), while an information delay smooths a signal (reported sales become perceived demand). Delays inside balancing loops are a major source of oscillation and overshoot (Sterman, 2000).
Integration. Mathematically, a stock is the integral of its net flow:
The Studio approximates this integral numerically with the method you choose, as described in Sections 5.6, 6 and 7.
4. The modelling process
Modelling is iterative rather than linear. A widely used description (Sterman, 2000) has five activities:
- Problem articulation. Define the problem, key variables and time horizon, and sketch reference modes: graphs of observed or expected behaviour over time.
- Dynamic hypothesis. Propose a feedback structure that could explain the reference modes, using causal loop and stock-and-flow diagrams.
- Formulation. Write the equations, choose parameter values and initial conditions, and check units.
- Testing. Compare simulated behaviour with data, run extreme-condition and sensitivity tests, and check that every equation is meaningful in the real world (Barlas, 1996).
- Policy design and evaluation. Test changes to parameters and structure, and examine how robust the conclusions are under uncertainty.
5. Using Askbeard System Dynamics Studio
5.1 Navigation
The Studio has three pages: Start Dynamic Modelling (the workspace), Demo (two completed models: population growth and an inventory system with a production delay) and Guideline (this document, also available as a PDF). It runs entirely in the browser; no account, installation or server is needed.
5.2 Building a model
| Tool | How to use it | |
|---|---|---|
| Select | Click an element to edit it; drag it to move it. Press Esc to return to this tool and Delete to remove the selected element. | |
| Stock | Click the canvas to place a stock, then set its name, initial value and units. | |
| Flow | Click where the flow starts (a stock or empty space), then where it ends. Empty space becomes a cloud. A flow must touch at least one stock. | |
| Variable | Click the canvas to place a variable, then enter its value or equation. | |
| Delay | Click the canvas to place a delay variable. It starts as DELAY3(0, 1); replace 0 with the input and 1 with the delay time. | |
| Connector | Click the element whose value is used, then the element that uses it. Connectors cannot point into a stock, because stocks change only through flows. | |
| Clear canvas | Removes every element so that you can start a new model. |
The Example list above the canvas loads a ready-made model to study or adapt. Besides the two basic examples it offers a library of 29 models in six groups. Environment and sustainability: a nature-based solution (mangrove restoration), ecosystem-based disaster risk reduction (Eco-DRR), land-use change, deforestation, urban sprawl, ecodynamics (predator and prey), a socio-ecological fishery commons, biodiversity management, biodiversity credits, a dynamic life cycle assessment, an organisational carbon footprint and a circular economy of waste and recycling. Climate and disasters: climate resilience and adaptation, disaster management and reconstruction, and water security under drought. Industry and operations: a three-stage supply chain showing the bullwhip effect; production, inventory and workforce; and maintenance and machine reliability. Business and management: product adoption (Bass diffusion), customer retention and churn, brand awareness and loyalty, employee turnover and workload, the project rework cycle, and cash flow and working capital. Islamic finance (sharia, without riba): mudharabah profit sharing, musharakah mutanaqisah home financing, zakat collection and productive empowerment, and productive cash waqf. Health and society: an epidemic (SIR) with social distancing. Each opens in both the stock-and-flow and causal loop views, and a short description appears in the side panel. Their parameters are illustrative rather than calibrated, so adapt them to your own data before drawing conclusions. Reset restores the most recently loaded example.
Causal loop view. The Stock & Flow | Causal Loop switch above the canvas (also on each Demo) shows the model as a causal loop diagram. It is generated from the model: every variable used in an equation becomes a causal link, inflows add to their stock (+) and outflows subtract from it (−). Each link’s polarity is computed from the equations at the initial time; links whose effect is zero at that moment show ?. In this view the toolbox offers CLD variable, to place a qualitative variable (drawn with a dashed outline and not simulated), and Causal link, to draw an arrow from a cause to an effect. Click any link to set its polarity to +, − or, for model links, back to automatic, or to delete a link you drew; press Delete to remove a selected link or CLD variable. When you have drawn your own variables or links, the optional Convert to Stock & Flow button under the diagram turns them into model elements: you choose whether each CLD variable becomes a variable or a stock (the Studio suggests a stock for every loop that has none), links become connectors, and starting equations are written that keep each link’s polarity (a + cause multiplies, a − cause divides, each measured relative to its starting value so that the existing model is unchanged at the initial time; a stock gets an inflow for its + causes and an outflow for its − causes). Replace the starting values with real ones before relying on the results; Undo conversion restores the model as it was. Feedback loops are found automatically and labelled R (reinforcing) or B (balancing), with a list under the diagram. Reports include the causal loop diagram and a table of its loops.
Appearance. The Appearance button opens colour pickers for stocks, flows, variables, connectors, text, the canvas and positive and negative links, plus a text-size slider. The choice is remembered in the browser and applies to both views, the demos and the diagrams in reports; Reset colours restores the defaults.
5.3 Writing equations
Select an element to open the equation editor. Names are written with underscores instead of spaces, so “Birth Rate” is referenced as Birth_Rate; names are not case-sensitive. Connected inputs appear as buttons that insert their name at the cursor, and function buttons insert a template such as DELAY3(input, delay_time). Changes to the name, equation and units are saved automatically when you leave a field, select another element or run the model; Apply (or Ctrl+Enter) saves immediately and Close closes the editor. Renaming an element updates every equation that refers to it. Names may use letters from any language, digits and spaces; symbols such as - / ( ) or % are not allowed, because they would be read as operators.
| Syntax | Meaning |
|---|---|
+ − * / ^ | Addition, subtraction, multiplication, division, power |
( ) | Grouping |
< > <= >= = <> | Comparisons; return 1 (true) or 0 (false) |
IF(cond, a, b) | a when cond is non-zero, otherwise b |
MIN(a, b, …) MAX(a, b, …) | Smallest or largest argument |
ABS(x) SQRT(x) EXP(x) LOG(x) | Absolute value, square root, e to the power x, natural logarithm |
LOOKUP(x, x1, y1, x2, y2, …) | Table (graphical) function: linear interpolation between points, flat beyond the ends |
STEP(h, t) | 0 before time t, h from time t onward |
PULSE(start, width) | 1 from start for width time units, otherwise 0 |
RAMP(slope, start, end) | Rises at the given slope between start and end (end is optional) |
RANDOM_UNIFORM(a, b) | Uniform random number between a and b, drawn once per time step |
RANDOM_NORMAL(mean, sd) | Normally distributed random number, drawn once per time step |
TIME DT | Current simulation time and the time step |
Example: Population * Birth_Rate * LOOKUP(Population / Capacity, 0, 1, 1, 0.5, 2, 0) reduces births as the population approaches its carrying capacity.
5.4 Delays and smoothing
| Syntax | Meaning |
|---|---|
DELAY1(x, T) | First-order material delay: output responds exponentially to changes in x, with average delay T |
DELAY3(x, T) | Third-order material delay: three stages of T/3, giving an S-shaped response; the usual choice for production and shipping |
SMOOTH(x, T) | First-order information delay (exponential smoothing), for perceptions and forecasts |
SMOOTH3(x, T) | Third-order information delay |
SMOOTHI(x, T, i) | SMOOTH that starts from the initial value i instead of x |
Each delay function keeps its own internal stocks, integrated with the same method as the model’s stocks, and starts in equilibrium with its input. Delays can be written in any flow or variable, for example Production = DELAY3(Orders, Production_Delay). Elements that contain a delay are drawn with double bars. The delay time should be several times larger than DT.
5.5 Units and model validation
Each element has a Units field, for example people, people/year or 1/year; use dmnl for dimensionless values and set the model’s Time unit in the simulation bar. The unit check verifies that terms added or compared have the same units, that each flow is in its stock’s units per time unit, that delay and step times are in the time unit, and that each equation produces its declared units. Numbers adapt to any unit, and elements without units are skipped. Unit problems are listed as warnings and never stop a run.
The status indicator shows Model is ready when every structural check passes, or Check model equations with a list of problems: empty equations, undefined names, invalid expressions, unknown functions, duplicate or reserved names, flows not connected to any stock, invalid initial values, and circular definitions among flows and variables. Click a problem to select the element; affected elements are drawn with a dashed outline.
5.6 Running a simulation
Set Initial time, Final time, DT, Time unit, Method and Seed, then press Run simulation. At each step the engine sets every stock (including the internal stocks of delays), computes flows and variables in dependency order, and advances the state with the chosen method:
| Method | How it advances one step |
|---|---|
| Euler | Stock(t + DT) = Stock(t) + NetFlow(t) × DT. Fast and transparent; accuracy improves in proportion to DT. |
| Runge–Kutta 2 | Averages the net flow at the start and at a trial end of the step (Heun’s method). Error falls with DT squared. |
| Runge–Kutta 4 | Combines four evaluations of the net flow within the step. Very accurate for smooth models; error falls with DT to the fourth power. |
The Seed fixes the sequence of random numbers, so a model with RANDOM functions gives the same result each time it is run with the same seed. Random values are drawn once per time step and held for all Runge–Kutta stages.
5.7 Results and export
The line chart shows stocks as thick lines, flows as thinner lines and changing variables as dashed lines; click a legend item to show or hide a series. The table lists time, stocks, flows and changing variables. Export CSV saves every element at every time step, with units in the column headings. If the model is edited after a run, a notice indicates that the results are out of date.
5.8 Saving and opening models
The Studio saves the current model in your browser automatically and restores it the next time you open the page. Save model downloads the model, including its layout, units, simulation settings and causal loop additions, as a JSON file; Save image saves the diagram in the current view (stock-and-flow or causal loop) as a PNG or JPG picture or as a scalable SVG file, using your Appearance colours; Open model loads such a file, so models can be kept, shared and versioned.
5.9 Analysis tools
| Tool | What it does |
|---|---|
| Scenarios | Keep any run under a name, change the model, run again and compare all kept runs for a chosen variable on one chart. |
| Sensitivity | Runs the model repeatedly while one parameter (a constant or a stock’s initial value) moves evenly across a range. Shows every run on one chart and tabulates the final, minimum, maximum and average of the chosen output. |
| Optimisation | Finds values for up to three parameters, within bounds, that minimise or maximise a measure of an output (final value, maximum, minimum or average) or bring it to a target. A grid search is refined with the Nelder–Mead method; Apply to model writes the values into the model. |
5.10 Reports
The Report card at the bottom of the workspace creates a complete report of the current model in English, Arabic, Indonesian, Spanish, Tagalog, German, French or Mandarin Chinese. Choose the language, optionally enter a title and author, and download it as a PDF, a Word (DOCX) file or an Excel (XLSX) workbook. The Studio runs the model again so that every file always matches the current equations and settings. The same options are available under Report and data on the Demo page, where the file uses the value set on the demo slider and adds a sensitivity analysis across the slider’s full range.
The Excel workbook has a Summary sheet whose initial, final, minimum, maximum and average values are live formulas over the Results sheet, a Results sheet with every element at every time step, the model’s equations and units, the simulation settings and, when available, the sensitivity runs. Headings follow the chosen language.
Each report has a cover page, a table of contents with page numbers, and numbered sections: a summary with the main results, the stock-and-flow diagram and a table of all equations and units, the simulation settings, a chart and summary statistics of the results, values at selected time steps, any scenario, sensitivity and optimisation analysis done in the Analysis card (with their charts and tables), the validation and unit-check results, and notes. Arabic reports are laid out right to left. In the PDF the table of contents entries and bookmarks link to their pages; the pages are drawn as images so that every script displays correctly, which means the text cannot be selected. In the Word file the text, tables and charts are fully editable, and Word refreshes the table of contents page numbers when the file is opened. Element names, equations and check messages are kept exactly as written in the model.
5.11 Demos
Population Dynamics shows exponential growth driven by a reinforcing birth loop and a balancing death loop. With a death rate of 1%, the population grows when the birth rate slider is above 1%, stays constant at exactly 1% and declines below it.
Inventory with a Delay shows why delays matter. Demand rises by 20% in week 5; production responds only after a third-order production delay, and orders ignore goods already in production. Inventory falls, overshoots its target and oscillates before settling. The production delay slider shows that longer delays produce larger swings. Both demos are editable: click any element in the diagram to rename it or change its value, equation or units, and the demo runs again straight away. Reset demo restores the original, and Open in workspace loads the demo, with your changes, into the workspace.
6. Settings and options explained
This section explains, in plain language, every setting and option in the Studio: what it means, when to change it and what to watch out for. Nothing here is required reading before your first model; come back to it whenever an option is unclear.
6.1 Simulation settings
| Setting | What it means | Tip |
|---|---|---|
| Initial time | The moment the simulation starts. Every stock takes its initial value at this time. | Usually 0. Use a calendar year (for example 2025) if you want the chart to show years. |
| Final time | The moment the simulation stops. The span from initial to final time is the time horizon. | Choose a horizon long enough to see the behaviour you care about: decades for land use or climate, weeks for inventory. |
| DT (time step) | The size of each calculation step. The Studio does not calculate continuously; it jumps forward DT at a time, like the frames of a film. | Smaller DT means more frames: smoother and more accurate, but more calculations. See 6.2. |
| Time unit | The unit in which time is measured: day, week, month or year. All rates are “per” this unit. | It is a label for the unit check and the charts; changing it does not rescale any numbers. A flow into a stock in people must be in people per time unit. |
| Method | The integration method: the rule used to move every stock forward by one step. Explained in 6.3. | Euler is the usual choice; Runge–Kutta 4 for smooth models that need high accuracy. |
| Seed | The starting number for the random-number generator. Only used by RANDOM_UNIFORM and RANDOM_NORMAL. Explained in 6.4. | Leave it at 42 unless you want to see a different random outcome. |
6.2 Choosing DT
A stock changes continuously in reality, but the computer can only calculate it at separate moments. With DT = 1 and a horizon of 100 years the Studio calculates 100 steps; with DT = 0.25 it calculates 400 steps. Think of a film: 4 frames per second looks jumpy, 25 frames per second looks smooth. If DT is too large, fast changes are missed or exaggerated and results can even oscillate or become negative when they should not.
- Rule of thumb. Keep DT at most a quarter of the shortest delay or adjustment time in the model. If the fastest process takes 2 weeks, use DT = 0.5 week or less. For DELAY3 the relevant time is a third of the delay time.
- The halving test. Run the model, halve DT and run it again. If the results hardly change, DT is small enough. If they change noticeably, keep halving until they stop changing.
- Convenient values. Use values such as 1, 0.5, 0.25 or 0.125 so that reported times fall on round numbers.
6.3 Integration methods: Euler and Runge–Kutta
At each step the Studio knows every stock and flow at the current time and must estimate the stocks one DT later. The three methods differ in how often they look at the flows within the step. An everyday comparison: to estimate how far a car travels in one hour, you can use the speed at the start of the hour (Euler), the average of the speed at the start and at the end (Runge–Kutta 2), or check the speedometer several times during the hour and combine the readings (Runge–Kutta 4).
| Method | How it works | Best for |
|---|---|---|
| Euler | New stock = old stock + (inflows − outflows) × DT, using the flows at the start of the step. One evaluation of the model per step. | Most System Dynamics work, models with sudden switches (IF, STEP, PULSE, MIN, MAX) and models with random inputs. Transparent and easy to check by hand. |
| Runge–Kutta 2 (Heun) | Takes a trial Euler step, evaluates the flows again at the end of that trial step and uses the average of the two. Two evaluations per step. | Smooth models where Euler needs a very small DT; a good compromise between speed and accuracy. |
| Runge–Kutta 4 | Evaluates the flows four times within each step (at the start, twice at the middle and at the end) and combines them with weights 1, 2, 2 and 1. Four evaluations per step. | Smooth models (growth, decay, oscillations, epidemics) where accuracy matters; allows a larger DT for the same accuracy. |
Example: in the population example the exact population after 100 years is 2,718.28. With DT = 1, Euler gives 2,704.81 (0.5% low), Runge–Kutta 2 gives 2,718.24 and Runge–Kutta 4 gives 2,718.28. With Euler the error shrinks as DT shrinks; with Runge–Kutta it is already tiny. Runge–Kutta methods are less suitable when the model contains sudden jumps, because the extra evaluations inside a step can land on either side of the jump; use Euler with a small DT in that case.
6.4 Seed and random numbers
Some models include chance, such as business returns in the Mudharabah example, which rise and fall from month to month. The functions RANDOM_UNIFORM and RANDOM_NORMAL provide these random values. A computer cannot create truly random numbers; it produces a long sequence that looks random, starting from a number called the seed.
Think of the seed as a recording of dice throws. Seed 42 is recording number 42: every time you press Run the same throws are replayed, so the results are identical. Change the seed to 7 and a different recording is played, so the results differ even though the model has not changed. The seed has no effect on models without random functions.
- Reproducible results. Keep the same seed when you write a report or teach, and mention it, so that others obtain exactly the same results.
- Exploring uncertainty. Run the model with several seeds (1, 2, 3 …) and keep each run as a scenario to see the range of possible outcomes.
- How often values change. Random values are drawn once per time step and stay the same within that step, so the same seed with a different DT gives a different sequence.
6.5 Model options
| Option | What it means | Tip |
|---|---|---|
| Units | The unit of an element, such as people, ha, USD/month or 1/year. Use dmnl for values without a unit (fractions, ratios, indices). | Units are optional but let the unit check find mistakes, such as adding hectares to people. |
| Delay functions | DELAY1, DELAY3, SMOOTH, SMOOTH3 and SMOOTHI make an output follow its input after a delay (see 5.4). | Use DELAY for material that takes time to arrive, SMOOTH for perceptions and forecasts that adjust slowly. |
| LOOKUP | A table function: you give points (x, y) and the Studio draws straight lines between them. | Useful for effects that are not proportional, such as crowding or saturation. |
| STEP, PULSE, RAMP | Test inputs that switch on at a given time, act for a short period or rise steadily. | Use them to test how the model responds to a sudden or gradual change. |
6.6 Analysis options
Scenarios. A scenario is a “what if” run kept under a name. Run the model, press Keep current run, change something (for example a higher birth rate), run again and keep that run too. The chart then compares all kept runs for the variable chosen under Compare. Scenarios answer questions such as “what happens under policy A compared with policy B?”
Sensitivity analysis. Sensitivity analysis asks how much an output depends on one uncertain parameter. Choose a Parameter (a constant or a stock’s initial value), a range from From to To, the number of Runs and the Output to watch. The Studio runs the model once for each evenly spaced value in the range and draws every run on one chart, from light to dark. Widely spread lines mean the output is sensitive to that parameter and its value should be estimated carefully; lines that lie on top of each other mean it hardly matters.
Optimisation. Optimisation searches automatically for the parameter values that best meet a goal, within bounds you set.
| Option | What it means |
|---|---|
| Parameter, Minimum, Maximum | The parameters the search may change (up to three) and the range allowed for each. Choose realistic bounds: the search never leaves them. |
| Goal | Minimise (as small as possible), Maximise (as large as possible) or Reach target (as close as possible to a value you enter under Target). |
| Measure | Which aspect of the output counts: its final value, its maximum, its minimum or its average over the run. |
| Of | The output variable the goal applies to. |
| Apply to model | Writes the best values found into the model so that you can run it and study the result. |
The search first tries a grid of evenly spaced combinations within the bounds, then refines the best one with the Nelder–Mead method, which moves a small set of trial points step by step towards better results. It may find a good local answer rather than the single best one, and the answer is only as good as the model, so check that the optimised values make sense in reality.
6.7 Diagram, file and report options
| Option | What it means |
|---|---|
| Stock & Flow | Causal Loop | Switches the diagram between the stock-and-flow view used for simulation and the causal loop view of the same model. |
| Polarity (+, −, ?, Automatic) | The direction of a causal link: + same direction, − opposite direction, ? not yet known. Automatic uses the polarity computed from the equations. |
| Appearance | Colours of stocks, flows, variables, connectors, text, canvas and positive and negative links, and the text size. Remembered in your browser. |
| Example | Loads a ready-made model from the library. Replaces the current model, so save your own work first. |
| Reset | Reloads the most recently loaded example with its original values. |
| Clear canvas | Removes every element to start a new model. |
| Save model / Open model | Saves the whole model (layout, equations, units, settings, causal loop additions) as a JSON file, and opens such a file again. |
| Save image | PNG: sharp picture for slides and documents. JPG: smaller picture file. SVG: vector drawing that stays sharp at any size, for print or editing. |
| Export CSV | Saves every element at every time step as a table for spreadsheets, R or Python. |
| Report: PDF, Word (DOCX), Excel (XLSX) | PDF for reading and printing; Word for editing the text, tables and charts; Excel for the full data and live summary formulas. Choose one of eight languages; Report title and Prepared by appear on the cover. |
7. Numerical notes and good practice
- Choose DT carefully. Halve DT and run again; if the results change noticeably, the step was too large. Keep DT well below the shortest time constant or delay stage in the model, for example no more than a quarter of T/3 for a DELAY3 (Sterman, 2000).
- Choose the method. The population example’s exact solution is 1000 × e0.01t, about 2,718.28 at t = 100. With DT = 1, Euler gives 2,704.81, Runge–Kutta 2 gives 2,718.24 and Runge–Kutta 4 gives 2,718.28. Prefer Euler when the model contains sharp switches (IF, STEP, PULSE, MIN, MAX) or random inputs, and Runge–Kutta 4 for smooth models.
- Check units. Every flow should be in the units of its stock per time unit. Fix unit warnings before trusting a model.
- Test extreme conditions. Set parameters to zero or to very large values and confirm the model still behaves plausibly; for example, a stock that must stay non-negative should not become negative.
- Test sensitivity before optimising. Use the sensitivity tool to learn which parameters matter; an optimum found for an insensitive or poorly known parameter is not meaningful.
- Document assumptions. Record the source of every parameter and the reasoning behind every equation.
8. Development of System Dynamics research
Origins (1950s–1960s). Forrester applied ideas from feedback control engineering and digital computing to management problems (Forrester, 1958, 1961). This work showed how ordering policies and delays in supply chains can amplify small changes in customer demand.
Urban and global models (late 1960s–1970s). Urban Dynamics (Forrester, 1969) extended the method to cities. The Limits to Growth (Meadows et al., 1972) used the World3 model to explore interactions between population, industrial output, resources and pollution, bringing the field to wide public attention and considerable debate.
Feedback thinking and behavioural foundations (1980s–1990s). Experiments showed that decision makers systematically misperceive feedback and delays when managing dynamic systems (Sterman, 1989). Richardson (1991) traced the history of feedback ideas in the social sciences, and Senge (1990) popularised systems thinking for organisational learning.
Model validity and methodology (1990s–2000s). Barlas (1996) formalised structural and behavioural tests of model validity. Textbooks consolidated methods for business and policy modelling (Sterman, 2000; Morecroft, 2015), and methods for identifying which feedback loops dominate behaviour were developed further (Kampmann & Oliva, 2008).
Participatory modelling. Group model building involves stakeholders directly in constructing models, improving shared understanding and commitment to decisions (Vennix, 1996). Community-based system dynamics extended this approach to work with and within communities (Hovmand, 2014).
Health, environment and policy. SD is widely used in public health for chronic disease and health-system planning (Homer & Hirsch, 2006), and in environmental and energy systems (Ford, 2010).
Quantitative methods and hybrid models (2000s–present). Research has strengthened calibration, parameter estimation, sensitivity and uncertainty analysis (Rahmandad et al., 2015), and has compared or combined SD with agent-based and network models (Rahmandad & Sterman, 2008).
Current directions. Active areas include tighter integration with data and statistical estimation, open and reproducible models, and the use of machine learning and large language models to help draft diagrams, suggest equations and explain results. These AI-assisted approaches are still emerging, and their outputs need the same validation as any other part of a model.
9. References
- Barlas, Y. (1996). Formal aspects of model validity and validation in system dynamics. System Dynamics Review, 12(3), 183–210.
- Ford, A. (2010). Modeling the environment (2nd ed.). Island Press.
- Forrester, J. W. (1958). Industrial dynamics: A major breakthrough for decision makers. Harvard Business Review, 36(4), 37–66.
- Forrester, J. W. (1961). Industrial dynamics. MIT Press.
- Forrester, J. W. (1969). Urban dynamics. MIT Press.
- Homer, J. B., & Hirsch, G. B. (2006). System dynamics modeling for public health: Background and opportunities. American Journal of Public Health, 96(3), 452–458.
- Hovmand, P. S. (2014). Community based system dynamics. Springer.
- Kampmann, C. E., & Oliva, R. (2008). Structural dominance analysis and theory building in system dynamics. Systems Research and Behavioral Science, 25(4), 505–519.
- Meadows, D. H. (2008). Thinking in systems: A primer (D. Wright, Ed.). Chelsea Green.
- Meadows, D. H., Meadows, D. L., Randers, J., & Behrens, W. W., III. (1972). The limits to growth. Universe Books.
- Morecroft, J. D. W. (2015). Strategic modelling and business dynamics: A feedback systems approach (2nd ed.). Wiley.
- Rahmandad, H., Oliva, R., & Osgood, N. D. (Eds.). (2015). Analytical methods for dynamic modelers. MIT Press.
- Rahmandad, H., & Sterman, J. (2008). Heterogeneity and network structure in the dynamics of diffusion: Comparing agent-based and differential equation models. Management Science, 54(5), 998–1014.
- Richardson, G. P. (1991). Feedback thought in social science and systems theory. University of Pennsylvania Press.
- Senge, P. M. (1990). The fifth discipline: The art and practice of the learning organization. Doubleday.
- Sterman, J. D. (1989). Modeling managerial behavior: Misperceptions of feedback in a dynamic decision making experiment. Management Science, 35(3), 321–339.
- Sterman, J. D. (2000). Business dynamics: Systems thinking and modeling for a complex world. Irwin/McGraw-Hill.
- Vennix, J. A. M. (1996). Group model building: Facilitating team learning using system dynamics. Wiley.
10. AI disclosure
This guideline and the Askbeard System Dynamics Studio prototype, including its interface, simulation engine and documentation, were produced with the assistance of Claude, a large language model developed by Anthropic, in September 2026, based on specifications provided by the project owner. The AI generated the source code, the text of this guideline and the initial reference list.
The human author or authors remain responsible for this material. Before it is used in teaching, publication or research, the explanations should be reviewed for accuracy, every reference should be checked against the original source (bibliographic details produced by AI can contain errors), and the software should be tested against models with known results. AI assistance does not replace expert validation of models or of the conclusions drawn from them.
The prototype runs in the user’s browser. Model data is not sent to any server: models are kept only in the browser’s own storage or in files the user chooses to save. Only the charting library and web fonts are loaded from public content delivery networks.