Literate Programming

Meta

Table of Contents

GitHub Is Anarchy for Programmers

1 October 2011

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.

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.

What anarchists oppose

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.

What anarchists stand for

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.

How anarchy would work

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.

All abstractions are leaky

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.