Forrester’s System Dynamics

Copyright 2017 Graham Berrisford. A paper at Last updated 04/05/2021 16:07


This chapter discusses the system dynamics developed by Jay Forrester. It looks at other system theory concepts through the lens of system dynamics. It includes notes on methodology, converting continuous dynamics into discrete dynamics, and vice-versa.


Introduction (repeat) 1

Systems as abstractions. 2

Coupling and feedback. 3

Animation. 3

A System Dynamics method – In short 4

A System Dynamics method – in detail 5

Remarks. 7


Introduction (repeat)

Jay Forrester (1918 to 2016), sometime a professor at the MIT Sloan School of Management, defined the system dynamics method. Donella H. Meadows (1941 to 2001), whose interests included resource use, environmental conservation and sustainability, used and promoted the method (more on Meadows’s ideas later).


Much as Ashby defined a system as a set of variables chosen for attention, and relationships between those variables, Forrester defined a system as a set of “stocks” chosen for attention, and the “flows” between those variables, be they observed or envisaged.


A stock can represent any kind of population or resource. E.g. wolf and sheep populations, happiness level, sunlight level, or variables that affect climate change. A stock level is a variable quantity that represents the amount of the stock, which is increased and decreased by flows. A flow, connecting two stocks, represents how increasing one stock increases or decreases another stock.


A negative or balancing feedback loop, where growth in one stock tends reduce another, tends restore a system to a stable state, regardless of the initial conditions.


Growth in

Feedback loop

Growth in





House prices





A positive or reinforcing feedback loop drives the two coupled populations or resources to extreme levels (barring some natural limit or control from another direction).


Growth in

Feedback loop

Growth in







Polar ice cap






In a network of feedback loops, radically different end states are possible from very similar initial conditions. This is the defining feature of “chaos theory”.


Typically, the modeller begins by drawing a causal loop diagram that names stocks (in nodes) and connects them by flows (arrows). To show whether a flow increases or decreases a stock, the modeller annotates the flow arrow with + or – sign. For examples, see this introductory book


A causal loop diagram is only a sketch of a system's dynamics. The modeller can go on to complete the system dynamics model by defining the mathematical rules for how flows modify stock quantities. When completed, the model can be animated. You can give the state variables some initial values, then set the system in motion. Its state will change in discrete time-steps, and the result can be reported on a graph showing stock level changes over time (lines of behavior).

Systems as abstractions

Note that Forrester’s system is an abstraction that represents “accumulations”.


All systems, everywhere, consist of these two kinds of concepts --levels and flows--and none other. Such a statement is powerful in simplifying our view of the world. A financial report is presented on two different pages—the balance sheet and the profit and loss statement. All numbers on the balance sheet are levels representing accumulations that have evolved over time. The profit and loss statement represents the flows that cause the levels to change.” Forrester 1996.


System Dynamics

Stock and flow models

<create and animate>                          <represent>

System modellers <observe and envisage> Accumulations in reality


Stocks are abstractions from accumulations of things or qualities. Flows are abstractions from whatever causes stocks to change state in the real word   be they continuous forces or discrete events.


When system dynamics is used to model the behavior of entities in the real world, you might think of there being two abstract system models and two physical systems.


·       Abstract system A: passive: a causal loop diagram, a graphical overview of B below.

·       Abstract system B: passive: a complete system dynamics model, with parameters and rules for the animation in C below.

·       Physical system C: dynamic: an animation, by computer or experimenter, that transforms initial parameters into a report of state changes over time

·       Physical system D: dynamic: things in reality behaving near enough like C, though having inputs and outputs not mentioned in C

Coupling and feedback

“Systems of information-feedback control are fundamental to all life and human endeavor, from the slow pace of biological evolution to the launching of the latest space satellite. . . . Everything we do as individuals, as an industry, or as a society is done in the context of an information-feedback system.” Jay W. Forrester (as quoted by Meadows)


When stocks are connected by causal flows, they can be thought of as exchanging state information.



Feedback loop


 ßstate information  

state informationà



Suppose stocks A and B are connected in a feedback loop by flows in both directions. The loop might be one of two kinds.


Kind of loop

Short term effect

Long term effect


Amplifying or


Increasing A increases B increases A

Chickens <increase> Eggs <increase> Chickens

The explosion or exhaustion of a population or resource


Dampening or


