Your idea sucks

I thought I had arrived. One of my open-source projects started gaining a small following on GitHub. No more nagging self-doubt, the thousand or so star-gazers of my project provided all the validation I needed. Here was something I could conjure up in moments of doubt, reminding myself that I truly was all those things I wanted to believe about myself.

* * *

All this got turned on it's head by one of those very people whose opinion I set so much store by. I'm thinking in particular of one person who was using my project to manage the backend data-storage for his company's platform. It was a critical function, and as the CTO of his organization, he was responsible for ensuring it was technically sound. He was very invested, professionally, in the direction of my project. This was a sharp contrast to most people I'd talked to, who were using my project for side-projects and hobbies of their own.

The combination of his expectations of me, as a maintainer, and my beliefs about my own motivations for sharing my code led to a pretty unbelievable series of events that I'll describe in a moment.

Your idea sucks

I hate feature requests. I either need to rationally explain the flaws in the request, explain how to accomplish their goal using the existing APIs, or do the work of implementing their ask (if I'm being conscientious). No matter what, feature requests require work.

Most times when I'm turning down a request, as long as I provide a short explanation that's the end of it. I got so used to this dynamic that when someone came along who challenged my explanations, the shit hit the fan.

Back to the guy I mentioned earlier. Early on, he submitted two patches -- one which removed quotes from SQL table aliases, and another which changed the scheme I used for generating table aliases. Both patches were problematic. The first would have necessitated maintaining a list of all SQL keywords and checking whether an alias coincided with a keyword and only quoting in that case. The second was strictly cosmetic, affecting the SQL being sent to the database (never seen by the user, and intentionally abstracted away by the library). I explained the issues, as I saw them, with the patches and closed them.

The next bug report I got from him was no better. In this case, he was attempting to join on the same table twice. I explained that to reference the same table twice, he would need to use a particular API. I got pissed.

A couple days later there was a new development on a different ticket. In this particular instance, he felt that a certain API should behave differently. I pointed him to the documentation that clearly stated how the API behaved. He responded with this (emphasis is his):

just because the quirkiness of the API is documented doesn't mean there isn't room for improvement. and i've seen no documentation/description on why you like this this design decision over other alternatives.

Our relationship entered a new phase, in which my design decisions were not only challenged (or flat-out called incorrect), but one in which it was my responsibility to defend those decisions. I didn't handle this gracefully.

This phase was all about expectations. What he felt he was owed versus what I felt was a sufficient dismissal. I felt indignant, morally outraged, and let him know, and then we entered the final, and most destructive phase.

Issue closed with extreme prejudice

I stopped responding to his tickets. Sometimes I'd delete them (or, when I couldn't, I hit "edit" and removed all the text). Sometimes I would act indignant and ask him who he thought he was, coming on the ticket tracker and demanding that I defend the aspects of my library he disagreed with. Eventually I banned him from the project.

At some point, he went to the WikiPedia page for the project, and added a new heading entitled Controversy, which said that I maliciously banned users from projects and refused to enter into discussions of technical issues. He also launched a Twitter/HackerNews/Reddit/WikiPedia shaming campaign to disparage me and the project. It was fucking crazy. I ended up begging the WikiPedia staff to remove the page for my project. Did I mention it was fucking crazy?

I'm bullying my own users and deserve to be embarrassed. For sharing something I work very hard on. What the fuck, I thought to myself. I mean, seriously!

Who's the bully?

He felt absolutely convinced that I was the bully. The project and it's issue tracker, once released onto GitHub, were fair game for any and all discussion. When I removed some of his comments, I was infringing on his freedom of speech, essentially. I was also revealing my true colors: I was a petty tyrant of a tiny kingdom of code and by warning others of this, he was performing a noble act.

My opinion was, of course, the opposite. I had written the code, and in the interests of helping others and improving the library, had open-sourced it. The fact that it was on GitHub did not give the project any special status, in my mind, rather it was a convenient platform for hosting the code, issue tracker, and code-review. In the end, the project was mine. It was licensed in such a way that it could be used or modified in any way, so there was nothing stopping him from taking the code and re-packaging it according to his tastes (which is exactly what he eventually did).

The answer, of course, is that both of us could have handled things more courteously. For him, I'm sure it was frustrating to feel that the issues he took the time to describe in his tickets were getting dismissed without ample discussion. For me, it was frustrating to be confronted by such an entitled attitude -- and I only say entitled because, to my thinking at the time, the library was something I ultimately owned.

Cui bono

Another way of looking at the situation is to ask who benefits from a project being open-sourced. Ideally open-source is mutually beneficial for both the end-users and the maintainer. The end-users (of which the maintainer is also one) get a continually improving product and the maintainer additionally gets a nice bullet point on the resume (or the warm feeling of external validation). Was I doing this for all the wrong reasons, I started to wonder?

I liked to tell myself that I was acting in the spirit of Ben Franklin, who wrote:

As we enjoy great advantages from the inventions of others, we should be glad of an opportunity to serve others by an invention of ours, and this we should do freely and generously.

But were my intentions really as pure as all that? Hell no. As I described earlier, this project had become a proxy; a way for me to understand myself as a developer, and from there, as a person. It was, after all, a hobby project. A creative expression. A thing with form that somehow had something to say about who I am as a person, what I value, what I consider good.

And here came a guy who wanted me to defend the things he disliked or found quirky. In the end, I think he was more right than I wanted to admit at the time. He expected a discussion of his ideas on their own merit, and as the project was not clearly identified as being my hobby, he wasn't wrong in asking for a seat at the table as an equal. This is not what he got, though, and I regret not having seen the situation more clearly at the time.

I'm sure something like this would have happened sooner if another person, heavily invested in the project but with their own ideas about how things should be done, had come around and started making changes.

The whole situation made me more aware of my own motivations for doing open-source work, and made me keenly aware of the importance of finding a balance between respecting the trust your user's have placed in you as a maintainer (based on whatever claims you're making about your library), and not compromising, for lack of a better expression, the conceptual integrity of the project when they ask for changes.

This experience also highlights that ownership can be problematic in open-source. When a project is open-sourced, can it no longer be said that it still belongs to its creator? Has it taken on a life of its own, one which must be protected by users like the one I encountered, even if that means cutting it off from it's creator? Or isn't that the whole reason we have permissive licensing and fork buttons in the first place?

Commenting has been closed, but please feel free to contact me