# Go 2016 Survey Results
6 Mar 2017
Tags: survey, community
Summary: What we learned from the December 2017 Go User Survey.

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
