Updating the Go Code of Conduct
23 May 2018
Tags: conduct

Steve Francia

* Introduction

In November 2015, we introduced the Go Code of Conduct.
It was developed in a collaboration between
the Go team members at Google and the Go community.
I was fortunate to be one of the community members
invited to participate in both drafting and then enforcing
the Go Code of Conduct.
Since then, we have learned two lessons about 
limitations in our code of conduct that restricted us from 
being able to cultivate the safe culture
essential to Go’s success. 

The first lesson we learned is that toxic behaviors by
project participants in non-project spaces can have a 
negative impact on the project affecting the security and safety of
community members. There were a few reported
incidents where actions took place outside of project spaces
but the impact was felt inside our community. The specific 
language in our code of conduct restricted our ability to 
respond only to actions happening “in the official 
forums operated by the Go project”. We needed a way 
to protect our community members wherever they are. 

The second lesson we learned is that the demands required 
to enforce the code
of conduct place too heavy of a burden on volunteers. 
The initial version of the code of conduct presented the 
working group as disciplinarians. It was soon clear 
that this was too much, so in early 2017 [[https://golang.org/cl/37014][we changed the group’s role]]
to that of advisors and mediators.
Still, working group community members
reported feeling overwhelmed, untrained, and vulnerable.
This well-intentioned shift left us without an enforcement mechanism
without solving the issue with overburdened volunteers.

In mid-2017, I represented the Go project in a meeting with 
Google’s Open Source Programs Office and Open Source Strategy Team 
to address the shortcomings in our respective
codes of conduct, particularly in their enforcement.
It quickly became clear that our problems had a lot in common,
and that working together on a single code of conduct for all
of Google’s open source projects made sense. 
We started with the text from the  
Contributor Covenant Code of Conduct v1.4
and then made changes, influenced by
our experiences in Go community and our collective experiences in open source.
This resulted in the Google [[https://opensource.google.com/docs/releasing/template/CODE_OF_CONDUCT/][code of conduct template]].

Today the Go project is adopting this new code of conduct,
and we’ve updated [[https://golang.org/conduct][golang.org/conduct]].
This revised code of conduct retains much of the intent, structure and 
language of the original Go code of conduct while making two critical 
changes that address the shortcomings identified above. 

First, [[https://golang.org/conduct/#scope][the new code of conduct makes clear]] that people who
participate in any kind of harassment or inappropriate behavior,
even outside our project spaces, are not welcome in our project spaces. 
This means that the Code of Conduct applies outside 
the project spaces when there is a reasonable belief that 
an individual’s behavior may have a negative
impact on the project or its community.

Second, in the place of the working group,
[[https://golang.org/conduct/#reporting][the new code of conduct introduces a single Project Steward]] 
who will have explicit training and support for this role.
The Project Steward will receive reported violations
and then work with a committee,
consisting of representatives from the Open Source Programs Office
and the Google Open Source Strategy team,
to find a resolution. 

Our first Project Steward will be [[https://twitter.com/cassandraoid][Cassandra Salisbury]].
She is well known to the Go community as a member of Go Bridge,
an organizer of many Go meetups and conferences,
and as a lead of the Go community outreach working group.
Cassandra now works on the Go team at Google
with a focus on advocating for and supporting the Go community.

We are grateful to everyone who served on the original Code of 
Conduct Working Group. Your efforts were essential in creating an 
inclusive and safe community.

We believe the code of conduct has contributed to the
Go project becoming more welcoming now than it was in 2015,
and we should all be proud of that.

We hope that the new code of conduct will help protect our community
members even more effectively.
