# Participate in the 2018 Go Company Questionnaire
4 Oct 2018
Tags: survey, community
Summary: Please take the 2018 Go Company Questionnaire.

Ran Tao, Steve Francia
spf@golang.org

## The Go project wants to hear from you!

We need your help to create the best programming language for developing
simple, reliable, and scalable software. To do this, we need to better
understand how companies are using Go. Please help by participating in a
7-minute 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 company questionnaire. We only need one
response per company (or per department for larger companies). If you aren’t the
right person, please forward this onto the right person at your company.

_Please note: this is different from our annual anonymous Go user survey, which_
_will be announced in November._

**Where:** Please take this 7-minute questionnaire by October 30th:
[Go Company Questionnaire 2018](http://goo.gl/nnPfct).

The questionnaire is confidential, but not anonymous. For more information,
please refer to Google’s privacy policy
[here](https://policies.google.com/privacy).

The Go project leadership will use your responses to better understand how
companies use Go and in what ways we can improve their experience.

## Spread the word!

We would like as many companies as possible to participate to help us better
understand our global user base. Please help us spread the word by sharing this
post on your social network feeds, at meetups, and in other communities.
