by Leon Rosenshein

Things We Know (or think we know)

There are lots of things we know. Or at least assume to be true. But how many of them really are? Consider RFC 1925, which lays out a set of “truths” for the internet. And since it can be found on the Internet, it must be true.

Of course, sometimes the easiest way to define truth is to define what it isn’t. That’s where the Fallacies of distributed computing come in. We’re all developing distributed systems. We all “know” these things are fallacies But sometimes, when writing code, we forget. And we forget at our own peril.

Consider the first fallacy. The network is reliable. We all know that it’s not. Certainly not in the small. Any given packet of information could be lost, or delivered late, or be slightly garbled by the time it’s delivered. And yet we rely on the unreliable network, You’re reading this over a network. Builds require access to remote information. Our phones use a network. In the large we can (usually) rely on the network because at the small there are things like retries, checksums, sequence numbers, and time stamps. So we rely on the network because the alternative is to be physically touching the same hardware at the same time. And of course that’s really a network as well, and not 100% reliable. But often it’s close enough to being reliable in the large that we can just ignore those error cases.

Or more likely, we decide that adding sufficient defense in depth, whether it’s via hardware redundancy, redundant routes, caching, store and forward, or any of a dozen other work-arounds, costs more, not just in raw dollar terms, but also in terms of added complexity, loss of agility, and increased cognitive load, to not be worth handling. So where do you draw the line? Well, it depends. It depends on the cost of all those changes.

Or maybe you’re not worried about the network. Your problem is simpler. You just need to deal with people’s names. That’s simple, right? 3, maybe 4 strings. Easy to store and display. Or maybe not. Some folks have 5+ strings in their name. I only have two. The artist formerly known as Prince had mostly one, then for a while it was just a custom glyph. He broke so many of the things we know about names in just a few short years. Or more recently a couple couldn’t use the baby name they wanted because it didn’t follow the rules.

All of which is to say, examine your assumptions. They may be correct. They may not be. The cost of dealing with outliers might be more than you’re currently willing to pay. That’s a fine answer. Just make it knowingly, not by mistake/default.

And whatever decision you make, write down why so you understand why you did what you did when you did it.