At Gophercon, the Go conference this past April 24-26 in Denver, Kelsey Falter, CEO and founder of PopTip, made the case for choosing Go over Node.js for her company’s backend servers. Her story is an example of a company choosing Go for its ability to excel at systems level management. As for Node.js, there are numerous examples of how the service is used in the enterprise. We will explore how companies are using Node.js in future posts about the new stacks that organizations are building. This post is simply about one company and how it solved the challenges it encountered with Node.js by turning to Go.

PopTip’s problems with Node started about two years ago. Falter said she knew how to write JavaScript and thought she could use that background to learn Node. The speed of development made it easy for the company to get started with Node. It had modern features such as WebSockets. It was also free and cost little to administer. The Node community had momentum, language homogeneity and a talent pool. At the time, it had that coolness factor, too. Here are her overall grades:

PopTip helps companies provide a statistical breakdown on public consensus. Its clients include CNN, L’Oreal, Spotify and a host of others. The size of these customers required PopTip to scale its code. Its service depends on machine learning and streaming data. As the company scaled, the task of administration became increasingly complex, due to “call-back soup”, a common complaint with Node.js. It was easy to get Node going, but PopTip’s growth created a variety of problems, which Falter described in her presentation:

Multiple application layers could not be brought up in tandem.

The infrastructure had a single point of failure if the instances went down.

All functions of the service ran on a single process.

Latency became an issue due to high CPU and network load during peak usage.

There was an inability to scale horizontally.

But Why Go?

There came a point when the technical debt became too much, due especially to the scaling of the PopTip service. It was also a business decision: the company had received venture financing and there were customers to manage.

The switch came when one of PopTip’s engineers spent a weekend replicating the core processing structure with Go. Text processing increased 64 percent just by moving from Node to Go. PopTip formally evaluated Go,and it passed the scorecard test: it had the runtime speed, the cost to administer was minimal, the talent pool was excellent, and competing frameworks were not vying for the attention of the developers.

PopTip started using Go with the app server, then ripped out the proxies, Falter said. This past fall, the company did the web front end in Golang, as well.

Since adopting Go, PopTip has been able to scale its infrastructure in a manner not possible with Node. Is this your experience? Did your company make the switch from Node to Go? Why?