By Lucy Zhou

At Uber, we strive to make transportation more reliable, and with over 3,500 services powering the millions of Uber trips that occur every day across 600 cities worldwide, our teams must be ready for anything.

Whether a feature crashes or a system lags, the sooner we know about these pain points, the quicker we can resolve them. To better identify these issues and build more responsive services, Uber’s Marketplace Tools team partnered with our Product Design team to build uRate, a self-service platform that enables both Uber employees and users to provide feedback on Uber tools and products—anywhere, anytime.

Launched in 2017, uRate has already scaled to nearly a hundred internal and external Uber services, including Uber Health and Uber.com. In this article, we discuss how we architected this feedback platform and its impact on the workflow of our engineers.

 

Problem: inconsistent feedback mechanisms

Before deciding to build uRate, we needed to better understand the flow of Uber Engineering’s existing feedback structures. After investigating these systems, we realized that feedback mechanisms for Uber tools and services were not always standardized. Sometimes, reporting bugs involved manually searching for the owners of the service and filing a ticket on their workboards. And, while end-of-year surveys provided structured feedback on areas of improvement, individual teams had to send their own surveys to glean more granular insights about their products.

We determined that the two main use cases for providing feedback were: 1) to indicate product satisfaction (or dissatisfaction), and 2) to report bugs or problems. We also realized that, given Uber’s complex tech stack, we needed an in-house solution capable of integrating with Uber’s many tools and services to save engineers the time and trouble of building their own custom feedback collectors.

 

Solution: uRate

With these findings in mind, we designed uRate to include two main components: an extensible, in-product widget that captures user feedback and a dashboard that helps track and monitor feedback by leveraging analytics.

Widget

We designed the uRate widget to be user-friendly for both app owners and feedback providers. During the onboarding process, app owners can configure the widget’s color, text, and positioning, all of which are responsive and optimized for mobile screens, to deliver a better user experience. The onboarding process itself takes no more than ten minutes to complete, and widget integration is as easy as copying and pasting the scripts generated by an onboarding wizard into the appropriate application dependencies.

Figure 1: App owners can customize their uRate widgets to deliver the user experience geared towards their preferences.

The widget can be integrated with any Uber product, tool, or website to collect user feedback in real time. Users interact with the widget by selecting a mood emoticon to rate their user experience (or “happiness”) with a service. uRate then converts each mood emoticon to a positive or negative score based on a 1 to 5 Customer Satisfaction Score (CSAT):

Figure 2: Our rating system is based on a 1-5 point rating scale. App owners can choose to use a five star rating scale over mood emoticons.

In addition to providing quantitative feedback, users can submit free-response answers and upload screenshots that show errors. A separate bug reporting flow differentiates between general feedback and more time-sensitive issues or problems with the service. 

Figure 3: Users can provide more descriptive feedback by leaving free-response answers and screenshots.

We also wanted to strike a balance between encouraging users to provide feedback and reducing potential survey fatigue. Initially, users were prompted by the widget to provide feedback once a month for each application at page load. But as uRate scaled across the company and to customer-facing products, we began tracking user feedback frequency globally across all applications. Knowing the feedback frequency let us set the widget to prompt users no more than twice a month across all applications.

Dashboard

User feedback captured by the widget is pushed to the uRate dashboard, a feedback management tool that records and sorts user ratings and user messages, and calculates average ratings received on a daily, weekly, and monthly basis. App owners can restrict access to feedback data to only members of their teams, and in accordance with Uber’s privacy policy, uRate protects the personal information of users with secure single sign-on and multi-factor authentication.


Figure 4: The uRate dashboard collects and analyzes user feedback.

To help translate feedback into measurable actions, the dashboard integrates with other Uber tools including engineering sprint boards, email, and messaging platforms. With these integrations, teams can stay in touch with feedback providers and create tasks linking to bug reports directly from the dashboard.

 

Implementation

 

Figure 5: The multi-layered uRate architecture is composed of a REST API, UI widget, web dashboard, web server, and MySql and S3 storage layers.

uRate’s extensibility is enabled by its framework-independent design. The widget is a Javascript module that integrates with React, AngularJS, and other vanilla JS applications that do not require external dependencies, such as Uber internal web pages.

The dashboard is hosted by a NodeJS web server. To collect data from remote applications that have the widget embedded, the dashboard subdomain exposes a set of HTTP endpoints to allow cross-domain requests through a REST API. The dashboard stores feedback data in a MySQL database that can be queried for more complex data analytics.

In a matter of months, uRate was adopted by 90 teams working on various internal and external tools and services, with plans to expand to Uber’s own engineering blog and beyond. Users make on average 4,000 rates a day using the platform, and their feedback has helped teams identify areas of improvement, create actionable goals, and measure their progress.

But, has uRate actually improved our services? To answer that, we take a look at how engineers working on Whober, our employee directory tool, used uRate to optimize search on the platform.

 

Whober: a case study

As Uber grew, it became increasingly difficult to navigate the organization and find information on employees. To enable quick and easy searching by employees for their peers, the Employee Productivity team built Whober, an internal portal that consolidates employee data into searchable user profiles.

FIgure 6: The expanded uRate widget on a sample Whober user profile.

After embedding uRate on the Whober webpage, the team noticed a common trend emerging from the bug reports and feature requests: employees were asking for more user fields, such as job title and team, to be searchable.

Leveraging uRate feedback, Whober engineers determined common search use cases that were currently not supported by the platform, and devised a solution to reroute these searches to another Uber service capable of searching across all user fields. However, feedback on this update indicated that users preferred to stay on the Whober webpage. The team realized that they needed to build a more powerful internal search option. With the help of uRate, Whober engineers were able to diagnose user pain points and develop a blueprint for an Advanced Search feature that allows for more fine-tuned searching across a variety of user fields, including job title and team.

 

Moving forward

At Uber, we believe that feedback is essential to developing the best technology possible. As uRate continues to scale with the goal of becoming the feedback management platform for all of Uber, we hope to enable teams to become even more in tune with user needs by striving for a more collaborative and responsive engineering workflow.

If you are as customer-obsessed as we are, apply for a role with Uber Engineering!

 

Subscribe to our newsletter to keep up with the latest innovations from Uber Engineering.