# Announcing the 2019 Go Developer Survey
20 Nov 2019
Tags: survey, community
Summary: Please take the 2019 Go Developer Survey. We want to hear from you!

Todd Kulesza
tkulesza@google.com

## Help shape the future of Go

Since 2016, thousands of Gophers around the world have helped the Go project
by sharing your thoughts via our annual Go Developer Survey.
Your feedback has played an enormous role in driving changes to our language,
ecosystem, and community, including [the gopls language server](https://about.sourcegraph.com/go/gophercon-2019-go-pls-stop-breaking-my-editor),
new [error-handling mechanics](https://blog.golang.org/go1.13-errors),
the [module mirror](https://blog.golang.org/module-mirror-launch),
and so much more from the latest [Go 1.13 release](https://blog.golang.org/go1.13).
And of course, we publicly share [each](https://blog.golang.org/survey2016-results)
[year's](https://blog.golang.org/survey2017-results) [results](https://blog.golang.org/survey2018-results),
so we can all benefit from the community's insights.

Today we are launching the 2019 Go Developer Survey.
We'd love to hear from everyone who uses Go,
used to use Go, or is interested in using Go,
to help ensure the language, community, and ecosystem fit the needs of the
people closest to it.
Please help us shape Go's future by participating in this 15-minute survey by December 15th:
[Take the 2019 Go Developer Survey](https://google.qualtrics.com/jfe/form/SV_b1xqnBCMpZAhJZ3).

## Spread the word!

We need as many Gophers as possible to participate in this survey to help
us better understand our global user base.
We'd be grateful if you would spread the word by sharing this post on your
social network feeds,
around the office, at meet-ups, and in other communities. Thank you!
