Skip to content

[Due for payment 2026-06-22] [quality] Open Web Modals and Dropdowns Instantly #90146

@mountiny

Description

@mountiny

Coming from proposal here

Strategy

Expensify's LTV depends on daily-driver retention — users who open the app dozens of times per day to expense, scan, and approve. The perceived speed of every interaction compounds across thousands of sessions per user per year. A snappy app feels like a tool you trust; a sluggish one feels like work. We can move LTV by making the app feel instant where it currently makes users wait.

Background

Expensify's Modal and PopoverMenu are the centralized components driving every dialog, dropdown, action sheet, and confirmation across core flows — Search filters, "more options" on a report, and all confirmation modals. Today they animate on open and close with default timings of 300ms in / 200ms out for modals (500ms / 400ms for iOS right-docked panels) and 300ms in/out for popovers — so a single open+close round-trip costs 500–900ms before the next interaction can begin. The animations are uniform across iOS, Android, and web; only one path (Popover with disableAnimation) currently shortcuts to 1ms, and it isn't used broadly.

Problem

When a customer works through a core expense flow, every time they open a confirmation modal, action menu, or filter dropdown, they wait 500–900ms before they can interact again — turning every routine click into a perceptible pause.

Solution

Reduce Modal, Popover, and PopoverMenu animation timings to 1ms on web only. The 1ms value is a starting point — per-component timings can be tuned (e.g. dropdowns feel fine fully unanimated, while modals may want a softer landing), and if design wants more signal we can A/B test aggressive reduction vs full removal to let user behavior pick the long-term default.

Issue OwnerCurrent Issue Owner: @mallenexpensify

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2NewFeatureSomething to build that is a new item.

Type

No type
No fields configured for issues without a type.

Projects

Status
AWAITING DEPLOYMENT

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions