Tuesday, August 13, 2013

Getting Started with Mobility, Part 1: Understanding the Landscape

In this series of posts, we're looking at how to get started as a mobile developer. Here in Part 1 we'll provide an overview of the landscape; in subsequent posts, we'll get down to the details of working in various platforms.

Part 2: Native iOS Development
Part 3: Native Android Development
Part 4: Native Windows Phone Development
Part 5: Native Windows 8 Development
Part 6: Hybrid Development in C# with Xamarin
Part 7: Hybrid Development in JavaScript with Titanium
Part 8: Hybrid Development in HTML5 with Icenium
Part 9: Mobile Web with Responsive Web Design
Part 10: A Back-end in the Cloud with Windows Azure Mobile Services

As a mobile developer, you may find yourself specializing in one particular platform (e.g. "I'm an Android developer") or perhaps supporting all of them ("I'm a mobile web developer") or specializing in mobile back-ends (services, data, security, and cloud). All of these are important.

The Front-End
You can develop mobile client apps natively, using a hybrid approach, or via mobile web. Let's look at them, one by one:
  • In native development, you are using a tool and language espoused by a mobile platform vendor as the official way to develop for their platform. Depending on the platform, there may be several endorsed languages or development environments to choose from. Native development is often considered the high road, because alternative approaches can sometimes compromise performance, limit fidelity to platform usability conventions, or restrict the functionality available to apps. However, native development can also be expensive and may be a mismatch for the skills known to your developers. 
  • In hybrid development, a third-party provides tools and a framework that allow to develop for a platform using an alternative approach. This may allow your developers to work in a familiar language or development tool. Some hybrid solutions generate a native application as their output; others execute within an execution layer or browser contained in a native application shell. Hybrid solutions are sometimes considered risky because the third-party may not be able to stay in alignment with mobility platforms.
  • In mobile web development, you develop a web site intended for consumption on mobile devices via their browsers. You detect device size and other characteristics and the web experience adapts accordingly. A mobile web approach is not always a suitable experience, but at times it can be. From a skills standpoint, mobile web is very approachable due to the large number of web developers in existence. An economical advantage to mobile apps is that you develop a single solution, rather than separate apps for each platform.
Many people have strong opinions about which approach is best, but be sure to consider the nuances of experience, device features needed, performance, skills alignment, risk, and development cost rather than making a snap decision.

The Back-End
Most mobile solutions involve more than just the app(s), that visible part you interact with on mobile devices. There often needs to be a back-end that provides one or more of the following:
  • Security - user authentication and authorization.
  • Storage - persistent data storage.
  • Notifications - event notifications.
  • Processing - you may need server-side processing to augment what the limited processing available on mobile devices.
  • Integration - coordination with other systems in the enterprise or on the Internet.
  • Cloud - use of cloud computing can make your back-end available across a wide geography or worldwide.
Table: Mobile Client App Development Choices
The table below shows some of the choices available to you when you are targeting Android, Apple, Windows Phone, and/or Windows 8 devices.

In Part 2, we'll look at what it takes to develop native applications for iOS.

No comments: