Engineering Blog

Progressive Enhancement with Brotli

Brotli is a compression algorithm from Google that has been making waves recently. You may have heard about its average 10-20% filesize savings over gzip, at comparable decompression speeds. This makes it a very irresistable format for serving static content, but it still has immature support from CDNs, which puts it out of reach for general widespread availability. A search run over HTTP Archive data indicates that there are around 25 web properties serving Brotli Content-Encoding URLs from Fastly, the CDN we use to host our static content, as of July 25th. While Fastly does not automatically convert content to...

Continue reading

What Does A Yelp Associate Product Manager Do? Fred Wang Shares All

Fred Wang has already done a lot. He graduated from U Penn’s Wharton School with degrees in Finance and Operations Management and then headed to New York City to co-found a startup. No big deal. Finding himself at a crossroads a few years later, he decided to try his luck on the west coast and joined Yelp’s new (at the time) Associate Product Manager (APM) program. Since his two-year anniversary at Yelp Eat24 is right around the corner, we decided to ask him a few questions about his experiences. Here’s what he had to say. Q: As a recent grad,...

Continue reading

Generating Web Pages in Parallel with Pagelets, the Building Blocks of Yelp.com

At Yelp, pagelets are a server-side optimization to parallelize the rendering of web pages across multiple web workers (loosely inspired by Facebook’s Big Pipe). We’ve implemented this and have been running it successfully in production for a while now. This blog post is about our journey implementing and rolling out pagelets, including what we’ve learned since the initial rollout. Pagelets at Yelp: an overview Main and pagelet workers Usually a request made to Yelp is fulfilled by a single web worker. This worker is in charge of generating a response (in the form of an HTTP packet, with headers and...

Continue reading

Moving Yelp's Core Business Search to Elasticsearch

While newer search engines at Yelp typically use Elasticsearch as a backend, Yelp’s core business search used its own custom backend, built directly on top of Lucene. This system was one of the oldest systems at Yelp to still be deployed in production. Some features of this custom search engine were Distributed Lucene instances Master-slave architecture Custom text analysis support for various languages Custom business ranking which relied mostly on using business features (think business attributes like reviews, name, hours_open, service_areas, etc.) Derived Yelp analytics data to improve quality of search results; e.g. most popular queries for a business Problems...

Continue reading

Upcoming Deprecation of Yelp API v2

As we continue to invest in the Yelp Fusion API, we are announcing that Yelp API v2 will be discontinued on June 30, 2018. If you are currently using v2 API endpoints, you have until June 30, 2018 to move them over to the Yelp Fusion API. We hope this gives everyone sufficient time to transition your applications from Yelp API v2 to Yelp Fusion, giving you the ability to tap into awesome new features like GraphQL, which we launched last month. Here is a summary of the Yelp API v2 sunset timeline: April 1, 2017 - Disabled Yelp API...

Continue reading

Yelp Dataset Challenge Round 8 Winner

Yelp Dataset Challenge Round 8 Winners The eighth round of the Yelp Dataset Challenge ran throughout the first half of 2017 and, as usual, we received a large number of very impressive and interesting submissions. Today, we are proud to announce the grand prize winner of the $5,000 award: “Clustered Model Adaption for Personalized Sentiment Analysis” by Lin Gong, Benjamin Haines, and Hongnin Wang (from the Department of Computer Science of the University of Virginia). The authors built a personalized sentiment classification model at the group level. Their model is based on social theories about group psychology and how human...

Continue reading

Making Photos Smaller Without Quality Loss

Yelp has over 100 million user-generated photos ranging from pictures of dinners or haircuts, to one of our newest features, #yelfies. These images account for a majority of the bandwidth for users of the app and website, and represent a significant cost to store and transfer. In our quest to give our users the best experience, we worked hard to optimize our photos and were able to achieve a 30% average size reduction. This saves our users time and bandwidth and reduces our cost to serve those images. Oh, and we did it all without reducing the quality of these...

Continue reading

Introducing Yelp's Local Graph

We’re continuously adding new features to our API to make it easier for developers to integrate with our data and share great local businesses through their apps. Today, we’re releasing access to query our data via GraphQL, a graph query language. This is available immediately through our developer beta program. What is GraphQL? GraphQL is a query language for APIs that places emphasis on being able to query for exactly the data you want. I’m sure most of you at some point have thought, “I really wish this endpoint had more data,” or, “I only need one or two pieces...

Continue reading