{"id":389,"date":"2015-01-26T11:16:03","date_gmt":"2015-01-26T11:16:03","guid":{"rendered":"http:\/\/adriangrigoras.com\/blog\/?p=389"},"modified":"2017-11-25T15:28:05","modified_gmt":"2017-11-25T15:28:05","slug":"mobile-application-checklist","status":"publish","type":"post","link":"https:\/\/adriangrigoras.com\/blog\/mobile-application-checklist\/","title":{"rendered":"Mobile Application Checklist"},"content":{"rendered":"<h3>Design Considerations<\/h3>\n<ul>\n<li>You have determined the device types you will support.<\/li>\n<li>You have designed the application with occasionally-connected limited-bandwidth scenarios in mind.<\/li>\n<li>The user interface design is appropriate for the mobile device.<\/li>\n<li>You did not try to reuse a desktop application design or user interface.<\/li>\n<li>You have considered device resource constraints for battery life, memory size and program speed.<\/li>\n<\/ul>\n<h3>Authentication and Authorization<\/h3>\n<ul>\n<li>You have designed authentication for over-the-air, cradled synchronization scenarios, Bluetooth discovery, and local SD card scenarios.<\/li>\n<li>You have considered that different devices may have variations in their programming security model, which can affect authorization to access resources<\/li>\n<li>You did not assume that security mechanisms available on larger platforms will be available on a mobile platform.<\/li>\n<li>You have designed authentication for access to Bluetooth devices.<\/li>\n<li>Trust boundaries are identified within your mobile application layers.<\/li>\n<\/ul>\n<h3>Caching<\/h3>\n<ul>\n<li>Performance objectives are identified, such as minimum response time and battery life.<\/li>\n<li>You are caching static data that is useful, and avoided caching volatile data.<\/li>\n<li>You have considered data caching requirements for occasionally-connected scenarios.<\/li>\n<li>Your design supports low memory detection, and prioritization of data to discard, as available memory decreases.<\/li>\n<li>You chose the appropriate cache location, such as on the device, at the mobile gateway, or in the database server.<\/li>\n<\/ul>\n<h3>Communication<\/h3>\n<ul>\n<li>Your design supports asynchronous, threaded communication to improve usability in occasionally-connected scenarios.<\/li>\n<li>You have considered the effects of receiving a phone call during communication or program execution.<\/li>\n<li>Communication over un-trusted connections, such as Web services and other over-the-air methods, is protected.<\/li>\n<li>You have considered using Web services for communication when you must access data from multiple sources, interoperate with other applications, or work while disconnected.<\/li>\n<li>You have considered message queuing when you need guaranteed delivery, asynchronous messaging, message security, or transaction support.<\/li>\n<\/ul>\n<h3>Configuration Management<\/h3>\n<ul>\n<li>Your design supports the saving and restoration of configuration data after a device reset.<\/li>\n<li>Merge replication with a \u201cbuy and configure\u201d application from a third party is used, if the enterprise data is in Microsoft SQL Server 2005 or 2008 and desire an accelerated time to market.<\/li>\n<li>You are using a binary format instead of XML for configuration files due to memory limitations.<\/li>\n<li>You are protecting sensitive data in device configuration files.<\/li>\n<li>You have considered using compression library routines to reduce the memory requirements for configuration and state information.<\/li>\n<li>You have considered using the Mobile Device Manager interface to manage group configuration of devices when you have an Active Directory infrastructure.<\/li>\n<\/ul>\n<h3>Data Access<\/h3>\n<ul>\n<li>You have designed application to ensure data integrity.<\/li>\n<li>You are using the device database services (such as SQL Server Compact Edition) when your application must access a disconnected database.<\/li>\n<li>You are using merge replication to synchronize large volumes of data in one operation over a high bandwidth network connection.<\/li>\n<li>You have considered the overall size and impact on performance when you use XML to store or transfer data.<\/li>\n<li>You are using custom data transfer objects instead of DataSets to reduce memory overhead and improve performance.<\/li>\n<li>You are using the Microsoft Sync Framework when you must synchronize individual sets of a data over a remote connection.<\/li>\n<\/ul>\n<h3>Debugging<\/h3>\n<ul>\n<li>You understand debugging costs associated with devices you need to support.<\/li>\n<li>You are using an emulator for initial testing and debugging.<\/li>\n<li>You are using the device for final testing.<\/li>\n<li>You have tested fully-disconnected scenarios in the design.<\/li>\n<li>You understand that it may be difficult to maintain context between different types of code running on a device.<\/li>\n<\/ul>\n<h3>Deployment<\/h3>\n<ul>\n<li>Your design supports over-the-air deployment when users must be able to install and update applications while away from the office.<\/li>\n<li>You are using ActiveSync to deploy your application when the application relies heavily on a host PC.<\/li>\n<li>You are using the post-load mechanism to automatically load your application immediately after the Windows Mobile OS starts up when you are deploying a baseline experience running on top of Windows Mobile.<\/li>\n<li>You have included multiple device executables in the CAB when you are using CAB file distribution.<\/li>\n<li>Application will be deployed using an SD memory card if the application will be run only at a specific site and you want to manually control distribution.<\/li>\n<li>Does the application function on JailBroken\/Routed devices?<\/li>\n<\/ul>\n<h3>Device<\/h3>\n<ul>\n<li>The application is optimized for the device by considering factors such as screen size and orientation, network bandwidth, memory and storage space, and other hardware capabilities.<\/li>\n<li>Device-specific capabilities have been considered that will enhance your application functionality, such as accelerometers, GPUs, GPS, haptic (touch, force and vibration) feedback, compass, camera and fingerprint readers.<\/li>\n<li>You have designed a core functionality sub set when you are developing for more than one device.<\/li>\n<li>You have considered adding customization for device-specific features, including functionality to detect when the code is running on a device that can utilize this functionality.<\/li>\n<li>You have created modular code that can be removed if separate executable files are required due to device memory size constraints.<\/li>\n<li>Does the application make use of security features of the device to lock the sensitive date (e.g Keychain)?<\/li>\n<\/ul>\n<h3>Exception Management<\/h3>\n<ul>\n<li>Your application is designed to recover to a known good state after an exception.<\/li>\n<li>You did not use exceptions to control logic flow.<\/li>\n<li>Sensitive information in exception messages and log files are not revealed to users.<\/li>\n<li>Unhandled exceptions are dealt with appropriately.<\/li>\n<li>You have designed an appropriate logging and notification strategy for critical errors and exceptions.<\/li>\n<\/ul>\n<h3>Logging<\/h3>\n<ul>\n<li>You did not store sensitive information in log files.<\/li>\n<li>You have considered using the Mobile Device Manager to extract logs from mobile devices when you have an Active Directory infrastructure.<\/li>\n<li>You have considered using platform features such as health monitoring on the server, and mobile device services on the device, to log and audit events.<\/li>\n<li>You have considered logging in an abbreviated or compressed format to minimize memory and storage impact when you carry out extensive logging on the device.<\/li>\n<li>You have used OpenNetCF on the device if you do not require extensive logging.<\/li>\n<li>You have decided what constitutes unusual or suspicious activity on a device, and logged information based on these scenarios.<\/li>\n<\/ul>\n<h3>Porting<\/h3>\n<ul>\n<li>The application was re-written in its entirety when porting a Rich Client application from the desktop.<\/li>\n<li>The user interface has been redesigned for the smaller screen size when porting a Web application to a mobile device.<\/li>\n<li>You have researched details to discover what code will port without modification when porting a RIA client.<\/li>\n<li>You have researched and utilized tools to assist in porting.<\/li>\n<li>You have tested the custom controls which when porting to a mobile application and based on the results decided to rewrite to find an alternative.<\/li>\n<\/ul>\n<h3>Power<\/h3>\n<ul>\n<li>The user interface is not updated while the application is in the background.<\/li>\n<li>Communication methods that use the least amount of power necessary are used.<\/li>\n<li>Power profiles have been implemented to increase performance when device is plugged into external power and not charging the battery.<\/li>\n<li>Power consumption has been considered when using the device CPU, wireless communication, screen, or other power-consuming resources while on battery power.<\/li>\n<li>Device functionality is allowed to be powered down when not in use or not needed. Common examples are screen backlighting, hard drives, GPS functions, speakers, wireless communications.<\/li>\n<\/ul>\n<h3>Synchronization<\/h3>\n<ul>\n<li>Your design supports recovery when synchronization is reset, and is able to manage synchronization conflicts.<\/li>\n<li>You have considered the Microsoft Sync Framework when you want easy-to-implement one-way synchronization.<\/li>\n<li>You have considered using merge replication synchronization when you must support bidirectional synchronization to SQL Server.<\/li>\n<li>You have considered including over-the-air synchronization in your design when users must synchronize data when away from the office.<\/li>\n<li>You have considered including cradled synchronization in your design when users will be synchronizing with a host PC.<\/li>\n<li>You have considered store and forward synchronization using WCF over email or SMS (text message) mechanisms.<\/li>\n<\/ul>\n<h3>User Interface (UI)<\/h3>\n<ul>\n<li>You have provided the user with a visual indication of blocking operations; for example, an hourglass cursor.<\/li>\n<li>You did not place menu bars at the top of the screen as they are difficult to see when using a stylus or touch screen input.<\/li>\n<li>The design of your layout considers input from various sources. For example, making buttons large enough for devices that supports touch screen.<\/li>\n<li>Your design supports various screen sizes and orientations associated with devices you need to support.<\/li>\n<\/ul>\n<h3>Performance Considerations<\/h3>\n<ul>\n<li>Your design supports configurable options to allow the maximum use of device capabilities.<\/li>\n<li>You have considered using lazy initialization to optimize for mobile device resource constraints.<\/li>\n<li>You have considered limited memory resources and optimized your application to use the minimum amount of memory.<\/li>\n<li>You have considered using programming shortcuts as opposed to following pure programming practices that can inflate code size and memory consumption.<\/li>\n<li>You have balanced performance requirements with power consumption requirements.<\/li>\n<\/ul>\n<p>Source: apparch.codeplex.com<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Design Considerations You have determined the device types you will support. You have designed the application with occasionally-connected limited-bandwidth scenarios in mind. The user interface design is appropriate for the mobile device. You did not try to reuse a desktop application design or user interface. You have considered device resource constraints for battery life, memory\u2026 <span class=\"read-more\"><a href=\"https:\/\/adriangrigoras.com\/blog\/mobile-application-checklist\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-389","post","type-post","status-publish","format-standard","hentry","category-architecture"],"_links":{"self":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/comments?post=389"}],"version-history":[{"count":3,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/389\/revisions"}],"predecessor-version":[{"id":834,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/389\/revisions\/834"}],"wp:attachment":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/media?parent=389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/categories?post=389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/tags?post=389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}