Common Knowledge

This weekend I moved to a new place. It's just two blocks away, but you wouldn't know that from the mess it made.

My new place features a roommate. I can afford not to have a roommate, but these days I really can't afford not to, you know? Being alone with the privilege of my own company has not been a good situation.

So now I live with a roommate, who is different from me. One way this roommate is different is that he has no books. This is why he was able to spend Sunday mocking me as I went through the tedious work of unboxing and reshelving them in their right order.

Which is how I laid eyes on the book Rational Ritual, by Michael Chwe. The titular paper is available freely, so maybe just go read that instead of buying the book.

The core idea is simple, if maybe a bit strange to lay out in words. It's that certain actions require everyone to know that everyone else knows the same fact. That is, not just that I know that, say, coroutines are great, but also that I know that you know that coroutines are great.

What sort of actions? Well, take a riot for example. You can't have an asynchronous riot, or a blindfolded riot. The whole reason a riot works is that everyone can see everyone else breaking the law together. That's common knowledge: the shared fact of the riot is what makes the riot possible.

The same thing goes for more positive events, like bringing a new leader into office. If there's a public emergency and the leader gives an order to, say, stay at home to prevent the spread of a dangerous virus, the order is ineffective if only a fraction of people acknowledge the new leader as legitimate and trustworthy. And if it's ineffective, why bother participating?

There are other dynamics involved in these kinds of group decisions, but when I first joined a remote workplace the notion of common knowledge immediately jumped out at me as being the flip side of the common drumbeat towards asynchronicity. Async decision making has so many clear advantages:

But what about common knowledge? And do we need it? I think we do need it — every line of code we write relies on a corps of maintainers who are committed to what we do. We would never use gradle, for example, if we didn't know that others were also committed to using and supporting gradle.

But is common knowledge built asynchronously? I think it seems clear that it is, but that's where I'll have to leave that thought for today.