Increasing A increases B decreases A

Sheep <increase> Wolves <decrease> Sheep

Maintains two variables in a stable or homeostatic state


Given positive feedback, where stock each reinforces changes in the other, radically different end states are possible from the same initial conditions. Given negative feedback, where each tends to offset any change in the other, the whole system tends move toward and then stay in a stable state, regardless of the initial conditions.


In other words, mutually-reinforcing positive feedback will drive two coupled systems forward to new states. Mutually-constraining negative feedback will tend to keep two coupled systems in a stable state.


Forrester was concerned with entities that can be modelled as having continuous dynamics. However, there are alternative ways to model a system using discrete dynamics.




The trajectory of a stock’s level or quantity over time is called a line of behavior. Knowing a system’s initial state and its rules doesn’t tell you what direction a line of behavior will take, or when. But given some initial values for stock levels, a software tool or experimenter can advance a system dynamics model, time step by time step, and draw a graph showing the lines of behavior (for each stock) over time.


Inputs à

System dynamics

animated in a software tool

à Output

Initial stock quantities (state variable values) 

Flows change stock levels

according to rules that refer to current stock levels

As graph showing lines of behavior


The graph may show stocks are maintained in steady state, may grow or shrink dramatically, or be exhausted so that the system grinds to a halt.


“Systems thinkers use graphs of system behavior to understand trends over time, rather than focusing attention on individual events. We also use behavior-over-time graphs to learn whether the system is approaching a goal or a limit, and if so, how quickly. The variable on the graph may be a stock or a flow. The pattern—the shape of the variable line—is important, as are the points at which that line changes shape or direction. The precise numbers on the axes are often less important.” (Meadows)


How to test the abstract system model is true or useful?  How accurately does it represent the accumulations reality? Does it predict how real-world stocks, populations or resources will change over time? The verification challenge is discussed later.


A system dynamics model can be useful when it accurately represents the behavior of things in the real world – and how stocks, populations or resources change over time. However, there are many reasons what reality may turn out differently.


Dynamic systems studies usually are not designed to predict what will happen. Rather, they’re designed to explore what would happen, if a number of driving factors unfold in a range of different ways. (Meadows, chapter two)

A System Dynamics method – In short

Six essential steps are outlined below. “Probably as good [a summary] as it gets at this level of abstraction....” (Gene Bellinger)


Scope the system in terms of quantities you care about

Define the state of your system as a collection of quantitative variables. You might think of each variable as the state variable of a small subsystem.


Draw a causal loop diagram

Draw a diagram that shows every relationship between two quantities (or the same quantity) as a link arrow. Mark a link positive if the two quantities interact by changing in the same direction (both up or both down). Mark a link negative if the two quantities interact by changing in opposite directions (one up, one down).


Transform the causal loop diagram into a stock and flow model

Draw a stock and flow diagram. Define the effect of one stock on another (or the same stock) as a flow rate that increases or decreases the stock in a given unit of time. Define all variables to be initialised before running the model. Review the structure and logic of the stock and flow model.


Initialise the model

Define how long each time step will be in the context of entity and model life times. Set the initial stock levels to whatever variable values you choose. Set any still-to-be-defined flow rates to a fixed value or the result of a formula.


Run the model

Animate the system behavior by running the model forward one time-unit step at a time.


Review the results and refine the model

See below.

A System Dynamics method – in detail

System dynamics defines the state of a system as a collection of quantitative variables. So, it can be applied to any situation describable as quantities that can increase or decrease. A system dynamics model is composed from elements of four kinds:

A stock is an aggregate’s level or amount: e.g. a stock level, a water volume (aka system state variables).

A flow adds to a stock or subtracts from it.

A variable is a value used to calculate a stock level or flow rate; it can be an equation that depends on other variables, or a constant.  

A link makes a value from one stock or flow available to another stock or flow.


The method is elaborated and exemplified below. The simple wolves-sheep illustration comes from

1 Scope the system in terms of quantities you care about

First, you identify something you care about, and can quantify. It could be pennies in a bank balance, human population, or the sum total of human happiness. Incrementally, you expand the system boundary to include whatever other quantities you recognise as affecting the ones you care about.


A predator-prey system is often used to illustrate the idea. The two variables we care about are total sheep in a flock, and total wolves in a pack. Both quantities will be increased and decreased by birth and death events. The wolves will deplete the flock of sheep by killing and eating them.

