The summary.
THE KEY DISTINCTION IS WHETHER CONTROLS ARE DRAWN OR NATIVE
Drawn controls give identical behaviour everywhere and complete control. Native controls give platform conventions and accessibility by default, with more differences to handle.
CROSS-PLATFORM DOES NOT REMOVE THE NEED FOR NATIVE KNOWLEDGE
Configuration, debugging, store submission and some features all require it, in every framework.
And none removes the need to test on both platforms, physically.
UPGRADES ARE FREQUENTLY THE HARDEST PART OF MAINTENANCE
The framework, both platforms and every native package must stay compatible. Upgrade regularly in small steps, never after years.
Check package maintenance before adopting — abandoned ones become blockers.
USE VIRTUALISED LISTS, NEVER A SCROLL VIEW CONTAINING EVERYTHING
Rendering every child exhausts memory.
TREAT BEING OFFLINE AS A NORMAL CONDITION, NOT AN ERROR
Mobile connections are intermittent, and retry behaviour matters more than on the web.
BUILD A SMALL REPRESENTATIVE FEATURE BEFORE COMMITTING
Measure size, startup and scrolling on a modest device. Framework claims and low-end results differ.