Language is a tricky thing. It engages us both consciously and subconsciously. Consciously it is a tool used to express meaning and invoke understanding. Subconsciously it triggers emotions and memories. Language we use in our technical work is not immune to these subconscious effects, no matter how scientific we try to be. Positively, words and phrases may trigger memories of lessons learned in the past, allowing us to grasp concepts quickly and clearly. But equally language may have negative connotations that can cause discomfort and/or introduce undesired distractions. At it’s worst language can be downright hurtful, even if such pain is an accident. We as communicators need to be aware of this even if we had no intention of causing such a impact.
I’m trying to be more aware of the language I use in my work and I recommend we as an industry do the same. Recently at Intent Media I brought up a phrase we use a lot when we talk about databases — Master/Slave. Master/Slave terminology has been around for decades but that second word — slave — is tricky. Outside of computer software and engineering it is mostly used in the context of human slavery (ignoring its use in a sexual context, but I feel happy assuming that we don’t want any sexual metaphors in computer software.) Beyond being a dark part of the history of the US that still reverberates today, slavery is also something that still exists around the world. For such an emotional word I’d only really want to use it in a different context if there wasn’t a good alternative. Fortunately there is.
I recommend we stop the usage of the term Master/Slave in a database context, preferring the term Primary/Replica (or Primary/Secondary). This is not a brand-new suggestion I’ve made up from scratch. I’ve come across at least a couple of open source projects (including Django) that themselves have gone through the same transition. Many database providers already use words other than ‘slave’ — e.g. Amazon RDS has the concept of ‘read replicas’.
Master/Slave is also used in other technical contexts — e.g. a build system. Here you may want to think of using server/agent or controller/worker (or supervisor/worker.)
An ironic part of this, at the very least in a database context, is that Master/Slave isn’t even an accurate metaphor. So let’s just stop using it.
To many of you reading, this may seem a weird or trivial idea, or a distraction from ‘useful’ work. My guess is that if you feel this way that you’re from a racial or personal background that has no history of suffering slavery. If that’s the case then consider this an empathic change for those in your teams or on your open source projects who are in a different position — they may well appreciate it.
Update — June 19 2020
This article is 4 years old but has received a lot of views the last few weeks, largely I suspect due to conversations in our industry about using the term “master” for the primary branch in a source code repository. I didn’t mention this example when I wrote the article, but it’s definitely as relevant.
I’ve never particularly liked the word “master” with source code repositories. Even from a technical point of view combining “master” with “branch” as a concept is a weirdly mixed metaphor. I’ve preferred the term “trunk” for a long time, but I’ve seen quite a few suggestions recently to use “main”, which I think also works well. Especially since it shares the same first two letters as “master”, and is 2/3 the number of characters. Whatever your choice of replacement, today of all days seems like a good day to think about this.
I hope Github will soon make the default primary branch name an Organization-wide configurable setting.