Generalized Leaky Abstractions

To Hans, the greatest Renaissance person I met.

In this post, I will generalize the concept of leaky abstractions introduced in software engineering by Joel Spolsky in 2002. I will argue that his ideas apply to real life. The implication is that you cannot buy yourself out of knowing something and that we all need to strive for becoming Renaissance people.

Leaky Abstractions in Software Engineering

In 2002, Joel Spolsky introduced the notion of leaky abstractions. In software engineering, an abstraction is something that tries to simplify a messy, complex underlying reality. Joel gives the example how TCP abstracts away the complexity of reliable data transmission over a non-reliable network. Unfortunately, this abstraction breaks (“leaks”) when the network is so unreliable that no data transmission can occur.

All non-trivial abstractions, to some degree, are leaky.

He goes on to give several examples of leaky abstractions. My favourite, perhaps the most subtle, is the implications of string storage format on the performance of string manipulation functions. The very important lesson that Joel draws is that you cannot be ignorant of low-level details of an abstraction. Instead you need to learn and understand them, in order to be a good programmer.

So the abstractions save us time working, but they don’t save us time learning.

Leaky Abstractions in Real Life

Buried in the software engineering article is a real life example that seeds the point of my post. While a car abstracts some of the weather away with windshield wipers, ABS and ESP, you cannot completely ignore the weather, e.g., due to hydroplaning. In a way, the car is a leaky abstraction for weather.

I lately found that life is full of leaky abstractions. Sticking to the car example, I hoped to buy myself out of knowing car mechanics by simply paying a mechanic. If I own an older car, it turns out that fixing a car is not always a straight-forward path. To properly communicate with the mechanic and understand if they are serious or just overcharging, I need to understand car basics:

A doctor is not going to fix me, rather they are going to help me fix myself. Therefore, I need to understand body parts, their basic function and how they work. Even a bit of physics is helpful.

It’s fun to buy a new shelf and hang it on a wall, but am I doing it safely? Without a proper understanding of wall types (e.g., concrete vs. hollow), studs, drill bits and plugs I risk putting myself and my loved ones in great danger. Otherwise put, once you need to fix something the wall abstraction is leaking.

When it comes to finances, Joshua from Radical Personal Finance put it very well: “A knowledgeable customer is the best customer.”

The Biggest Leaky Abstraction: Democracy

I bump into many more examples, but let me conclude with the biggest and most important leaky abstraction: democracy! It is nice and cosy to believe that living in a democratic country will magically make society take the best decisions. But it’s not that simple. Without a proper feedback loop, decision makers will be unable or unwilling to take the best decisions for us.

First, we all need to reasonably understand the local language. While some countries (e.g., Sweden) have good translation of most important information, my experience shows that I eventually end up needing to read detailed rules, even laws or court rulings, and those will always be written in the local language.

Second, we need to follow our surrounding, by engaging with newspapers, experts, sometimes even doing our own research. While experts should engage in popular science, their job is impossible without us being all very well educated.

Finally, we need to make decision-makers accountable, not only by voting, but also via peaceful, real or virtual protests.

To sum up, I encourage everyone to embrace knowledge, be curious and open to knowing more. The generalized law of leaky abstractions prevents you from buying yourself out of it.