The Fallacy of Android-First
techcrunch.com
techcrunch.com
It's tempting to say that his TechCrunch credentials bias him, but I actually chalk it up to his wanting to write a dev blog with a link-bait title. I don't think the lesson learned has anything to do with Android first at all.
* APIs are not well-documented, and Google has changed them over time
* Carriers modify the OS to support their particular [...] idiosyncrasies.
* ...we need to ask the user to go into Settings and send us the details. Since manufacturers and carriers often modify Android’s Settings app, we can’t always tell the user where (or whether) she might find them.
* On some Galaxy Nexus phones, when you’re listening to Pandora and get a notification sound from Emu, Pandora’s volume drops. This doesn’t happen with other apps’ notifications, nor does it happen with streaming apps other than Pandora, nor does it happen on any other device.
* Several text-layout and view-layout bugs created situations where a seemingly harmless visual change would create significant UI bugs.
* Poor, inconsistent and conflicting documentation
* "Carriers modify the OS to support their particular [...] idiosyncrasies."
* "Poor, inconsistent and conflicting documentation"
Not true. Google usually documents APIs well, and older versions of Android are forwards compatible to newer versions.
The SMS Api that the author used was a so-called "hidden API". These APIs are not documented on purpose, as they are not supposed to be used by developers. These are experimental APIs that can and mostly will change over time.
Hidden APIs are not part of the Android specification and they are not part of the Android compability test suite. Of course they do not work reliable on different versions of the operating system.
See: http://android-developers.blogspot.co.at/2013/10/getting-you...
By building for two years’ worth of Android (as we did originally with 4.0+), you’ll support about 40 percent of the U.S. smartphone install base. Removing 4.0-4.1 support leaves you with one year’s worth of OS compatibility, and that number drops to 12.5 percent.
By building for iOS 7 only, you’ll support 32 percent of the U.S. smartphone install base.
(Not that anyone cares probably)
What kind of problems devs are seeing with the various 4.0 devices?
Once we'd decided to abandon the SMS/MMS approach, we were then building our functionality on top of a more straightforward messaging channel, and had to decide whether to proceed on Android or iOS. At that point we chose iOS for the reasons described.
"We discarded the iPhone prototype we had been working on for a few weeks, polished our rusty Java skills and had an Android alpha out by February 2013."
If you'd said "we abandoned out Android prototype, polished our rusty Objective C skills, and released an alpha on iPhone" I'm certain you'd be saying exactly the same things, just about iOS development instead of Android.
But I will agree Google's documentation is usually pretty short sighted and made by people that don't like writing documentation.
That said, the quality of the Android documentation has vastly improved since then. The training guides are excellent and the design section is good (although I much prefer the more practical Android Design in Action Youtube series).
Maybe it's hindsight being 20/20, but it just seems like a really strange direction to go in, so is there something other than the infrastructure and theoretical ease of use that drove your decision?
i dont know why those credentials give him any credibility as a developer. not being troll. really. just see how he had to limit to api 4.0 an app that is basically a list. ...unless it is still dealing with sms on android, which would be silly since now they have the IM backend for the IOS version...
And generally the iOS APIs are an order of polish above what I've experienced developing for Android.
There were no SMS APIs prior to 4.4. Yes, the implementation was not protected as system only, but it was an implementation detail not an API guarantee, which is a very different thing. This was even called out in a blog post 4 years ago: http://android-developers.blogspot.com/2010/05/be-careful-wi...
...was a really bad idea. SMS dates from 1984 and was originally a hack -- a beautiful hack, yes, but still a hack -- to squeeze basic text into empty 128-byte slots in telco switching protocol SS7. Combining multiple SMSes together requires nasty User Data Header hackery, and transmitting binary data over this joke of a channel is even worse. And don't get me started on MMS, a horribly overcomplicated spec that neither handsets nor operators could ever implement correctly, much less interoperably.
I used to work on this stuff for a living, and ran away screaming as soon as I could. The mobile messaging world would be a good ten years ahead of where we are today if we'd copied Japan in the mid-1990s and ditched SMS/MMS entirely for email built on packet-switched data, which would have instantly created the decent infrastructure needed for future apps. (The packet-switched bit, that is, not SMTP itself.) But as always, Japan shot itself in both feet by refusing to adopt the same standards as the rest of the world, meaning that e-mail and decent Internet on phones didn't become a mass-market thing elsewhere until the iPhone came out in 2007.
If you want to blame anyone for not pushing adoption of GSM GPRS and beyond it shouldn't be Japan. There's one country that could have made it the obvious choice for everyone, but thanks to "competition" it never happened...
*i.e. J-Phone Sharp J-SH04 http://en.wikipedia.org/wiki/J-SH04
At the end of the day, the problem in the Western world was that operators were so in love with their massive SMS revenues with nearly 100% profit margins that they had zero incentive (well, negative incentive, really) to push for anything else. Whereas Japan, precisely thanks to not adopting GSM, never had SMS in the first place, so e-mail charged by the byte became the first killer cross-operator messaging app. (There were SMS equivalents in Japanese networks as well, but most all were restricted to one operator and consequently never really took off.)
That's a very provincial "everywhere", then.
Obviously our game and their messaging software are very different but I was compelled to comment to offer a counterpoint since the post title is so emphatic.
Games are often pointed out as particularly harder on Android because of the multitude of devices with different levels of graphics support. Did you have trouble reaching most of the market? If you did, how did you solve it?
I can also imagine some stuff like Samsung's Multi Window tool causing problems. Did anyone report that?
The author briefly addressed this point, saying something along the lines of "more installs doesn't translate into more customers," but this argument wasn't really fleshed out.
Working for a company that makes mobile apps for a broad range of Fortune 500 firms, I've noticed, anecdotally, a seismic shift in clients' attitudes toward Android. From financial services to biotech to retail, many clients have gravitated toward an "Android first" strategy and boosted customer engagement by doing so.
[0] http://venturebeat.com/2013/02/06/800-million-android-smartp...
[0] http://appleinsider.com/articles/13/11/27/apples-ios-brings-... [1] http://www.statisticbrain.com/mobile-phone-app-store-statist...
Being too iOS-centric in this space will severely limit your capabilities as a developer and designer.
That misses the point. You can usually do more in Android, and, while I'm a firm believer in shipping an MVP (or even an interim port based on a Web wrapped), if you don't implement a few key features on Android, like Fragment based UI scaling for different device geometries, the Share operation, and standard Intent-based high-level IPC if applicable, you have a pretty lame Android app.
Different expectations regarding some conventionally standard features, plus Java, plus Eclipse, plus grokking the Android component life-cycle, plus design for a continuum of screen geometries, means Android is usually more demanding of development resources.
I'm extremely new to Android development. Does this have a special contextual meaning? What is the Share operation?
It can mean very different things to different apps. In all cases it means "I can do something with that data."
It's highly dependent on what you're doing. For instance, if you're using OpenGL ES, you'll likely have a lot of testing overhead. Ditto if you're doing anything interesting with the camera API (OEMs like breaking this). If you avoid OpenGL ES, the camera, any of the new UI stuff, and the network, then testing becomes less scary.
Don't get me wrong, I want to like iOS and its UX is quite a bit better than Android's still. But I'm not in a position to drop a thou on a Mac just to develop for it.
I agree that the requirement is a pain though. Our CI, automated builds, etc are all standard across all products except the iPhone client which runs as a cron job on an old Mac in the corner.
Edit: the entire SMS/email apps for AOSP are open sourced, yes it does not have all the features that the OP wants, but you can get very far with Android's documentations and just reading the source codes.
WhatsApp currently can run on J2ME phones, but won't run older iDevices thanks to the way Apple runs the app-store.
Huh? They said they started off with 4.0 support, and then dropped it, moving to 4.1 support. Android 4.0 came out in late 2011, and 4.1 came out in mid 2012. By simply supporting iOS 7, on the other hand, they would be able to support everything back to the iPhone 4, which came out in mid 2010, over a year before Android 4.0.
My understanding of Android-first is that you iterate quickly with Android to learn lessons fast while still developing for both platforms. I think it would be foolish, as the article suggests, to only build for Android but that does not mean "Android-first" is a bad option for those building for both platforms.
I think it's SMS only, but damn is its interface better and more intuitive than any SMS or messaging app I've used to date. I would think that there's always room for a reimagined intuitive interface in any space.
I have my own small story to tell. I did some code that used OpenGL ES 3.0. I was able to develop it before it was officially supported in Android devices by using desktop gpu's.
The day when first 4.3 devices supporting ES3 came. Got few testing devices. Wait. GDB doesn't work? Whoops. 4.3 had an issue where you had to root the device in order to actually debug your native code in the device. Sure it was fine on the few test devices but you cannot really root all of the myriad devices your users might have just to debug. We had an unresolved crash bug on a device we didn't dare to root.
And then there was the lovely day when 4.4 came out. Ok the debugging started to work but it also broke most of the graphics debuggers because the gl libs switched from /system/lib/ into /vendor/lib or whatnot.
These kinds of issues is why I prefer desktop development by far.
Let me add a rebuttal:
There are many hungry Android developers out there. Developers who do not whine about how Android is hard. Developers who have actually invested the time and effort to be good at Android development.
If you write iOS first, and your app is a big hit, these hungry developers will clone your app within days and soak up 75% of the market that you ignored. Since iOS is so easy, many of them will port to iOS just as quickly. Their Android success will have a network effect. The 75% that loves the clone on Android will tell their iOS friends who will then choose the clone over your app.
That results in you writing an article on hacker news about how some guy just cloned your Threes/2048 app and is now doing better than you.
I have no sympathy for developers who are unable to compete because Android doesn't make development as nice/easy as iOS.
I have developed for both platforms and have written a detailed description comparing UI design, Tools, Documentation etc. for both platforms here: http://qr.ae/v4rT2.
The real story here is between the lines.
Google went through all the trouble making content providers then doesn't even have one for sms.
Anyway, if you find yourself meddling around in undocumented databases, you should probably reconsider what you're doing.
In the iStore that alone is reason enough for getting you apps rejected. At least here you had the option to do it anyway, if you really, really wanted to.
None the less, at least you tried...? :-) I'm actually curious about what you do find better on Android then on iOS.
Just want to say thanks to the author for writing the article. As an iOS dev eyeing other mobile platforms, it's nice to get an insider's view on Android development, whether good or bad.