Cognitive Empathy and Software Development

(TL;DR: software is a social endeavour, and if you can’t figure out some way to engage with that fact, then that fact will engage with you nonetheless – and things are unlikely to go well for you from that point)

The ideas in this post will be obvious when I set them out. But they are clearly not obvious up front. I know this because I see many very clever and able people – far more clever and able than I – who clearly don’t understand these ideas, and who suffer greatly as a consequence.

Am I writing this because I’m a nice chap, who wants to help these poor people out?

No: sorry.

I mean, I’m not a monster, but I’m certainly not any nicer than the average person. Probably less nice than average, if we’re all to be honest with each other. I’m just tired of seeing people who are nice screw themselves up. People who I admire and respect sabotage themselves in the same way, time after time, and it’s so ugly! And unpleasant. And sad. And, mostly, really fucking boring. I want to take them by the scruff of the neck and… gah. It’s like a fishook in my head and I want it to stop! But it will never, ever stop. Ah, me. Nevertheless, here goes…

There is a very specific kind of empathy deficit that is rife in IT. If you manage to be better than average in this respect, your efforts will greatly benefit both you and those you interact with. The nature of this empathy deficit is not obvious to most people; this is because empathy is a more complex concept than most people realise. The distinction necessary to understand the deficit’s nature is set out on Wikipedia’s Empathy page: it is between Cognitive Empathy (“Empathy of the Head”) and Affective Empathy (“Empathy of the Heart”).

Affective Empathy is common-or-garden human sympathy, or as Wikipedia puts it “the ability to respond with an appropriate emotion to another’s mental states”. If you are incapable of exercising any of this variety of empathy, I’m afraid that we are unlikely to be friends – not that you would care, of course. You may as well stop reading and go back to tearing the wings off flies, or whatever else it was doing before you encountered this essay. Have fun! Please don’t kill me!

Cognitive Empathy is a very different beast: it’s all about how much you get inside other people’s heads (Wikipedia: “the ability to understand another’s perspective or mental state”). Unlike Affective Empathy, this doesn’t carry any intrinsic moral virtue: you can be a lovely, wonderful person, and absolutely suck at Cognitive Empathy. Note that if you lack innate ability in Cognitive Empathy, there are workarounds – ways to “fake it ’till you make it” – much more so than for a lack of innate Affective Empathy.

Life is unfair in many ways, and here is one of them: people who use a lot of Cognitive Empathy are liable to appear far nicer than they actually are. An example is worth a thousand words, so let’s look at Dr. Hannibal Lecter. Dr. Lecter is very good at Cognitive Empathy, and unfailingly polite. To someone who is meeting him for the first time, he generally comes across very positively. However I have been given to understand that he leaves something to be desired as a social companion in the longer term, and I would definitely advise against inviting him to your next dinner party.

In IT, Affective Empathy is present in normal amounts, but Cognitive Empathy is very thin on the ground. I’m not going to get into why these things are so. There are many reasons why these things are so; even an overview of the “why” would be a substantial essay all by itself. But we all know that IT is chock-full of people who would far rather focus on technical, analytical framings of issues than get all “touchy-feely” and worry overmuch about the thoughts and feelings of others.

What’s the problem with that? To start seeing why, let’s start with a classic example of how this attitude goes wrong that isn’t limited to IT: have you ever slogged your guts out and felt that you’ve not been given sufficient recognition for your efforts, while someone else has risen, seemingly without any justification? If you don’t understand why this happened, then you didn’t understand enough about how the work was being evaluated: who was pronouncing on its worth, and what they attached value to. This is where even a smattering of Cognitive Empathy can help tremendously.

I know that this line of argument will infuriate some readers. They will be thinking: Why should I pander, and be a people-pleaser? Surely, if I just carry on doing Good Things then I should be recognised? And, if I’m not recognised, surely that means it’s the fault of the company; that I should go and work for somewhere else with a better value system? Right?

