# Go 2018 Survey Results
28 Mar 2019
Tags: survey, community
Summary: What we learned from the December 2018 Go User Survey.

Todd Kulesza, Steve Francia
tkulesza@google.com, spf@golang.org

## Thank you

.html survey2018/style.html

This post summarizes the results of our 2018 user survey and draws comparisons
between the results of our prior surveys from [2016](https://blog.golang.org/survey2016-results)
and [2017](https://blog.golang.org/survey2017-results).

This year we had 5,883 survey respondents from 103 different countries.
We are grateful to everyone who provided their feedback through this survey
to help shape the future of Go. Thank you!

## Summary of findings

  - For the first time, **half of survey respondents are now using Go as part of their daily routine**.
    This year also saw significant increases in the number of respondents who
    develop in Go as part of their jobs and use Go outside of work responsibilities.
  - The most **common uses for Go remain API/RPC services and CLI tools**.
    Automation tasks, while not as common as CLI tools and API services,
    are a fast-growing area for Go.
  - **Web development remains the most common domain** that survey respondents work in,
    but **DevOps showed the highest year-over-year growth** and is now the second most common domain.
  - A large majority of survey respondents said **Go is their most-preferred programming language**,
    despite generally feeling less proficient with it than at least one other language.
  - **VS Code and GoLand are surging in popularity** and are now the most popular code editors among survey respondents.
  - Highlighting the portable nature of Go,
    **many Go developers use more than one primary OS** for development.
    Linux and macOS are particularly popular,
    with a large majority of survey respondents using one or both of these operating
    systems to write Go code.
  - Survey respondents appear to be **shifting away from on-prem Go deployments**
    and moving towards containers and serverless cloud deployments.
  - The majority of respondents said they feel welcome in the Go community,
    and most ideas for improving the Go community specifically focus on **improving the experience of newcomers**.

Read on for all of the details.

## Programming background

This year's results show a significant increase in the number of survey
respondents who are paid to write Go as part of their jobs (68% → 72%),
continuing a year-over-year trend that has been growing since our first survey in 2016.
We also see an increase in the number of respondents who program in Go outside
of work (64% → 70%).
For the first time, the number of survey respondents who write in Go as
part of their daily routine reached 50% (up from 44% in 2016).
These findings suggests companies are continuing to embrace Go for professional
software development at a consistent pace,
and that Go's general popularity with developers remains strong.

.image survey2018/fig1.svg _ 600
.image survey2018/fig2.svg _ 600

To better understand where developers use Go,
we broke responses down into three groups:
1) people who are using Go both in and outside of work,
2) people who use Go professionally but not outside of work,
and 3) people who only write Go outside of their job responsibilities.
Nearly half (46%) of respondents write Go code both professionally and on
their own time (a 10-point increase since 2017),
while the remaining respondents are closely split between either only writing Go at work,
or only writing Go outside of work.
The large percentage of respondents who both use Go at work and choose to
use it outside of work suggests that the language appeals to developers
who do not view software engineering as a day job:
they also choose to hack on code outside of work responsibilities,
and (as evidenced by 85% of respondents saying they'd prefer Go for their next project,
see section _Attitudes towards Go_ below) Go is the top language they'd
prefer to use for these non-work-related projects.

.image survey2018/fig4.svg _ 600

When asked how long they've been using Go,
participants' answers are strongly trending upward over time,
with a higher percentage of responses in the 2-4 and 4+ year buckets each year.
This is expected for a newer programming language,
and we're glad to see that the percentage of respondents who are new to
Go is dropping more slowly than the percentage of respondents who have been
using Go for 2+ years is increasing,
as this suggests that developers are not dropping out of the ecosystem after
initially learning the language.

.image survey2018/fig5.svg _ 600

