What initially appears as a straightforward task of creating a new mobile app, often unfolds into a complex web of challenges. The journey from concept to deployment is fraught with ‘unknown unknowns’, leading projects to extend beyond their anticipated timelines and budgets. Here, I look into the real nature of mobile development, aiming to shed light on common pitfalls and offer insights to steer projects towards success with minimal rework and less risk of cost overrun.
There are generally two classes of challenges that tend to cause setbacks, overlooked technical details at a lower level and broader high level issues that only emerge at a later stage.
Low Level Nuances
The main technical sources of complexity in mobile development stem from the inherent diversity of ‘real life’ including:
Time zones – When developing mobile applications that will be used internationally, it’s crucial to support multiple time zones. This means that the application should display the correct local time, considering the user’s current time zone. Daylight Saving Time adds another layer of complexity. This involves detecting the User’s Time Zone, automatically adjusting for DST and correctly scheduling things across zones. A best practice in mobile development is to use Coordinated Universal Time (UTC) for storing dates and times and converting to the local time zone only when displaying times to the user.
Languages – Catering for multiple languages in mobile development, known localisation, is crucial for creating apps that provide a seamless and inclusive user experience to a global audience. It’s best practice to separate code and content so that it can be easily translated during development or in the future. Some languages, such as Arabic and Hebrew, are read from right to left. Internationalisation includes supporting RTL text directions in the app’s layout and ensuring that user interface elements adjust accordingly. Beyond translation, localisation may require adapting content to fit cultural norms and expectations, such as changing images, colours and content to be culturally appropriate. Apps can automatically detect the device’s language settings and display content in the corresponding language. However, it’s also a good practice to allow users to manually select their preferred language from within the app, overriding the default device settings.
Locales – Dates, times, currencies and numbers should be formatted according to the local conventions of the user’s language or region. This includes using the correct currency symbols, decimal separators and calendar formats.
Encoding schemes for data – Encoding schemes determine how characters and information are represented digitally in software applications. Since mobile apps often interact with different systems, APIs, and databases that might use various encoding formats, developers need to ensure seamless and accurate data handling and representation. For example, UTF-8 is widely used for its ability to represent any character in the Unicode standard, making it a popular choice for mobile applications that need to support multiple languages. However, other systems or legacy data might use encoding such as ASCII, ISO 8859-1, or even country-specific standards. Incorrect handling of encoding can lead to data corruption, where characters are displayed as garbled text or question marks.
Currencies and preferred ways of paying across countries – This is especially important for applications that handle transactions, e-commerce or any form of financial exchange. It’s important to provide convenience and familiarity and also ensure compliance with local regulations and financial practices. Think about dynamic currency conversion, localisation of pricing and nuances of different currency formatting and rounding. Integrate with the expected local payment systems and comply with regulations such as GDPR in Europe and PCI DSS for payment card security.
Multiple network operators, country codes and phone number formats – Care needs to be taken especially for applications that involve communication, authentication, or any form of data exchange tied to the user’s phone number. Phone numbers vary significantly in format across different countries, including variations in length, grouping and the use of area codes. Mobile applications need validate and format phone numbers for storage and internal use, while also displaying them in a locally familiar and readable format to the user.
Multiple input types – Catering for multiple input types in mobile development is essential to ensure that applications are accessible and provide a seamless user experience across various devices with different input capabilities. Users will be accessing apps from devices that range from smartphones and tablets to wearables and hybrid devices. These devices may support touch, stylus, keyboard, mouse, voice input or even gestures and motion sensors as input methods. Ensuring that your application is accessible to all users, including those with disabilities, is not only an ethical consideration but also expands your app’s reach.
Beyond the above technical considerations, several operational challenges often emerge:
Handling changes in SIM cards. This is a critical aspect, particularly for applications that rely on network connectivity or use the telephone number as part of the user’s identity or for authentication purposes. A new SIM card, especially when traveling internationally, may result in data roaming, leading to higher data costs for the user. Apps should be sensitive to these scenarios to avoid causing unexpected charges. Android and iOS offer APIs to detect changes in the SIM card status. Provide a straightforward process for users to update their telephone number or other relevant details within the app.
Managing high data costs associated with roaming. Users may not always be aware of the increased costs associated with data roaming or may forget to disable data usage for certain apps, leading to unexpectedly high charges. Both Android and iOS platforms offer APIs that allow apps to check the network status and determine if the device is currently roaming. Provide users with options to control data usage while roaming.
Ensuring data integrity during updates or when the device encounters storage limitations. Proper data management ensures that the app functions as intended, even when storage is low or during the update process. Use atomic operations for data updates, ensuring that any change to the data store is completed entirely or not at all. This approach prevents partial updates that could leave data in an inconsistent state. Carefully script and test data migrations between app versions. Ensure that these scripts account for various starting states, especially if users might be updating from several versions back. Implement mechanisms to backup user data before starting the update process. Provide options for data recovery in case the update fails or corrupts data. Notify users when storage space is low and could impact the app’s functionality.
Adapting to users’ changing registration details or service opt-outs. As users interact with mobile applications, their preferences, personal information, and consent to receive communications or services can change over time. Design user profiles in your application to be easily updatable. Provide intuitive interfaces for users to modify their personal information, preferences and consent statuses directly within the app. Ensure that changes to user profiles are reflected in real-time across all systems and services. This requires a robust backend architecture that can propagate updates immediately to avoid discrepancies.
Higher Level Problems
The financial planning for mobile development projects frequently underestimates the true cost, focusing narrowly on the initial development phase. However, the lifecycle of a project often involves re-work, especially as it is near or shortly after completion and new requirements emerge. This phase of refinement, while necessary, can significantly inflate costs if not managed judiciously. Plan in some financial and development contingency.
The role of experience cannot be overstated. Projects often falter when handed over to developers who promise everything but under-deliver, necessitating costly overhauls or restarts. Choosing a reputable, rather than the cheapest, developer from the outset is crucial to mitigating these risks.
Support and maintenance represents another often-overlooked aspect. All software development encounters issues, whether due to bugs or user misunderstandings. Incorporating comprehensive diagnostics and logging from the early stages can significantly reduce support costs down the line.
Lastly, new devices are often released with updated operating systems, enhanced hardware capabilities, different screen sizes and novel features. Users expect apps to work flawlessly on their devices, regardless of whether they are using the latest model or an older version. Failing to support new smartphones can lead to negative user experiences, including app crashes, poor performance and compatibility issues. You should periodically test apps on the latest devices and operating systems to identify and address any compatibility issues.
In summary, real-world mobile development is a complex field that demands a thorough understanding of both technical and operational challenges. By recognising and planning for these complexities from the outset, developers and project managers can navigate this intricate landscape more effectively, leading to successful, cost-efficient projects with fewer surprises.








