Nobody likes using a slow app and no engineer likes writing one. As the codebase grows and the number of engineers working on it increases , the task of keeping performance at top speeds gets harder. Performance issues become even more pronounced, yet harder to detect, as the user base expands into emerging markets. Programmers in San Francisco must understand how their app works on a 2G network using a 5-year old Android phone. Addressing these challenges is the job of Uber’s Mobile Performance Team.
To surface hidden performance problems, we instrument our app to send back production metrics on runtime of core functions and user flows. This instrumentation is lightweight and done transparently at build time, allowing for deep tracing without polluting the source with debug code. This provides developers visibility into what's actually happening in production and also gives them the power to enable deeper tracing to root out specific problems.
Our current focus is automated regression detection and prevention. Once a problem is diagnosed and fixed we work to prevent it from coming back. We proactively develop systems that automatically run performance tests on code changes at Uber scale. Doing this on a wide variety of real devices without slowing down the developer process is the challenge ahead of us.