As in prior years, Go ranks at the top of respondents' preferred languages
and languages in which they have expertise.
A majority of respondents (69%) claimed expertise in 5 different languages,
highlighting that their attitudes towards Go are influenced by experiences
with other programming stacks.
The charts below are sorted by the number of respondents who ranked each
language as their most preferred/understood (the darkest blue bars),
which highlights three interesting bits:

  - While about ⅓ of respondents consider Go to be the language in which
    they have the most expertise,
    twice that many respondents consider it their most preferred programming language.
    So even though many respondents feel they haven't become as proficient with
    Go as with some other language,
    they still frequently prefer to develop with Go.
  - Few survey respondents rank Rust as a language in which they have expertise (6.8%),
    yet 19% rank it as a top preferred language,
    indicating a high level of interest in Rust among this audience.
  - Only three languages have more respondents who say they prefer the language
    than say they have expertise with it:
    Rust (2.41:1 ratio of preference:expertise),
    Kotlin (1.95:1), and Go (1.02:1).
    Higher preference than expertise implies interest—but little direct experience—in a language,
    while lower preference than expertise numbers suggests barriers to proficient use.
    Ratios near 1.0 suggest that most developers are able to work effectively
    _and_ enjoyably with a given language.
    This data is corroborated by [Stack Overflow's 2018 developer survey](https://insights.stackoverflow.com/survey/2018/#most-loved-dreaded-and-wanted),
    which also found Rust, Kotlin, and Go to be among the most-preferred programming languages.

.image survey2018/fig6.svg _ 600
.image survey2018/fig7.svg _ 600
.html survey2018/reading.html

## Development domains

Survey respondents reported working on a median of three different domains,
with a large majority (72%) working in 2-5 different areas.
Web development is the most prevalent at 65%,
and it increased its dominance as the primary area survey respondents work
in (up from 61% last year):
web development has been the most common domain for Go development since 2016.
This year DevOps noticeably increased, from 36% to 41% of respondents,
taking over the number two spot from Systems Programming.
We did not find any domains with lower usage in 2018 than in 2017,
suggesting that respondents are adopting Go for a wider variety of projects,
rather than shifting usage from one domain to another.

.image survey2018/fig8.svg _ 600

Since 2016, the top two uses of Go have been writing API/RPC services and
developing CLI applications.
While CLI usage has remained stable at 63% for three years,
API/RPC usage has increased from 60% in 2016 to 65% in 2017 to 73% today.
These domains play to core strengths of Go and are both central to cloud-native
software development,
so we expect them to remain two of the primary scenarios for Go developers into the future.
The percentage of respondents who write web services that directly return
HTML has steadily dropped while API/RPC usage has increased,
suggesting some migration to the API/RPC model for web services.
Another year-over-year trend suggests that automation is also a growing area for Go,
with 38% of respondents now using Go for scripts and automation tasks (up from 31% in 2016).

.image survey2018/fig9.svg _ 600

To better understand the contexts in which developers are using Go,
we added a question about Go adoption across different industries.
Perhaps unsurprisingly for a relatively new language,
over half of survey respondents work in companies in the _Internet/web services_
and _Software_ categories (i.e., tech companies).
The only other industries with >3% responses were _Finance, banking, or insurance_
and _Media, advertising, publishing, or entertainment_.
(In the chart below, we've condensed all of the categories with response
rates below 3% into the "Other" category.) We'll continue tracking Go's
adoption across industries to better understand developer needs outside
of technology companies.

.image survey2018/fig10.svg _ 600

## Attitudes towards Go

This year we added a question asking "How likely are you to recommend Go
to a friend or colleague?" to calculate our [Net Promoter Score](https://en.wikipedia.org/wiki/Net_Promoter).
This score attempts to measure how many more "promoters" a product has than
"detractors" and ranges from -100 to 100;
a positive value suggests most people are likely to recommend using a product,
while negative values suggest most people are likely to recommend against using it.
Our 2018 score is 61 (68% promoters - 7% detractors) and will serve as a
baseline to help us gauge community sentiment towards the Go ecosystem over time.

.image survey2018/fig11.svg _ 600

In addition to NPS, we asked several questions about developer satisfaction with Go.
Overall, survey respondents indicated a high level of satisfaction,
consistent with prior years.
Large majorities say they are happy with Go (89%),
would prefer to use Go for their next project (85%),
and feel that it is working well for their team (66%),
while a plurality feel that Go is at least somewhat critical to their company's success (44%).
While all of these metrics showed an increase in 2017,
they remained mostly stable this year.
(The wording of the first question changed in 2018 from "_I would recommend using Go to others_"
to "_Overall, I'm happy with Go_",
so those results are not directly comparable.)

.image survey2018/fig12.svg _ 600

Given the strong sentiment towards preferring Go for future development,
we want to understand what prevents developers from doing so.
These remained largely unchanged since last year:
about ½ of survey respondents work on existing projects written in other languages,
and ⅓ work on a team or project that prefers to use a different language.
Missing language features and libraries round out the most common reasons
respondents did not use Go more.
We also asked about the biggest challenges developers face while using Go;
unlike most of our survey questions, respondents could type in anything
they wished to answer this question.
We analyzed the results via machine learning to identify common themes and
counting the number of responses that supported each theme.
The top three major challenges we identified are:

  - Package management (e.g., "Keeping up with vendoring",
    "dependency / packet [sic] management / vendoring not unified")
  - Differences from more familiar programming languages (e.g.,
    "syntax close to C-languages with slightly different semantics makes me
    look up references somewhat more than I'd like",
    "coworkers who come from non-Go backgrounds trying to use Go as a version
    of their previous language but with channels and Goroutines")
  - Lack of generics (e.g., "Lack of generics makes it difficult to persuade
    people who have not tried Go that they would find it efficient.",
    "Hard to build richer abstractions (want generics)")

.image survey2018/fig13.svg _ 600
.image survey2018/fig14.svg _ 600

This year we added several questions about developer satisfaction with different aspects of Go.
Survey respondents were very satisfied with Go applications' CPU performance (46:1,
meaning 46 respondents said they were satisfied for every 1 respondent who
said they were not satisfied),
build speed (37:1), and application memory utilization (32:1).
Responses for application debuggability (3.2:1)  and binary size (6.4:1),
however, suggest room for improvement.

The dissatisfaction with binary size largely comes from developers building CLIs,
only 30% of whom are satisfied with the size of Go's generated binaries.
For all other types of applications, however,
developer satisfaction was > 50%, and binary size was consistently ranked
at the bottom of the list of important factors.

Debuggability, conversely, stands out when we look at how respondents ranked
the importance of each aspect;
44% of respondents ranked debuggability as their most or second-most important aspect,
but only 36% were satisfied with the current state of Go debugging.
Debuggability was consistently rated about as important as memory usage
and build speed but with significantly lower satisfaction levels,
and this pattern held true regardless of the type of software respondents were building.
The two most recent Go releases, Go 1.11 and 1.12,
both contained significant improvements to debuggability.
We plan to investigate how developers debug Go applications in more depth this year,
with a goal of improving the overall debugging experience for Go developers.

.image survey2018/fig15.svg _ 600
.image survey2018/fig29.svg _ 600

## Development environments

We asked respondents which operating systems they primarily use when writing Go code.
A majority (65%) of respondents said they use Linux,
50% use macOS, and 18% use Windows, consistent with last year.
This year we also looked at how many respondents develop on multiple OSes vs. a single OS.
Linux and macOS remain the clear leaders,
with 81% of respondents developing on some mix of these two systems.
Only 3% of respondents evenly split their time between all three OSes.
Overall, 41% of respondents use multiple operating systems for Go development,
highlighting the cross-platform nature of Go.

.image survey2018/fig16.svg _ 600

Last year, VS Code edged out Vim as the most popular Go editor among survey respondents.
This year it significantly expanded its lead to become the preferred editor
for over ⅓ of our survey respondents (up from 27% last year).
GoLand also experienced strong growth and is now the second most-preferred editor at 22%,
swapping places with Vim (down to 17%).
The surging popularity of VS Code and GoLand appear to be coming at the
expense of Sublime Text and Atom.
Vim also saw the number of respondents ranking it their top choice drop,
but it remains the most popular second-choice editor at 14%.
Interestingly, we found no differences in the level of satisfaction respondents
reported for their editor(s) of choice.

We also asked respondents what would most improve Go support in their preferred editor.
Like the "biggest challenge" question above,
participants could write in their own response rather than select from a
multiple-choice list.
A thematic analysis on the responses revealed that _improved debugging support_ (e.g.,
"Live debugging", "Integrated debugging",
"Even better debugging") was the most-common request,
followed by _improved code completion_ (e.g.,
"autocomplete performance and quality", "smarter autocomplete").
Other requests include better integration with Go's CLI toolchain,
better support for modules/packages, and general performance improvements.

.image survey2018/fig17.svg _ 600
.image survey2018/fig18.svg _ 600

This year we also added a question asking which deployment architectures
are most important to Go developers.
Unsurprisingly, survey respondents overwhelmingly view x86/x86-64 as their
top deployment platform (76% of respondents listed it as their most important
deployment architecture,
and 84% had it in their top 3).
The ranking of the second- and third-choice architectures,
however, is informative:
there is significant interest in ARM64 (45%),
WebAssembly (30%), and ARM (22%), but very little interest in other platforms.

.image survey2018/fig19.svg _ 600

## Deployments and services

For 2018 we see a continuation of the trend from on-prem to cloud hosting
for both Go and non-Go deployments.
The percentage of survey respondents who deploy Go applications to on-prem
servers dropped from 43% → 32%,
mirroring the 46% → 36% drop reported for non-Go deployments.
The cloud services which saw the highest year-over-year growth include AWS
Lambda (4% → 11% for Go,
10% → 15% non-Go) and Google Kubernetes Engine (8% → 12% for Go,
5% → 10% non-Go), suggesting that serverless and containers are becoming
increasingly popular deployment platforms.
This service growth appears to be driven by respondents who had already
adopted cloud services,
however, as we found no meaningful growth in the percentage of respondents
who deploy to at least one cloud service this year (55% → 56%).
We also see steady growth in Go deployments to GCP since 2016,
increasing from 12% → 19% of respondents.

.image survey2018/fig20.svg _ 600

Perhaps correlated with the decrease in on-prem deployments,
this year we saw cloud storage become the second-most used service by survey respondents,
increasing from 32% → 44%.
Authentication & federation services also saw a significant increase (26% → 33%).
The primary service survey respondents access from Go remains open-source
relational databases,
which ticked up from 61% → 65% of respondents.
As the below chart shows, service usage increased across the board.

.image survey2018/fig21.svg _ 600

## Go community

The top community sources for finding answers to Go questions continue to
be Stack Overflow (23% of respondents marked it as their top source),
Go web sites (18% for godoc.org, 14% for golang.org),
and reading source code (8% for source code generally,
4% for GitHub specifically).
The order remains largely consistent with prior years.
The primary sources for Go news remain the Go blog,
Reddit's r/golang, Twitter, and Hacker News.
These were also the primary distribution methods for this survey,
however, so there is likely some bias in this result.
In the two charts below, we've grouped sources used by less than < 5% of
respondents into the "Other" category.

.image survey2018/fig24.svg _ 600
.image survey2018/fig25.svg _ 600

This year, 55% of survey respondents said they have or are interested in
contributing to the Go community,
slightly down from 59% last year.
Because the two most common areas for contribution (the standard library
and official Go tools) require interacting with the core Go team,
we suspect this decrease may be related to a dip in the percentage of participants
who agreed with the statements "I feel comfortable approaching the Go project
leadership with questions and feedback" (30% → 25%) and "I am confident
in the leadership of Go (54% → 46%).

.image survey2018/fig26.svg _ 600
.image survey2018/fig27.svg _ 600

An important aspect of community is helping everyone feel welcome,
especially people from traditionally under-represented demographics.
To better understand this, we asked an optional question about identification
across several under-represented groups.
In 2017 we saw year-over-year increases across the board.
For 2018, we saw a similar percentage of respondents (12%) identify as part
of an under-represented group,
and this was paired with a significant decrease in the percentage of respondents
who do **not** identify as part of an under-represented group.
In 2017, for every person who identified as part of an under-represented group,
3.5 people identified as not part of an under-represented group (3.5:1 ratio).
In 2018 that ratio improved to 3.08:1. This suggests that the Go community
is at least retaining the same proportions of under-represented members,
and may even be increasing.

.image survey2018/fig28.svg _ 600

Maintaining a healthy community is extremely important to the Go project,
so for the past three years we've been measuring the extent to which developers
feel welcome in the Go community.
This year we saw a drop in the percentage of survey respondents who agree
with the statement "I feel welcome in the Go community", from 66% → 59%.

To better understand this decrease, we looked more closely at who reported
feeling less welcome.
Among traditionally under-represented groups,
fewer people reported feeling unwelcome in 2018,
suggesting that outreach in that area has been helpful.
Instead, we found a linear relationship between the length of time someone
has used Go and how welcome they feel:
newer Go developers felt significantly less welcome (at 50%) than developers
with 1-2 years of experience (62%),
who in turn felt less welcome than developers with a few years of experience (73%).
This interpretation of the data is supported by responses to the question
"What changes would make the Go community more welcoming?".
Respondents' comments can be broadly grouped into four categories:

  - Reduce a perception of elitism, especially for newcomers to Go (e.g.,
    "less dismissiveness", "Less defensiveness and hubris")
  - Increase transparency at the leadership level (e.g.,
    "Future direction and planning discussions",
    "Less top down leadership", "More democratic")
  - Increase introductory resources (e.g., "A more clear introduction for contributors",
    "Fun challenges to learn best practices")
  - More events and meetups, with a focus on covering a larger geographic area (e.g.,
    "More meetups & social events", "Events in more cities")

This feedback is very helpful and gives us concrete areas we can focus on
to improve the experience of being a Go developer.
While it doesn't represent a large percentage of our user base,
we take this feedback very seriously and are working on improving each area.

.image survey2018/fig22.svg _ 600
.image survey2018/fig23.svg _ 600

## Conclusion

We hope you've enjoyed seeing the results of our 2018 developer survey.
These results are impacting our 2019 planning,
and in the coming months we'll share some ideas with you to address specific
issues and needs the community has highlighted for us.
Once again, thank you to everyone who contributed to this survey!
