Today’s spotlight is on Bleacher Report!
Since its founding, Bleacher Report has been reshaping the way sports fans consume content. Through creative expression, B/R ignites the power of sports culture to make moments that matter. B/R delivers visceral, authentic moments at the intersection of sports and culture.
We started using Elixir in production almost four years ago. When we began using Elixir, it had just recently reached 1.0 and Phoenix was about eight months or so from 1.0. It was a bold choice to use Elixir and Phoenix at the time, and it paid off handsomely.
Like many other media or news companies, our traffic is spikey and delivering content the fastest is essential. Our first problem was that our push notifications weren’t the fastest and declined in speed as our user base increased. Our second problem was the feature that set B/R apart from our competitors. Users could follow any number of teams and players which catered to their interests and see a custom stream of that content any time they opened the app. That capability made content difficult to cache. It’s not hard to see the problem we faced. Breaking news happens; push notifications go out to millions of devices; users overwhelm our system because almost no requests are the same.
Elixir seemed like an excellent solution to both of these problems with Erlang providing a solid foundation. Another consideration was that this couldn’t be a niche language that only a few developers could or wanted to learn. Elixir’s resemblance to Ruby gave us confidence that if the language proved useful, we could more easily convince other developers to give Elixir a go.
We rewrote our content serving system in Elixir and slowly transitioned to it over a few months. Even as Elixir neophytes, the new system was performing much better than expected. As a result, more developers and our stakeholders, as well, became interested in Elixir. We solved the content delivery problem with Elixir.
With some confidence, we set about rewriting our push notification system. We had to be careful with this because push notifications are a large driver of traffic to us. Two developers rewrote and deployed our new system in a couple of months. The push notification rewrite is perhaps the reason we went all in on Elixir. Suddenly, our push notifications were consistently the fastest among our competitors. Our content programmers raved about how as soon as they click the button, their phones buzzed with the alert and our users noticed and applauded. In a few months, we’d solved our two most significant problems.
Since then we’ve gone on to train all of our backend developers to use Elixir, and we’ve mandated that all new development and services be written in Elixir. Since then we’ve rewritten all of our essential legacy platform in Elixir.
At the time we started migrating to Elixir, Lebron James’ infamous Decision in 2010 set our previous traffic record. It was an announced event which meant that we scaled up - and scaled we did - in advance to weather the spike. That record held until 2016.
The NFL draft is consistently one of our most predictable big traffic nights of the year, and NFL draft 2016 was the first draft that we had the new Elixir services in production. It was the first real test of Elixir during a predictable traffic spike. Even with legacy hiccups, the system performed remarkably well, and we broke our previous traffic record. It only took six years.
Since then, we’ve broken our traffic record five times. Our system hums along, and firefighting is mostly a relic of the past. We’ve also rewritten our website, overhauled our client apps and rebranded B/R. We’re embarking on exciting new features, and we’re growing our team. Without a stable platform, none of this is possible.
This brings us to yesterday. We knew that when Lebron James announced which team he would join that we’d see a huge traffic spike. What we didn’t realize was that Lebron, yet again, would shatter our traffic record. And the system handled it without incident.
Elixir was crucial to every part of this event. To give a simplified sequence of events: the content programmer added content to an Elixir service, an Elixir service sent the push notification, and an Elixir service served the content to millions of users.
Our content and voice are why people love Bleacher Report, but Elixir is what makes it all possible.