Listen up: if you don’t engage with what the people around you are thinking, you are at a massive disadvantage compared to anyone else who is paying even the slightest attention to the mental states of others. There is a romantic myth in IT of the sole coder who has an amazing idea and weaves a magical blanket of abstractions by working 24/7 in their bedroom, unveils it to the world, and receives instant fame and recognition for their genius. Like most myths and archetypes, it’s fatal to take this as an unadulterated guide to living in the real world. Almost everywhere, and almost all the time, creating software is a social endeavour. Most great ideas come from cross-fertilisation with a wide range of other people – some of whom are likely to think very differently from you – and a lack of appropriate context makes even geniuses appear stupid.

Here’s a story that I’ve seen unfold many times over my career: someone spends a long time (10 years or more) working on the same part of the same product, for the same company, without interacting with other teams much, whether internally or externally. Other team members (whether more extraverted ICs or managers) interface between them and the world outside their team. While the person most certainly adds value, hardly anyone outside their team knows who they are. This is an insanely dangerous way to (not) manage your career. At some point your local technological landscape will get invalidated, there will be redundancies, and you will get the chop, because the decision of who to chop is made by multiple people (managers, client reps, etc) getting together and voting, and only one of these people will know who you are, and so they will be outvoted by all the others.

You’re still here? Amazing. Look, first of all, I owe you an apology. I’ve probably come across as a bit of an arsehole. This isn’t an accident; I’m attemping to shock you out of complacency (and, in my defence, I did say that I wasn’t a particularly nice person). I wouldn’t be trying to do this at all, but no-one else is going to bother: they’ve been spending their whole life cruising past your low-cognitive-empathy slum in their high-cognitive-empathy limousines. And most of the people in the limos don’t really get why you’re in the slum, and the minority who do have an inkling: well, I wouldn’t say that they’re laughing at you, not exactly, but they don’t care about you either; at least, not enough to help you out. So you’re stuck with me, doing my best. Sorry about that. But also: fuck those guys, right?

And there is a way out. If you work in the IT realm and think that you may be suffering from this kind of disadvantage, and would like to make the pain stop, I recommend studying the works of Gerald Weinberg. I didn’t get to meet him in person, which is one of my few major regrets in life: he died in 2018, leaving a legacy of marvellous writing behind. His original classic “The Psychology of Computer Programming” was written in 1971 but is still as relevant as ever. I have read every non-fiction book he has written and haven’t regretted a single one. He has the technical chops: he was a project manager on Project Mercury. But also he transcended personal tragedy in his family life, and as part of his journey he produced this amazing synthesis of Rogerian psychological thought with the practical process of writing systems. I cannot recommend his writing highly enough.

So there is lots of good news here. You can learn Cognitive Empathy. And this isn’t just about career benefits, about helping yourself out. While being able to better comprehend what everyone around you thinks, feels, and wants is very rewarding professionally, it’s also tremendously rewarding in itself: you will be able to help more people and generally do more good in the world.

And on top of all of this – circling back to career benefits – knowledge of Cognitive Empathy will be hugely more durable than all those technology hamster wheels we spend all our time running around. I have lost count of the number of networking technologies I have learnt over the last 30 years – but people? They are just the same now as they were 30 years ago, or the last few hundred come to that. It’s an incredibly useful bit of technology that is going to be just as relevant when you retire as it is today. You know, like key bindings for vi?

But maybe you’re not convinced. Well, fine, I’ve done my best and, like I said, I’m really not a particularly nice person so I don’t really care. Feel free to ignore me and focus on those sweet, sweet technical/analytical problems that we all love so much. But don’t come running to me when an idiot manager or daft fellow developer who happens to be exercising slightly more Cognitive Empathy than a broken toaster runs rings around you.

Incidentally, don’t despair if you feel that a self-perceived lack of neurotypicality on your part might make all this too difficult. I’m not neurotypical either, having a nasty dose of Emotional Contagion. Depending on the mix at your workplace, non-neurotypicality might actually make it all easier: check out The Double Empathy Problem to see what I’m talking about.