About a year after I started using and contributing to node.js the project moved its GitHub repo from Ryan’s personal account to Joyent’s account. This was done unceremoniously; it was a small semantic change. It had already been announced that the copyright had been transferred to Joyent and that they would be taking a larger role in fostering the project, this was a small item on a large checklist of logistics, nothing more.
I didn’t think much of it. The old GitHub page forwarded to the new page (something they had to work out with GitHub because at the time project renames weren’t publicly supported yet). I didn’t give it another thought until a few days later.
git pull ry master failed. It took me a moment to realize why and I added the new Joyent repo.
git pull joyent master worked as expected. I ran the command again and it just didn’t feel right. Something about it was far less comforting. I did the only sensible thing, I removed both remotes and re-added a
ry remote that was pointed at Joyent’s new repo. That comforting feeling returned and my remote is still named this way. I couldn’t explain why I felt this way and it started me on a line of questioning that I have yet to fully resolve.
I’ve been added, without really asking to be, to 5 or 6 different GitHub organizations. A few of them are companies which consider me an advisor and the rest are actually open source projects that created an organization. In my time as a member of these organizations I have contributed exactly zero patches to any of the projects contained within them, the vast majority of which are not closed but public open source projects. In that time, I’ve contributed to all kinds of other libraries, run by single individuals; I even contributed to projects run by one of the creators of the organizations I’m ignoring.
I can’t help but feel differently about the projects under an organization than those under individuals. I can’t claim that they are exclusionary because I was specifically included in them, if anything I should feel included and more likely to contribute, but I don’t. And it’s not lack of interest, some of the projects are worth watching and I might even consider using. And there is nothing different, at least technically, about these projects being under an organization or under an individual, they’d still have most of the same core set of contributors and in all these cases I personally know the majority of the people involved.
I don’t think I’m alone. For smaller projects the number of contributions from people outside the organization are minimal. The issue to pull request ratio is also much higher; people report problems and ask for features they could easily fix or add but choose not to go through the extra effort of doing so, leaving it to the organization to complete.
When you’re part of a community you know the people in it. You might not know everyone, but you at least know a few people. You get to know them personally, they come over to your house for dinner, they’ve met your wife or your kids or your brother or someone you grew up with that has nothing to do with programming. More than half my side of my wedding was close friends I’ve made in open source.
From the outside looking in, for the few people that live in a basement in a suburb of Ohio and write open source for fun, this personalization of community seems exclusionary. It appears as though we’re creating an in crowd and excluding people who aren’t our friends. This misses, entirely, how communities form and what they are made of. Personal connections are the basis of community, it’s what allows us to be so productive when collaborating with each other and it’s what makes all of this fun and exciting. Read personal and “personable” or “person-to-person”. I may have met Isaac and Paolo and Ryan and Marco because of a shared interest but I don’t invite people to my bachelor party because they are good programmers, I invite them because we have a more human connection with each other.
When I see a patch from Nuno I want to see his face on it, not the face of Expense.cat. When I send a patch, I’ll only send it to Nuno’s face, not Expense.cat. If I’m an advisor for Expense.cat and I still feel this way, imagine how outside contributors must feel.
We love organization, we tend to think of it as universally positive, that the alternative is to have things be a mess. The more tidy, the less personal, the more a project is identified as a “group” or “collection” rather than one dude the more comforting we tend to think it’ll be to others. This turns out to be entirely untrue. In the earliest stages of a project and for projects below a certain size it’s even detrimental. Creating an entity, even if the entire purpose and message of the entity is of community, will make it faceless, inhuman, and act as a barrier to human connections with those in the project.
I was not the only silent protester holding on to my
git pull ry master. Completely independently, most of the other contributors to core did the same thing. Even now, with Isaac taking over as gatekeeper and Ryan stepping away it remains in our repos. In our minds, Ryan will always be the face of the project, no matter how far away from the project he might be. It’s something we hold on to because we can’t think of this as an organization, we think it as a community, as a collection of human connections we all cherish with Ryan at the head of the table even if Isaac is making dinner.
Some companies are figuring this out. Yahoo! recently put YSlow on GitHub under the maintainer’s account rather than Yahoo’s account. Unfortunately, many open source developers and groups haven’t picked up on it yet. There is a tendency once a project gets to a certain size, or even before that in anticipation of growth, to add organizational infrastructure. Solving problems before they exist is generally a bad practice in creating community, you are more often than not creating barriers to entry. But I struggle to find a case where any project has gained favor from presenting itself as an organization rather than individuals.
We want a face, a real human face, that we can have a beer with. We aren’t a collection of corporations with contracts between us that govern our behaviors and interactions, we are a collection of individuals that interact via implicit social contract. This makes us much more forgiving and makes our motivations intrinsic (for fun) rather than extrinsic (paid or coerced). Once you create a non-human entity that governs the project or contributions you lose intrinsic motivation. Even if you aren’t paying anyone to contribute, even if everyone in the organization is still there because they love it and want to have fun, the view from the outside is that a wall exists between using and contributing to the project. This is how you end up with hundreds of issues from outside that organization and very few pull requests.
People feel like contributing to a project from outside the organization is a one way street. They feel like they aren’t really a part of it the same way others are, that there will be barriers to getting their contributions in that others in the organization will not face. Where would their intrinsic motivation come from if they don’t feel like a part of this project?
Organizations are the face of facelessness. An external representation of a process and lines of code detached from the humans running and contributing to them.
If you see an icon for a building you don’t think it represents the people inside it. It represents the facade and the process (management) of the space itself. It’s not human, it doesn’t inspire charity, it’s something you would never give the benefit of the doubt, you’d never give them time or money without a contract and lawyer.
Let’s shed what we don’t need, drop the facades and infrastructure, and strip our projects back down to what they are; piles of code with eager geeks plugging away at making them better, geeks that you can meet and grab some food and a drink with.