Cam Pedersen
Founder @ RubberDuck

Leverage in Chaotic Systems

November 13, 2023

Disclaimer: I have no idea what I'm talking about.

Systems have infected my thinking lately. I haven't read "the book" yet, but I tend to think of systems in terms of inputs, outputs, and leverage points.

When I was younger, I tended to "force systems" by overwhelming the inputs. I would wait to do the dishes until they piled up, and overwhelm the system with an hour or two of work. This was obviously naive, because even though I always had the silverware I needed, I looked like a slob when my girlfriend came over. Now I spend 5 minutes a day maintaining the system. My leverage point in the system has shifted, and so has the output of the system. (she's now my wife)

My old way of thinking was just-in-time, a point on the system. From this perspective, life seems random and chaotic.

I've loved working on my lawn this year. It was fucked up with weeds and different types of grasses and I've slowly brought it back to a homogenous green carpet. The inputs to any plant are seed, water, sunlight, and nutrients. But watering once with 100 gallons won't produce any grass. Clearly there is more to this (and every) system - time!

When I was renoing the lawn this fall, one of my hoses kinked while we were gone for a few days, and a sprinkler failed. Time brings chaos! I had redundant sprinkler radii - and most of the young grass made it through a dry spell.

Observing the effect of time on a system allows you to identify weaknesses and apply leverage with better accuracy.

With time, we gain access to the "shape" of the system. But this is still often an incomplete picture. For example, I could have done my lawn reno a week before or after I actually did, and encountered a heat wave which would have crashed the germination party. This is known as "sensitive dependence on initial conditions".

While annoying to homeowners with cool season grasses, this is a very powerful idea. It allows us to further shift our leverage point to choosing initial conditions, and letting a system unfold.

By visualizing a system as an ensemble of inputs and outputs, we can see the true shape of the system.

In coding, and life, I've started to take more of an "ensemble" approach to thinking. By iterating on starting conditions and playing forward the potential outputs of a system, we gain even more leverage.

As a software engineer, I grew to view ideas or abstractions as "pure": an apple is an apple. But an apple might be small, or large, or red or green, sweet or bitter. And these aren't necessarily parameters of the apple, but parameters of the system which created it. This sounds pedantic, but the subtlety gives you power: you can change the apple by affecting the system at a leverage point (instead of painting the red apple green).

But how? There are much more important systems at play in our world than my lawn, and smarter people than I have applied some necessary rigor to the question. The author of "the book" I mentioned above, Donella Meadows, also published an idea called The Twelve Leverage Points. It turns out, we've only been talking about the weakest leverage points so far!

The Twelve Leverage Points (weak to strong)

  1. Parameters. Changing numbers in a system, like physical constants or financial incentives, can alter system behavior.
  2. Buffer size. Adjusting the size of buffers (like inventories or capacities) within a system can stabilize or destabilize it.
  3. Structure. Changing the physical layout or structure of a system affects how it operates.
  4. Delays. Modifying the time delays in feedback loops can change the behavior of a system.
  5. Negative Feedback Loops. Strengthening or weakening feedback loops can help correct a system that is veering off course.
  6. Positive Feedback Loops. Adjusting the strength of positive feedback loops can accelerate system growth or collapse.
  7. Information Flows. Altering who does and does not have access to information can have a big impact on the system.
  8. Rules. Changing rules, such as incentives, punishments, or constraints, can greatly affect outcomes.
  9. Adaptation. Systems can gain resilience or adaptability by changing themselves or evolving.
  10. Goals. Changing the goal or purpose of a system can lead to very different outcomes.
  11. Mindset. A paradigm shift can change every aspect of a system, as it alters fundamental assumptions.
  12. Transcendence. This is the most powerful leverage point, as it encompasses everything else by transcending the current paradigms or ways of thinking.

I've paraphrased the list a bit - you should read the paper if you're curious. But I've found this helpful to increase my understanding of more "soft" systems.

Last week, I ran into the Rules leverage point. A certain billionaire released an AI model with the same name as my company. It took the wind out of my SEO sails. I couldn't really do anything about it though - I never trademarked the name! This would have saved me a lot of time and energy, but I didn't know it was a leverage point.

It's all for the best though. I spent last week rebranding and I'm really happy with the new direction... and I'm learning to file for trademarks myself so I don't run into this again. You can check out the new site here:


Speaking of software engineering, above I used react-three-fiber to simulate a Lorenz system with the following rules:

x˙=σ(yx)y˙=ρxyxzz˙=βz+xy\begin{aligned} \dot{x} & = \sigma(y-x) \\ \dot{y} & = \rho x - y -xz \\ \dot{z} & = -\beta z + xy \end{aligned}

More specifically, it's a Lorenz Attractor, a solution to the system.

σ=10ρ=28β=8/3\begin{aligned} {\sigma} & = 10 \\ {\rho} & = 28 \\ {\beta} & = 8 / 3 \end{aligned}

We can convert this to some simple code:

const makePoint = (
  position: THREE.Vector3,
  {sigma, rho, beta, speed} = DEFAULT_PARAMS
): THREE.Vector3 => {
  let x = position.x;
  let y = position.y;
  let z = position.z;
  let dx = sigma * (y - x) * speed;
  let dy = (x * (rho - z) - y) * speed;
  let dz = (x * y - beta * z) * speed;
  x = x + dx;
  y = y + dy;
  z = z + dz;
  return new THREE.Vector3(x, y, z);

Stare are it long enough, and you can see that this attractor shows that chaotic systems can be unpredictable even when deterministic.

Systems are rarely linear, and frequently chaotic - and so finding the attractors can be your first step to understanding the leverage points. I could close this out talking about transcending a system by understanding it - but the best way to do that is by play:

Join other software engineers @ RubberDuck🙂