Systems Thinking in Software, Tech, and AI: The Hidden Loops

By Brexis Wazik 14 min read -

Software looks like the most predictable thing humans build. It runs on machines that do exactly what they are told, down to the last instruction. So why do software projects run wildly late, why do giant systems go dark for hours, and why does one new technology like AI reshape whole industries seemingly overnight?

The answer is that software was never really about code. It is about systems: people coordinating, problems quietly piling up, and small glitches getting amplified into disasters. Learn to see the system underneath, and a late project, a flaky service, or a breathless AI headline suddenly makes sense.

Why this matters

Most people working in or around technology react to symptoms. The release is late, so add people. The service is slow, so add servers. The metric looks bad, so push the team harder.

These reactions feel obvious, and they routinely make things worse. The reason is that technology runs on feedback loops that do not behave like simple cause and effect. Push on the wrong spot and the system pushes back twice as hard.

Once you can name the loop you are looking at, you stop fighting the system and start steering it. That is the difference between a team that thrashes and a team that ships.

Two words will do most of the heavy lifting here:

  • A stock is an accumulation you can measure at a single moment, like the water in a bathtub. In software it might be technical debt, the number of developers on a project, users on a platform, or requests piled up in a queue.
  • A flow is the rate at which a stock changes, like water from the tap or out the drain. In software: shortcuts added per sprint, refactoring finished per week, new users joining per day.

Keep the bathtub in mind. Almost everything below is a stock, a flow, or a loop connecting them.

Brooks’s Law: why adding people makes a late project later

In 1975, Fred Brooks, who had managed IBM’s enormous OS/360 project, wrote one of the most famous lines in software: “Adding manpower to a late software project makes it later.”

It sounds backwards. More hands should mean more work. But Brooks spotted a destructive reinforcing loop, a loop where a change pushes the system further in the same direction and compounds. Here is the mechanism:

  1. The project is late, so managers add developers.
  2. New developers need training, which eats the time of the experienced people.
  3. Every pair of people who must coordinate adds a communication link, and links grow as n(n−1)/2 - far faster than the headcount.
  4. Coordination overhead rises, the project slips further, so managers add even more people.

The communication math is brutal. A team of 5 has 10 links. Grow to 10 and you have 45. Grow to 20 and you have 190. You hired more people and bought yourself a coordination nightmare.

Brooks said it best himself: “It takes nine months to have a baby, no matter how many women you assign to the task.” Some work is sequential and simply cannot be split. A kitchen running late on a tasting menu does not speed up by adding five cooks mid-rush. The existing cooks stop to teach them, and mistakes multiply.

The catch

Do not treat Brooks’s Law as iron law. Brooks himself called it “an outrageous oversimplification.” It bites hardest when tasks are tightly interdependent, the project is already late with no buffer, and newcomers need a long ramp-up. It barely applies to modular, parallel work with solid onboarding.

The real lever is the delay before new people become productive. Shorten it with good documentation and pairing, and you can grow a team without the law swallowing you. The mistake is not hiring; it is hiring with no plan to make people useful fast.

Technical debt: a bathtub with a leaky tap

Technical debt is messy or rushed code that makes future work harder. In systems terms it is a stock. Inflows raise it: rushed code, skipped tests, deferred cleanup. Outflows lower it: refactoring, adding tests, tidying the architecture.

Picture the bathtub. The water level is your debt. The tap is new shortcuts flowing in. The drain is cleanup flowing out. If the tap runs faster than the drain, the tub overflows, and overflow means production incidents, burnout, and delivery you can no longer predict. Bailing one bucket a year does nothing while the tap is wide open.

When inflow consistently beats outflow, a reinforcing loop takes over, the death spiral: more debt makes features harder to add, which raises pressure, which means more corners cut, which adds more debt. Each round is worse than the last.

It behaves exactly like credit-card debt at a punishing interest rate. Pay only the minimum and the interest compounds until, one day, the interest payment alone exceeds your income. Teams with severe debt hit that point: they spend more time working around the debt than building anything new.

Common misconceptions

  • “All shortcuts are bad debt.” Not true. “Ship now, refactor once the business case is proven” is a reasonable bet with a repayment plan. That is very different from sloppy code born of ignorance. The danger is debt taken on recklessly and never repaid.
  • “We’ll pay it down when things calm down.” Things never calm down. Cleanup has to be a structural rule, not a heroic event you keep postponing.

The fix is to widen the drain and keep it open. Reserve a steady slice of every sprint, say around 20 percent, for refactoring and test automation. That keeps the drain matched to the tap so the tub never overflows in the first place.

Cascading failures: the loop that crashes everything

A cascading failure is when one component fails, its load shifts to the survivors, the extra load makes them fail, and the collapse snowballs. Three things make it terrifying: it is fast, it has no natural recovery, and it arrives without warning.

