# Introducing the Developer Experience Working Group
10 Apr 2017
Summary: Over the last several years, Go's audience has shifted from early adopters to mainstream users. Today, our users come from a wide variety of backgrounds, experiences, and expectations. The needs of users are growing faster than the Go project can currently address them. To streamline the experience for first-time Go users, we've created the Developer eXperience Working Group (DXWG).

The Developer Experience Working Group

##

Over the last several years, Go's audience has shifted from early
adopters to mainstream users. Today, our users come from a wide
variety of backgrounds, experiences, and expectations. The needs
of users are growing faster than the Go project can currently address
them. To streamline the experience for first-time Go users,
we've created the Developer eXperience Working Group (DXWG).

For the next three months, this group will work together on delivering:

  - improvements to the Go installation experience
  - better guidelines to help new users
  - guides on tooling and developer environments (editors and IDEs)
  - running user studies to systematically analyze and measure friction points
  - improvements to the [Go Tour](https://tour.golang.org/) and [Go Playground](https://play.golang.org/)

A secondary goal of the working group is to better understand how to
involve the Go community in charting Go’s future. We hope that working
groups – Go team members working alongside community members – will
help Go scale its leadership and address user needs.  We’ll learn
from this experience and iterate.

The initial members of the working group are:
Carmen Andoh, Chris Broadfoot, Francesc Campoy, Jaana Burcu Dogan,
Steve Francia, Jess Frazelle, Bill Kennedy, Katrina Owen, Natalie
Pistunovich, Mat Ryer, Dmitri Shuralyov.

We are looking for additional people to help with contributing
code, writing documentation, sharing feedback and experiences
(user stories), reviewing contributions, and more. If you are
interested in any of our current areas of focus, please subscribe to the
[golang-devexp](https://groups.google.com/forum/#!forum/golang-devexp)
mailing list.
