Engineering Blog

Yelp Dataset Challenge: Round 10 Winners And Round 12 Announcement

Round 10 Winners The tenth round of the Yelp Dataset Challenge ran throughout the second half of 2017 and we received many impressive, original, and fascinating submissions. As usual, we were struck by the quality of the entries: keep up the good work, folks! Today, we are proud to announce the grand prize winner of the $5,000 award: “Understanding Hidden Memories of Recurrent Neural Networks” by Yao Ming, Shaozu Cao, Ruixiang Zhang, Zhen Li, Yuanzhe Chen, Yangqiu Song, and Huamin Qu (from the Hong Kong University of Science and Technology). These authors developed a visual analytics method for understanding and...

Continue reading

Happy 10th Birthday to Yelp on iOS!

Yelp hit a big milestone last week: ten years ago, Yelp launched on the Apple App Store! On July 10th, 2008, Apple officially launched what was then known as the iPhone App Store, giving iPhone users their first-ever opportunity to run third-party native apps on their devices. It launched with a whopping 552 apps available for download, including the Yelp app! At the time, Yelp was only available in the U.S. (we would launch in Canada a few weeks later), and offered an incredible breadth of functionality: you could search for businesses, read reviews, and even bookmark! Staggering. It’s not...

Continue reading

Performance Improvements for Search on The Yelp Android App - Part 3

In our previous blog post, we made changes to the app that improved the initial rendering performance and scroll performance of the search results in the Yelp android app. In this blog post, we’ll cover how we monitor the performance of these changes and future changes to the app to ensure no performance regressions occur and undo all of our hard work! Step 3: Monitoring Performance Improvements Making changes that improve performance is great, but there’s no point in making these improvements if future changes by engineers could undo all the hard work you’ve done to get to this point....

Continue reading

Yelp's Secret Detector: Preventing Secrets in Source Code

We are always looking for new ways to bolster our security posture to keep our users and businesses safe. Today, we’re happy to announce that we will be open-sourcing our detect-secrets framework to prevent secrets from being committed to our codebase. This aligns well with our value to always Protect the Source and adds to our growing collection of secure-by-default frameworks which bolster web security without compromising employee productivity. The Problem Secrets in source code are points of weakness in an otherwise secure system because they are available to any and all repository contributors, cloned, copied and distributed. And each...

Continue reading

How Yelp Modularized the Android App

When the Yelp Android App was first built it was a monolith, with almost everything inside a single module. Single modules are easier to deal with; there are no complex dependency graphs to account for and some details of how the app is managed, such as how testing is implemented, are simpler. Eventually the app and company structure grew to a size where the monolith made code changes and testing harder, where modularization would help the app scale. After some discussion we decided to break the app into modules, thinking carefully about how we structured the app. We’ll discuss our...

Continue reading

Fast Order Search Using Yelp’s Data Pipeline and Elasticsearch

Since its inception in 2013, Yelp has grown its transactions platform to tens of millions of orders. With this growth, it’s become slow and cumbersome to rely solely on MySQL for searching and retrieving user orders. Transactions at Yelp are built around integrations with dozens of external fulfillment partners across different verticals, from food ordering to spa reservations. In most of these integrations, Yelp takes care of payment processing. Given this, the way we store order details prioritizes facilitating stateful order processing in a uniform way. However, other access patterns like finding popular orders by category or fetching a user’s...

Continue reading

Performance Improvements for Search on The Yelp Android App - Part 2

In our previous blog post, we established a performance improvement lifecycle and explored the first step by defining what metrics we wanted to measure and establishing a baseline on which we can improve. In this blog post, we’ll cover how we improved our two metrics of initial render timings and scroll performance when rendering search results in the Yelp Android app. Step 2: Making Performance Improvements Not all changes we made were specific to only one of our goals. Often times, a change that was expected to contribute to one goal also had an effect on the other. We used...

Continue reading

PySpark Coding Practices: Lessons Learned

In our previous post, we discussed how we used PySpark to build a large-scale distributed machine learning model. In this post, we will describe our experience and some of the lessons learned while deploying PySpark code in a production environment. Yelp’s systems have robust testing in place. It’s a hallmark of our engineering. It allows us to push code confidently and forces engineers to design code that is testable and modular. Broadly speaking, we found the resources for working with PySpark in a large development environment and efficiently testing PySpark code to be a little sparse. By design, a lot...

Continue reading