The Complexity of Simplicity
There is no problem so complicated that you can't find a very simple answer to it if you look at it right … Or put it another way, "The future of computer power is pure simplicity".
― Douglas Adams, The Salmon of Doubt.
In this post, I will explore the intricate challenge of achieving simplicity in both writing and software design, illustrating how setting good foundations leads to greater information efficiency.
Apple has been considered the gold standard of simplicity when it comes to personal computing. People often talk about the streamlined, clean UIs, the fewer steps to perform tasks, the intuitive inputs and gestures.
Even though UIs are the front line of this simplicity, it is also just the tip of the iceberg.
Simplifying without stripping away important details is not an easy task. This is true any time information needs to be transmitted. Because it's all about communication, I find advice on writing well is applicable to software design. William Zinsser's classic guide on writing, spends a chapter discussing the importance of simplicity, but then ends that chapter with a warning:
Writing is hard work. A clear sentence is no accident. Very few sentences come out right the first time, or even the third time. Remember this in moments of despair. If you find that writing is hard, it’s because it is hard.
― William Knowlton Zinsser, On Writing Well: The Classic Guide to Writing
Simplicity is hard. This is even truer for simplicity in computer interactions where the information is interactive, usually at least bi-directional but often involving information coming and going from many parallel sources coordinated by sophisticated networks, databases and protocols.
It's not a coincidence that writing well and designing sofware works through similar principles. All information has to follow the laws of Claude Shannon's Information Theory which set the limits when reducing information into its simplest, purest form. The introduction by Warren Weaver in Shannon's book states:
The word communication will be used here in a very broad sense to include all of the procedures by which one mind may affect another. This of course, involves not only written and oral speech, but also music, the pictorial arts, the theater, the ballet and in fact all human behavior"
We'll talk about software but first, let's say a few more words about writing. Paul Graham recently wrote a post emphasizing using simpler words. This is usually a good tip but you sometimes lose some expressiveness.
Zinsser writes at length about having clear thinking and removing clutter. "The answer is to clear our heads of clutter. Clear thinking becomes clear writing" but this advice is rather vague and he doesn't always choose the simplest turns of phrase himself.
For example, where he could have written straightforwardly: "when someone is about to write poorly." he instead writes: "the average writer sets out to commit an act of literature", a colorful sentence that cleverly conveys meaning through a suggested word superimposed on "literature" maybe 'murder', 'war', 'terrorism', a word that isn't even present, only suggested.
Writing simple words or straightforward turns of phrase sometimes doesn't efficiently convey all intended information. Simple words are often less information dense.
Zinsser's sentence doesn't just add color, it adds the additional information about magnitude that not only someone wrote poorly, but poorly enough to be compared to the likes of a murderer.
Metaphors and colorful words that carry a lot of connotations provide incredible richness to use in literature and art with potential for original and efficient ways of conveying information.
How many roads must a man walk down
Before you can call him a man?
This verse implies a journey of experiences, that enriches a person enough to get a new title, that paradoxically, he already had, maybe implying that lots of people have the title without the experience and maybe don't deserve it? Do I sense a bit of condescension for these people, and maybe advocacy for the importance of going on adventures to gain worthiness? Uncertainty is also well quantified in this song, the answer having a wide error bar, being as uncertain as something carried by the wind, suggesting maybe there is a chance you can be worthy in different ways (whew!).
It's easy to turn information rich writing into less efficient (longer) but boring and dry paragraphs of interpretation like the one above that uses simpler more straightforward prose. When short verses can be expanded into long paragraphs without changing the meaning, it's a sign of the high level of thought that went into them.
I don't however, want to suggest people should get a free pass to use complex language willy nilly. It's much easier to fall into traps with complex words or whimsical turns of phrase. They are often used badly. Complex words carry more information. This means it's easier to overlook aspects of their meanings that don't fit well, potentially obscuring the intended message. With complex words, it's easy to end up with an incomplete and awkward fit from word to intended meaning (Zinsser provides lots of examples). There is also more chance that the audience doesn't have a clear understanding of them. The encoder and the decoder has to have the same language. You often only have control over the encoder so it's your job to make sure it's compatible with the decoders.

