In a conversation at work today, I happened to hit upon one of those statements that’s very simple in itself but represents an entry point into a fairly complex and cohesive set of ideas. My favorite example of this is Ockham’s Razorentities should not be multiplied beyond necessity. This is usually thought of as a principle of logic, but it can also be applied to management or software engineering or aesthetics. My pale attempt at achieving such economy of phrase is this:

Contention cannot be resolved without communication.

Yeah, I know, it’s nowhere near as powerful, but it would probably sound really cool in Latin. The original context, as befits a work conversation, was technical, but there’s a sociopolitical aspect to it as well. I’ll delve into both after the break.

The technical issue that we were discussing at the time was of resource allocation. One of the most annoying things about system-level programming is dealing with the allocation of resources, and particularly the case where allocation fails. Most programs require a certain amount of memory to function, for example, but can also benefit by having more. The problem with the standard malloc and free is that they provide no way to distinguish between “hard” and “soft” memory requirements. The result is that a “hard” allocation can fail, resulting in program failure, merely because of previous “soft” allocations. Languages like C++ make this even worse with features like object declarations and complex destructors that make it possible for allocation to fail without there being any obvious or elegant way to recover (or even detect the failure). I’ve actually worked with memory systems that will transparently make callbacks to undo soft allocations so that hard allocations can succeed, but the interfaces for such systems are more complex and the callbacks are often difficult to implement because of the unusual context in which they run. Nonetheless, such systems are using communication to solve the problem of memory contention … within a program. Life gets much more complex in a multi-process system, where you have contention for memory not only within a process but between processes as well. Because there’s contention but no communication between these processes, you can get all sorts of problems with starvation and thrashing and such, or you get an abomination like Linux’s “OOM Killer” which just zaps a random process (spare me the flames about what it supposedly does because it doesn’t) to free up memory. Static preallocation is an inadequate solution because it does not allow extra memory to be used efficiently when it’s available. The only solution that seems to work reasonably well without becoming overly complex is to slice memory up into separate pools based on some kind of formula at startup time, which is really just a way of communicating about memory needs so it reinforces my point.

OK, enough of the technical stuff. How can the same principle apply in the wider world? Well, we all contend for resources – food, water, air, open space, enclosed space, products, services, and so on. To resolve that contention we need to communicate about availability and need, and have some way to connect the two. What I’ve realized as I’ve been thinking about this that what I find wrong with a lot of laissez faire philosophy is that its proponents expect us to do exactly what I’ve just said was impossible: resolve contention without communication. Sure, markets are a great way to match supply and demand, but all but a few Efficient Market Hypothesis dead-enders concede that markets are not always a perfect communications mechanism even for those things that are traded via markets. Any regulated or inelastic market (e.g. utilities, real estate) tends not to operate “efficiently” in this sense, and then there are the objects of contention that are not traded via markets. Pollution is the classic example; there’s no market communication by which a mine or factory owner negotiates prices for the negative externalities they impose on others. Even if such a market could be created it would be a logistical nightmare, because people only have so many things they can pay attention to. Expecting consumers to account for every environmental and moral aspect of every purchase is simply unrealistic. That’s why the “grass farming” described in Michael Pollan’s Omnivore’s Dilemma will always be a niche. As valid as I find Joel Salatin‘s criticism of the way industrial farming is given political preference over more sustainable and morally superior alternatives, the world of Upton Sinclair’s The Jungle came about because consumers didn’t care. Their attention was elsewhere, and their attention will always be elsewhere. Sometimes we don’t even know who should be a party in the market, as when logging causes deforestation and extinction of species that might have medicinal uses. That’s why we aggregate consumer preferences and priorities into labeling requirements and regulations. Those are practical forms of communication, but that’s exactly what laissez faire would preclude.

Unfortunately, as in the technical context, contending without communicating is an invitation to system collapse. That’s just the way reality works, and if there’s one thing that has always bugged me it’s people who eschew reality in favor of a convenient and lazy fantasy.