FullStory’s history is deeply rooted in Go. Although it’s not the only language in our arsenal, we have been using it since the first iteration of our product, and it continues to be the primary language for our back end services today.

Over time we have gotten increasingly involved with the Gopher community: In October 2017 we had the pleasure of sponsoring AnitaB.org’s presentation of “Ultimate Go with Bill Kennedy” in our Atlanta office. (This event holds a special place in my heart, as it was my first comprehensive introduction both to Go and to Bill, who also gave me some parenting advice that I still use to this day). In February of 2019 we helped the Atlanta chapter of Women Who Go present the “Go Programming Language Fundamentals” workshop, led by Johnny Boursiquot. In 2018, Josh Humphries, our resident gRPC guru, gave a talk at GopherCon, the largest Go conference, and we have since been a repeat GopherCon sponsor.

Not only does our sponsorship support the Gopher community, it also helps us keep our finger on the pulse of the latest Go developments and identify talented software engineers who could be a fit for our career opportunities. One unexpected bonus of our sponsorship of GopherCon (aka “GoVirCon” since it was virtual this year): it helped forge connections among the FullStorians who attended.

Enough intro, let’s talk about the conference itself!

Who Attended and What We Learned

Eight engineers spread across three different states and from six different teams attended GopherCon this year. The team’s level of Go experience varied from near-beginners with less than one year of Go under their belts to veterans who have 5+ years of Go and who regularly contribute to open source repos.

Heading into the conference, we had a broad range of goals we wished to accomplish. We wanted to become familiar with the Go community and meet some fellow Gophers. We wanted to learn to write better Go, which means not just knowing the right syntax, but also understanding how to think about and solve problems with Go. We wanted to keep up to date with upcoming changes to the language and to the runtime.

In some cases we had very specific goals for the conference. We were curious about the current state of generics and when they might make it into a Go release. A talk about using SQL in Go also caught our eye, as it dovetailed with some internal initiatives that could benefit from others’ lessons learned.

Post-conference we held an asynchronous team debriefing, and we shared the talks that we found most relevant and/or most mind-blowing. Here is a selection of the sessions that were on our minds:

"A Rainbow of Gophers: Building A More Diverse Community" by Kris Brandow

This is a wonderfully clear and honest discussion on diversity for beginners. It defines diversity, inclusion, and a host of related terms in ways that anyone can understand, and it lays out why we should care about them. The talk also includes actionable “building blocks” for creating a more diverse and inclusive community. Best of all, the entire approach is empathy-based. Empathy is the first of FullStory’s Watchwords, and its tendency to build trust is a primary reason we practice it.

"Go is Boring... And That's Fantastic!" by Jonathan Bodner

"I liked the talk’s focus on the philosophy of the Go language. Less is more. We want to leverage a few, well tested constructs that enable us to build reliable software like reliable bridges. Many of the principles stated in the talk could be applied in our day to day engineering work as well."

-William E. Bailey III, FullStory Software Engineer

"A Journey to Postgres Productivity with Go" by Johan Brandhorst-Satzkorn

We’ve long wanted to make a deeper investment in SQL databases on GCP, but allocating time to sift through the various tools and frameworks never made it to the top of our priority list. This talk not only validated some of our early research with golang-migrate, it gave us some solid recommendations for the rest of our toolset.

"Common Patterns for Bounds Check Elimination" by Agniva De Sarker

We love knowing what’s going on under the hood and using that knowledge to eke out efficiencies. This talk generated a literal flurry of excitement as the watchers furiously shared our learnings in FullStory Slack channels. A day later we had already submitted a PR for a hot code path where the extra performance savings justified the slight reduction in readability.

"Typing [Generic] Go" by Robert Greismer

Is there a Gopher anywhere who is NOT interested in the fate of generics in Go? This talk (and the follow-up Q&A session) updated us on the current syntax of generics, how they might work, and possible timing on a final draft and inclusion in an official Go release.

"Evolving the Go Memory Manager’s RAM and CPU Efficiency" by Michael Knyszek

Not only did this talk explain a lot of the internals of the memory manager, it was a very fun example of how persistence, thoughtfulness, and creativity can produce real performance gains. The talk was one of several that highlighted how the Go runtime is continually improving, and how keeping up with the latest version of Go has material benefits.

"Pardon the Interruption: Loop Preemption in Go 1.14" by Austin Clements

"The fact that the Go GC can fallback to conservative/imprecise GC when a goroutine must be pre-empted (vs. when it hits a natural safepoint for which the GC has a stack map) is kind of mind-blowing."

-Josh Humphries, FullStory Software Engineer

"Working with Errors" by Jonathan Amsterdam

For our novice Gophers, this was a fast introduction to thinking about error handling in Go. For the long-time Gophers, it was interesting to see the next iteration in an area that is still evolving. In addition to the errgroup package, FullStory currently uses a bespoke internal package that predates both github.com/pkg/errors and the more recent golang.org/x/xerrors.

Bonus: Being Connected!

As a result of the coronavirus pandemic this year, FullStory has become a fully distributed company. Our shift to remote-first rallied us to find creative ways to foster and maintain relationships, both within and between teams. Enter GopherCon, reformulated as GoVirCon, which provided an opportunity and a toolset for FullStorians from disparate teams to hang out together.

A few weeks before the conference, we started sharing lists of talks we wanted to attend, so we could plan watch parties. It was nice to hear what colleagues from different teams and different backgrounds found interesting. We used our sponsor voice channel in Discord and our FullStory “table” in GopherTown (a Gather environment for conference attendees) for our watch parties.

Many of us found GopherTown rather charming, and we also had good conversations with non-FullStorians. My initial thought was, “I feel kind of dorky being in here.” Then I thought, “Wait, I AM a dork, and I love it. This is why I go to conferences, why am I resisting??” On to the Tetris rooms!

Conclusion

I’m grateful that the conference organizers decided to spend the time, money, and energy required to morph GopherCon into a virtual format, so that we could all have a chance to attend safely. Several sessions reminded us that a lot of careful, intentional engineering has made Go so simple and elegant that we have the luxury of not noticing it. Some sessions caused us to pause and reflect with empathy on the perspectives of Gophers who are different from us. We took some genuinely useful learnings back to our teams, and we had a good time in the process. I’m looking forward to next year’s conference already!