Debugging Social Interactions

2021/10/17

Categories: GeekStuff

In programming communities, a recurring problem is that social things go wrong, and no one knows how to do anything about this. What particularly frustrates me is that these are all people who know how to debug things, but are not aware that social interactions which Are Not Working As Expected are subject to many of the same basic principles as debugging software.

A note on tone: This is a sort of overview of social debugging stuff. It’s written for audiences who have never been told any of this before. You may already know a ton of this stuff. You might have picked it up unconsciously, you might have studied it, you might have painstakingly figured it out on your own. But everyone learns different sets of these skills, so I’m just putting a ton of them in one place. It’s not because I think you’re stupid.

Also, yes, this is long and rambling. I haven’t the energy or focus it would take to edit it down nicely.

When a social thing doesn’t go well, it’s very often because Something Went Wrong. Just as with software, the most common reason is that your mental model of what’s happening is inaccurate, and that makes it hard to fix the problem. You might be wondering about cases where the problem really is just that someone is a jerk. Those do exist, but they’re vanishingly rare; in the majority of cases, there’s other issues at play that are a lot more relevant.

I got to thinking about this because the Go community had some drama to do with someone being kicked out of the Go community sites based on their community Code of Conduct. And a person has come forward and stated that he’s been banned from their communities, and has claimed that the reasons aren’t good reasons, and that he didn’t do anything. And having seen that specific person do a number of things that I thought were at least marginally bad, and repeatedly insist that everything he was doing was completely fine, I got to thinking that most people don’t know how to debug social situations. As a general rule, in my experience, if you’re repeatedly having people claim that you behaved badly, and getting multiple short-term bans from a community, it is probably at least worth considering the possibility that something is going wrong that you don’t understand, and that understanding it would be beneficial.

Debugging social things is important. It’s also hard. You will not be good at it immediately. Be patient with yourself, and with other people.

Sometimes the right thing to do is to stop and take a break if it’s not working or you’re not getting anywhere, and to possibly come back to it later. You can’t resolve every issue, and you certainly can’t resolve them all right now.

Remember what you are working with.

Imagine, if you will, an engineer who was designing a bridge, and decided that the specifications they’d been given for the quality and types of steel available to them were simply too annoying to work with, so they just declared that steel was significantly stronger and lighter than that, and then designed a bridge accordingly. Would that seem competent? No? And yet, day after day, engineers who are trying to work with humans say that they aren’t going to try to deal with humans having emotions, because “they shouldn’t be emotional, that’s unprofessional”. It works exactly as well as declaring that materials have the properties you would like to work with does in any other context.

Humans are not entirely rational, even when they’ve been specifically trained to be. Humans have emotions. They make mistakes, they get defensive or angry, they get hurt, and all of these things will always matter when dealing with humans. So, when you look at something someone suggests about social interactions, and it seems like a crufty workaround for humans being weird and irrational… Okay, fine, it’s a crufty workaround for humans being weird and irrational. But humans are weird and irrational, and you need a workaround. If your idea for an improvement does not actually take into account, and work with, the traits humans actually have, it is not an improvement.

Recognizing when you have something to debug.

This can be surprisingly hard, because the primary form of social mishap that needs debugging is cases where people are confident of what is happening but wrong. Most people handle cases where they can tell they’re not communicating successfully fairly well; the problem comes when there’s a miscommunication that the parties don’t detect.

If people are mad and you don’t know why, or if you’re mad and someone else says they don’t know why, the most likely explanation is that there’s been a miscommunication. It’s not impossible that people are lying, but you should usually start by acting like it’s impossible until you have much, much, stronger evidence.

Also, as with computer debugging: One useful step is to start by not doing anything else until you understand what’s going on, if at all possible.

There is no git blame here.

Don’t try to figure out who is at fault. Not now. Probably not ever. It turns out it just doesn’t matter. But more immediately, if you are trying to figure out who is “at fault”, you are placing the focus in the wrong area, and working against effectively solving the problem. Humans get defensive when you blame them. Also, you’re almost always going to be wrong. A lack of communication is almost never exclusively one party’s fault; it is a result of complex interactions, social norms, other miscommunications that preceded it, and a lot of other things.

