# Go 2016 Survey Results
6 Mar 2017
Tags: survey, community
Summary: This post summarizes the result of our December 2016 user survey along with our commentary and insights. We are grateful to everyone who provided their feedback through the survey to help shape the future of Go.

Steve Francia, for the Go team
spf@golang.org

## Thank you

This post summarizes the result of our December 2016 user survey along with our commentary and insights.
We are grateful to everyone who provided their feedback through the survey to help shape the future of Go.

## Programming background

Of the 3,595 survey respondents, 89% said they program in Go at work or outside of work,
with 39% using Go both at home and at work, 27% using Go only at home, and 23% using Go only at work.

We asked about the areas in which people work.
63% said they work in web development, but only 9% listed web development alone.
In fact, 77% chose two or more areas, and 53% chose three or more.

We also asked about the kinds of programs people write in Go.
63% of respondents write command-line programs, 60% write API or RPC services, and 52% write web services.
Like in the previous question, most made multiple choices,
with 85% choosing two or more and 72% choosing three or more.

We asked about people’s expertise and preference among programming languages.
Unsurprisingly, Go ranked highest among respondents’ first choices in both expertise (26%) and preference (62%).
With Go excluded, the top five first choices for language expertise were
Python (18%), Java (17%), JavaScript (13%), C (11%), and PHP (8%);
and the top five first choices for language preference were
Python (22%), JavaScript (10%), C (9%), Java (9%), and Ruby (7%).
Go is clearly attracting many programmers from dynamic languages.

.html survey2016/background.html

## Go usage

Users are overwhelmingly happy with Go:
they agree that they would recommend Go to others by a ratio of 19:1,
that they’d prefer to use Go for their next project (14:1),
and that Go is working well for their teams (18:1).
Fewer users agree that Go is critical to their company’s success (2.5:1).

When asked what they like most about Go, users most commonly mentioned
Go’s simplicity, ease of use, concurrency features, and performance.
When asked what changes would most improve Go,
users most commonly mentioned generics, package versioning, and dependency management.
Other popular responses were GUIs, debugging, and error handling.

When asked about the biggest challenges to their own personal use of Go,
users mentioned many of the technical changes suggested in the previous question.
The most common themes in the non-technical challenges were convincing others to use Go
and communicating the value of Go to others, including management.
Another common theme was learning Go or helping others learn,
including finding documentation like getting-started walkthroughs,
tutorials, examples, and best practices.

Some representative common feedback, paraphrased for confidentiality:

.html survey2016/quotes.html

We appreciate the feedback given to identify these challenges faced by our users and community.
In 2017 we are focusing on addressing these issues and hope to make as many significant improvements as we can.
We welcome suggestions and contributions from the community in making these challenges into strengths for Go.

.html survey2016/usage.html

## Development and deployment

When asked which operating systems they develop Go on,
63% of respondents say they use Linux, 44% use MacOS, and 19% use Windows,
with multiple choices allowed and 49% of respondents developing on multiple systems.
The 51% of responses choosing a single system split into
29% on Linux, 17% on MacOS, 5% on Windows, and 0.2% on other systems.

Go deployment is roughly evenly split between privately managed servers and hosted cloud servers.

.html survey2016/dev.html

## Working Effectively

We asked how strongly people agreed or disagreed with various statements about Go.
Users most agreed that Go’s performance meets their needs (57:1 ratio agree versus disagree),
that they are able to quickly find answers to their questions (20:1),
and that they are able to effectively use Go’s concurrency features (14:1).
On the other hand, users least agreed that they are able to effectively
debug uses of Go’s concurrency features (2.7:1).

Users mostly agreed that they were able to quickly find libraries they need (7.5:1).
When asked what libraries are still missing, the most common request by far was a library for writing GUIs.
Another popular topic was requests around data processing, analytics, and numerical and scientific computing.

Of the 30% of users who suggested ways to improve Go’s documentation,
the most common suggestion by far was more examples.

The primary sources for Go news are the Go blog,
Reddit’s /r/golang and Twitter;
there may be some bias here since these are also how the survey was announced.

The primary sources for finding answers to Go questions are the Go web site,
Stack Overflow, and reading source code directly.

.html survey2016/effective.html

## The Go Project

55% of respondents expressed interest in contributing in some way to the Go community and projects.
Unfortunately, relatively few agreed that they felt welcome to do so (3.3:1)
and even fewer felt that the process was clear (1.3:1).
In 2017, we intend to work on improving the contribution process and to
continue to work to make all contributors feel welcome.

Respondents agree that they are confident in the leadership of the Go project (9:1),
but they agree much less that the project leadership understands their needs (2.6:1),
and they agree even less that they feel comfortable approaching project leadership with questions and feedback (2.2:1).
In fact, these were the only questions in the survey for which more than half of respondents
did not mark “somewhat agree”, “agree”, or “strongly agree” (many were neutral or did not answer).

We hope that the survey and this blog post convey to those of you
who are aren’t comfortable reaching out that the Go project leadership is listening.
Throughout 2017 we will be exploring new ways to engage with users to better understand their needs.

.html survey2016/project.html

## Community

At the end of the survey, we asked some demographic questions.
The country distribution of responses roughly matches the country distribution of site visits to golang.org,
but the responses under-represent some Asian countries.
In particular, India, China, and Japan each accounted for about 5% of the site visits to golang.org in 2016
but only 3%, 2%, and 1% of survey responses.

An important part of a community is making everyone feel welcome,
especially people from under-represented demographics.
We asked an optional question about identification across a few diversity groups.
37% of respondents left the question blank and 12% of respondents chose “I prefer not to answer”,
so we cannot make many broad conclusions from the data.
However, one comparison stands out: the 9% who identified as underrepresented agreed
with the statement “I feel welcome in the Go community” by a ratio of 7.5:1,
compared with 15:1 in the survey as a whole.
We aim to make the Go community even more welcoming.
We support and are encouraged by the efforts of organizations like GoBridge and Women Who Go.

The final question on the survey was just for fun: what’s your favorite Go keyword?
Perhaps unsurprisingly, the most popular response was `go`, followed by `defer`, `func`, `interface`, and `select`.

.html survey2016/community.html
