# Go Developer Survey 2019 Results
20 Apr 2020
Tags: survey, community
Summary: An analysis of the results from the 2019 Go Developer Survey.

Todd Kulesza
tkulesza@google.com

## What a response!

I want to start with an enormous **thank you** to the thousands of Go developers
who participated in this year's survey.
For 2019, we saw 10,975 responses, nearly [twice as many as last year](https://blog.golang.org/survey2018-results)!
On behalf of the rest of the team, I cannot adequately stress how much we
appreciate you taking the time and effort to tell us about your experiences with Go. Thank you!

## A note about prior years

Sharp-eyed readers may notice that our year-over-year comparisons don't
quite square with numbers we've shared in the past.
The reason is that from 2016–2018, we calculated percentages for each
question using the total number of people who started the survey as the denominator.
While that's nice and consistent, it ignores the fact that not everyone
finishes the survey—up to 40% of participants stop before reaching the final page,
which meant questions that occurred later in the survey appeared to perform
worse solely because they were later.
Thus, this year we've recalculated all of our results (including the 2016–2018
responses shown in this post) to use the number of people who responded
to a given question as the denominator for that question.
We've included the number of 2019 responses for each chart—in the form
of "n=[number of respondents]" on the x-axis or in the chart's legend—to
give readers a better understanding of the weight of evidence underlying each finding.

Similarly, we learned that in prior surveys options that appeared earlier
in response lists had a disproportionate response rate.
To address this, we added an element of randomization into the survey.
Some of our multiple-choice questions have lists of choices with no logical ordering,
such as "I write the following in Go:
[list of types of applications]".
Previously these choices had been alphabetized,
but for 2019 they were presented in a random order to each participant.
This means year-over-year comparison for certain questions are invalid for 2018 → 2019,
but trends from 2016–2018 are not invalidated.
You can think of this as setting a more accurate baseline for 2019.
We retained alphabetical ordering in cases where respondents are likely
to scan for a particular name,
such as their preferred editor.
We explicitly call out which questions this applies to below.

A third major change was to improve our analysis of questions with open-ended,
free-text responses.
Last year we used machine learning to roughly—but quickly—categorize these responses.
This year two researchers manually analyzed and categorized these responses,
allowing for a more granular analysis but preventing valid comparisons with
last year's numbers.
Like the randomization discussed above, the purpose of this change is to
give us a reliable baseline for 2019 onward.

## Without further ado…

This is a long post. Here's the tl;dr of our major findings:

- The demographics of our respondents are similar to Stack Overflow's survey respondents,
  which increases our confidence that these results are representative of
  the larger Go developer audience.
- A majority of respondents use Go every day, and this number has been trending up each year.
- Go's use is still concentrated in technology companies,
  but Go is increasingly found in a wider variety of industries,
  such as finance and media.
- Methodology changes showed us that most of our year-over-year metrics
  are stable and higher than we previously realized.
- Respondents are using Go to solve similar problems,
  particularly building API/RPC services and CLIs,
  regardless of the size of organization they work at.
- Most teams try to update to the latest Go release quickly;
  when third-party providers are late to support the current Go release,
  this creates an adoption blocker for developers.
- Almost everyone in the Go ecosystem is now using modules, but some confusion around package management remains.
- High-priority areas for improvement include improving the developer experience for debugging,
  working with modules, and working with cloud services.
- VS Code and GoLand have continued to see increased use; they're now preferred by 3 out of 4 respondents.

## Who did we hear from?

This year we asked some new demographic questions to help us better understand
the people who've responded to this survey.
In particular, we asked about the duration of professional programming experience
and the size of the organizations where people work.
These were modeled on questions that StackOverflow asks in their annual survey,
and the distribution of responses we saw is very close to StackOverflow's 2019 results.
Our take-away is the respondents to this survey have similar levels of professional
experience and proportional representation of different sizes of organizations
as the StackOverflow survey audience (with the obvious difference that we're
primarily hearing from developers working with Go).
That increases our confidence when generalizing these findings to the estimated
1 million Go developers worldwide.
These demographic questions will also help us in the future to identify
which year-over-year changes may be the result of a shift in who responded to the survey,
rather than changes in sentiment or behavior.

.image survey2019/fig1.svg _ 700
.image survey2019/fig2.svg _ 700

Looking at Go experience, we see that a majority of respondents (56%) are
relatively new to Go,
having used it for less than two years.
Majorities also said they use Go at work (72%) and outside of work (62%).
The percentage of respondents using Go professionally appears to be trending up each year.

