GitHub Is Anarchy for Programmers
I finally got to see Zach Holman give his talk, How GitHub Uses GitHub to Build GitHub. It was awesome. Zach is a great speaker, and the slides don't do it justice. I highly recommend catching it on video or in person sometime.
Anyway, there's something that I found really interesting about GitHub's 'process': it's basically anarchism, applied to software development.
If you're not familliar with anarchism, check out "What I believe in". It's a pretty decent introduction to a complicated topic. Ultimately, anarchism is fairly simple, but it requires dismantling a lot of beliefs that Americans in particular hold about society, power, and control. We're quite happy in this country to be slaves to the rich, but that's another blog post. ;)
Another excellent post on that blog is "A Digression On What It Means to Be An Anarchist. I'm going to use it as a framework to point out my comparison to GitHub. The first sentence is stolen from TFA, but the second sentence is my GitHub comparison.
Hierarchy – anarchists oppose domination of one person or group of people by another as detrimental to human society. GitHub has built a very flat process, where "some days the CEO ships more code than I do."
Authority – all forms of authority must bear a heavy burden of proof in order to demonstrate their legitimacy and necessity. GitHub has hired people that have built awesome things, and have shown themselves to be a trusted authority in whatever kind of software that they build. Nobody needs to question if anyone is in the position to deploy or review some code.
The state – centralised rule of a set geographical area (country) or people (nation) by a government of elites is inherently illegitimate. Okay, this has nothing to do with GitHub all together. All abstractions are leaky here. :) The same goes for Capitalism and State Socialism too.
Nationalism and fascism – these are but the worst forms of the state, gaining the loyalty of the people with strong, often brutal discipline and by developing an almost religious, fevered love of the state and the rulers in the form of patriotism. GitHub actively uses multiple programming languages in production, and while it came out of the Ruby world, they don't really run around pitching "Ruby is awesome and the only thing you should ever use."
Discrimination – nobody should be excluded or discriminated against based on nothing more than their gender, ethnicity, sexuality, background, or beliefs. I don't know everyone at GitHub, but it's a pretty diverse crew overall. This is hard for any tech company, but they're doing pretty well on the race/sex thing.
Liberty – all people should be free to live their life as they see fit, without rules and laws passed from above that serve no purpose other than control and domination, as long as they are not infringing the right of anybody else to the same. See Homan's talk. That's pretty much how they work.
Equality – as stated above, nobody should face discrimination because of their gender, ethnicity, sexuality, background, or beliefs. See above comment about GitHub's varied devs.
Community – human civilisation evolved, from its primitive roots, through the priciple of Mutual Aid. GitHub has a lot of elements of mutal aid in their process, where they mention some people in some pull requests, work together on features, and generally high five until the code is running in production.
Solidarity – humanity is divided only between the rulers and the ruled. Other divisions, those which bring about sexism, racism, heterosexism, and other bigotries, are promoted by the ruling class in order to divide their subjects and keep them under control. GitHub holds tons of events, buys everyone lots of beer, and just generally encourages lots of friendly interactions between everyone. CodeConf was a great group of diverse people hanging out and having a good time.
Self-management – groups, such as workforces or local communities, would be free to operate and govern themselves free of any higher authority. GitHub has no deadlines, no prioritization meetings, and 100% "do what you want" time.
Free association – all individuals would be free to live where they wanted and associate with who they chose. Zach mentioned in his talk that different people work on different parts of the site, and it's really based on what people are interested in and what they've done in the past.
Voluntary federation – instead of the state, where indivudal communities and groups of people are bound together by the coercive force of a central authority, local communities and workers collectives can choose for themselves which other communities or collectives to associate with. Sort of like the free association comment, people get together and work on what they want to, and these groups are organic.
Direct democracy – unlike in parliamentary democracy, these spokespeople would be just that, elected not to a position of authority but to voice decisions that remain in the hands of the people, as in trade union and workers council structures. Anybody can comment on a pull request, add some commits, put in their two cents, and be heard.
Mutual Aid – in participatory communities and workers collectives, Mutual Aid is a central principle. Easily summed up with the phrase “from each according to his ability, to each according to his need,” this boils down to voluntary cooperation, fair distribution of resources, and help and support to those who need it within a local community. As mentioned before, everybody helps each other out at GitHub to get things done.
Free, fair trade – for the sharing of resources between different communities and individuals who opt out of Mutual Aid, anarchy would see the emergence of a truly free market. This doesn't really fit with software, I think. Same with 'individual liberty.'
Collective defence – this is not to say that anarchist society will contain “perfect people,” and there will certainly be acts of aggression, oppression, and violence – albeit on a lesser scale than is commonplace in today’s world. I'd liken this to things like "the site is down." Everyone at GitHub cares about GitHub being up, and so they don't need someone who's responsible for 'defense,' as if shit hits the fan, everyone chips in and takes care of it.
Justice, not vengeance – courts would be elected for each individual case, rather than appointed and given unnecessary authority, with the aim to establish guilt or innocence, negotiate reparations, and organise rehabilitation rather than to support the oppressive prison systems which only make matters worse by serving as little more than universities of crime. I'm not sure this fits well here.
Just like when 'lean' was a concept that applied manufacturing techniques to software development, I don't think that 'anarchism' is a 100% fit with GitHub's process. I do think that it's close enough to hold a lot of value, however, even to the point that Zach had to write a blog post about scaling, which is something that always gets leveled at people talking about anarchism. I see GitHub in the same way that I see anarchist Catalonia or the Free Territory in the Ukraine. It's a place where ideals are actually working in practice. Let's just hope that the communists don't betray them when the fascists show up.
Damn leaky abstractions.