Sqor Sports' vision is to offer direct communication between athletes and fans. It provides a growing roster of elite athletes and brands a sports-centric media platform where they can create a meaningful social presence and monetize it. Meanwhile, millions of users connect to their favorite athletes, teams and fellow fans to access the latest news, scores and unique shopping opportunities. Sqor Sports is available on Android, iPhone, mobile web, and desktop browsers. Based in San Francisco, Sqor Sports was founded in 2011.
To realize the company’s vision, in 2016 Sqor Sports’ development team started moving towards implementing most of their backend services in Erlang. Erlang and its set of standard libraries OTP originated in the telecom industry, and were designed as a basis for building fault-tolerant distributed systems.
At the same time, the team identified Elixir’s potential to be used as the second main programming language for the next generation of their system. Elixir programs are compiled to run on the Erlang platform, and they benefit from the same concurrency and high-availability features. The language syntax is more user-friendly and similar to Ruby, which helps newcomers become productive very quickly.
The standard workflow of the Sqor Sports development team includes writing unit tests and running code style checks. This makes continuous integration (CI) — the process of automatically compiling programs, running tests and any additional checks on every change in source code — an important part of their daily programming workflow.
Up until the point when Sqor Sports adopted Erlang, the team had been using an in-house instance of Jenkins for CI. With the diversification of the toolchain and a growing number of services that needed to be developed and maintained, the team couldn’t scale their in-house CI as quickly and as well as they needed to. They wanted to be able to focus on delivering value to users, and not on setting up infrastructure for supporting services.
Kevin Baird, a developer who was familiar with Semaphore as he used it at a previous job, held an internal presentation to his team. He demoed how quick and easy it is to set up CI on Semaphore.
“What appealed to the team the most is how the result of a Semaphore build becomes a part of the GitHub pull request review process. You can see at a glance that a given branch is green, and therefore passes all the checks that we've defined as mandatory for that particular project. That lets the reviewer concentrate on higher-level concerns when reviewing the code.”
It helped that Semaphore had out-of-the-box support for Erlang and Elixir projects, with the latest version of Erlang and its toolchain available by default. This is important, because it meant that the team wouldn’t need to devise and add custom installation steps, which is essentially overhead, to their build process.
Semaphore was able to automatically detect each project’s runtime requirements and suggest the right configuration, which could be easily customized. When the team investigated alternatives, they noticed that such support for Erlang and Elixir wasn’t available elsewhere.
Semaphore has an integration with GitHub, which provides an easy way to set up a continuous integration process for code projects, and features such as automatic testing of new branches and sending build status to pull requests. This enables teams to enjoy the benefits of CI as a safety net without having to change their workflow.
“Seeing build feedback in pull requests on GitHub is a great help. All of our developers rely on it as a primary source of feedback about their work. It helps us that we know that code is ready for review and that it will be tested once again after being merged in the main branch.”
Besides GitHub, Sqor Sports actively uses Code Climate to track code metrics and quality. Semaphore is one of Code Climate’s official CI partners, and it provides an integration for test coverage reporting.
Sqor Sports’ build process often includes multiple kinds of checks beside running unit tests, for instance running code style inspection and looking for compile warnings. Instead of running all checks sequentially, the team could easily configure parallel jobs in Semaphore’s graphical CI configuration editor, and save time on every build.
One of the benefits of using Semaphore is its platform — a set of programming languages and tools preinstalled and available out of the box, based on a LTS (long-term support) version of Ubuntu Linux. The platform includes a range of versions of all major open source programming languages, so the same experience is available to Sqor Sports’ developers who are working on an Erlang backend, Elixir wrapper for Riak, and Ember.js front-end.
The team also found it useful that it is possible to run arbitrary binaries within builds. And since Semaphore has a custom-made platform for Docker-based projects, it’s ready for next-generation services.
“My overall experience with Semaphore’s support has been very positive. Integrating different services' APIs together is never trivial, but the support from Semaphore made things much easier”, says Baird. “They also knew that we were using Elixir, and took the time to contact me as soon as version 1.3 was officially supported. Even before the official support was available, they were quite helpful showing me how to install custom executables in the shared setup job.”
“The biggest changes after making CI part of every developer’s workflow have been qualitative cultural differences", said Baird. “Making CI checks 'first-class citizens' encouraged developers — especially more junior developers — to take testing, style checking, and general code quality more seriously than they had been. It also feels anecdotally that we have faster communication about problematic branches, and more importantly, their fixes”.
With Semaphore running their CI, the Sqor Sports team can focus on their growth and mission to connect athletes with millions of fans.