It is good to understand what is happening. But even if you can establish that what is happening is that a specific person is misunderstanding a specific thing, that does not imply that the only correct fix is for them to stop being wrong. It may well be much more practical to rephrase or reframe things so that they don’t misunderstand them.

When you want to fix a social problem, the only part of it you can control is your own actions and choices. For your purposes, other people’s quirks or mistakes are just sort of part of the terrain, and you have to work within those constraints most of the time.

One of the cases that got me to start thinking about drafting this involved someone who reacted to a comment about someone being unwelcoming or hostile with an assertion that they “did nothing wrong”. This is a debatable point, but claiming it doesn’t allow for trying to figure out whether there was a problem, and if so how they could have avoided it.

That said, even if you’re not assigning blame, other people may expect that you are, or will be, and be reluctant to participate. Starting by talking about things you think you could do better can defuse this a bit.

Cooperative debugging is more effective.

Communication involves multiple parties. If at all possible, if you think there’s a communications problem or some other social problem, try to get the other participants to agree to investigate this with you. Note, though, that “consent” continues to be a thing in this context, just like every other context. If someone doesn’t want to participate in debugging things, they can refuse. You can’t do much for social debugging without consent, but that doesn’t make consent optional, and it doesn’t make agreeing mandatory. If people are unwilling to cooperate with you on debugging, then you have to leave them out of it. Go ahead and do what you can without them, but don’t try to force them.

To cooperative effectively, you have to assume that there’s a chance that you need to change your behavior. If you feel strongly that your behavior is fine, and doesn’t need to change, you aren’t in a good place to begin working cooperatively to make things better. You can be following all the generic social rules, and still be upsetting a specific person because of reasons specific to them… and it can still be better for you to change your behavior, because they may not be able to change how they feel about it right now.

In practice, you should usually be looking for possible ways everyone involved can act to improve things. Part of this is just a recognition that humans are still somewhat irrational (this hasn’t changed since I wrote that section up above), and if only one person’s behavior is changing, that can feel unfair to that person. Sometimes that’s the right course of action; if someone’s behaving abusively, they should stop. But if one person has a lovely pet spider, and another person is arachnophobic, neither of them is wrong, they’re just incompatible. It could make sense to go for a solution like “I’ll stop spontaneously showing pet pictures without warning, and you’ll not insist on remaining present every time anyone wants to show pet pictures, so I can show other people my pet without hurting you.”

Debugging is hard. People may not be able to pursue it when distressed or upset, and they may need time to think. Don’t be pushy about it.

You know how to debug things.

Not everything you would do in debugging software is applicable. You probably shouldn’t bisect your coworkers, for instance. You can’t really just run people under a debugger. But the basic principles of debugging are a great starting point for debugging other things. Form hypotheses. Come up with ways to confirm or deny those hypotheses. Do remember, though, to favor non-destructive testing when dealing with people. Don’t just try a thing to see what happens; ask questions about things. Think of hypotheticals or possible counterexamples. Check your assumptions.

Checking your assumptions is particularly hard because social assumptions are very frequently unconscious and just “obvious” to people, but we all have subtly different ones. If you’re very status-conscious, and someone else is mostly oblivious to social status, they can seem incredibly rude because they’re ignoring something important to you, and it will likely feel like it must be intentional, but it probably isn’t. Checking that kind of assumption can be enlightening, and also completely mystifying sometimes.

Things to know, techniques to have

There’s a really large pool of things that you might need to know at one point or another to debug social things. One of the most recurring sources of personal social conflict is conflicts between “ask culture” (you ask for things, people can say no) and “guess culture” (you are expected to use non-requests to determine whether someone would want to say yes if asked, and ask only if they would want to say yes, because they’re not allowed to say no).

Basic familiarity with common ways brains can be unusual, like autism, ADHD, and so on, can be very helpful. If a person with ADHD keeps forgetting things, that is not a personal statement on your worth as a human being, it’s just how their brain works.

In general, though, you can get through a whole lot of things by being honest, kind, and open to talking about your communications and social interactions. The purpose of this stuff is to communicate and be sure you’ve got a shared understanding with other people. This doesn’t mean you have to agree – it means that, if you disagree, you are actually talking about the same thing, but have different beliefs about it, rather than talking about unrelated things and being confused.

In general, getting other people mad won’t advance your goals. (Or if it will, you’re perhaps reading the wrong guide.)

I Statements