2 Draw a causal loop diagram

This is not a tutorial on drawing causal loop diagrams, only an outline.


Consider each variable to be a quantity that is increased and decreased by events. Draw a diagram that shows every relationship between two quantities (or recursively in the case of self-reproducing entities). Mark a link positive if the two quantities interact by changing in the same direction (both up or both down), e.g. sheep population up, wolf population up. Mark a link negative if the two quantities interact by changing in opposite directions (one up, one down), e.g. wolf population up, sheep population down.


Now you have causal loop diagram. A feedback loop can be direct between two stocks, or indirect. Suppose we represent human happiness as a variable quantity.

·       Happiness is increased by consumption of items in a food stock.

·       The food stock is replenished by food item purchases.

·       The food item purchases deplete a bank account.

·       The bank account is replenished by payment per work hour.

·       Work hours decrease happiness.


(This is silly example, but silly and profound models are equally buildable and runnable.)

3 Transform the causal loop diagram into a stock and flow model

This is not a tutorial on stock and flow modelling, only an outline.


Draw a stock and flow diagram. Define the effect of one stock on another (or the same stock) as a flow rate that increases or decreases the stock in the given unit of time.

·       sheep-births = sheep-birth-rate * sheep

·       sheep-deaths = sheep * predation-rate * wolves

·       wolf-births = wolves * predator-efficiency * predation-rate * sheep

·       wolf-deaths = wolves * wolf-death-rate.


(I imagine it is possible to simulate probabilistic flows by introducing random numbers into the mathematical expressions.)


Define all variables to be initialised before running the model.

·       sheep-birth-rate = a fixed value, a fraction of the population per year

·       wolf-death-rate = a fixed value, a fraction of the population per year

·       predator-efficiency = a fixed value

·       predation-rate = the result of a formula.


Review the structure and logic of the stock and flow model. Now you have a system dynamics model.

4 Initialise the model

Define how long each time step will be in the context of entity and model life times. How long will each step take? One second? One hour? One year? Define this in the context of the natural life time of individual items in a quantity (say 2 years) and the expected life time of a simulation (say 50 years).


There can be delays between the internal steps in the model. E.g. the time between a stock input and the stock update. Such delays create can have a major impact upon the effects of feedback in the model. E.g. oscillations may move in or out of phase with one another causing amplification (in phase) or cancellation (out of phase) as the model evolves.)


Before you can run the model, you have to initialise it. Set the initial stock levels to whatever variable values you choose.

·       Sheep flock = 100

·       Wolf pack = 30


Set any still-to-be-defined flow rates to a fixed value or the result of a formula. Set the natural birth and death rates to a fraction of the population per year.

·       sheep-birth-rate = 0.4

·       wolf-death-rate = 0.15


Define the predation rate and efficiency.

·       predator-efficiency = 0.8

·       predation-rate = 3.0E-4

5 Run the model

“System dynamics uses computer simulation models to reveal how known structures and policies often produce unexpected and troublesome behavior. The computer models are constructed from descriptive information that usually is already known. Such information relates to who is striving to do what, the information that each person has available, time delays in taking action, and what individuals will do under a variety of pressures. The same approach carries over to non-human systems in nature and physical change.” Forrester 1996


A computer can animate the system behavior by running the model forward one step at a time. The values of the system's variables change with each time step event exactly as your model defines. The long-term outcomes can be surprising. (See

6 Review the results and refine the model

A model of stocks and flows declares a theory of how some part of the world works. How to prove or disprove the theory? Running a model may give seductively interesting results, but does not prove that it models the real world.


The ultimate test of a system dynamics model is that, when run, it mimics past and/or predicts future real-world behavior. If it fails to do that, then studying differences between the world and the model may help you recognise where the model is flawed or insufficient.


I have a slide show that explains the model of wolves predating sheep outlined above. It starts with a static model of individual entities and events, then incrementally abstracts from that a runnable system dynamics model. It shows slides of long-term outcomes from running the model.


It looks plausible, until I ask if anybody has noticed a flaw. The wolves survive by eating sheep; but the sheep live on thin air. Where are the stocks they depend on, of grass, sunlight and rain? And how to represent temperature? Do all sheep die by being eaten (rather than from other causes). Do all wolves eat only sheep (rather than other prey).