As you can see in the chart below, in 2018 we saw a spike in these numbers,
but that increase disappeared this year.
This is one of many signals suggesting that the audience who answered the
survey in 2018 was significantly different than in the other three years.
In this case they were significantly more likely to be using Go outside
of work and a different language while at work,
but we see similar outliers across multiple survey questions.

.image survey2019/fig3.svg _ 700
.image survey2019/fig4.svg _ 700

Respondents who have been using Go the longest have different backgrounds
than newer Go developers.
These Go veterans were more likely to claim expertise in C/C++ and less
likely to claim expertise in JavaScript,
TypeScript, and PHP.
One caveat is that this is self-reported "expertise";
it may be more helpful to think of it instead as "familiarity".
Python appears to be the language (other than Go) familiar to the most respondents,
regardless of how long they've been working with Go.

.image survey2019/fig5.svg _ 750

Last year we asked about which industries respondents work in,
finding that a majority reported working in software,
internet, or web service companies.
This year it appears respondents represent a broader range of industries.
However, we also simplified the list of industries to reduce confusion from
potentially overlapping categories (e.g.,
the separate categories for "Software" and "Internet / web services" from
2018 were combined into "Technology" for 2019).
Thus, this isn't strictly an apples-to-apples comparison.
For example, it's possible that one effect of simplifying the category list
was to reduce the use of the "Software" category as a catch-all for respondents
writing Go software for an industry that wasn't explicitly listed.

.image survey2019/fig6.svg _ 700

Go is a successful open-source project, but that doesn't mean the developers
working with it are also writing free or open-source software.
As in prior years, we found that most respondents are not frequent contributors
to Go open-source projects,
with 75% saying they do so "infrequently" or "never".
As the Go community expands, we see the proportion of respondents who've
never contributed to Go open-source projects slowly trending up.

.image survey2019/fig7.svg _ 700

## Developer tools

As in prior years, the vast majority of survey respondents reported working
with Go on Linux and macOS systems.
This is one area of strong divergence between our respondents and StackOverflow's 2019 results:
in our survey, only 20% of respondents use Windows as a primary development platform,
while for StackOverflow it was 45% of respondents.
Linux is used by 66% and macOS by 53%—both much higher than the StackOverflow audience,
which reported 25% and 30%, respectively.

.image survey2019/fig8.svg _ 700
.image survey2019/fig9.svg _ 700

The trend in editor consolidation has continued this year.
GoLand saw the sharpest increase in use this year,
rising from 24% → 34%.
VS Code's growth slowed, but it remains the most popular editor among respondents at 41%.
Combined, these two editors are now preferred by 3 out of 4 respondents.

Every other editor saw a small decrease. This doesn't mean those editors
aren't being used at all,
but they're not what respondents say they _prefer_ to use for writing Go code.

.image survey2019/fig10.svg _ 700

