Hear this article read aloud here!
Post ported from nicholaskross.com
If you’re into computer programming, you’re probably familiar with the term “abstraction layer”. For those new to the party: an abstraction layer hides the complicated/yucky/user-UNfriendly workings of some product or process, allowing you to work with it easily without knowing how it works.
This is a fundamental concept in making computer software. Each program, website, or app is an abstraction layer. Instead of a user having to code their own way to file taxes or simulate action for fun, the programmer(s) build a program that a user can run. The same goes for the divide between hardware and software, and how high-level a language is. Instead of worrying where every little 1 and 0 go in the computer’s memory, a programmer can use a higher-level programming environment that worries about that sort of thing for them.
In fact, to see the cutting-edge of abstraction layers, look no further than tools made by programmers, for other programmers. The ease with which you can find just the right tool in a GitHub repo or an Atom package absolutely shames almost every other industry. Unless there’s a giant community of people making homebrewed plumbing tools, I’m pretty sure programming is king when it comes to toolmaking for growth.
In a way, all great technology represents some kind of abstraction layer between the required complexity to make something happen, and the user wanting something to happen. You can drive a car without knowing how the engine works, or use a toaster without needing enough knowledge to build it from scratch.
Building more and better abstraction layers is often a key to a tech company’s success. Apple’s revolutionary products weren’t “10x improvements” because they had more processing power, but because they had a massive boost in convenience. A touch screen is a better abstraction layer for human interaction than a tiny keypad. Likewise, plenty of tech firms either make something easier for consumers, or act as “platforms” to make setting up new tech easier for others.
Thinking broader than technology (or maybe still inside it), government is best implemented an abstraction layer for the infrastructure, services, and coordination needed to support a really nice society to live in. This is part of why government is so difficult to change. It’s not just the multiple competing sides loudly trying their best to make changes. It’s also the fact that everything worth politically fighting over has millions of people’s convenience at stake. No wonder so much bureaucracy exists; if something seemingly offputting was as important to you as functioning roads, why wouldn’t you make it harder for others to take it away. It’s your convenience, therefore it’s your right. Nuance and possibility of coordination will, as usual, be damned.
This is part of why so many of us feel righteous indignation at violations of human rights; it doesn’t always cost much (if anything) to allow people to do benign things, yet they are frustratingly barred from their rights anyway. Then again, many rulers may find even the act of giving new, scarce freedoms to be too high a price for happier citizens.
Where was I? Something about technology, right?
Good product design is, in many contexts, a supercharged act of moral good. Every extra bit of work a designer does to make things easier on the user can be multiplied millions of times over. Likewise, a bit of bad design can multiply evil by millions of times. And of course, if you’re designing particularly powerful technology, design must be done very carefully, since the harm you could inflict could be greater than that of less-complex technologies.
All this suggests that, when it comes to doing impossible things, mastering crucial details and looking beyond the nearest abstraction layer(s) will suggest plenty of ways to start.