Golen says speed shapes how premium an app feels, and users are the stakeholders most affected by performance. He argues that user champions can drive word of mouth and loyalty. A vague goal to keep all interactions under 100 milliseconds raised questions about which interactions mattered and why that threshold was chosen.
User-Focused Performance Tracking
Speaker
Tim Golen of Expensify discusses user-focused performance tracking at the React Universe Meetup, hosted by Callstack.
Golen reviews approaches from Shopify and Coinbase. Shopify wraps components to measure render time, but he says doubling the component tree was too costly for Expensify’s large app. Coinbase tracks app render completion and navigation blocking time; Expensify adopted a similar focus on a smaller set of key interactions.
Golen’s rules are to quantify performance and focus on changes users can notice. Expensify tracks app startup and opening chats from the main navigation, a preview, or a thread, including the 50th and 90th percentiles. The team also counts error pages and is interested in measuring total time spent on loading skeletons.
Expensify segments measurements by environment, app version, and platform, using StatsD and Grafana. The team shares weekly reports, establishes thresholds from a baseline, and creates assigned issues when metrics cross them. Golen says faster builds, from 25 minutes to 7 seconds 90% of the time with the React Native Enterprise Framework, could also help teams catch performance regressions in pull requests.
Takeaways
- Choose a small set of user-visible interactions to track instead of measuring everything.
- Quantify performance changes before optimizing; code that looks inefficient may not affect users.
- Track P50 and P90 by environment, version, and platform to spot regressions.
- Use a baseline and agreed thresholds to turn weekly metrics into assigned fixes.
- Shorter build times can make it practical to check for performance regressions on every pull request.
Mentioned in this talk
Search inside this talk
What was claimed 15
- usesExpensify uses React Native
“our React Native rebuild of our front end”
0:22inBringing best minds to advance React NativeYouTube Verified3 sources· Talk
- builtstate management tool
“I also built our state management tool, Onyx.”
YouTube Unverified1 source· Talk
- works atover 10 years
“I’ve been at Expensify for over 10 years.”
YouTube Unverified1 source· Talk
- builtExpensify built Expensify Chat
“we developed it into a chat-focused tool.”
YouTube Unverified1 source· Talk
- metricExpensify: Tracks time to open chats from main navigation, a chat preview, and a thread.
“the time to open a chat from our left-hand navigation ... from a chat preview; and ... from a thread.”
YouTube Unverified1 source· Talk
- metricExpensify: Tracks the 50th and 90th percentiles for measured interactions.
“For each of these, we track the 50th and 90th percentiles.”
YouTube Unverified1 source· Talk
- metricExpensify: Tracks application startup time until the app is ready for the user.
“We measure the time to open the application until it's ready for the user to use.”
YouTube Unverified1 source· Talk
- metricExpensify: Interested in measuring and counting how long loading skeletons are shown.
“I'm really interested in measuring and counting how long our loading skeletons are shown.”
YouTube Unverified1 source· Talk
- metricExpensify: Tracks how often users see an error page.
“We also track the number of times users see an error page.”
YouTube Unverified1 source· Talk
- usescharting UI
“Grafana, a charting UI that taps into all the data.”
YouTube Unverified1 source· Talk
- usescollects performance data
“we use StatsD, which collects the data”
YouTube Unverified1 source· Talk
- featureExpensify: Reports performance metrics weekly and opens issues when metrics cross agreed thresholds.
“Anytime a metric goes below one of those thresholds, we open an issue, assign it to someone, investigate it”
YouTube Unverified1 source· Talk
- usesfor remote builds
“we're using it for remote builds.”
YouTube Verified3 sources· Talk
- metricReact Native Enterprise Framework: Remote builds can go from 25 minutes to 7 seconds 90% of the time.
“It can take our build times from 25 minutes down to 7 seconds 90% of the time.”
YouTube Unverified1 source· Talk
- usesExpensify uses
GitHub Actions
to check pull requests for performance regressions“a GitHub Action that runs on every PR, compares what’s on main to what’s in your PR, and checks whether there was a performance regression.”
YouTube Verified2 sources· Talk






