-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Description
Coming from here
Background:
The Expensify App currently tracks app startup performance using the BootsplashVisible span with four child spans: BootsplashVisibleOnyx, BootsplashVisibleLocale, BootsplashVisibleNavigation, and BootsplashVisibleHider. Each of these high-level spans encompasses multiple sub-operations - for example, BootsplashVisibleNavigation includes Pusher connection setup, navigation container readiness, and OpenApp API calls, while BootsplashVisibleLocale includes loading translation files and importing emoji data.
Problem
When engineers investigate slow app startup in Sentry and see that BootsplashVisible or its child spans took several seconds, if they lack granular data showing which specific sub-operations contributed to the total duration, then they cannot pinpoint the actual performance bottleneck or determine where optimization efforts should be focused.
Solution
Implement 9 new telemetry spans that break down the four existing high-level spans into their measurable sub-operations, focusing only on operations that consistently take longer than 100ms during testing.
- BootsplashVisibleOnyx
- ONYX_MIGRATIONS - Tracks Onyx database migrations (RenameReceiptFilename, RenameEmojiSkinTone, ConvertPolicyChatReportIDsToString)
- BootsplashVisibleLocale
- TRANSLATIONS_LOAD - Tracks loading locale-specific translation files via dynamic imports
- EMOJI_IMPORT - Measures importing locale-specific emoji data
- BootsplashVisibleNavigation
- PUSHER_INIT - Tracks Pusher WebSocket connection initialization
- APP_OPEN - Measures the OpenApp or ReconnectApp API call duration including network time and response processing
- BootsplashVisible
- ROOT_READY - Measures from NavigationRoot mount to the onReady callback firing
- PUBLIC_ROOM_CHECK - Measures the overall time spent checking if a deep link leads to a public room
- PUBLIC_ROOM_API - Specifically tracks the OpenReport API call made during that check for unauthenticated users (child of PUBLIC_ROOM_CHECK)
- DEEP_LINK - Measures the time from calling Linking.getInitialURL() to finishing deep link processing
Operations under 100ms (like IntlStore.load(), setLocale(), individual emoji trie building) are not instrumented to avoid telemetry overhead while focusing on the actual performance bottlenecks.
Draft PR
Spans measured on heavy account.
Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~022018718451101455196
- Upwork Job ID: 2018718451101455196
- Last Price Increase: 2026-02-03
Issue Owner
Current Issue Owner: @Metadata
Metadata
Labels
Type
Projects
Status