Due to inherent hardware constraints, the following problems have to be tackled on embedded and mobile devices:
- Executable size: We have to watch the size of our program, because we do not have that much RAM and persistent memory on embedded devices. Additionally, there are application size limits on mobile platforms.
- Startup time: Despite slower hardware, users aren't willing to wait for an embedded device's seconds-long startup.
- Application responsiveness: This is even more important here than for desktop applications, because on an embedded device it will be often a single, full-screen application running. On mobile, we do not want to block the UI waiting for an unreliable network transmission either.
- UI fluidity: The user still expects fluid and state-of-the art GUIs even on low-end mobile and embedded devices.
- Algorithmic improvements: As many low-end embedded devices don't even have a floating point (FP) unit, often, we have to resort to low-precision computations and approximate mathematical methods.
All these problems can appear in the traditional desktop environment, but are much more prominent in embedded and mobile environments, as they will be amplified by slower hardware. The problem we do not have elsewhere, and which is of the highest importance for embedded and mobile devices, is power management. We will discuss that in the next subsection.