# Participate in the 2016 Go User Survey and Company Questionnaire
13 Dec 2016
Tags: survey, community
Summary: Please take the 2016 Go User Survey and Company Questionnaire. We want to hear from you!

Steve Francia
spf@golang.org

## The Go project wants to hear from you!

The Go project wants to hear from you!  Our goal is to create the best language
for developing simple, reliable, scalable software.  We are asking you to help
by participating in a survey and if applicable, a company questionnaire.

## The Go User Survey

**Who:** If you use Go, have ever used Go, have ever stopped using Go, or have
any interest in the language, please help by sharing your feedback to improve
Go for you and your fellow Gophers.

**Where:** Please take this 20-minute survey by December 22nd: [Go User Survey 2016](https://goo.gl/NJgrHT)

The survey is anonymous and confidential.

**Why:** The Go project leadership depends on your feedback to guide the future
of the Go project. Your responses will help to understand how we are doing and
help plan improvements for the Go language, libraries, and tools.

After the survey closes, we will publish the anonymous aggregate results to the Go blog.

## The Go Company Questionnaire

**Who:** If you are in a position to share details like “company name”, “if your
company is hiring Go developers”, and “reasons your team or company adopted Go”
then please help us by taking this questionnaire. We only need one response per
company (or department for larger companies).

**Where:** Please take this 5-minute questionnaire by December 22nd: [Go Company Questionnaire 2016](https://goo.gl/Epya2q)

The questionnaire is confidential, but not anonymous.

**Why:** The Go project would like to better understand the companies using Go.

After the questionnaire closes the Go project leadership will use this
information to better understand how companies are utilizing Go and in what
ways the project can improve their experience. If you participate we may reach
out for further information.

## Spread the word!

Please help us spread the word by sharing this post on your social network
feeds, at meetups, around your office and in other communities.

The survey & questionnaire close by December 22nd so please share today.