This year we added a question about internal Go documentation tooling,
such as [gddo](https://github.com/golang/gddo).
A small minority of respondents (6%) reported that their organization runs
its own Go documentation server,
though this proportion nearly doubles (to 11%) when we look at respondents
at large organizations (those with at least 5,000 employees).
A follow-up asked of respondents who said their organization had stopped
running its own documentation server suggests that the top reason to retire
their server was a combination of low perceived benefits (23%) versus the
amount of effort required to initially set it up and maintain it (38%).

.image survey2019/fig11.svg _ 700

## Sentiments towards Go

Large majorities of respondents agreed that Go is working well for their
teams (86%) and that they'd prefer to use it for their next project (89%).
We also found that over half of respondents (59%) believe Go is critical
to the success of their companies.
All of these metrics have remained stable since 2016.

Normalizing the results changed most of these numbers for prior years.
For example, the percentage of respondents who agreed with the statement
"Go is working well for my team" was previously in the 50's and 60's because
of participant drop-off;
when we remove participants who never saw the question,
we see it's been fairly stable since 2016.

.image survey2019/fig12.svg _ 700

Looking at sentiments toward problem solving in the Go ecosystem,
we see similar results.
Large percentages of respondents agreed with each statement (82%–88%),
and these rates have been largely stable over the past four years.

.image survey2019/fig13.svg _ 700

This year we took a more nuanced look at satisfaction across industries
to establish a baseline.
Overall, respondents were positive about using Go at work,
regardless of industry sector.
We do see small variations in dissatisfaction in a few areas,
most notably manufacturing, which we plan to investigate with follow-up research.
Similarly, we asked about satisfaction with—and the importance of—various
aspects of Go development.
Pairing these measures together highlighted three topics of particular focus:
debugging (including debugging concurrency),
using modules, and using cloud services.
Each of these topics was rated "very" or "critically" important by a majority
of respondents but had significantly lower satisfaction scores compared to other topics.

.image survey2019/fig14.svg _ 800
.image survey2019/fig15.svg _ 750

Turning to sentiments toward the Go community,
we see some differences from prior years.
First, there is a dip in the percentage of respondents who agreed with the
statement "I feel welcome in the Go community", from 82% to 75%.
Digging deeper revealed that the proportion of respondents who "slightly"
or "moderately agreed" decreased,
while the proportions who "neither agree nor disagree" and "strongly agree"
both increased (up 5 and 7 points, respectively).
This polarizing split suggests two or more groups whose experiences in the
Go community are diverging,
and is thus another area we plan to further investigate.

The other big differences are a clear upward trend in responses to the statement
"I feel welcome to contribute to the Go project" and a large year-over-year
increase in the proportion of respondents who feel Go's project leadership
understands their needs.

All of these results show a pattern of higher agreement correlated with
increased Go experience,
beginning at about two years.
In other words, the longer a respondent has been using Go,
the more likely they were to agree with each of these statements.

.image survey2019/fig16.svg _ 700

This likely comes as no surprise, but people who responded to the Go Developer
Survey tended to like Go.
However, we also wanted to understand which _other_ languages respondents enjoy working with.
Most of these numbers have not significantly changed from prior years,
with two exceptions:
TypeScript (which has increased 10 points),
and Rust (up 7 points).
When we break these results down by duration of Go experience,
we see the same pattern as we found for language expertise.
In particular, Python is the language and ecosystem that Go developers are
most likely to also enjoy building with.

.image survey2019/fig17.svg _ 700

In 2018 we first asked the "Would you recommend…" [Net Promoter Score](https://en.wikipedia.org/wiki/Net_Promoter) (NPS) question,
yielding a score of 61.
This year our NPS result is a statistically unchanged 60 (67% "promoters"
minus 7% "detractors").

.image survey2019/fig18.svg _ 700

## Working with Go

Building API/RPC services (71%) and CLIs (62%) remain the most common uses of Go.
The chart below appears to show major changes from 2018,
but these are most likely the result of randomizing the order of choices,
which used to be listed alphabetically:
3 of the 4 choices beginning with 'A' decreased,
while everything else remained stable or increased.
Thus, this chart is best interpreted as a more accurate baseline for 2019
with trends from 2016–2018.
For example, we believe that the proportion of respondents building web
services which return HTML has been decreasing since 2016 but were likely
undercounted because this response was always at the bottom of a long list of choices.
We also broke this out by organization size and industry but found no significant differences:
it appears respondents use Go in roughly similar ways whether they work
at a small tech start-up or a large retail enterprise.

A related question asked about the larger areas in which respondents work with Go.
The most common area by far was web development (66%),
but other common areas included databases (45%),
network programming (42%), systems programming (38%),
and DevOps tasks (37%).

.image survey2019/fig19.svg _ 700
.image survey2019/fig20.svg _ 700

In addition to what respondents are building,
we also asked about some of the development techniques they use.
A large majority of respondents said they depend upon text logs for debugging (88%),
and their free-text responses suggest this is because alternative tooling
is challenging to use effectively.
However, local stepwise debugging (e.g., with Delve),
profiling, and testing with the race detector were not uncommon,
with ~50% of respondents depending upon at least one of these techniques.

.image survey2019/fig21.svg _ 700

Regarding package management, we found that the vast majority of respondents
have adopted modules for Go (89%).
This has been a big shift for developers,
and nearly the entire community appears to be going through it simultaneously.

.image survey2019/fig22.svg _ 700

We also found that 75% of respondents evaluate the current Go release for production use,
with an additional 12% waiting one release cycle.
This suggests a large majority of Go developers are using (or at the least,
trying to use) the current or previous stable release,
highlighting the importance for platform-as-a-service providers to quickly
support new stable releases of Go.


.image survey2019/fig23.svg _ 700

## Go in the clouds

Go was designed with modern distributed computing in mind,
and we want to continue to improve the developer experience of building
cloud services with Go.
This year we expanded the questions we asked about cloud development to
better understand how respondents are working with cloud providers,
what they like about the current developer experience,
and what can be improved.
As mentioned earlier, some of the 2018 results appear to be outliers,
such as an unexpectedly low result for self-owned servers,
and an unexpectedly high result for GCP deployments.

We see two clear trends: 

1. The three largest global cloud providers (Amazon Web Services,
Google Cloud Platform, and Microsoft Azure) all appear to be trending up
in usage among survey respondents,
while most other providers are used by a smaller proportion of respondents each year.
2. On-prem deployments to self-owned or company-owned servers continue to
decrease and are now statistically tied with AWS (44% vs.
42%) as the most common deployment targets.

Looking at which types of cloud platforms respondents are using,
we see differences between the major providers.
Respondents deploying to AWS and Azure were most likely to be using VMs
directly (65% and 51%,
respectively), while those deploying to GCP were almost twice as likely
to be using the managed Kubernetes platform (GKE,
64%) than VMs (35%).
We also found that respondents deploying to AWS were equally likely to be
using a managed Kubernetes platform (32%) as they were to be using a managed
serverless platform (AWS Lambda, 33%).
Both GCP (17%) and Azure (7%) had lower proportions of respondents using
serverless platforms,
and free-text responses suggest a primary reason was delayed support for
the latest Go runtime on these platforms.

Overall, a majority of respondents were satisfied with using Go on all three
major cloud providers.
Respondents reported similar satisfaction levels with Go development for
AWS (80% satisfied) and GCP (78%).
Azure received a lower satisfaction score (57% satisfied),
and free-text responses suggest that the main driver was a perception that
Go lacks first-class support on this platform (25% of free-text responses).
Here, "first-class support" refers to always staying up-to-date with the latest Go release,
and ensuring new features are available to Go developers at time of launch.
This was the same top pain-point reported by respondents using GCP (14%),
and particularly focused on support for the latest Go runtime in serverless deployments.
Respondents deploying to AWS, in contrast,
were most likely to say the SDK could use improvements,
such as being more idiomatic (21%).
SDK improvements were also the second most common request for both GCP (9%)
and Azure (18%) developers.

.image survey2019/fig24.svg _ 700
.image survey2019/fig25.svg _ 700
.image survey2019/fig26.svg _ 700

## Pain points

The top reasons respondents say they are unable to use Go more remain working
on a project in another language (56%),
working on a team that prefers to use another language (37%),
and the lack of a critical feature in Go itself (25%).

This was one of the questions where we randomized the choice list,
so year-over-year comparisons aren't valid,
though 2016–2018 trends are.
For example, we are confident that the number of developers unable to use
Go more frequently because their team prefers a different language is decreasing each year,
but we don't know whether that decrease dramatically accelerated this year,
or was always a bit lower than our 2016–2018 numbers estimated.

.image survey2019/fig27.svg _ 700

The top two adoption blockers (working on an existing non-Go project and
working on a team that prefers a different language) don't have direct technical solutions,
but the remaining blockers might.
Thus, this year we asked for more details,
to better understand how we might help developers increase their use of Go.
The charts in the remainder of this section are based on free-text responses
which were manually categorized,
so they have _very_ long tails;
categories totalling less than 3% of the total responses have been grouped
into the "Other" category for each chart.
A single response may mention multiple topics,
thus charts do not not sum to 100%.

Among the 25% of respondents who said Go lacks language features they need,
79% pointed to generics as a critical missing feature.
Continued improvements to error handling (in addition to the Go 1.13 changes) was cited by 22%,
while 13% requested more functional programming features,
particularly built-in map/filter/reduce functionality.
To be clear, these numbers are from the subset of respondents who said they
would be able to use Go more were it not missing one or more critical features they need,
not the entire population of survey respondents.


.image survey2019/fig28.svg _ 700

Respondents who said Go "isn't an appropriate language" for what they work
on had a wide variety of reasons and use-cases.
The most common was that they work on some form of front-end development (22%),
such as GUIs for web, desktop, or mobile.
Another common response was that the respondent said they worked in a domain
with an already-dominant language (9%),
making it a challenge to use something different.
Some respondents also told us which domain they were referring to (or simply
mentioned a domain without mentioning another language being more common),
which we show via the "I work on [domain]" rows below.
An additional top reason cited by respondents was a need for better performance (9%),
particularly for real-time computing.

.image survey2019/fig29.svg _ 700

The biggest challenges respondents reported remain largely consistent with last year.
Go's lack of generics and modules/package management still top the list
(15% and 12% of responses,
respectively), and the proportion of respondents highlighting tooling problems increased.
These numbers are different from the above charts because this question
was asked of _all_ respondents,
regardless of what they said their biggest Go adoption blockers were.
All three of these are areas of focus for the Go team this year,
and we hope to greatly improve the developer experience,
particularly around modules, tooling, and the getting started experience,
in the coming months.

.image survey2019/fig30.svg _ 700

Diagnosing faults and performance issues can be challenging in any language.
Respondents told us their top challenge for both of these was not something
specific to Go's implementation or tooling,
but a more fundamental issue:
a self-reported lack of knowledge, experience, or best practices.
We hope to help address these knowledge gaps via documentation and other
educational materials later this year.
The other major problems do involve tooling,
specifically a perceived unfavorable cost/benefit trade-off to learning/using
Go's debugging and profiling tooling,
and challenges making the tooling work in various environments (e.g.,
debugging in containers, or getting performance profiles from production systems).

.image survey2019/fig31.svg _ 700
.image survey2019/fig32.svg _ 700

Finally, when we asked what would most improve Go support in respondents'
editing environment,
the most common response was for general improvements or better support
for the language server (gopls, 19%).
This was expected, as gopls replaces about 80 extant tools and is still in beta.
When respondents were more specific about what they'd like to see improved,
they were most likely to report the debugging experience (14%) and faster
or more reliable code completion (13%).
A number of participants also explicitly referenced the need to frequently
restart VS Code when using gopls (8%);
in the time since this survey was in the field (late November – early December 2019),
many of these gopls improvements have already landed,
and this continues to be a high-priority area for the team.

.image survey2019/fig33.svg _ 700

## The Go community

Roughly two thirds of respondents used Stack Overflow to answer their Go-related questions (64%).
The other top sources of answers were godoc.org (47%),
directly reading source code (42%), and golang.org (33%).

.image survey2019/fig34.svg _ 700

The long tail on the previous chart highlights the large variety of different
sources (nearly all of them community-driven) and modalities that respondents
rely on to overcome challenges while developing with Go.
Indeed, for many Gophers, this may be one of their main points of interaction
with the larger community:
as our community expands, we've seen higher and higher proportions of respondents
who do not attend any Go-related events.
For 2019, that proportion nearly reached two thirds of respondents (62%).

.image survey2019/fig35.svg _ 700

Due to updated Google-wide privacy guidelines,
we can no longer ask about which countries respondents live in.
Instead we asked about preferred spoken/written language as a very rough
proxy for Go's worldwide usage,
with the benefit of providing data for potential localization efforts.

Because this survey is in English, there is likely a strong bias toward
English speakers and people from areas where English is a common second or third language.
Thus, the non-English numbers should be interpreted as likely minimums rather
than an approximation of Go's global audience.

.image survey2019/fig36.svg _ 700

We found 12% of respondents identify with a traditionally underrepresented group (e.g.,
ethnicity, gender identity, et al.) and 3% identify as female.
(This question should have said "woman" instead of "female".
The mistake has been corrected in our draft survey for 2020,
and we apologize for it.)
We strongly suspect this 3% is undercounting women in the Go community.
For example, we know women software developers in the US respond to the
StackOverflow Developer Survey at [about half the rate we'd expect based on US employment figures](https://insights.stackoverflow.com/survey/2019#developer-profile-_-developer-type) (11% vs 20%).
Since we don't know the proportion of responses in the US,
we can't safely extrapolate from these numbers beyond saying the actual
proportion is likely higher than 3%.
Furthermore, GDPR required us to change how we ask about sensitive information,
which includes gender and traditionally underrepresented groups.
Unfortunately these changes prevent us from being able to make valid comparisons
of these numbers with prior years.

Respondents who identified with underrepresented groups or preferred not
to answer this question showed higher rates of disagreement with the statement
"I feel welcome in the Go community" (8% vs.
4%) than those who do not identify with an underrepresented group,
highlighting the importance of our continued outreach efforts.

.image survey2019/fig37.svg _ 700
.image survey2019/fig38.svg _ 700
.image survey2019/fig39.svg _ 800

## Conclusion

We hope you've enjoyed seeing the results of our 2019 developer survey.
Understanding developers' experiences and challenges helps us plan and prioritize work for 2020.
Once again, an enormous thank you to everyone who contributed to this survey—your
feedback is helping to steer Go's direction in the coming year and beyond.
