Native or cross-platform: deciding on evidence rather than preference
Both approaches build excellent products. The decision follows device capability requirements, team composition and roadmap shape.
Users judge an app in the first few seconds. Startup time, scroll smoothness and battery drain are what they actually notice.
The time from tap to usable content is the most visible performance characteristic an app has. Work done eagerly at launch — initialising analytics, loading configuration, warming caches — accumulates until start becomes noticeably slow.
Defer everything not needed for the first screen, initialise heavy dependencies lazily, and show meaningful content as soon as it is available rather than a spinner until everything is ready.
Dropped frames come from doing too much work per frame: layout that is too complex, images decoded synchronously, or business logic running on the interface thread.
Battery complaints usually trace to background location, frequent wake-ups, or chatty networking that prevents the radio from sleeping.
Batch network requests, respect system scheduling for background work, and reduce polling in favour of push where possible. Users uninstall apps they believe drain the battery, whether or not the belief is precisely accurate.
Simulator performance tells you almost nothing about the experience on a three-year-old mid-range Android phone, which is what a large part of your audience is using.
Keep a small device lab covering the range your analytics show, and track startup time and frame statistics as release gates rather than investigating them after complaints.
Measured performance and felt performance are different things, and users only experience the second. An app that shows meaningful content in stages feels faster than one that waits and then shows everything.
Use skeleton screens rather than spinners so the layout is established before content arrives, avoiding a jarring shift. Respond to touches immediately even when the underlying work has not completed — an optimistic state that reconciles later reads as instant.
Prefetch what the user is likely to need next based on where they are. Small anticipatory work removes visible waiting at the moments people notice it most.
Under two seconds to usable content is a reasonable target on mid-range hardware. Beyond about four seconds, abandonment rises noticeably.
Platform profilers show a timeline of startup work. The cause is usually a small number of synchronous initialisations that can be deferred.
Yes, for installation and update conversion, particularly on limited connections and cheaper devices. Removing unused assets and libraries is usually straightforward and worthwhile.
Keep reading
Both approaches build excellent products. The decision follows device capability requirements, team composition and roadmap shape.
Store listings are a search and conversion problem. Most of the available improvement is in the first screenful.
Anything shipped to a device can be inspected and modified. Security has to live on the server, with the client hardened rather than trusted.