# Participate in the 2018 Go Company Questionnaire
4 Oct 2018
Tags: survey, community
Summary: Please take the 2018 Go Company Questionnaire.
OldURL: /company-questionnaire2018

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.
