Skip to content
Rabin Poudyal
Rabin Poudyal
← All models

Systems and complexity

Feedback loops

A system's output feeds back into its input: balancing loops hold a level steady, reinforcing loops make change grow on itself.

Cybernetics and Jay Forrester's system dynamics; set out for general readers by Donella Meadows in Places to Intervene in a System (1999) and Thinking in Systems (2008).

A feedback loop exists when a change in some quantity causes a flow that changes the same quantity again. Meadows splits loops into two kinds. A balancing loop pushes the quantity back toward a target: a thermostat, or a price that rises when a good runs short and draws in more supply. A reinforcing loop feeds change back as more of the same change: compound interest, a rumour, a bank run. Among her twelve places to intervene in a system she ranks the strength of balancing loops and the gain around reinforcing loops as numbers 8 and 7, and notes that cutting the gain on a reinforcing loop usually does more than strengthening the balancing loop that is meant to contain it.

Loops matter because they run on their own once set up. A reinforcing loop grows exponentially until some limit, which is a balancing loop in disguise, stops it; that is why growth curves are S-shaped. A balancing loop with a delay in it overshoots and oscillates, which is why a shower with slow plumbing swings between scalding and cold. Once you can name the loop you can predict the shape of the behaviour before you have any data. In software the clearest case is the retry storm: failures cause retries, retries add load, load causes more failures.

Drawing a loop is not the same as measuring one. Loop diagrams can be sketched for almost any story and feel explanatory without being tested; the joint regulators' report on the 2010 flash crash took five months of trade-level data to pin down a loop that ran for twenty minutes. Positive and negative here mean the sign of the feedback, not good and bad: a reinforcing loop of learning is positive, and so is a reinforcing loop of debt. And Meadows' warning about relative strength applies both ways. A balancing loop that is too weak for the push it faces will not hold, and one that is too strong, or too slow, will swing the system past its target and back.

Example

On 6 May 2010 at 2:32 pm a mutual fund started selling 75,000 E-mini S&P 500 futures contracts (about $4.1 billion) through an algorithm set to sell at 9% of the previous minute's volume, with no regard to price or time. As prices fell, high-frequency traders passed the contracts back and forth, which raised volume, which made the algorithm sell faster: between 2:45:13 and 2:45:27 they traded over 27,000 contracts, about 49% of volume, while buying only about 200 net. An earlier sale of the same size by the same trader had taken more than five hours; this one took twenty minutes. The loop broke when the Chicago Mercantile Exchange paused the E-mini for five seconds at 2:45:28, and prices stabilised when trading resumed, according to the joint report of the Securities and Exchange Commission (SEC) and the Commodity Futures Trading Commission (CFTC) of 30 September 2010.

Where it applies

Autoscaling, rate limits and retries with backoff are all loops you are designing, so write down the sign and the delay of each one. A recommender trained on clicks it caused, or a model fine-tuned on text that earlier models wrote, is a reinforcing loop with you inside it.

Think about it

Which quantity in your work is growing faster the bigger it gets, and what is the limit that will eventually stop it?

Applied it to something real? Log it.

Test yourselfA metric keeps growing faster the larger it gets. What kind of loop is that, and what should you look for next?

A reinforcing loop. Look for the balancing loop or limit that will stop it, and for the delay in that loop, since a slow balancing loop overshoots and oscillates.

Related models

Sources and further reading