Why New Relic
Deep technical insight into server and app performance, down to the line of code
- Reduced time investigating a problem from one hour to no more than 10 minutes
- Saved money on Amazon S3 hosting bill by trimming unnecessary cloud calls
- Improved server response time by 80%
RunKeeper’s backend runs primarily on a Java app server. Clusters of Apache Tomcat web servers operate behind a HAProxy load balancer, and the data layer is a combination of PostgreSQL and Amazon S3 (Simple Storage Service). All caching is done with Redis; Jenkins enables continuous deployment. On the frontend, a lightweight JSON API facilitates communication between RunKeeper.com, the company’s mobile apps, and third-party servers.
In the world of mobile apps, RunKeeper was an early innovator. The company’s iOS app first became available when Apple introduced its App Store in July 2008. Since then, business has boomed.
The company’s engineering team now stands at 20 people and is organized into several subgroups to focus on key features. “That was our big challenge as the company grew,” says Joe Bondi, Co-Founder and CTO at RunKeeper. “How do you go from a handful of developers to multiple teams who are deploying features for more than 27 million users?”
As RunKeeper increased in popularity, application performance became increasingly difficult to predict. “When we introduced the Goals feature to help people set their personal fitness objectives, we had a simple table that worked beautifully in test,” Bondi explains. “But after a couple million iPhone users started hitting it in production, the server responded very differently.”
That level of unpredictability becomes especially problematic in an agile development environment. “We’re doing five to 10 deployments on a busy day,” says Bondi. “We like to get features to users as quickly as possible, all while keeping performance snappy. We don’t like to depend too much on testing. We want to deploy confidently, learn fast, and adapt once we’ve seen things in the wild.”
Before using New Relic, RunKeeper already had a number of performance monitoring tools in place. However, a significant gap remained in the company’s ability to understand the root cause of emerging issues. “Crashlytics tells us when the app is crashing and exactly where in the code it’s happening—which is huge at knocking out crashes—but there can be a lot of other performance issues, especially around network communications, that can lead to issues affecting the user experience. Google Analytics is great as far as it goes, but it’s mostly used for product analytics. We also use lightweight solutions like Monit on our servers and Pingdom as a standing check around the world. But even with all those tools, we still didn’t have an easy way to get fast, deep insight into the performance of our app from a purely technical perspective.”
“The mobile app tool helps us understand exactly how many users are being affected by any given issue. Once we address the problem at hand, we can see right away-within hours or even minutes-whether or not the changes worked. It takes the guesswork out of identifying and fixing issues in production.”
When Bondi discovered New Relic, he recognized its potential to deliver the technical insight his team still lacked. “We started by using New Relic for Server Monitoring,” he says. “It immediately helped us solve some of our server scaling issues. We understood where the bottlenecks were, right down to the line of code.”
He also appreciated New Relic’s unprecedented insight into third-party analytics. “If we push a change and S3 is having a bad day, or different geographic regions are having issues on the Facebook API, it’s important for us to understand the source of those problems,” says Bondi. “Instead of digging into our own system, we can address the issue with the S3 folks or we can put our various contingencies into place.”
The New Relic Platform helps simplify monitoring by bringing all critical information into one single interface. “Using New Relic plugins gives us drill-down metrics into different OS and third-party solutions,” says Bondi. “We can have all these different sources of information in the same dashboard, which helps us quickly navigate a problem.” RunKeeper also uses New Relic for Mobile Apps to monitor its iOS and Android apps. “The mobile app tool helps us understand exactly how many users are being affected by any given issue,” says Bondi. “Once we address the problem at hand, we can see right away—within hours or even minutes—whether or not the changes worked. It takes the guesswork out of identifying and fixing issues in production.”
Bondi finds particular value in New Relic’s User Interaction Traces feature, which allows him and his team to see performance across many devices of real users and not just their developers’ devices. “User Interaction Traces brought to our attention a very poorly performing view DidLoad—its average response time was 20x compared to all the others,” explains Bondi. “There were a couple things we were doing that only used network calls under certain conditions, so we usually didn’t reproduce this when connected to the device via instruments. But with New Relic, we’ve since optimized this area, and it’s performing in line with the other ViewControllers.”
“There have been several cases where New Relic helped us find calls we were making to S3 unnecessarily. With that insight, we were able to trim a lot of waste and save up to 4x on our hosting bill.”
Since using New Relic to monitor both its web and mobile applications, RunKeeper has been able to reduce various operational expenses. “There have been several cases where New Relic helped us find calls we were making to S3 unnecessarily,” says Bondi. “With that insight, we were able to trim a lot of waste and save up to 4x on our hosting bill.” The RunKeeper team can also now spend more time focusing on users, rather than building tools to make its mobile apps run faster, which translates into a major reduction in operational expenses as well.
In addition, New Relic helps RunKeeper maximize productivity. “We no longer spend an hour just looking for the source of a problem,” says Bondi. “New Relic allows us to get to the source of a problem much faster—no more than 10 minutes—and quickly fix it.” With Real User Monitoring from New Relic, RunKeeper also realized just how much browser time was being spent doing useless work. “Using New Relic, we’ve been able to drill down and optimize a lot of our web code,” says Bondi. “As a result, we cut down our DOM loading time by up to 7x.” RunKeeper has also been able to improve its server response time by more than 80%.
For Bondi, New Relic is such an integral tool, he can’t imagine working without it. “New Relic started as a nice-to-have in our organization,” he says. “But now it’s a must-have.”