The mobile computing environment is constrained in many ways. Mobile elements themselves are resource-poor and unreliable. Their network connectivity is often achieved through low-bandwidth wireless links.
These severe restrictions have a great impact on the design and structure of mobile computing applications and motivate the development of new computing models.
These mobile computing models must provide efficient access to both existing and new applications which is a key requirement for the wide acceptance of mobile computing.
An important design consideration is the type of functionality assigned to mobile hosts. Mobile units are still characterized as unreliable and prone to hard failures, i.e., theft, loss or accidental damage.
Thus following requirements must be considered for mobile computing environment:
- Type of Application (Native or Mobile Web) :
- Before designing mobile application you need to determine type of application.
- If your application requires local processing. access to local resources than consider designing a native application.
- A native application is hard to maintain. requires separate distribution and upgrade infrastructure, are compatible only with target device/platform, requires more effort (sometimes huge) to port on different devices.
- A mobile web application is compatible with all devices with internet connection and a browser
- Target device :
- Target device and platform (OS) plays a key role throughout design decisions making process.
- Design decisions are influenced by target device’s screen size, resolution, orientations, memory, CPU performance characteristics. Operating systems capabilities, device hardware, user input mechanism (touch/non-touch), sensors (such as GPS or accelerometer etc.
- User experience:
- User interface should be rich, intuitive and responsive. While using mobile application user is often distracted by external or internal (e.g. incoming call when user is in middle of a wizard) events. These events have to be factored in design.
- Screens should be identified with consideration that user is often focused on discrete individual task. Long data entry forms may irritate user and should ask for absolutely required data/information.
- Resource Constraint:
- Every design decision should take into account the limited CPU, memory and battery life. Reading and writing to memory, wireless connections, specialized hardware, and processor speed all have an impact on the overall power usage.
- One cannot afford a long running process in application.
- In some cases, application processing should be offloaded from the device to avoid excessive resource consumption e.g. using notification or app directed SMS instead of polling to monitor a value/flag on server.
- Multiple Platforms:
- There is high technology fragmentation in Mobile world. It is very unlikely that an application will target only one platform or only one device. In near future, requirement like same code base should support iPhone and iPad or Android Phone and Android tablet will arise. Architect should consider portability as important architectural goal.
- If you are developing for more than one device, design first for the subset of functionality that exists on all of the devices, and then customize for device-specific features when they are detected.
- Devices are more vulnerable than desktop, primarily due to lack of awareness. Moreover device can be lost easily. Ensure that the device – server communication is secured and server accepts request only from authentic source (device).
- If you are storing any confidential application or configuration data locally. ensure that the data is encrypted.
- Network Communication:
- Network communication on device is slow and costly. Reduce network traffic by combining several commands in one request e.g. committing added, updated and deleted record in one request instead of firing separate request on each add/update/delete.
- Compress large text / XML data to lesser network traffic. Design for asynchronous communication.
Mobile elements are also resource poor relative to static hosts. For these reasons, there are approaches that treat the mobile unit as a dumb terminal running just a user-interface.
Besides the partition of data and computation of mobile applications between mobile and static elements, two important considerations in designing software system for mobile computing are: what is on appropriate model for mobile computing systems, and whether mobility should be mode transparent to applications.