In software development, many different developers may be working on the same codebase at once. We each check out a “branch” of that codebase, make some changes, and then merge those changes back into the main branch. Continuous integration software is a set of tools that continuously runs a suite of automated tests against our branch, and catches potential conflicts with the main branch or other developer’s branches.
To the user, it looks something like this:
All your checks passing doesn’t necessarily mean the software’s ready to ship. There might be problems the tests don’t catch. The software might just not be valuable.
But I see that a test isn’t passing, I know this thing’s not ready to see the world.
I’ve been told I’m a good communicator and generally good with people, but it’s always been an intuitive skill and not something I examined closely. This meant that when my girlfriend and I had relationship issues last spring, I was at a loss as to how to fix them. Because I’d never had to work at communication before, I didn’t know how to start.
Luckily, a friend recommended a few books that helped me put some explicit words around how to self-assess and improve communication skills. I started obsessing over communication and empathy, and eventually that itch turned into a talk I gave at a recent devops conference in Detroit. I received a lot of feedback that it was refreshing and helpful to talk about empathy and interpersonal communication in a structured and concrete way, and so I wanted to expand on some of those ideas in writing.
One of the things that’s helped me the most in communication is a sort of “empathy test suite”, where at the end of some sort of interpersonal interaction, I consciously check to see if anything seems ‘off’. ‘Off’ is basically any time somebody’s reaction to something I say or do doesn’t match how I’d predict they react. This might be things like a tight smile when I’m expecting enthusiasm, or sentences that suddenly go from long and emotive to short and clipped.
A failing test isn’t worth freaking out over. But it’s at least worth checking into. Maybe it’s nothing. Tests are just flaky sometimes.
When I get a failing empathy test, I replay the interaction again in my mind, thinking about this person and their situation, and see if anything I might have said might have triggered a fear, concern, or feeling of misunderstanding. And then if the test still isn’t passing, if there’s a chance that situation might have been interpreted in a different way than I predicted, if something still seems off, I ask them about it. In as many words as it takes.
Sometimes it’s not many at all. Sometimes in code the failing test is just a trailing whitespace somewhere, a one-character fix. Sometimes with people it’s a “No, I totally didn’t mean that sarcastically,” and the resetting of that one thing, that one premise, brilliantly brings all our following weird and stressful conversations into a clear light. And I apologize, and maybe we laugh at ourselves a little for all the stress over such a tiny thing.
Sometimes it’s more complex than that, and takes a lot of words to solve. Sometimes there is no ‘solved,’ sometimes there are competing priorities and unknown unknowns and messy human things. Sometimes it takes meetings and whiteboards and coffees and emails. Sometimes it takes more than words. Sometimes it takes time, or repeated acts of caring to repair broken trust, or asking somebody else to help.
But at least in my personal experience, people love to feel understood, and when you make it clear that you want to understand them, they latch on to it. People love talking about themselves and their problems, they love the idea that somebody, somewhere might actually understand what’s important to them and what excites them and frustrates them and keeps them up at night. We’re so unused to people really listening to us that I sometimes see people get nervous, or scared, wondering if there’s some subtext they’re missing, some judgement being made of them, some hidden agenda.
But when I can punch through the discomfort, when the other person believes that I in good faith want to understand them, they love to share their world, and often I’ll learn context that puts everything they’ve done into a whole new light. When people feel safe and cared about, they will talk your fucking ears off.
And the conversations are so much more interesting!
When people start complaining to you, their stories usually suck. All the villains are one-dimensional, the plots are really simplistic, and it’s not really clear why the thing’s even still a story. This person’s an asshole, this department doesn’t have their stuff together, there’s too much work to do. Trivial shit.
But there are usually such interesting stories and problems sitting underneath! When people feel safe and unjudged, they start talking about uncertainties, tradeoffs, fears, complexity, and how their stories relate to other, bigger stories in their lives and others’ lives. These are the fun conversations, the deep ones, the optimization functions, the hard problems we get paid good money to solve.
But you don’t get to have the fun, deep conversations until the person knows you give a shit. Not even if your solution’s really elegant. Not even if you’re right. Especially not if you’re right. Trivial shit never gets to become interesting shit until it stops being trivial shit.
When somebody’s evaluating your product to solve their problem right now, they’re probably not in the mood to hear about your roadmap and vision, even if they’d otherwise be really interested in it. When a support person comes to you about a bug that’s causing a customer pain, that’s not the right time to explore the delicate intricacies of technical debt vs. feature work, even though that’s super interesting too. When a woman tells you about some sexist bullshit she ran into from men this week, she is defffffffinitely not in the mood to hear how #notallmen are the problem, and about how men have their own problems too. Even if men’s problems are really interesting to her, and something she might enjoy talking about in a different time or place.
The very instant the other party knows their issue isn’t trivial to you, it explodes into this thing with plot and narrative, this thing that explains all the different ways that their experiences, interactions with others, company history, technical constraints, and intersectional systems of power and privilege conspired to make them feel this one way about this one thing at this one time….or not. In a complex system there’s rarely a simple relationship between cause and effect. But it’s juicy in the way fiction is juicy, in the way that humans seem to like narrative and knowing where something’s been, where it’s going, and why. It’s a ton of fun. At work it feels like cheating somehow, that you can get paid for just listening to these awesome stories all the time and then telling them to other people.
But repeating it one more time for myself because I still forget: you don’t get to have the fun, deep conversations until the person knows you give a shit. Not even if your solution’s really elegant. Not even if you’re right.
Getting to a place where the empathy tests are passing doesn’t mean I said “yes” to what this person is asking for. Empathy does not mean doing anything anyone asks you to. Requests and opportunities are infinite, time is finite, and pretending otherwise is a recipe for disappointment. You’re either saying “No” now with a compassionate heads-up, or “no” later with a “shit, sorry.” I have a hard time with this, as do most people and companies I know. “Ran out of runway” in many cases is just a euphemism for “couldn’t prioritize.”
But “I care about your problems and can’t fix them” sounds awfully similar to “your problems don’t matter to me” when the other person isn’t confident that you actually understand what their problems are. “No” just sounds like “fuck you” when there’s no empathy attached. On the other hand, I notice that when you actually understand the person’s problem and they know it, what was previously a “DO
I really like that feeling where I’m able to finally express to somebody in no uncertain terms: “This is where I think you’re coming from” and have them say back, affirmatively and specifically, “Yes!”. It’s my little green Travis checkbox for life. It doesn’t mean I’ve fixed their problem, and doesn’t even necessarily mean things will improve. But it does mean that I didn’t ignore something that will add more entropy into the world.
I’ve pushed to (metaphorical) production before without tests passing. I’ve called meetings where it was clear there were competing agendas and priorities and no clear structure for how to resolve them. I’ve sent an email, or posted a slack chat when there was a voice in the back of my head telling me that maybe, just maybe I should double-check with somebody before sending that message. I have regretted it every single time.
I’ve seen companies lose friends of mine because of repeated failures to empathize, because of ignoring the little twitches that tell you “Hey, this person doesn’t feel included, or safe, or challenged”. Or jumping too quickly to solutions, offering pay raises or perks when what the employee is asking for is understanding. I’ve lost relationships and deep friendships because of this, when a single failing test becomes two and then three, and then just ignore them all because where would you even start? And then you feel a little guilty so you write some other code to work around it but that adds its complexity and its own broken tests. And you never really know, do you? You never know whether if you’d just cared a little bit earlier, if you’d just not ignored that feeling telling you that Something Is Not Right Here, if it would have worked out in the end. Maybe you would have kept that great engineer, maybe you would have fixed that broken love.
Maybe. Sometimes people need and want different things from each other. Sometimes you have to delete your branch and start from scratch. But there’s nothing to lose, and a lot to gain, by giving just a few extra shits. Don’t ignore failing tests.