Think of dominoes where each one is heavier than the last. The first tip is tiny, but every fall dumps more weight on the next, so the whole row goes down faster and faster. Ordinary dominoes actually understate how quickly this runs.

Two real cases show the pattern:

  • AWS DynamoDB, 2015. A brief network hiccup knocked storage servers out of service. They retried continuously, overwhelming a metadata service. Rising latency caused more timeouts, which triggered more retries. A recent feature had quietly bloated the metadata tables, and nobody had adjusted the timeouts. The loop had no internal stop, and operators had to manually wall off the broken parts. US-East-1 was down for over four hours.
  • Square, 2017. A payment system retried failed transactions up to 500 times, effectively launching a denial-of-service attack on its own database. The fix was tiny: lower the retry count. The instant they did, “the feedback loop immediately ended and service began serving normally.”

The countermeasure is a balancing loop, a loop that opposes change and pulls the system back toward stability. The classic example is the circuit breaker pattern: after too many failures, it stops sending requests to the struggling service, giving it room to recover instead of pounding it with retries. Netflix’s Chaos Monkey goes further, deliberately killing live servers to test whether those balancing loops are strong enough before a real cascade.

Common misconceptions

  • “Find the one root cause.” These failures usually need several normal conditions to coincide. Fixing the trigger leaves the loop fully intact, ready to fire again.
  • “Just autoscale out of it.” New servers spin up and instantly drown in the backlog. Sometimes the only cure is to take the service offline, let the queue drain, and reintroduce load gradually.

Theory of Constraints: the bottleneck rules everything

Eliyahu Goldratt’s The Goal introduced the Theory of Constraints. The core idea: every system has at least one constraint, a single bottleneck, and the throughput of the whole system is set solely by that constraint. Improving anything else is, in Goldratt’s words, an “illusion of improvement.”

A chain is only as strong as its weakest link. A four-lane highway that narrows to one lane jams no matter how wide the four lanes are, and widening them to six lanes makes the jam worse because cars reach the bottleneck faster. In software, automating a 30-minute build does nothing if a 6-hour manual QA step is the real constraint.

Here is the tell. If Service A handles 1,000 requests per second and downstream Service B only 200, then B is the constraint. Adding more A instances just fills B’s queue faster. The growing queue depth in front of B is the signal pointing straight at the bottleneck. The Phoenix Project dramatizes this with “Brent,” the one engineer who understands the critical systems, a human bottleneck who caps the entire organization.

Goldratt’s recipe is five steps: identify the constraint, exploit it (squeeze maximum output with no new spending), subordinate everything else to it, elevate it (invest if it still limits), then repeat with the next constraint.

The common mistake is trying to improve every team at once, or confusing busyness with throughput. Idle time at a non-constraint is not waste; it is buffer protecting the constraint. Loading up an idle worker who is not the bottleneck adds work-in-progress and coordination cost while delivering zero extra throughput.

Why AI reshapes whole industries, not just jobs

Economists in Prediction Machines framed AI as “a dramatic drop in the cost of prediction.” Prediction feeds countless decisions, so when its cost collapses, the value of its complements rises (judgment, data, the ability to act) while its substitutes fall (routine human pattern-matching).

That is what makes AI a general purpose technology: pervasive across sectors, improving over time, and spawning new innovations. It rewires whole value chains rather than swapping out one job at a time.

Consider electricity. Early factory electrification barely raised productivity, because managers just dropped electric motors where the steam engines used to sit. The huge gains came 30 to 40 years later, when factories were redesigned around electricity, with machines arranged by workflow instead of clustered near a central power shaft. AI needs the same complementary reinvention before its full payoff shows up.

Common misconceptions

  • “AI will eliminate X percent of jobs.” Most jobs are bundles of tasks. AI automates some tasks, not whole jobs, so the headline number is almost always wrong.
  • “AI won’t change much.” Equally wrong. The accurate prediction is that most jobs get restructured. Recent research notes that AI exposure lands on non-routine cognitive work, the reverse of past automation, which reshapes hierarchies and which workers firms hire.
  • “The early results prove it’s a flop / a rocket.” Beware the productivity J-curve: output dips during adoption, before the complementary changes catch up, then climbs. Do not declare AI a failure today, and do not extrapolate early growth forever either.

As Erik Brynjolfsson put it: “AI will not replace managers, but managers who use AI will replace managers who don’t.”

Network effects: reinforcing loops that build giants

Network effects exist when each new user makes the product more valuable for existing users. That is a textbook reinforcing loop: more users, more value, more users.

Metcalfe’s Law says a network’s value grows roughly as n², the square of its connected users. At 10 users there are 100 potential connections; at 20 there are 400. A telephone with one user is worthless; with a million it is priceless. Each new user benefits everyone at once, unlike a shovel, where your purchase does nothing for anyone else.

