Maintaining an open source project is an exercise in balancing a number of different priorities and the tensions between a few different groups. There are:
- People who want the project changed
- People who want the project to remain as it is
- People who want to know what the maintainers plan to do or are in the process of doing
- People who want to contribute themselves
- And many others
In any non-trivial project, there is never enough time or enough people to do everything that everyone wants, even if what people want isn’t diametrically opposed to some other group of people. So maintaining an open source project is, at its very core, about making decisions. Whether it is a decision about how time will be spent or how it won’t be spent, any time one makes a decision, it is likely that someone is going to disagree with it.
Disagreements and Productivity
When I worked at a previous job, many years ago, they had a class that everyone had to take as part of their onboarding called “Effective Meetings”. One of the things that was taught in this class was that there are three productive courses of action that one can take when a decision is made:
- Agree — agree with the decision and move forward
- Disagree and Commit — disagree with the decision, but commit to the decided course of action anyway
- Disagree and Don’t Commit — disagree with the decision and recuse yourself from further participation in the project or activity
Unfortunately, what some people do when they disagree with a decision is they disagree and refuse to let it go. They keep bringing it up, preventing the project from moving forward, preventing productive actions from being taken. The discussion comes up again and again, and often the same decision is made because nothing has changed. All this does is consume a bunch of time, time that could be better spent making forward progress rather than rehashing a decision that has already been made.
Explanations and Obligations
Sometimes when people disagree with a decision that is made, it is because they don’t see the full picture. If you take the time to explain it to them, they may understand and be able to accept the decision was the right one, even if it is not the one they would prefer. Other times, you may explain the full reasoning, context, and rationale behind the decision, and they will still disagree but they will disagree and commit. Sometimes, you will spend a bunch of time explaining everything, giving them the benefit of perspective that is gained only from spending years of your life devoted to a project, and they will disagree and not commit, leaving the project to contribute somewhere else. And finally, sometimes you will spend all that time, painstakingly laying out all of the things that were considered, opening everything up for debate, and it will all be ignored because the person wants what they want and will attempt to argue you into submission, browbeat you and harass you until you acquiesce so they get what they want.
But even making the decision to spend that time has to be weighed against the other things that could be achieved spending that time in some other way. It is hard to teach someone everything that you know about a subject, even if the person you’re attempting to mentor is receptive to what you’re trying to teach. It is doubly hard if they are combative, hostile, or simply don’t care what you have to say and only want you to agree with them. Would open source be a better place if we could always take the time to explain everything to everyone who wanted or needed something explained? Undoubtedly. But as I said before, there is never enough time to do everything. So sometimes, it is ultimately better for the project to not explain things and spend that time making a positive contribution in some other way. Sometimes it is better to ignore a confrontational person and hope they get the message, because you simply don’t have the spoons to deal with them in a constructive way right now. And it is definitely better to ignore a confrontational person than to deal with them in a harsh or destructive manner.
To be clear, the open source world would definitely benefit from people with more information, perspective, context, or expertise sharing it with those who have less of those things. But an open source maintainer is not obligated to share what they have with everyone who wants it, let alone those who believe they have the right to demand it. Personally, I spend a lot of time and energy sharing everything that I can with people that I believe will benefit from it and use what I know to make things better for others. And I feel no guilt withholding my time, knowledge, and energy from those that I believe will squander or ignore it. Moreover, I believe that withholding these things from that kind of person is the right thing to do for myself, my mental health, the projects that I maintain, and the community surrounding them.
Do I make incorrect decisions? Absolutely. I do my best to examine all of my decisions, to learn from the ones that succeed and the ones that fail. Do I have the time or energy to do everything that would be beneficial? No, I do not. I do my best to spend the time and emotional energy I have every day wisely, or at least in the best way that I know how. Am I obligated to give something to someone simply because they want it, feel they deserve it, or even if it would be a objectively good thing to do? No, I am not. Do I feel guilty for being a limited and fallible being, what some might call “human”? Sometimes, I do. But I’m doing my best to fix that about myself.