# Updating the Go Code of Conduct
23 May 2018
Tags: conduct
Summary: Revising the Go Code of Conduct.

Steve Francia

##

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 [we changed the group’s role](https://golang.org/cl/37014)
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 [code of conduct template](https://opensource.google.com/docs/releasing/template/CODE_OF_CONDUCT/).

Today the Go project is adopting this new code of conduct,
and we’ve updated [golang.org/conduct](https://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, [the new code of conduct makes clear](https://golang.org/conduct/#scope) 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,
[the new code of conduct introduces a single Project Steward](https://golang.org/conduct/#reporting)
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 [Cassandra Salisbury](https://twitter.com/cassandraoid).
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.
