Every one of these is a bug that does not exist until the build leaves your machine, which is why they are expensive. They are also entirely predictable.
Memory
The editor will happily hold textures the device cannot. Worse, it holds them in a way that never fails, so you get no signal at all. The device fails hard — a crash with no stack trace, or a silent kill by the OS.
Catch it: profile on the lowest device you intend to support, not the newest. Watch peak allocation during scene transitions, which is where it spikes.
Thermal throttling
Your game runs at sixty frames for the two minutes you tested. At minute eight the phone is hot, the SoC downclocks, and the frame rate halves. Nobody catches this in a two-minute test, which is how it ships.
Catch it: one twenty-minute continuous session on a real device, with the frame rate logged throughout.
Shader compilation
Shaders are already compiled in the editor. On device they compile on first use, which means a freeze the first time a new effect appears — usually mid-combat, usually the worst possible moment.
Catch it: warm up shader variants at load. Then test on a device with a cleared cache, because a warm cache hides the problem completely.
Storage and permissions
The editor writes anywhere. The device has a sandbox, a permissions dialog, and a user who may say no. Saves fail silently if you assume otherwise.
Network conditions
Your connection is fast, stable and local. Your player is on 3G in a lift. Anything that waits on a response needs a timeout, a retry and a state for having neither.
This is what we do day to day — game, app and website QA at Factorial Studio.