You can change anything – the stocks, the flows, the initial conditions, the rules – in an effort to modify the model incrementally until it passes some test of your choosing.


Some say a system dynamics model shows us how complex behavior at the macro level can emerge from simple behavior at the micro level. Some speak of self-organising systems. The concepts of complexity and self-organization are discussed in other chapters. This section makes only a few comments.



A system dynamics model can grow to be large; Gene Bellinger tells me one has 100,000 mathematical expressions. That sounds a lot but EA is about incredibly large and complex business activity systems. A software system may have millions or even billions of executable instructions. And what the programmer writes as one executable instruction may delegate work to many thousands of machine-level instructions.



“System dynamics is an approach to understanding the behavior of complex systems over time. It deals with internal feedback loops and time delays that affect the behavior of the entire system. What makes it different from other approaches is the use of feedback loops, stocks and flows. These elements help describe how even seemingly simple systems display baffling nonlinearity.” Wikipedia


There is an ambiguity here, one which appears over and again in systems thinking discussions. Are we modelling complex systems or simple ones? Every real-world entity or situation we model is complex beyond our complete understanding. System dynamics gives us a way to model a complex world. The system in our model is massively simpler than the reality.


What can be baffling (surprising rather than complex) is that when we run a simple model over time, the quantities in the model may exponentially increase or decrease, zoom up or down in a non-linear way, and the system may exhaust some resource and stop completely. In other words, complexity of found not in the system itself but in its lines of behavior.


The verification challenge

A causal loop diagram begins as a subjective “concept graph”. People draw such diagrams to illustrate an idea, present a belief, or tell a story. The diagram can be a good way express a hypothesis about the world. Still, it remains only a hypothesis until you complete a system dynamics model (or the differential equations that define the system dynamics) and verify it by testing.


How accurately does a system dynamics model represent reality? Does it predict how real-world stocks, populations or resources will change over time? Proving a model to be a usefully accurate model is very challenging.


First, it can be difficult to identify all the significant stocks and flows. You may have no obvious way to judge whether important stocks or flows have been omitted from the model. E,g, in modelling how the populations of wolves and sheep interact, you might omit the stock of grass on which the sheep depend.


Of course, no model of a natural, social and business system can be complete and perfect, because whereas the model is closed, the real world is open. However far we widen the scope of our model, we can never reach the edge of the real world.


Suppose you are confident you have identified all the important flows, and correctly annotated them with + and - signs. Still, the strength of those increase and decrease effects may be unclear.


You may define the inter-stock flow rules in mathematics, give every stock an initial quantity, and run a simulation to see how stocks rise and fall over time. Still, to prove that the model is accurate, you need to compare the result of the simulation with the result of some corresponding real world behavior, which may require a lot of time and effort.


Also, what you might assume is stable may change (e.g. global temperature, customer tastes, competitors' advertising, inflation, wages, share prices, exchange rates, government policy, and so on ad infinitum).


So, the further a model is run into the future, the more likely the model and reality will part company.


More on system dynamics and


Agent-based models?

System Dynamics is based on modelling aggregates. Agent-based modelling tools can represent the existence of individual stock items as dots or icons on a screen, each representing one item of the total quantity.

A predator-prey model:;mode=SETTINGS.

A predator prey agent-based model:;mode=SETTINGS.

An insight maker page on modelling:


Does this mean we can build a continuous dynamics model of individual entities and events?  As far as I know, the modelling of individual stock items is limited to representing the units of a quantity as icons on a screen. I suppose you could track some variables for each item, like its life time in the software system, and current position on the screen. Modelling individual agents in the real world is different thing, since it implies capturing qualitative characteristics of real-world individuals and recognizing events in their lives - as a business information system does.


Can system dynamics be useful in EA?

I haven’t met an architect who has applied system dynamics, so this section is speculative.


Might it be used to forecast changes in the volumes of stocks/populations (gas stocks, customer accounts) over the long term? Looking to optimise flow rates and use of resources, a business analyst might be able to use system dynamics to forecast the long-term effect of an event-driven system on quantities of resources (queues, bottlenecks, hospital beds and nurses). Imagine a model in which the variables include the average delays between orders, deliveries and payments. Perhaps running the model will show it leads to a cash flow problem, a result of how money flows in and out of your account?


Perhaps, though it might require a degree of analysis beyond what can usually be achieved in practice.