Building Software Together

Chapter 6: Managing Conflict

You just missed an important deadline, and people are unhappy. The sick feeling in the pit of your stomach has turned to anger: you did your part, but Sylvie didn't finish her stuff until the very last minute, which meant that no one else had time to spot the two big mistakes she'd made. And Surinder didn't deliver at all—again. If something doesn't change, you're going to fail this course.

Conflicts like this come up all the time. We can deal with them in four ways:

  1. Cross our fingers and hope that things will get better on their own, even though they didn't the last three times.

  2. Do extra work to make up for others' shortcomings. This strategy avoids the stress of confronting others in the short run, but the time for that "extra" has to come from somewhere. Sooner or later, our personal lives or other responsibilities will suffer.

  3. Lose our temper. People often displace anger into other parts of their lives: they may yell at someone for taking an extra few seconds to make coffee when what they really need to do is tell their teammates that they aren't going to miss another dinner with their family in order to clean up a mess that someone else made.

  4. Fix the underlying problem.

Most of us find the first option easiest, even though it doesn't fix the problem. The fourth option is harder because we don't like confrontation. Managed properly, though, it can be much less bruising, which means that we don't have to be as afraid of it. And if people believe that we will take steps when they lie, bully, procrastinate, or do a half-assed job, they will often avoid making it necessary.

A few bad apples

An internal study at Facebook in 2021 found that just over 100 people were the source of almost half of harmful disinformation about COVID-19 vaccination. Similarly, one of the designers of the game Ultima Online reported, "…we asked players what percentage of the player base were degenerate player killers. Players responded with 10%. The metrics told us the answer was closer to 0.1%." These findings and many others tell us that a small number of people cause a disproportionate amount of grief in our communities (online and otherwise), and that they seem much more common than they are because incidents of abuse and conflict loom large in our memories.

The irony is that The Walking Dead and Mad Max have it completely backward: when a real disaster strikes, most people actually rise to the occasion. As [Solnit2010] describes, neighbors don't turn on each other in the aftermath of an earthquake or a hurricane—instead, they are more likely to look out for each other than under normal circumstances. That doesn't make for exciting viewing, though, and the powerful have always wanted the rest of us to believe that the only alternative to their rule is chaos.

What to Do

The first rule for meetings in Chapter 2 was to agree on what the rules are so that everyone knows what's expected of them. A shared understanding of how to handle conflict helps in the same way; as with first aid training, having some idea of what to do makes you more likely to actually do something when the time comes.

Make sure you are not guilty of the same sin.
You won't get very far complaining about someone else interrupting in meetings if you do it just as frequently.
Check expectations.
Are you sure the offender knows what standards they are supposed to be meeting? This is where things like the team contracts described in Chapter 4 come in handy.
Check the situation.
Is someone dealing with an ailing parent or immigration woes? Do they have deadlines for three other projects that we don't know about? Use open questions like, "Can you help me understand this?" when checking in. This gives them the freedom to explain something you may not have expected, and avoids the pressure of being asked directly about something they don't want to discuss.
Document the offense.
Write down what the offender has actually done and why it's not good enough. Doing this helps you clarify what you're upset about and is essential if you have to escalate.
Check with other team members.
Are you alone in feeling that the offender is letting the team down? If so, you aren't necessarily wrong, but it'll be a lot easier to fix things if you have the support of the rest of the team. Finding out who else on the team is unhappy can be the hardest part of the whole process, since you can't even ask the question without letting on that you are upset, and word will almost certainly get back to whoever you are asking about, who might then accuse you of stirring up trouble.
Talk with the offender.
This should be a team effort: put it on the agenda for a meeting, present the complaint, and make sure that the offender understands it. This is sometimes enough to solve the problem: if someone realizes that they're going to be held accountable, they will often change their ways.
Escalate as soon as there's a second offense.
People who don't have good intentions count on us giving them one last chance after another until the project is finished and they can go suck the life out of their next victim. Don't fall into this trap. If someone stole your laptop, you would report it right away. If someone steals your time, it's foolish to give them a chance to do it again and again.

In a course project, "escalation" means "taking the issue to the instructor". Of course, they have probably had dozens of students complain to them over the years about teammates not doing their share, and it isn't uncommon to have both halves of a pair say that they're doing all the work. (This is yet another reason to use version control: as described in Chapter 7, it makes it easy to check who's actually written what.) In order to get them to take you seriously and help you fix the problem, you should send them an email signed by several people that describes what's happened and the steps already taken. Make sure the offender gets a copy as well, and ask the instructor to arrange a meeting to resolve the issue.

One technique your instructor may ask you to use in a meeting of this kind is active listening. When one person makes a point, the person on the other side of the issue explains it back to them, as in, "So what I think Igor is saying is…" This confirms that the second person has actually paid attention to what the first person said. It can also defuse a lot of tension, since explaining your position back to you clearly forces the other person to see the world through your eyes, if only for a few moments.


Hitchhikers who show up but never actually do anything are particularly difficult to manage, in part because they are usually very good at appearing reasonable. They will nod as you present our case, then say, "Well, yes, but…" and list a bunch of minor exceptions or cases where others on the team have also fallen short of expectations. Tracking progress and contributions is essential for handling them. If you can't back up your complaint, the instructor may be left with the impression that the whole team is dysfunctional.

Finally, it's important to recognize that good principles sometimes conflict [Berlin2000]. For example, suppose that a student has a medically diagnosed attention disorder that requires them to talk to themselves quite loudly while programming in order to stay focused, but other members of their team find this very distracting. Asking the student in question to program somewhere else would be punishing them for something they can't control, while asking everyone else to put on headphones would make their interaction more difficult and their work less fun. There might not be a solution that satisfies everyone; in such cases, the best guide is to do the kindest thing possible.


What can you do if conflict becomes more personal and heated?

  1. Be short, simple, and firm.

  2. Don't try to be funny. It almost always backfires, or will later be used against us.

  3. Play for the audience. We probably won't change the person we are calling out, but we might change the minds or strengthen the resolve of people who are observing.

  4. Pick our battles. We can't challenge everyone, every time, without exhausting ourselves and deafening our audience. An occasional sharp retort will be much more effective than constant criticism.

  5. Don't shame or insult one group when trying to help another. For example, don't call someone stupid when what we really mean is that they're racist or homophobic.

Captain Awkward has useful advice for discussions like these, and Charles' Rules of Argument are very useful online.

Sometimes, though, it isn't just one person on the team who's a problem. Sometimes, the whole team is dysfunctional. In the mid-1990s, for example, I worked in a data visualization startup. Individually, we were all smart, decent people. Put us together, though, and somehow our IQs and personalities canceled out, so that collectively we were as dumb as a sack full of hammers.

There's not a lot you can do in cases like this except start over. Instructors can allow for this by announcing at the start of the course that teams will be dissolved and re-formed halfway through the project, unless every member on the team submits a separate signed request to stay together. There's a bit of psychology here: if people are required to ask for their team to be dissolved, they will often think, "It's more trouble than it's worth, I'll just put up with it." If dissolution is the default, though, then students won't be inhibited by any stigma attached to being the one who caused trouble.

Students also usually understand that dissolving their team and forming a new one takes time that could be invested in earning a higher grade. In practice, therefore, teams will usually stick together if they see that troublemakers are actually being dealt with.

Who gets to keep the cat?

If the instructor allows or requires teams to re-form partway through the project, they should explain at the start of the course what will happen to the work the team has done up to that point. Can each member of the team that is dissolving use everything the whole team has built up to that point? Do they have to re-start with whatever has been written by the teams they are joining? Knowing this in advance helps everyone decide whether breaking up is worth it.