|
Carl Chesser @che55er | che55er.io |
Much of today's vocabulary and framing comes from Donella Meadows' Thinking in Systems.
We'll use its ideas to ask better architecture questions about behavior, feedback, and leverage.
A set of elements or parts that is coherently organized and interconnected in a pattern or structure that produces a characteristic set of behaviors, often classified as its "function" or "purpose."
- Donella Meadows, Thinking in Systems
Reductionistic thinking, breaking something down into parts.
Linear thinking assumes a predictable chain of cause and effect: A B.
Non-linear thinking recognizes that systems rarely behave as simple chains of cause and effect.
Multiple things interact, effects can feed back into their causes, and a small change can sometimes produce a huge result, or almost no result.
Behavior of the whole system cannot always be predicted simply by adding up the behavior of its individual parts.

Each failure causes clients to retry. Those retries add additional load to an already struggling system, which causes more failures, which triggers even more retries.
(amplifies)
A change amplifies itself, causing more change in the same direction.
Example:
Money
investment
more money
The more money you have, the more you can invest;
successful investments give you more money to invest.
(stabilizes)
A change triggers a response that pushes the system back toward a goal or target.
Example:
Room temp
thermostat
furnace
If the room gets too cold, the thermostat turns on the
furnace, which raises the temperature back toward the set point.
What kind of feedback loop was the retry storm?
Reinforcing feedback loop(a harmful one)
Seeking leverage points in our systems.
Parameters, buffers, structure
Delays and feedback loops
Information, rules, self-organization
Goals, paradigms, transcendence
Categorizing our leverage points as we look at examples of how we would apply them in our software systems.
A software system is shaped by both its technical components and the people / organizations around it.
When we evaluate leverage points, we must consider both the technical and social dimensions of the system.
Change a constant, threshold, or parameter.
DB connection pool: 50
200
Parameters are useful, but low-leverage. A larger pool may simply transfer the bottleneck to the database.
Increase or redesign the capacity of a stabilizing stock.
A service receives 10,000 events/sec but processes 5,000. Add a durable queue to absorb several minutes of traffic.
Change the topology through which data, requests, and resources flow.
Replace a synchronous payment API call with Payment Event Queue Payment Worker, then return an immediate response.
Change how quickly the system knows and reacts.
Use automated tests, telemetry, monitoring, and canaries to reduce bug detection from three weeks to five minutes.
A control loop that reacts too slowly can overshoot; one that reacts too quickly can oscillate.
Strengthen the mechanism that pushes the system toward stability.
When error rate rises, automatically roll back the deployment instead of waiting for engineers to notice.
Reduce the gain of the runaway loop.
Add exponential backoff, jitter, and bounded retries to reduce retry-storm amplification.
Applies across multiple leverage points.
Give the system information it did not have.
Route customer failures directly into telemetry and engineering dashboards so developers learn about them immediately.
Applies across multiple leverage points.
Change what the system is allowed to do.
Make teams accountable for both feature delivery and production reliability, not feature throughput alone.
Give the system the ability to change itself.
Give each team ownership to deploy and operate its service, with automated guardrails.
Change success from number of features released to customer problems solved.
Moving from monthly large monthly releases to favor releases that are small, frequent, observable, and reversible.
Ask what problem microservices solve before assuming they are the right structure.
Events are symptoms; structure generates behavior over time.
Ask what amplifies failure and what counteracts it.
What accumulates, moves, and waits?
Do not stop at parameters when the problem is structural.
Sometimes the highest-leverage change is changing what success means.
|
Carl Chesser @che55er | che55er.io |