Whether you’re a newbie making your first pull requests or an experienced maintainer dealing with a large community, at some point you’ve probably run into an individual or group of individuals whose behavior frustrated you.
This post is not going to offer you any therapy nor will I be diving very deep into the behaviors themselves. That’s not what we’re here for. Whenever you have multiple people working together there will be conflicts. Conflicts in and of themselves are not a bad thing; In many cases they can be beneficial. That’s not what we’re talking about today.
We’re talking about toxic individuals.
Taking a step back
They can spew as much vitriol and idiocy as they want, they’re still just some random on the internet. How you deal with them is your choice. Are you going to ignore them? Engage them? Just spew back your own brand? How you respond to them will largely be based on the situation.
I am much more likely to take a flagrant insult on the chin and keep going if I’m dealing with a regular contributor than I am from someone who just shows up and starts screaming at me to do something. The same applies if you’re an active member of the community versus someone who just joined and doesn’t understand how things are done.
When I was growing up, conflict happened, fights happened. Everyone got all pumped up, they went to battle, and then it was over; sometimes just minutes after it began. Everything went back to normal. It was not uncommon for this to happen with your best friends. It is important to keep in mind that how we react to our friends is obviously not going to be the same as how we react to new people we have no experience with.
It’s important to keep an open mind when dealing with new people, but it’s also important to remain at least a little guarded. No different than how you react to a new person when meeting them in person.
I’m not going to tell you that you have to be the nicest person on the internet. That’s just not my hill to die on. It’s not consistent with my past behavior nor is it a position I particularly believe in. At the same time, I do not think burning their house down is an apt response either.
Why not educate?
“But why not try and educate this person?”
This is not an uncommon stance for many to take. Unfortunately it is often taken without thought of the specific context in which the situation has occurred.
The problem with this stance is that it assumes the individual has any interest in being educated, or even considering your view point. (However, when they do it’s an excellent stance to take. You may even gain a friend out of the ordeal.)
Unfortunately, it’s just not always possible. Many of the same people who swear by this stance, irrespective of circumstance, must often turn their backs on it when dealing with stubborn or disrespectful individuals.
There are those who exist only to get a rise out of you; to make themselves laugh. Those are who this “educate” stance will fall flattest on.
The more time I spend in communities, specifically web-based communities, I am increasingly surprised by how often people are completely unaware of the concept of trolling.
So what do I do?
Unfortunately, as I said above, this is almost always contextual.
If you’re trying to get a PR merged
When trying to get a PR merged you are in the position of least power in most cases.
- Try requesting a different reviewer
- Try getting in touch outside of the PR, via IRC, or email
- Maintain your own fork for a while and come back
- Maintain your own fork long term
Most larger projects have multiple contributors capable of reviewing your changes. If you run into an issue with one, try requesting a different reviewer.
Other times it may help to reach out to the community’s IRC or forum presence to try and discuss the situation in a different environment. Some people will also be happy to discuss this with you in a more private setting such as via email, but that varies. I don’t mind, but I know many who do.
Failing those two options, you might be stuck maintaining your own fork. How long is another one of those contextual things. After a few weeks tensions may relax; in which case you can resubmit your PR for another review. That is not guaranteed. If you are serious about your set of changes you may need to face the reality of running a soft fork (or even a hard fork).
Ultimately, you need to face the reality that you may not be able to get your changes in ever. What the consequences of that reality are will likely shape your handling of events.
If you’re trying to review a PR
Contributions have a life of their own. If the rudest person in the world submitted great code, well written and maintainable, I’m still likely to pull from them. That’s my personal view.
There are many who will disagree with it and that’s fine. If your community does not accept contributions from toxic contributors you won’t have to think very hard in this area.
As the reviewer, you hold all the power. In this case, it may be best to pass review off to another. That’s not to say that you have to drop the situation entirely, but you must be able to make an unbiased decision in handling the contribution.
If you do choose to continue the process, it’s important you remain unbiased and true to your community. I won’t go as far as to say “professional” but you shouldn’t let the current situation taint the act of review.
Chances are, the current spat will pass. Time heals all. All parties involved may forget the original transgression, but that potential contributor isn’t likely to forget the hell that was getting their code through review.
This is probably the most common place for issues to occur. You’re involved in a separate, third-party, community when someone begins acting up. This is another situation in which you likely have little power. How things proceed will again be extremely contextual.
If that third-party community has rules against that sort of behavior, you should probably remain tactful, or just not respond at all. If you blow up right back at them you’re liable to get reprimanded as well.
If it doesn’t, you may want to ignore or block them entirely. Perhaps reconsider your involvement in those communities.
Or roll the dice and send it right back at ‘em. This is generally not recommended but most of us do it at least once or twice. There’s not much advice to be offered if you choose to go down this road. I won’t shame you for it but I can’t explicitly support you in it either.
Ultimately this is the important part. Whether you remain with that community or you choose to leave and find a new home. Dwelling on the situation long term may yield some introspective on your own mind, but it’s just as likely to frustrate the hell out of you.
It’s important not to let the experience taint your overall view on open source as a whole. Just like anywhere else, there are lots of good people and there are lots of people. You will find your own groups with similar goals and values. Until you do, you just have to keep trying. It’s all suddenly worth it when you do find those communities.
Open Source is responsible for some of the worst human interactions I have ever dealt with. But, it is also responsible for some of the best. Similarly, it is also responsible for my meeting some of the best and most interesting individuals I have encountered as well as some of the most worthwhile experiences.
Do not give up because there are assholes on the internet.
Thanks for reading. These are just my own views based on my own experiences within the open source community. There’s plenty to disagree with and hopefully some of you do. Keeps things interesting that way.
Feel free to share your own thoughts with me on twitter or elsewhere.