The concepts of overfitting and underfitting apply here. Getting that optimal and efficient fit between linguistic model and true concept is what we are after.
Writing has always been one of my personal weaknesses. I don't have a knack for it. I was always a math guy. What could have helped in school however, would have been for teachers to provide exercises that practiced efficiently transmitting clear information. The grammar rules would have made a lot more sense if they were, for example, presented as a tool you can use for playing a game of sentence golf. Write the shortest sentence that fully describes this longer paragraph. It would have been enlightening to have class discussions about the information people are able to extract from a golf sentence, about areas of confusions and ambiguity that can be resolved by grammar or other language constructs without adding too many more words.
The same principles of packing layers of information into small efficient elements apply to software simplification. There are many layers to unwrap in computer systems. Getting that good fit is paramount.
Computing's history is built on simplification. Unix was an exercise in simplification starting from the lowest layers. It's worth watching the story of how it was created.
Ken Thompson wrote Unix in assembly in three weeks (as an improvement over Multics, an overly complex, costly, multi year, multi organisation research OS of the time) by getting rid of cruft features, forgoing support for non power-of-two word length CPUs (which were common at the time), removing complex headers for creating files, allowing any program to process any files and making files a very plain thing that you can create in a single command without parameters. Then was added a simple layer of permissions on these files and everything including hardware and drivers were made to use the same simple files and permission interface through the /dev virtual file system so everything including hardware could be handled and composed and securely connected with simple tools like pipes and accessed through the same APIs as files.
One thing to note is that removing details and dimensions from Multics didn't reduce the power of the OS. Quite the opposite, it made things much more easily composable and programmable and opened the doors to build more powerful software and to interact with more powerful hardware. Simplifications often make things more powerful and more advanced, not less. I believe this might be what Douglas Adams was alluding in the quote above.
It took years for other OSs to catch up to that level of elegance because so much would have to be undone and rebuilt on top of these simpler abstractions.
Steve Jobs saw the value in Unix early on. I would argue that part of the genius of Steve Jobs was recognizing when the foundations had to be replaced by something simpler. And so he saw the genius in Ken Thompson's creation and adopted Unix for NeXT and then brought it to Apple as OSX. It was not a decision to be taken lightly to uproot all the users of OS 9 to transition them to an incompatible OSX. It was also a ton of work to build compatibility layers to support older software. But he knew this would eventually bring simplicity and provide a competitive edge over entrenched competitors like Microsoft which had legacy DOS layers that were difficult to secure and streamline. Microsoft had to scramble to catch up by building Windows NT technology also based on Unix (see Jobs discussion here).
I would go as far as calling these types of moves Apple's main value proposition. When you see a simple UI in an Apple product, the simplicity is real. The UI isn't trying to hide complexity present at another layer that is going to cause errors and edge cases and hit you anyways down the line. Apple, for better or worse, controls all layers of their stack down to the silicon so that they can solve problems and simplify at the root.
Stripe is another company that prides itself in solving complexity at the root in order to build the simplest most well fitted user experience (in their case, they take aim at the roots of banking bureaucracy).
Stripe was originally called "/dev/payments", a not so subtle nod at Ken Thompson's approach, (they apparently couldn't incorporate the company with slashes in the name so they changed it to an almost random simple word which was a placeholder until they could find something better which never happened).
All this to illustrate that simplicity isn't a superficial concept. 90% of the work of simplicity is in peeling the layers finding the true source of edge cases and hiccups and rebuilding the layers that need rebuilding up to the top. It is about achieving things like algorithmic simplicity, monotonicity in information flows, single source of truths so that users aren't shown inconsistent states, transactional integrity so that data isn't corrupted when things happen in parallel and data locks that delay operations so that they happen in a logical and safe order. It's about moving the bits through the hardware as efficiently and orderly as possible while untangling aspects of the complexity of the real world.
Sometimes developers try to simplify UIs without peeling the layers. This is often not an improvement. Here are some design approaches apparent in products that I've used:
1. Simplify things by finding the root causes of edge cases and tackling them at that level, building the layers on top to propagate that simplicity up to the UI. This is the best case but is not always acheivable.
2. When engineers don't have access to all the layers, which is quite common, especially in non open source systems, they can build workarounds and UIs that provide information to deal with or debug the poor implementations lurking below. This will make the UI visually more complex but it's a trade-off.
3. The third option, often suboptimal in my opinion, is to build a UI as if things were simplified but really it's a thin veneer on top of unsolved complexity. When the complexity hits users, the UI doesn't have the necessary information and clarity needed to deal with it and to work around it. Clarity was removed in the name of visual simplicity. This approach papers over the problem. Designers are tempted to go for this option because it's easier than the first option and in the short term, it fools some users into thinking that because you've built simple visuals, these visuals represent simple streamlined functionality. But users will eventually catch on and be frustrated at the lack of clarity in dealing with edge cases. It's a good way to lose trust.
And of course beyond all this, remember that simplicity and design is secondary in importance to creating value. It's not worth writing a book with perfectly crafted language, if the content of the book is not original, useful or interesting.
Next time you use your phone take a moment to marvel at the simpliciy, you might even feel a little shiver and you'll know it's the spirit of Ken Thompson simplifying your existence.
