Feynman's Razor
If an expert can't understand your explanation, you've dumbed it down too much!
“I can’t read the articles in the paper. I don’t know what they mean. I don’t know what kind of a machine it was just because it weighed seven tons. And there are now sixty two kinds of particles, and I would like to know what atomic bullet he is referring to”
— Richard Feynman, The Meaning of it All, page 38 in PDF & 88 in the book
I’ve been using this as my north star when explaining technical matters to laypeople. Basically, if someone who is capable of understanding the thing read my description, would they get it? If not, then it’s not a adequate explanation.
I was thinking about this recently because of a HN discussion (https://news.ycombinator.com/item?id=40535868) where people were making fun of this nonsensical error message:
This message can't be saved because it no longer exists. It can only be discarded. Make sure you copy the contents of the message before you discard if you want to use them later.
what the hell does this mean? The message doesn’t exist, but I can copy its contents? If I can copy its contents…why can’t I save it?? If it doesn’t exist why do I have to discard it??
My favorite comment was from lisper who said basically, “guys, chill, there is a legit technical edge case here, it’s just difficult to explain to the layperson. How would YOU do it?”
That is a great question! Here was one person’s attempt that I liked:
"This message has been deleted from the mail server, but Outlook still has it in its temporary cache on this device. You can copy the message contents, or discard it from the cache, at which point it will be permanently deleted."
many scoffed at this though. Because “the layperson doesn’t understand things like `cache` and `server`”
ok but do you see the problem here? The original error message already doesn’t tell me anything, even if I am perfectly capable of understanding it. It’s assuming the average person is too dumb/doesn’t care about understanding the root cause, and treating ALL users this way.
What’s the real harm in using the words “server” and “cache” ? The user who doesn’t care about understanding isn’t going to get much out of it either way, I can concede that. But those that do can and will google those terms, and maybe they will learn something. And you can be sure there WILL in fact be users who understand it who will absolutely appreciate it.
I think this is very much Feynman’s point: he didn’t have flowery unrealistic expectations of the average person. He just said, look, there’s a LOT of variance in the skill & interest of people. Why are we not even giving people a chance?
“the whole idea that the average person is unintelligent is a very dangerous idea”
here’s the full page:
I caught myself violating this recently, when working on my “substack-proxy” tool (to get around twitter censorship of substack posts). It automatically makes a request to my server to create a URL when you copy/paste something in. But I noticed it was making too many requests, if people were typing/editing the URL
so I just added a delay of ~1 second. Initially it said “loading…”. But this is wrong, it’s not actually loading. The better thing is to just say what is happening (that it’s waiting for you to finish typing)
I think this is important because it just accurately reflects the state of the machine. It’s not dumbing it down, it’s not assuming what info the user needs or doesn’t need.
Consider what happens in an error case where it’s stuck. It’s more obvious that something is wrong when it’s stuck on “waiting for you to finish typing” than “loading”
You don’t have to explain everything, just be faithful when you do
I’m not saying you have to teach everyone everything about your software. That’s too high of a bar (and it is true that often the user doesn’t care, they just want it to work)
For the “message no longer exists” thing, I think it would have been perfectly fine to say:
Error code 1027: file cannot be saved.
- [Copy contents]
- [Delete file]
what’s happening? why can’t the file be saved? you can google “error code 1027”. If you don’t care, these are your options.
I think this is better than giving the user a weird/incorrect model about how computers work (that makes it harder for them to reason about this & other systems)
Examples of passing/failing Feynman’s razor?
If I stumble on other examples I’ll share it here. I’d love it if you sent me anything you stumble on or add it in the comments below!
This 1980’s TV show “bits and bytes” that explains how computers work to people that have never used one before, without dumbing it down
in the same episode they explain (1) how to turn the computer on, how to press “enter” to input text into the computer (2) and also, what binary code is
Great article!
Error handling and exposure are challenging to even implement much less *get right* in a piece of software - especially recently as software increasingly exists as productivity increasing glue between applications and services.
(Perhaps overly?) Defensive programming with consistency in delivering actionable information to users at not only a level of understanding, but a level at which *they care* is crucial. If you’re maintaining cURL you’re probably going to want to expose corresponding HTTP error codes - if you’re building a website your users probably don’t care about an HTTP 401 or 403 - they should just be shepherded to a login page.
Microcopy is a term used to capture those small pieces of text that guide users through an application or software - including error messages. It’s hard to get right, and it’s great to think about them across the various levels of technical understanding of a piece of software.
I’ve tried to build software to a point where I don’t get phone calls - basically aiming to deliver decipherable predictable decently documented tools with an error implementation that makes them supportable by the people with an intermediate understanding of the space between users and myself.
How about a compromise between computer terms they don't understand *enough* and actual meaning? Logic! After that, here is my conundrum, what perspective to use? Usually, it's objective and impersonal.
"This message has been deleted"
But some person, some programmer developer DID write that. The error is NOT an impersonal error, it was human reviewed and caught. Is it actually disengenous to make the human speech, robot speech?
We've deleted this message.
Hmm, responsiblity was taken there, that's new. The message did not delete itself. You [user] asked us [service] to delete it with a button that says "DELETE" and we did.
"We deleted this message at your request, but you have a temporary copy on this device. Last chance to copy the message and save it somewhere before exiting this interface ."
Something like that, I wrote that out quickly but I added some perceptual *impact* and recommended *action* for general users who will now understand.
So I created a personal interaction, I showed the user I am responsible for my systems behavior and know it well, and I gave impact and action.