Mobile Application Development
Mobile application development is the complete process of creating all of the designs, assets, and code required to implement an software application that runs on a mobile device and all of its supporting services that are accessed from the mobile application via the a network connection and run on remote computing resources.
Mobile Application and Device Platforms
Currently, there are two dominant platforms in the modern smartphone market. One is the iOS platform from Apple Inc. The iOS platform is the operating system that powers Apple's popular line of iPhone smartphones. The second is Android from Google. The Android operating system is used not only by Google designed devices, but is also used by many other OEMs for their own smartphones and for other types of devices.
There are a number of differences and similarities between these two platforms. Both of these platforms have many hundreds of millions of devices that utilize the operating system. While Apple uses iOS exclusively for its own devices, Google makes Android available to other companies provided they meet certain requirements such as including certain Google applications on the devices they ship.
Types of Mobile Applications
While there are many different ways to develop applications to run on mobile devices, there are four main categories of mobile applications development approaches:
- Native Mobile Applications
- Hybrid-Native Applications
- Hybrid-Web Appliations
- Progressive Web Applications
Each of these approaches to developing mobile applications has it's own set of advantages, disadvantages, and concerns.
Hybrid-native mobile applications can be written in variety of different programming languages and frameworks but are compiled into a native application running directly on the operating system of the device.
Hybrid-web mobile applications can be written using a variety of programming languages and frameworks and run within a web container on the device.
Comparing Native vs. Hybrid Apps
At the highest level, there are four main ways that native apps differ from hybrid apps as illustrated in the following diagram.
One problem with native mobile application development is that it is a fairly highly specialized skill, and while there are large and vibrant communities of developers trained in C and Java, there are many fewer who are as knowledgeable in the platform specific versions of the languages and their respective IDEs. In fact, skilled native app developers are in such demand, that many companies are hard pressed to hire and retain them on staff, and instead they frequently have to resort to outside 3rd party design and development houses to build their apps for them.
The two main variants of the hybrid approach are hybrid-native and hybrid-web. In the hybrid-native case, the web application code is compiled to a native application. In the hybrid-web case, the web application runs inside of a container on the device.
The Mobile Application Development Lifecycle
There are two interlinked core components of a mobile application: 1) the mobile application “Front-End” that resides on the mobile device, and 2) the services “Back-End” that supports the mobile front-end.
In the early days of the modern smartphone applications era, mobile applications went through a similar evolution as early web sites. At first, the applications and sites where wholly contained within themselves and acted as little more than static advertisements for the brand, company, product, or service.
However, as connectivity and network capabilities improved, the applications became increasingly connected to sources of data and information that lived outside of the app itself, and the apps became increasingly dynamic as they were able to update their UI and content with data received over the network from queries to data sources.
As a result, the mobile front-end application is increasingly dependent upon and integrated with a set of back-end services that provide data to be displayed or consumed through the mobile front-end. Such data can include, for example, product information for ecommerce apps or flight info for travel and reservation apps. For a mobile game, the data could include new levels or challenges and scores or avatars from other players.
The mobile front-end obtains the data from the back-end via a variety of service calls such as APIs In some cases, these APIs may be owned and operated by the same entity developing the mobile application. In other cases, the API may be controlled by a third party and access is granted to the mobile application via a commercial arrangement. For example, a developer may obtain social media or advertising content by making calls to media or advertising company services. In this case, a developer may have to sign a contract in order to obtain credentials and a key that grants access to the API and governs how that developer can use it, how much it will cost, or how frequently it may be called, or how much data can be requested over what time period.
In other cases, the mobile developer may be responsible for developing, implementing, and managing the back-end services for their own application. In that situation, the mobile developer may not be an expert or even particularly skilled in spinning up and running back-end infrastructure and support services. Consequently, they may prefer to take advantage of a cloud services provider that handles all of the drudge work and heavy lifting of managing those back-end capabilities so the developer can focus purely on the features and functionality they are using in their app without having to worry about how it scales securely, reliably, and robustly.
The Mobile Application Front-End
The mobile front-end is the visual and interactive part of the application the user sees and works with. It usually resides on the device itself, or there is at least an icon representing the app that is visible on the home screen or is pinned in the application catalog of the device. The application can be downloaded from the platform app store, side-loaded directly onto the device, or can be reached through the device’s browser.
When a developer says they are a mobile application programmer, they are most often referring to this front-end part of the application and they are skilled in the languages and technologies that are used to create this front-end application.
Depending on the size of the team producing the app, there may be many different people involved in the design and development of the front-end mobile app. The team size can range from a single developer who does everything associated with building the app, to tens, hundreds, and more people with specialized skills who all may contribute to the production of the app. For example, there may be dedicated creative/graphics designers who are responsible for creating visual elements of the applications like icons, backgrounds, colors, themes and other parts of the app. The team may also have user experience and user interface designs who work on the layout of the components, how they interact with each other and the user. In the case of certain types of games, a team may include motion graphics developers and even physics engineers who develops engines that govern the physics of how components move in the app like a car in a racing game.
Regardless of the size of the team, a critical component of the development effort is the communications and integration services which are responsible for making network calls to the back-end support services to retrieve data using in the application or update the data in the back-end systems with new information generated from the app.
These back-end services are typically accessed through a variety of application programming interfaces, most commonly known as APIs. There are many different types of APIs and there are also a wide variety of means and styles of accessing them. The key point is that these APIs must be integrated into the application. While some back-end service APIs are available directly to the application through calls in the platform itself, many of the specialized services have to be integrated into the app via a software development kit, commonly known as an SDK. Once the SDK has been added to the app via the development environment, then the application can make use of the APIs defined in the SDK.
An example of a type of back-end service that could be accessed from a mobile front-end application could be a database that contains information used in the app. In order to access the database directly, the mobile developer would have to know the network location of the database, the protocol for accessing the database, the credentials for authenticating and authorizing the data access, and the specific database commands needed to extract the needed data.
Alternatively, if there is a specialized application API available for the database, the developer may only have to know the parameters needed in a method call to get or updated the needed information. In some cases, the mobile developer may develop these APIs themselves or use the API definition provided to them by the owner/operator of the back-end resource.
The Mobile Application Back-End
Regardless of what front-end platform or development methodology is being used, the fact remains, the delivering high quality mobile applications that delight and retain users are increasingly dependent on sophisticated back-end services that provide features and functionality that expressed through the mobile front-end.
Given the critical importance of back-end services for the success of the mobile application, the developer has several important architectural decisions that they must make. These decisions include which services should they build themselves and which third party services should they leverage, and then should they run and maintain their own services or should they take advantage of 3rd party services.
The answer is increasingly clear that for developer productivity and efficiency, mobile app programmers should only build their own services if they are highly specific to the domain of the application and embody unique intellectual property, and that even for those services they build themselves, they should almost always leverage cloud based services to run and maintain the infrastructure supporting their private services.
Key Mobile Application Services
There are literally hundreds of cloud and 3rd party services that mobile application developers can leverage to speed the implementation and delivery of their applications. However, it’s unlikely that a developer is going to be able to become an expert in each of these individual services. I
Instead, the mobile developer should look for a development system that makes it easier for the mobile developer to integrate, use, and consume the most frequently required mobile capabilities into their application quickly and easily, while still preserving the freedom to take advantage of the many individual services available.
- Analytics and User Engagement
- User Sign-up/Sign-in and Management
- Real Device Testing
- Real-time and Offline
- Application Logic
- AI/ML and Coversational Bots
- Image and Video Recognition
- Innovative and Use Case Specific
Needless to say, there are many other types of services a developer could take advantage of.