In all decisions, we bring our context with us. Layers of context, from what we read about that morning to who our heroes were growing up. We don’t realize how much context we assume in our communications, and in our code.
One time I taught someone how to make the Baby Vampire face. It involves poking out both corners of my lower lip, so they stick up like poky gums. Very silly. To my surprise, the person couldn’t do it. They could only poke one side of the lower lip out at a time.
Turns out, few outside my family can make this face. My mom can do it, my sister can do it, my daughters can do it – so it came as a complete surprise to me when someone couldn’t. There is a lip-flexibility that’s part of my context, always has been, and I didn’t even realize it.
Another time, I worked with a bunch of biologists. Molecular biology is harder than any business domain I’ve encountered. The biologists talked fluently amongst themselves about phylogenies and BLAST and PTAM and heterology and I’m making this up now. They shared all this context, and it startled them when developers were dumbfounded by the quantity of it.
Shared context is fantastic for communication. The biologists spoke amongst themselves at a higher level than with others. Unshared context, when I don’t realize I’m drawing on a piece others don’t share, is a disaster for communication. On the other hand, if I can draw on context that others don’t have, and I can explain it, then I add a source of information and naming to the team.
In teams, it’s tempting to form shared context around coincidental similarities. The shows we watched growing up, the movies we like, the beer we drink. The culture we all grew up in, the culture we are now immersed in. It gives us a feeling of belonging and connection, shared metaphors to communicate in. It’s much easier than communicating with someone from a different culture. There, we have no idea how many assumptions we’re making, how much unshared context there is.
Building a team around incidental shared context is cheating. It keeps all the worst of context: the assumptions we don’t know we’re making. It deprives us of the best of unshared context: the stock of models and ideas and values that one person alone can’t hold.
Instead, build a deliberate shared context. Like the biologists have: a context around the business domain, the programming language we use, the coding styles and conventions that make the work flow, that make the code comprehensible. Team culture is important; we should understand each others’ code through a shared context that’s created deliberately.
Eschew incidental shared context by aiming for a diverse team. Create consciously a context that’s conducive to the work.