Two-sided marketplaces add cross-side effects. More buyers attract more sellers, which attract more buyers, the way Uber’s riders and drivers feed each other. The loop compounds faster for the larger platform, so the leader’s edge widens on its own. This is “winner-take-most.”

But it is not permanent. If a rival reaches critical mass, the loop can spin in reverse just as fast. Every reinforcing loop eventually meets a balancing brake, whether that is regulation, market saturation, or user backlash.

The common mistake is assuming every digital product has network effects. A word processor does not get better because more people use it. Confusing adoption (more sales) with true network effects (each user improving the others’ experience) leads founders and investors to badly overestimate how defensible a business is.

Observability: changing what people can see is high leverage

Systems thinker Donella Meadows ranked the leverage points where a small change produces large shifts. The structure of information flows, meaning who sees what and when, ranks surprisingly high, well above tweaking numbers.

Her classic case: moving household electric meters from the basement to a visible front hall cut consumption by about 30 percent, with no change in price. People simply saw their usage. The information flow changed the behavior.

In software this is observability: understanding a running system’s internal state from its outputs, namely metrics, logs, and traces. Putting system health on dashboards engineers check daily is the same intervention as moving the meter. People fix what they can see breaking. Shortening the delay between writing code and seeing its effect, which is what a good deployment pipeline does, is independently powerful.

Software without observability is driving with every gauge covered: no speedometer, no fuel light, no temperature warning. You can steer by what you see through the windshield, but you won’t know the engine is overheating until it dies. With observability, the system reports its own state in near-real time, so you can catch a reinforcing failure loop, like that DynamoDB cascade, before it reaches the tipping point.

The common mistake is confusing monitoring with observability. Monitoring asks “is this known metric over its threshold?” and only covers problems you already anticipated. Observability lets you investigate problems you never saw coming. Dashboards alone only cover the loops you already knew about.

The master pattern: reinforcing vs balancing

Nearly every story above is one of two loops. Knowing which you face tells you what to do.

A reinforcing loop amplifies change and compounds in one direction. It is the “vicious or virtuous cycle.” Brooks’s Law, the debt death spiral, cascading failures, and network effects are all reinforcing loops. Left alone, they run to an extreme. The fix is to break the amplifier: cut the retries, add a brake.

A balancing loop opposes change and seeks an equilibrium. It is a system’s immune system. A circuit breaker, code review, reserved refactoring capacity, and a thermostat are all balancing loops. They stabilize and self-correct. The fix is to strengthen them so they can contain the reinforcing loops.

Here is the heart of it. Most technology disasters are reinforcing loops with no balancing loop strong enough to stop them. Most successes are reinforcing loops aimed in a good direction.

How to use this

When something in your system is on fire or out of control, run this checklist:

  1. Name the loop. Ask whether the problem is amplifying itself (reinforcing) or trying to correct itself (balancing). This single question reframes everything else.
  2. Find the constraint. Look for the growing queue. Whatever has work piling up in front of it is your bottleneck, and it is the only place where improvement actually raises throughput.
  3. Watch the stock, not just the flow. Track the accumulation, your debt level, your backlog, your headcount, not only this week’s rate of change.
  4. Break the amplifier or build a brake. For a runaway reinforcing loop, cut what is feeding it (lower the retry count, slow the hiring). Then add a balancing loop, like a circuit breaker, so it cannot run away again.
  5. Widen the drain structurally. Make cleanup a standing rule (reserve part of every sprint) rather than a heroic one-off you keep deferring.
  6. Change the information flow. Before you push people harder, make the problem visible. Moving the meter to the hallway often beats lecturing about conservation.

Conclusion

The single idea worth keeping: most technology problems are not failures of effort, they are failures of structure. Spot the loop, find the constraint, watch the stock, and intervene where the leverage is, which is almost always in information and structure, not in shouting at people to work harder.

There is a deeper question hiding underneath all of this. If the same handful of loops drives software, AI, and global markets alike, what do they say about the systems we build for ourselves: our habits, our organizations, our cities? That is where systems thinking stops being a debugging tool and starts becoming a way of seeing.

Frequently asked questions

What is Brooks's Law in simple terms?

Brooks's Law says adding people to a late software project makes it later. New people need training and create more communication links, so coordination cost rises faster than the extra work gets done.

What is technical debt?

Technical debt is messy or rushed code that makes future work slower. Like financial debt, it charges interest: the longer you ignore it, the more effort every new feature costs.

What is a cascading failure?

It is when one part of a system fails, its load shifts to the survivors, and that extra load makes them fail too. The failure snowballs until the whole system collapses, often in minutes.

Will AI replace jobs?

AI mostly automates tasks, not whole jobs. Most roles get restructured rather than deleted, so the realistic outcome is that work changes shape rather than vanishing outright.

What is the difference between monitoring and observability?

Monitoring tells you when a known metric crosses a threshold. Observability lets you investigate problems you never anticipated by reading the system's outputs like metrics, logs, and traces.

Continue reading

Related topics