Engineering Blog

Lookin' Good: UI Verification in GHUnit

Here at Yelp, we build some popular mobile apps. We have around 5 million monthly unique users and about 1/3 of all Yelp searches come from mobile. Our apps continue to grow in complexity as we add new features. We try our best to test before releases, however, sometimes UI breaks and we don’t notice. For example, in a recent release, we had the ‘Get Directions’ button disappear from our iPad app! [Screenshot] We finally noticed it missing when we got a report from a user. We were fairly embarrassed that we hadn’t caught the problem ourselves. This was a problem...

Continue reading

Mission: Mobile Makeover

As previously reported, we recently released a brand new mobile site, hand made with love for our more than 8 million users with mobile Webkit browsers who visited www.yelp.com from mobile devices in August. Surprisingly, there are a lot of challenges when creating a whole new, albeit mini, website (who would have thought?). If you were to look online for guidance on designing a mobile website, you would come across lots of articles that cover three main considerations: The once precise cursor is now your chubby, fumbling finger You have to present a lot of data on a wee-small screen...

Continue reading

Output Filtering Failure

About a month ago, we launched m.yelp.com specifically targeting iPhone, Android, and WebKit-based smart phones. Our engineering team pushes code live on average three times a day. Moving fast means we need to have sound engineering practices internally — such as code reviews by peers and automated testing tools such as unit-tests and static analysis — to catch mistakes before they happen. In this blog post we will detail a misstep that we made and the response that followed. On the morning of October 27, 2011, we were alerted by a team of researchers at Harvard, Yale, and Boston University...

Continue reading

Calling All Data Miners!

Summers are tough here at Yelp’s HQ in San Francisco. It’s hard to keep up with all the hot new businesses, order the best food at every restaurant you visit, or even just find that fancy dive bar your friends have been chatting up. If you’re anything like me, you aren’t satisfied just using these features on Yelp - you want to tear them apart, see how they tick, and make them better. The trick? All these features are powered by our incredible review data. The data Yelp is providing the reviews for nearly seven thousand businesses at 30 universities...

Continue reading

Yelp Hackathon #5 Brings You KegTime and More

If you read this blog regularly, you’re probably already familiar with Yelp Hackathons. They’re 48 hour periods of time we devote to anyone in the company to crank on projects that they’re excited about. In the past, our Hackathons have included special guests, pinatas and, oh yeah, hacking! This year’s didn’t disappoint, with 28 total projects built, a petting zoo in the office (What? Your company doesn’t have those?) and a High School Science Fair type set-up so our hundreds of Yelp employees in San Francisco could wander, sip some Belgian ale and take a gander at what their fellow...

Continue reading

Understanding Git

Yelp converted from using Subversion for source control over to Git over a year ago. As it turns out, however, Git (and distributed version control systems in general) can sometimes be daunting for some developers to understand, especially if they’re used to more traditional centralized versioning solutions. Git can also be a bit daunting for new developers just starting to use source control - it tends to assume that everyone is a power user, offering a high amount of potential, but sometimes at the cost of user-friendliness. In an effort to help more people get a deeper understanding of just...

Continue reading

Parcelgen: A Code Generator for Android Data Objects

When I switched from working on Yelp’s iPhone app to our Android app, one of the first things I encountered was the radical difference between the equivalent classes to handle what I normally consider a “screen” or “page” of an app. On Android, an Activity handles what on iOS you use a UIViewController for, but they work in fundamentally different ways. One of the biggest differences is that on Android you can’t just instantiate a new Activity and display it like you can with a UIViewController. Instead you create an Intent and tell the system to start an Activity based...

Continue reading