If you can only pick up one social thing, the thing I’m going to recommend is what the therapist types call “I statements”, which is statements about your own state and experiences. Note that the grammatical construct is not the load-bearing part here. It’s the content that matters.

Sometimes you’ll see people recommending this, and it gets dismissed because it’s just rephrasing things to soothe people’s feelings. It’s not. If it is, you’re doing it wrong. The point here is to be sure you’re talking only about your own experiences, not about other people’s motives or internal state, which you actually don’t know about.

Imagine that someone says a thing, and then you later find out that the thing they said is untrue. Obviously, you have a valid complaint; they lied to you! Or… did they? Is it even possible that there was a miscommunication of some kind? The answer is “yes” a lot more often than you might expect. Is it possible that, when they said the thing, they thought it was true? It probably is!

So, let’s reverse the roles and think about this. You tell someone something. The next day, they say “why did you lie to me!” You aren’t aware of lying to them. You don’t think you lied. Now we have new problems, in addition to whatever they’re upset about:

  1. You’re probably feeling defensive, and less cooperative.
  2. You’re now going to be focused on the factual question of whether or not you were lying, not on the actual communications question.
  3. A straight denial will be upsetting to them, but if you didn’t actually lie, you can’t really answer their question meaningfully.

But what if, instead, they say “I thought you said X, what happened?”. That’s not an accusation towards you. It’s a statement about their experiences, and it’s probably true. You are now in a much better position to respond with something relevant, like “I’m sorry, I thought it was clear that…” or “I thought that too, I don’t know either”, or something else.

One particularly central thing to be careful about: Don’t make assertions about other people’s motives when you can possibly avoid it. You don’t actually know their motives. You know what actions you observed, but you don’t know why they did those things or how they feel about them. You can guess, but your guesses can be wildly wrong.

At one point, a friend asked me whether I’d had a chance to look at something that I’d said I’d try to make time to look at, and I responded with some comment about not having had time because work chews up most of my days. They were deeply hurt, because the only conceivable reason they could imagine for me mentioning work was to remind them that I was employed and they weren’t, and thus, that my time was valuable and theirs was not. On my end, I thought I was offering a sort of weak excuse along with a sort of apology; I understood that I had disappointed them, but there was a reason for it which I thought explained it. I wasn’t even aware of whether or not they were employed at the time.

If they’d started with “why are you always bragging about your superior social status”, I would have been deeply confused. Instead, though, they said something like “why did you bring up your job there?”, and when I said that it just seemed relevant that I was busy and tired and that this had prevented me from getting to things, they were pretty surprised, and explained that they’d thought it was a personal jab. But they didn’t accuse me; they told me how they felt. And since I didn’t intend that, I could tell them that this was not my intent, and apologize for any distress, and things were resolved.

Again, it doesn’t count to just take an accusation and slap “I feel” in front of it. For instance, “I feel attacked when you attack me for no reason” isn’t really an “I statement”, it’s just a clunky phrasing of an accusation. “I felt attacked when you reminded me that you have a job and I don’t” is better, but even then, it implies that the reminding was an intentional choice of some kind. “I felt attacked when you mentioned your job, because that reminded me that you’re employed and I’m not” is much more conducive to successfully debugging.

The analogy to directions.

This is most applicable to persuasive communication, but actually applies to a lot of other communication too. If you want to tell someone how to get to where you are, you have to start by finding out where they’re coming from.

This can be hard, especially if it sounds to you like where they’re coming from is wrong, because the certainty that it sounds wrong can make it hard to think about what they mean.

Miller’s Law.

If this sounds stupid at first, hang in there and give me a moment to explain it. It’s from George Miller (the same one who identified the 7 item +/- 2 limit on short term memory).

“…in order to understand what someone is telling you, it is necessary for you to assume the person is being truthful, then imagine what could be true about it.”

This might sound sort of insane. What if someone’s saying something completely nonsensical?

Well, they’re probably not! They’re probably telling you a thing that means something to them, and that something is true. Or at least, they think it is, and it may well be that they’re right but what you think they’re saying isn’t what they’re talking about. So you have to slow down and figure out what they are saying.

