« August 2012 | Main | January 2013 »

December 2012


Yelp re:Invents!

Last month, Yelp was asked to talk about our experiences with Amazon’s Web Services at their re:Invent conference in Las Vegas.  I was delighted to be able to attend, speak, and learn from other speakers.  All videos from the conference have been published, and below I’ve highlighted the sections specifically about Yelp.

Big Data with Elastic MapReduce


The majority of our AWS usage is Simple Storage Service (S3) and Elastic MapReduce (EMR).  We use these technologies because we want every engineer to be extremely effective, to be able to command a cluster of machines that would normally take another entire team just to manage.  We want our engineers asking and answering questions like:

  • “What category did the customer want when she searched for ‘Pool’?”
  • “When will our mobile traffic eclipse our web traffic?”
  • “Was this review written by someone with firsthand experience?”

At Yelp, whether you’re a senior engineer or an intern, if you want to test the next great data driven product, you don’t have to cajole another team for resources, or sit around waiting for your job to be scheduled.  Deploying is the same way: no need to worry about interrupting someone else’s batch job, or filling out TPS reports estimating the time you need on the production cluster.  Just ship the code; the boxes will be available when you need them.

Yelp AWS Optimization 

Make no mistake: optimizing for developer time can mean trading-off potential cost savings.  While we believe the trade-off is worth it, that doesn’t mean we ignore our costs!  Two of the specific ways we save money on EMR are:

  • Re-use of job flows
  • Buying reserved instances

We try to find ways of saving money that are invisible to other developers, and base improvements on how developers want to use the resources available.  Contrast this with the philosophy of making every developer justify and micro-optimize their costs.  We build tools to multiply the effectiveness of fellow engineers, instead of having policies that divide their attention between business issues and implementation details.  By sharing tools such as mrjob and EMRio we’re not only letting Yelp developers better focus on business problems, hopefully we’re letting other companies do the same.

I hope you enjoy the videos, and Happy Holidays!


Building and Testing Yelp Mobile

In this post, Steven S. from Yelp's mobile team gives us the lowdown on what tools we use to make a rich, reliable mobile experience.

The mobile team at Yelp always strives to bring the best possible experience to your mobile device, but what does it take to accomplish this? For Yelp's iOS app, in addition to tools used by many iOS developers — Xcode for a development environment, Git for version control — we have found other useful tools and libraries to improve our development experience. If you've ever appreciated our app and wondered what goes into its development, we're happy to shed some light on what tools from the iOS development community we make use of, and we even have some of our own to share!

The foundation upon which the Yelp app is built is YelpKit. YelpKit is an Objective-C library that provides reusable controls and helpful extensions for Apple's UIKit framework. YelpKit can assist with tasks from making requests and caching images to using pull-to-refresh. In fact, we found YelpKit to be so useful that we open-sourced it so we could use it in our own personal projects. Check out YelpKit on GitHub for instructions on using YelpKit and to see what features would come in handy for you!

Of course, with all the work you put into building your app, you want to make sure it works! Automated testing is an important tool used by many developers, and the iOS developers at Yelp are no exception. We use GHUnit for unit testing and also make heavy use of its view testing capabilities; tests in GHUnit are run on an iOS device or emulator, and the resulting view of your app can be saved to an image file and compared against previous runs. GHUnit's view tests prove invaluable for catching inadvertent changes, and can even help detect minute changes that occur from updates to the iOS SDK.


As useful as automated testing is, getting your app into the hands of as many people as possible is still one of the surest ways to find bugs. This is where TestFlight comes in: TestFlight is a free service that makes it easy to distribute your app to testers. Testers must join TestFlight and be included in your app's ad hoc provisioning profile. When you want to release a new version of your app for testing, you just upload the compiled IPA file and TestFlight will notify your testers that it is available for download! Testers need only click a link in this email to begin installing the app. You can choose to which testers to distribute the file, and TestFlight provides analytics indicating, for example, which testers have opened the email or if any have had problems installing your app. With our sharp group of fellow iPhone-wielding engineers eager to try out new features, this convenience offered by TestFlight allows Yelp to rapidly distribute and receive feedback on beta builds of apps.

With the help of GHUnit and TestFlight, we manage to keep the Yelp app in good shape! Inevitably, though, some bugs can slip through, so we use Crashlytics to help us get to the bottom of any crashes that crop up once the app is released to the App Store. Crashlytics is a crash reporting solution that supplements the crash logs available through iTunes Connect. After configuring Crashlytics, the debug symbols (dSYM) for your app are uploaded to Crashlytics during the build; if your app crashes, a crash log is sent to the Crashlytics servers and symbolicated. Crashes are ordered by their prevalence in Crashlytics' web interface, so at a glance you can tell what issues are most pressing and then start digging through the stack trace in order to keep your app functional and your users happy.

In the lively iOS development community, you don't have to look very far to find all sorts of useful tools and libraries. In showing you those that helped Yelp reach its success, we hope you're excited about these tools, and we can't wait to see what you can make using them!