Disclaimer

In this blog post, I’m going to talk about very unpleasant interaction with a quite famous developer and also maintainer of several very used tools in the Python community. Please note that I’m not writing this to judge the person. Maybe he’s a really nice person AFK. Maybe he just really had a bad week. I don’t know. But I still want to talk about the behavior and the culture that endures in the free/open-source community.

The events

I’ve been a full-time professional developer for the last past 10 years now. During this period I have regularly found myself needing a feature a tool that I used didn’t seem to provide. In this situation, I do what every developer does: I search for the tracker, open an issue, stating as precisely as I can what I need and, if I have the skills and time, propose to develop it. Most often, this goes well. I get a neutral or even nice reply and everyone progresses.

For instance, I can’t thank the Mixxx community enough as they’ve been very patient and accomodating with my PRs full of C++ mistaktes and my silly questions.

But every now and then I get an interaction that goes like this:

Capture of an unpleasant interaction between me and a maintainer on Github. Explained below

This time, I was looking for a pre-commit1 hook that would allow me to check that files being added to git matched a certain naming scheme. This didn’t feel like an exotic feature to request so I searched for an existing check. It’s entirely possible that I didn’t search using the right terms. Still, I didn’t find what I was looking for. So I did what I always do: I opened a feature request on the ticket tracker of the projet, saying that, unless I’m wrong, that feature didn’t seem to exist and that I would gladly develop it for them.

And I got met with that reply:

you are wrong – there’s both duplicates and an entire pre-commit feature dedicated to this!

Issue closed.

Well… That was uselessly harsh. But I keep my cool. I’m acting on behalf of client here, so I do my best to stay professional2. If the feature exists, then where is it documented? From now on, there will be some back and forth between me and that person. Me trying in good faith to get to know where the documentation exists and him replying me with passive-aggressive questions about my research for this feature. After a few exchanges like this, that maintainer eventually replies to me:

I am not a glorified search engine and if you put in a little effort I think you’ll find there are lots of answers

Locks the issue as “too heated” and bans me from interacting with the pre-commit organisation entirely. The full exchange is available here.

To be fully transparent, before the conversation was locked, I posted a final reply that sounded like “thank you for illustrating how not to welcome new contributors”, that I deleted immediately after because it was aggressive and didn’t bring anything to the conversation.

I opened that issue at 09:00 CEST and got the final reply before topic lock at 18:00 CEST. The guy, literally spent 9 hours not answering my questions and instead patronizing me and lecturing me on how to use search engines. In each of his interactions, he heavily implied that I was wasting his time, but still took the trouble to reply to each of my posts without answering my questions, and that, for 9 hours. It was my very first contribution to pre-commit, my very first interaction with the guy, and I got banned from contributing to one of the most widely used tools in the Python community, and my issue locked as too heated when the only aggressive in the room… was him!

Why does it matter?

Now, after 10 years doing this job and fair amount of contributions to free/open-source projects, I have developped a fairly thick skin. and I’ve walked into that kind of unpleasant interactions before.

But even with that, I could not help to have a moment of doubt and guilt. Was it me? Could I have been aggressive without realizing it? Was really the answer to my question that obvious?

No. The answer is no. Again: I’m not pretending that the answer to my request doesn’t exists. Maybe it does somewhere. Maybe I don’t know search-fu the way I though. After all, english is a language I have started to learn at 13. Maybe I could have worded my query in a way that the search engines would have found me an acceptable answer. Thing is, if it exist, the answer is buried enough that I could find it in good faith.

All the time during my conversation with the maintainer, I tried to stay calm and get a simple answer: if it’s documented, where is it? Because, with all honesty, I couldn’t find it. And if the feature didn’t exist, I proposed to develop it from the get go. I really don’t know how I could have been less of a burden other that not opening this issue from the start.

And the response I got from the maintainer is just plain and simple RTFM3. Fancier. With a bit more words and a simulacrum of polite tone. But still RTFM.

If even I, an experienced developer, who has met that kind of aweful behavior before, could,’t help but doubting about my own skills… imagine how someone who isn’t a professional, who doesn’t feel legitimate and for whom this is one of their very first contributions, might feel!?

What do you know about the person on the other side of the screen eventually!?

I have been in situation of welcoming new contributors before. Whether at work, or other projects. And I’ve always tried to keep a calm and welcoming attitude, assuming good faith from the other person, even though when I found a question silly.

I do this because ultimately, I know that what I assume about the other person is almost always bound to be wrong. Maybe they’re young and they don’t know the social codes yet. Maybe they live with depression, they’re trying very hard to get into something they could like to get some light in their day. Maybe they have a mental handicap. How would you know?

You’re loosing precious contributors, mate…

In the end, I’m not to be pitied here. As I said, I am an experienced developer and I have been in that kind of unpleasant interactions before. I’ll get over it. But what about all those people who will quit coding entirely just because you met them with “RTMF”? How can you assert those people wouldn’t have become major contributors of the free/open-source community, hadn’t you act like an ass?

You can’t. And it’s sad. Because in the process, you probably hurt and lost valuable people. So, please. Don’t be an ass. Don’t spend 9h responding RTFM. If you know the answer can be found in 5 minutes, just post that damn answer. And who knows? Maybe you are the person who are failing here. Maybe you didn’t correctly understand the request?

You could learn something in the process…

  1. For those not aquinted with pre-commit, this is a tool written in Python that allows to automatically perform sanity check on your code before commit a change to git. 

  2. To be honest, I’m not always able to stay professional myself. Sometimes, I, too, lose my temper. That’s why I don’t want to judge that maintainer. Again, maybe he had a bad day. That being said, we need to learn from our mistakes and that’s why I write this article. 

  3. Short for “Read The Fucking Manual”.