Bay Information Systems

The Indirection Problem: How Programming Concepts Explain Modern Frustrations

Back in ancient times there was a programming language called C, which allowed a method called “indirection”. This method is practically impossible in modern languages due to the errors caused by misuse, over complication, and lack of clarity. However, I, of course, am an expert in this! And more and more this pattern is visible in modern life.

In C programming, indirection meant accessing data through a pointer rather than directly. You would have a reference that pointed to the actual information you wanted. When this worked, it was powerful and flexible. When it failed, it created some of the most difficult bugs to diagnose. The relationship between the pointer and the data it referenced could become broken, leading to crashes, data corruption, and hours of debugging.

The same pattern now dominates our economy and daily interactions.

The New Indirection Economy

Consider platform marketplaces. When you buy something on Amazon, you think you are purchasing from Amazon. In reality, you are buying from a third-party seller who may be dropshipping from another supplier entirely. Amazon becomes the pointer, but the actual relationship is with someone you never see or interact with. When your product arrives broken or never arrives at all, the accountability becomes impossibly complex.

The gig economy works the same way. Uber presents itself as connecting riders with drivers, but they control pricing, availability, and working conditions. The platform is the indirection layer that obscures the actual employment relationship while extracting value from both sides.

Social media platforms create indirection between you and information. The algorithm becomes a pointer to content, but that pointer is constantly manipulated for profit rather than accuracy or relevance. You think you are seeing posts from friends or news sources, but you are actually seeing whatever generates the most engagement and ad revenue.

The Exploitation

These systems create what I call the “accountability gap”. When something goes wrong, the indirection layers allow everyone to point fingers at someone else.

Supermarkets have perfected this with pricing. You have the shelf price, the loyalty card price, the meal deal price, and various promotional offers that change daily. The actual price becomes impossible to determine without going through multiple steps and conditions. This complexity is not accidental. It allows different customers to pay different amounts for identical items while making price comparison nearly impossible.

Customer service now routinely uses indirection to avoid resolution. Your complaint gets routed through chatbots, offshore call centres, and multiple departments. Each layer can claim they are not responsible and transfer you elsewhere. The indirection ensures that by the time you reach someone with authority, you are exhausted and likely to give up.

Finance and insurance companies have built entire business models around indirection. Simple transactions get wrapped in complex products with hidden fees, changing terms, and multiple intermediaries. When something goes wrong, the chain of responsibility becomes so convoluted that accountability disappears entirely.

The Accountability Gap

The fundamental problem is that indirection breaks the natural feedback loops that keep systems honest. In traditional direct transactions, if a merchant sold you defective goods, you knew exactly who was responsible. Now, the merchant blames the platform, the platform blames the payment processor, and the payment processor blames the merchant. You, the customer, get stuck with the problem and no clear recourse.

This is exactly what happened in C programming when indirection was misused. The semantic meaning of the data became divorced from its pointer. The compiler could no longer help you catch errors because the relationship between what something was supposed to be and what it actually was had been broken.

The Cost of Complexity

Modern programming languages eliminated most forms of dangerous indirection because the costs outweighed the benefits. Memory safety, type safety, and clear ownership models became more important than the flexibility that indirection provided.

We need the same evolution in our economic and social systems. The convenience of platforms and intermediaries comes with real costs in terms of accountability, transparency, and fairness. The complexity is not making our lives better. It is making them more frustrating and less predictable.

The businesses that succeed by exploiting these accountability gaps are not creating value. They are extracting it from the confusion and complexity they deliberately maintain. Recognising this pattern is the first step towards demanding better alternatives.

Sometimes the old ways were better. Sometimes cutting out the middleman actually works.