2010-07-02

The two types of people who cause the biggest grief in open source

[fixed a grammatical error, clarify that a complainer can make a token suggestion for a solution]

When you have participated heavily in open source for a while and get really deep into it, you begin to notice personalty stereotypes. There are certain types of people who regularly show up to "participate" and usually you can spot the type of person quickly and know how helpful they can be. But there are two personality types which crop up regularly which do nothing but cause grief for those of us who are trying to contribute to open source constructively. And in the past month I have seen stellar examples of both types.

The first type is the "complainer". This is someone who finds something they don't like, points out that the thing they don't like is suboptimal, but then offers no solutions. Now this type of person ranges from someone who is actively complaining to those that think they are being helpful by simply pointing out the fact that something is obviously subpar. Luckily people who fall under this labelling fall toward the latter end of the spectrum; they mean well and think that pointing out something is not perfect is helpful.

I'm hear to tell you that pointing out that something is sub-optimal without presenting a reasonable solution is not helpful. Chances are that it is already known by the right people that something is subpar but that a solution has not presented itself. Having someone come in and tell you something you already know is not helpful. But when it gets brought up regularly it becomes really grating. This is especially true when someone feels rather passionate about wanting the problem solved, but cannot somehow constructively contribute to solving it. Even if it is just a token solution, anything is better than nothing and gives the person a chance to actually think about what is bothering them.

The problem is that this is open source, where everyone is a volunteer. Since people are not getting paid to solve these issues, you cannot simply "yell" at someone until there is a solution. Volunteers have limited time and so have to choose what they put their efforts towards solving. While you might view your issue as critical, if it has not been solved yet it probably isn't or is extremely hard to fix. In open source, the squeaky wheel doesn't get oil but instead gets removed, taken out back, and gagged so that they shut the hell up.

Python-specific examples of this is people wanting to drop the GIL. You hear people constantly going on about how Python is suffering because truly parallel execution is not possible with threads (I am ignoring the fact that few people write CPU-intensive code requiring true threading support, that there is the multiprocessing library, true power users have extension  modules which do operate with full threading, and that there are multiple VMs out there with a solution that have other concurrency solutions). But very rarely do we hear people try to present reasonable solutions. "Stop using reference counting!" is not exactly constructive criticism as all you are doing is restating the problem as its own solution; obviously if you remove a problem it is not a problem, but that doesn't tell us how to remove the problem itself. Now if you have an approach to remove the GIL, that's different as that's trying to present an actual solution to a problem we have no solution for. Obviously most solutions are going to be shot down as too complicated to implement in CPython, but that's part of discussing things to try and reach a solution. The key point is that presenting solutions is important to be helpful, otherwise it just sounds like you are saying "you have a problem, you have failed to solve it, and I just wanted to point that out to make you feel incompetent and unappreciated". And in case you didn't know, making a bunch of volunteers feel unappreciated is not exactly a great motivator to keep volunteering.

The second type of personality that does not help is the "what about this?" person. This is someone who, upon finding out about a decision that they think was sub-optimal, decides to bring up new ideas and solutions. The person is obviously trying to be helpful by bringing up new ideas and solutions, thinking that the current one is simply going to flop and they need to stop people from making a big mistake.

The thing is, this person is not helping. If something was discussed and decided upon before they either showed up or decided to participate, they need to realize that a lot of time and effort most likely was already spent on the solution chosen. Having this person bring forth new ideas and try to have them discussed does not help but instead simply delays the solution already agreed upon from being implemented. There was most likely already huge debates and lots of compromises made before they showed up, meaning that their new ideas are already at a severe disadvantage as they were not hashed out like the one being implemented. They also typically do not read enough background info to be able to properly support their new idea against all of the discussion that originally took place to reach the current solution. This is like coming up with a solution to your squeaking wheel which took you days to come up with and will take a day to implement, but 12 hours into your solution someone telling you that your solution isn't going to work and they should try their approach even though yours has not been shown to not work nor that theirs is necessarily better.

An example of this kind of person is someone who says that we should kill off Python 3 and instead continue to evolve the Python 2.x series until it becomes what Python 3 is today. Obviously this person means well and does not want to see Python fail because they believe Python 3 will be a flop and they do not want to see Python's growth stop. But this person was obviously not around when all of this was discussed and the decision was made to move forward with Python 3. Nor are they giving Python 3 a fair shake; from the beginning python-dev has publicly stated that the transition would take along the lines of 5 or so years before we could declare it a success, and we only just hit the midway point! Trying to stop something like this midway through is really hard to do and so you better have some really good evidence to prove that something like Python 3 needs to be stopped part way through its multi-year implementation, especially when uptake currently looks very good. Otherwise this type of person comes off as saying "I know you have a solution in place that you are already working towards implementing, but you're wrong and I'm right and here is how you should solve the problem even though you have not been given the proper chance to prove your solution works and I did not participate in the initial decision-making process and thus understand the entire history of the decision."

But the worst thing that both of these types of people like to use push communication. When someone vents on a blog post or something, that's fine by me. I can choose to ignore a blog without much issue since reading Web pages is an act of me pulling the information to consume it (this is why I don't read reddit comments unless someone forwards them to me). But something like a mailing list, that's a push medium. If someone chooses to email python-dev I can't avoid their email; as a heavily involved core developer I am almost obligated to read every piece of text that comes through. This is especially true when someone's email is buried deep within a conversation. It's when these personality types use email that I truly get frustrated and pissed off as I can't avoid them and how they are indirectly insulting me and my fellow developers.

I have a finite amount of time to volunteer in helping make Python what it is. Having people push upon me that they either think I am failing because I can't find a solution to a problem (the "complainers") or that the solution that I help create is not good even though it has not been implemented
and proven to be a failure (the "what about this?" folks) just sucks away that much more time, preventing me from helping make Python better for YOU. It gets to the point that I sometimes wonder why I put in so much time and effort when so many people gripe about the volunteer work that I put in to produce this thing that is given to the world for free. I do not put in my blood (I have carpal tunnel under control, but coding as a hobby is not exactly helping keep it under control), sweat (the number of hours over the past seven years is immeasurable), and tears (I have been personally attacked so badly that I have become visibly upset from it) just so I can have people not appreciate me or my fellow developers.

So please, do be aware when you say things how it can feel to the other people and how constructive it will ultimately be. You literally could be the one email that finally pushes someone to no longer participate in Python's development, hindering the one thing you are trying to help (and I am not kidding about any of this; I know plenty of people personally who just walked away from Python because they couldn't put up with these kinds of people anymore and simply wanted to lead happier lives).

[comments are off on this post as this just feels like it could bring out the trolls; if you care you can comment on Buzz or Twitter about this post]