# Developer Experience Working Group (draft)

Developer Experience Working Group is a team trying to make the Go programming language, libraries and tools more pleasant to use. The team primarily works on the Go project, even though its responsibilities and activities may involve contributing to the ecosystem-wide impactful projects. The group is aimed to cover a highly specialized field of expertise that is not always well-covered by the core team.

## Goals

* Making Go a preferred language in industry and education.
* Helping the language graduate to a mainstream language by enabling the early majority developers.
* Helping Go to succeed in organizations with opinionated infrastructure and tooling.

## People

TBD. We are still outreaching to individuals at this point. If you are interested to get involved, send an email to jbd@golang.org. 

## Channels
* Gophers Slack channel: [#devexp](https://gophers.slack.com/archives/devexp) ([invitation](https://invite.slack.golangbridge.org/))

## Responsibilities and Activities
* Identify the barriers for newcomers and remove them to make Go succeed as a mainstream programming language.
Revamp the existing docs and tools.
* Systematically collect feedback from the Go users to improve friction points in standard library, tools, docs, language and the ecosystem. The group may also run UX studies.
* Help identifying the critical missing libraries/tools from the ecosystem.
* At each release cycle, review new standard library APIs to give feedback about usability, self-explanation and documentation.
* Participate in user-facing Go proposals to give usability feedback.
* Encourage readable and idiomatic APIs. Be the voice of best practices in API design.
* Contribute with technical writing on the Go blog to fill the gaps in communication.

## Roles

The group has a variety of roles with specific responsibilities. Although it is not a hard requirement, all contributors are expected to have background and technical expertise in one or more of these fields: API design, developer tooling, readability, programming language design and education, and technical writing.

### Leads
We are expecting this role to require 15 hours of commitment each week.
* All responsibilities of the members
* Ensuring contributors are sufficiently productive and not blocked
* Reaching consensus if there is no obvious answer
* Organizing meetings and handling paperwork

### Members
We are expecting this role to require 10 hours of commitment each week.
* All responsibilities of the participants
* Doing the first CL and proposal reviews
* Setting high-level goals and establishing long-term milestones
* Mentor community about best practices

### Participants
Participants don't have to commit to any long-term plans, they work as much as they want on gradual improvements and contribute to the discussion.
* Creating CLs and proposals
* Participating in discussions
