We often get clients interested in mobile solutions to their problems. One of the biggest questions they have for us is “what platform should we even target?”
iOS? Android? Windows Phone 8? What about BlackBerry? Symbian? Firefox OS? How about Ubuntu Mobile? Do we even want something native, or is a properly tested and designed web site sufficient?
It seems pretty obvious that there is no one “right” answer that we can know ahead of time that will fit each problem. For each client (and for each project with a given client), we need to ask them some things in order to make proper suggestions.
This isn’t intended to be a complete list by any means, but here are a selection of questions intended to get the thought process started:
- What devices are your users already using?
- While this shouldn’t necessarily indicate that only a single app should be built, it might help indicate what to tackle first. It is very important though that if the client answers this question that this should have some supporting evidence and not be solely a guess on their part.
- Who is going to support this when it is done? And what are they able to support?
- If they are planning to use an internal team, what platform(s) do they know?
- If they aren’t supporting it internally, who is?
- Have they even thought about long-term support? With mobile platforms, users have become used to frequent releases.
- While not an answer to the question, here is an interesting (and relatively recent) article about what other developers are currently targeting.
- What level of control / responsiveness do you need for distributing the app?
- Are you ok with going through Apple’s distribution model?
- Do you want to be able to directly release this app to customers, and are you able to support it?
- If you’ve got a mobile web site, that update reaches your entire audience right away
- In any case, make sure to keep in mind both initial release as well as updates.
- Where are your users located?
- While this isn’t as good an indicator as question #1, this can let us know what countries trends to look at and whether there are any distribution model differences to be concerned with.
- This also lets us know about localization issues that may be of concern.
- Is your solution something that always needs to be connected to the internet (highly reliant on live data)? Or does it need to be usable when not connected to the internet?
- If the persistent connection needs to exist anyways, that is a good indicator that a web site tested with smartphones and/or tablets in mind might be the right choice.
- If they are somewhere with limited access [for example: certain military locations], you likely need to look at creating either a hybrid or fully native app.
- The important thing is to think about where your users will want to use your solution.
- Is there certain specific functionality that is needed?
- Some functionality is cheaper (or simply only possible) on some platforms
- Example 1: while push notifications have solutions on most devices, Apple does make this aspect relatively easy [cheaper] from my understanding
- Example 2: speech-to-text is an area that (currently to my knowledge) is easiest to accomplish on Android
- Will there be a need to access the camera, GPS, local storage, accelerometer, or other hardware on the device?
- While this might mean you can’t do a web site, you might still be able to do a hybrid app – one where the user interface is built in HTML but that lives inside a native application so that it can access the hardware
- Is this intended to be used in conjunction with another app/service? Is this expected to rely on existing libraries / codebase? Or make use of an existing framework?
- There may be some API requirements that could benefit from (or require) a specific platform
- If the “other” thing is something that the client owns the source code to, then this may only be an issue of cost to translate, but if it is something from a 3rd party you may be stuck
What other questions should we be asking? Chime in with your thoughts below (and please correct me where I am wrong)!