You can view this a bit like a black box. You have access to people’s words and actions, but not to their thoughts, but to debug a problem, you need to actually know their thoughts. Inferring their thoughts indirectly probably serves you well most of the time, but if you’re debugging, you should start with the assumption that your inferences failed you. You need to check those assumptions. And when checking them, try to be clear about the fact that your guesses could be wrong, and you know that, and that is why you are asking for clarifications.

Don’t paraphrase right away.

Later in the process, a good technique for confirming communication can be repeating what someone said, but in your own words; if they agree that your words mean the same thing as theirs, that’s at least evidence in favor of successful communication.

Don’t start with that, though. Especially, don’t start with hostile, derisive, or dismissive characterizations of people’s positions. For instance, if someone new to programming has asked for advice on string handling, advice like “have you considered not trying to write a Python program in C” is unhelpful to them. It invokes tribalism among programming language fanatics (never a good thing), it’s not really actionable, and since that’s probably not how they’re thinking about their question, it doesn’t really lead to communicating.

On the other hand, something like “this feels like you’re used to [other language] and are looking for a parallel to [feature]” could be a good way to explore what they’re doing and why they’re doing it that way.

Apologies and admissions of wrongdoing.

There’s a social gap between two very common models of apologies, and this in and of itself causes a lot of problems. Some people tend to view an apology as specifically an acknowledgement of moral culpability for harm, and will be offended by a suggestion that they should apologize when they have not intentionally done wrong. Other people tend to view an apology as an acknowledgement of harm done and regret for that harm, and will be offended if someone who hurt them refuses to apologize even when the harm was unambiguously unintentional.

In some cases, you can address this just by being more explicit about what you are, and are not, saying. Or asking someone else to say. For instance, if you do not feel that you did a morally-wrong thing, but someone became hurt as a result of your actions, and you don’t feel comfortable saying “I’m sorry” when you did not intentionally do wrong, you could say something like “I did not realize that would hurt you, it wasn’t my intent, and I regret that you were hurt.” Think of this as a way of answering any or all of a number of questions:

Different people will care about different parts of this, and sometimes they’ll have strong or specific feelings about particular words. Some people, especially people who have been in toxic environments, may also think of apologies in completely different ways; for instance, they might understand “an apology” to be a thing that has nothing at all to do with right or wrong, or regret, or harm done, but is entirely a statement of submission to a person in a position of authority. They’re often very reluctant to apologize for hurting people, even if they feel deep regret about people getting hurt and are planning to take significant concrete steps to prevent it from happening in the future; they just can’t call it an apology because that means the wrong thing to them.

If someone has quirks or hangups about terminology, try to be accommodating. They’re usually the result of some pretty horrific stuff happening in their past and fighting them on it is not going to make anyone happier.

You Know What You Did.

Actually you often don’t. Unfortunately, sometimes people think that it’s obvious that you must have done something intentionally, and thus, they’ll refuse to state what it is specifically that they think happened. There’s not much you can do about this. But you can not be the one doing it.

If someone asks what they did, the chances are pretty decent that they genuinely don’t know, and that if you tell them, they can fix it. If they really are asking insincerely… So what? If you tell them, now they know and you can point out that you told them. They might still disagree, they might still do the thing, but if you clearly and directly tell them, they won’t get very far with “but no one will tell me what I did”.

Sometimes it can be hard to explain well. You can use your “I statements” here. If you say “I don’t really know, but I’m feeling hurt and angry and the thing you just said is what I’m angry about”, you’re not going to definitively win the argument, but you’re going to be saying a thing that you know is true, and if they are trying to fix the problem, they can look at the thing and try to understand how it could be upsetting and possibly fix the problem.

Bad faith does exist.

Usually you should disregard this, because it’s extremely rare by comparison, but there are people out there who are in fact just trolling. I’d guess that maybe 5% of the accusations of “trolling” I see are accurate, but it does happen. Trying to use social debugging skills on trolling is not always going to be productive. They can help you realize that’s what’s happening, but you can’t fix anything that way, for the same reason that no amount of software debugging will fix a computer which is crashing because it’s overheating.

In general, though, start with assuming people are probably acting in good faith, and trying to understand them. Even trolls are doing what they’re doing for a reason which may be more complex than you realize.

People will sometimes assume that you’re acting in bad faith. I have yet to find anything that will reliably convince them otherwise. Acting in good faith and visibly owning your faults in other circumstances can reduce the risk, but sometimes people are just gonna decide that and there is nothing further you can do about it.