PodSearch

Under the Radar

30: A Brief Visit to Android

 

00:00:00 ◼   ► Welcome to Under the Radar, a show about independent iOS app development.

00:00:03 ◼   ► I'm Marco Arment.

00:00:05 ◼   ► And I'm David Smith.

00:00:06 ◼   ► Under the Radar is never the longer than 30 minutes, so let's get started.

00:00:10 ◼   ► So in a bit of a surprise move in the run-up to WWDC, we are not going to be talking about

00:00:17 ◼   ► iOS today.

00:00:19 ◼   ► In a strange way, I took our own advice.

00:00:21 ◼   ► If you've been listening back since, I think it was episode 25, where we talked a little

00:00:25 ◼   ► bit about what do you do in the kind of awkward time right in the run-up before WWDC, where

00:00:32 ◼   ► you don't necessarily want to start a whole new project, you don't necessarily want to

00:00:36 ◼   ► do something big because when WWDC happens in about a little over a week now, you may

00:00:43 ◼   ► have to drop everything and be moving in a totally different direction and all those

00:00:47 ◼   ► types of things. And so I've been spending the last couple of weeks since then doing

00:00:54 ◼   ► updates and polishing on most of my applications.

00:00:57 ◼   ► And I got to the point where I had most of my iOS apps in a really good place.

00:01:03 ◼   ► And so I started looking around at my various other projects that aren't kind of like my

00:01:07 ◼   ► main focuses, and I noticed that the Android app that I had released many, many years ago,

00:01:15 ◼   ► mostly as an experiment, but nevertheless out in the world, had rather been neglected

00:01:23 ◼   ► insofar as it was last updated in August of 2012, which is something like 196 weeks ago.

00:01:33 ◼   ► But I went and looked, and in its download stats, people are still downloading it, it

00:01:37 ◼   ► still has a reasonable amount of interest.

00:01:41 ◼   ► And so I thought to myself, "Well, this is probably one of the few windows I'm going

00:01:45 ◼   ► to have where it's going to make sense for me to dive back into Android development,

00:01:51 ◼   ► to work on an Android app and get it updated, get something out before WWDC.

00:01:57 ◼   ► Because it's pretty rare that I have these windows for like a couple of weeks without

00:02:00 ◼   ► any other pressing work.

00:02:02 ◼   ► And so that's what I did.

00:02:04 ◼   ► And I thought it would be an interesting discussion for today to unpack a little bit of the experience

00:02:08 ◼   ► of that because it's interesting.

00:02:10 ◼   ► I'm by no means an Android expert.

00:02:12 ◼   ► I'm the opposite of that.

00:02:14 ◼   ► I am barely competent as an Android developer.

00:02:19 ◼   ► If it wasn't that I learned Java as the first sort of academic language I ever learned,

00:02:24 ◼   ► like back when I was doing computer science in high school, I probably wouldn't be able

00:02:28 ◼   ► to even attempt it, because I have very limited experience.

00:02:33 ◼   ► But it's interesting to look at it coming from a day-to-day iOS developer diving into

00:02:40 ◼   ► Android, especially because the last time I dived into Android was almost four years

00:02:45 ◼   ► ago.

00:02:46 ◼   ► So that's kind of what I wanted to dive into.

00:02:49 ◼   ► Have you ever done any Android work?

00:02:51 ◼   ► - So when, I mean the short answer is no.

00:02:55 ◼   ► The slightly longer answer is when the Nexus One

00:03:00 ◼   ► first came out.

00:03:01 ◼   ► I decided, I was working on Instapaper at the time,

00:03:04 ◼   ► a few months I think before the iPad was announced.

00:03:07 ◼   ► Something in that time span, so you know,

00:03:09 ◼   ► early 2010 or late 2009.

00:03:12 ◼   ► And so I had this Nexus phone and so my first idea

00:03:15 ◼   ► was let me just try to optimize the website for it

00:03:17 ◼   ► because it had that weird,

00:03:19 ◼   ► I believe it was either the pen tile display

00:03:21 ◼   ► or something like a pen tile display

00:03:23 ◼   ► where the RGB sub-pixels were not lined up

00:03:26 ◼   ► exactly the way they normally are

00:03:27 ◼   ► like on a regular screen layout.

00:03:30 ◼   ► And so there were a lot more green pixels

00:03:32 ◼   ► than anything else.

00:03:33 ◼   ► So I started experimenting with color schemes

00:03:35 ◼   ► of what makes the most legible text.

00:03:38 ◼   ► So things like, should I do green on black?

00:03:41 ◼   ► I was like, can I do things to maximize battery life

00:03:43 ◼   ► that are still legible that will maybe

00:03:46 ◼   ► let me to save on brightness by using more green

00:03:49 ◼   ► than other colors or whatever else.

00:03:51 ◼   ► And then a few weeks into the experimentation,

00:03:53 ◼   ► the iPad was announced, and then I stopped working on it.

00:03:56 ◼   ► And that was the end of that.

00:03:57 ◼   ► Because the iPad was just way more important for me

00:04:01 ◼   ► to be working on for a reading app.

00:04:03 ◼   ► And that proved to be correct.

00:04:05 ◼   ► When Instapaper eventually had its own Android app,

00:04:08 ◼   ► I contracted that out.

00:04:10 ◼   ► I never even saw the code.

00:04:12 ◼   ► I have never seen what Android development is actually like.

00:04:16 ◼   ► - So then I guess this will be an enlightening journey

00:04:19 ◼   ► for you to hear what it's like

00:04:21 ◼   ► to dive into Android development.

00:04:23 ◼   ► - Yeah, I mean, I think it's funny that here you are saying

00:04:25 ◼   ► like, well, I'm not that much of an expert.

00:04:26 ◼   ► Like, you would know way more than I do.

00:04:28 ◼   ► You've actually done it.

00:04:28 ◼   ► Like, doing it at all.

00:04:31 ◼   ► - I have a whole two weeks experience

00:04:33 ◼   ► with Android at this point.

00:04:34 ◼   ► - That is literally infinitely more than I have.

00:04:38 ◼   ► - So, it seems like the best place to start

00:04:40 ◼   ► was to talk through some of the things that I like about Android, some of the things that

00:04:45 ◼   ► coming to it I was pleasantly surprised by.

00:04:49 ◼   ► And the first thing that comes to mind is Android Studio, which is their new, well new

00:04:55 ◼   ► to me, development environment that he used to make Android apps by you download Eclipse,

00:05:01 ◼   ► which is sort of like the open source generic Java SD development environment, and you'd

00:05:07 ◼   ► add all these extra add-ons and plugins to it, and that would become the Android development

00:05:13 ◼   ► environment. But I believe Google either partnered or bought or somehow got a hold of the IntelliJ

00:05:18 ◼   ► environment and have turned that into their development environment. And I gotta say,

00:05:24 ◼   ► coming from Xcode, visually it's kind of rough. It has that kind of cross-platform generic look

00:05:33 ◼   ► to it that a lot of Java apps have, so it doesn't look like Xcode in terms of being

00:05:38 ◼   ► really native on the Mac, but functionally it's actually really pretty good.

00:05:43 ◼   ► And there's a lot of things that -- and a lot of this has to do with -- I mean, most

00:05:47 ◼   ► Java tools have had this for a while, and I've always kind of wondered why Objective-C

00:05:50 ◼   ► and maybe Swift tools have it, I don't think so.

00:05:53 ◼   ► There's a lot of things where it can do auto imports for you.

00:05:58 ◼   ► So if the first time you mention a new class, it'll be like, hey, would you like me to import

00:06:04 ◼   ► this for you?

00:06:05 ◼   ► And those types of things and its refactoring tools and in general environment is actually

00:06:12 ◼   ► pretty pleasant to work in, especially even all the stuff that it has to do in terms of

00:06:16 ◼   ► managing different emulators and devices and all this kind of stuff.

00:06:21 ◼   ► There's a lot of moving parts, it seems, with developing an Android app, which would kind

00:06:25 ◼   ► of makes sense given the flexibility of the platform.

00:06:31 ◼   ► And their development tools are actually surprisingly good at that and related to that.

00:06:35 ◼   ► Like, it's kind of funny, they have emulators rather than simulators.

00:06:39 ◼   ► That's an important distinction though too, because aren't the emulators, because they're

00:06:43 ◼   ► emulating, substantially slower than the iOS simulator?

00:06:48 ◼   ► Well, so this was the thing, that was my experience four years ago, where the Android emulator,

00:06:53 ◼   ► you'd start it and it would run, it would spend many minutes trying to boot up and all

00:07:00 ◼   ► this type of thing. Whereas now, I believe they're doing some kind of Intel hypervisor

00:07:07 ◼   ► thing with them now, I think it's the HaxM process or something. There's a way in which

00:07:13 ◼   ► the emulators are now running at very close to native speeds, which once they've crossed

00:07:20 ◼   ► over that point means that the emulators are so much better than a simulator would be,

00:07:24 ◼   ► because it's an actual representation, especially with, as I'll get to with the not-so-great

00:07:29 ◼   ► parts, when you're starting to deal with the number of devices you have to manage on Android.

00:07:33 ◼   ► Being able to, I can create like a Nexus 7, and it's pretty close to an actual Nexus 7

00:07:41 ◼   ► in terms of how it will behave and operate, and you don't have the same problem in the

00:07:47 ◼   ► the same way with the simulator where a lot of things on iOS, they sort of work in the

00:07:52 ◼   ► simulator but they don't work, it'll work on the simulator but it won't work on the

00:07:56 ◼   ► device or vice versa, or there's a whole bunch of APIs that you can only use on device you

00:08:01 ◼   ► can't use in the simulator, whereas with the Android stuff it seems like the emulators

00:08:06 ◼   ► are true emulators that you can do pretty much anything with that you would be able

00:08:11 ◼   ► to do on a device, which is really nice.

00:08:14 ◼   ► And so in general, I'd give the tools for Android

00:08:16 ◼   ► a big thumbs up.

00:08:17 ◼   ► It seems like they really have come a long way

00:08:20 ◼   ► in the last four years, and make for a pretty pleasant place

00:08:22 ◼   ► to work.

00:08:24 ◼   ► That sounds great.

00:08:25 ◼   ► I think there was one or two times where I did install

00:08:27 ◼   ► the SDK long ago, in the early days,

00:08:30 ◼   ► probably about four years ago when you were doing

00:08:33 ◼   ► your previous work.

00:08:34 ◼   ► And I had only very negative things

00:08:36 ◼   ► to say about it because of things like performance issues

00:08:39 ◼   ► and everything else.

00:08:40 ◼   ► But if it's come a long way, that's fantastic.

00:08:42 ◼   ► because I know well enough in this industry

00:08:46 ◼   ► to never say never, and so I very well might find myself

00:08:49 ◼   ► doing Android development at some point in the future,

00:08:51 ◼   ► so it's nice to know that these tools are way better

00:08:54 ◼   ► and way further ahead of where I last saw them.

00:08:58 ◼   ► - Yeah, and it definitely seems like,

00:09:00 ◼   ► I mean, it's like, it definitely sounds a bit funny,

00:09:03 ◼   ► 'cause I think of how, in my mind,

00:09:06 ◼   ► they were just as they were four years ago,

00:09:08 ◼   ► but obviously this is very important

00:09:10 ◼   ► for Google and the Google developer community that this has definitely been driving forward

00:09:15 ◼   ► and they are making great progress there.

00:09:19 ◼   ► And the actual building things too has gotten...

00:09:21 ◼   ► I mean, I guess this hasn't changed, but this is something that was quite a nice relief

00:09:26 ◼   ► coming back from iOS work.

00:09:29 ◼   ► One thing that I noticed too is back when I was doing my early Android work, the iOS

00:09:36 ◼   ► of ecosystem was very unfragmented from a screen size resolution device perspective.

00:09:43 ◼   ► I can't remember exactly which phone we would have had then, but at the most I think

00:09:47 ◼   ► we would have had two different device screens back in 2012.

00:09:52 ◼   ► It was very straightforward on the layout side and handling things.

00:09:57 ◼   ► You didn't have a lot of flexible layouts and all the size class stuff and all this

00:10:01 ◼   ► other stuff that has kind of been bolted on to iOS since.

00:10:05 ◼   ► always had to have that. And so back in the day I looked at this and it was like, "Oh

00:10:09 ◼   ► man, this is so complicated, having to work out and making sure that my app can scale

00:10:13 ◼   ► dynamically." But the strange thing is now, coming back to it, it's really nice that it's

00:10:19 ◼   ► kind of built into the fundamentals of the way everything works. Everything is dynamic

00:10:24 ◼   ► by default. In general, nothing on Android, when you're working on it, they're all very

00:10:30 ◼   ► flexible layouts, in some ways very similar to the way the WatchKit SDK is, where everything

00:10:37 ◼   ► is sort of designed to flow and be dynamic and not have any sort of hard-coded values

00:10:43 ◼   ► into it.

00:10:44 ◼   ► Because for an Android app, there are so many different device types that it kind of has

00:10:48 ◼   ► to be.

00:10:49 ◼   ► And it's been really refreshing working on that, versus when I do work on iOS now, like

00:10:54 ◼   ► all the size class stuff and some of the things that you can do with auto layout potentially,

00:11:00 ◼   ► can do a lot of this kind of stuff, but it's always, it feels a bit more shoehorned in

00:11:06 ◼   ► on iOS to me. Whereas on Android, it's because it's always had to be in there, it feels quite

00:11:10 ◼   ► natural. And on the other, a random little side thing that I've absolutely really, really

00:11:16 ◼   ► love now that I've experienced it is the Android equivalent of nibs, where you would sort of

00:11:24 ◼   ► UI components that you're expressing not in code is they're just big, easily editable

00:11:31 ◼   ► XML files, which if you have ever viewed the source on a nib, it's the complete opposite.

00:11:39 ◼   ► It's this very nice declarative markup language that you can specify your UI in, that you

00:11:45 ◼   ► can view in source control really easily.

00:11:48 ◼   ► If you make a change, you can actually see a diff, whereas with a nib, any time you even

00:11:53 ◼   ► can look at it, it'll change in source control in ways that don't make any sense, where all

00:11:58 ◼   ► of a sudden all these components got jumped around, and that's certainly gotten better.

00:12:03 ◼   ► But it is lovely to be able to look at something, in their design tool, you can look at it like

00:12:08 ◼   ► the visual version or the text version.

00:12:11 ◼   ► And often I find I just work in the text version.

00:12:13 ◼   ► And it's kind of nice to have this type of thing that's...

00:12:17 ◼   ► UI is such an essential part of building an application, that having precision, being

00:12:23 ◼   ► able to go in and look at the code,

00:12:25 ◼   ► that's the markup, I guess, for that UI,

00:12:28 ◼   ► and just make little tweaks and changes in a very precise way,

00:12:31 ◼   ► I've found to be really, really helpful.

00:12:33 ◼   ► Combining that with the dynamic layout stuff,

00:12:36 ◼   ► making a UI on Android is actually pretty nice.

00:12:39 ◼   ► That sounds awesome, honestly.

00:12:41 ◼   ► It sounds very refreshing compared

00:12:43 ◼   ► to some of these challenges we face in iOS,

00:12:45 ◼   ► some of the things that aren't so great.

00:12:47 ◼   ► As you mentioned, that sounds nice.

00:12:49 ◼   ► Because we are in a world now where

00:12:52 ◼   ► I think we are moving towards having more variety in screen sizes, not less, and Android

00:12:58 ◼   ► was first to that, obviously. And so, you know, anything the tools can do to help that

00:13:03 ◼   ► is great. And, you know, iOS does have lots of tools to assist with that and lots of APIs

00:13:08 ◼   ► that are good at dealing with that, but I think you made it where, like, Android was

00:13:11 ◼   ► written that way from day one out of necessity and by design, whereas iOS, a lot of it does

00:13:15 ◼   ► feel still pretty bolted on.

00:13:17 ◼   ► Yeah, and it's interesting because this experience of the last couple of weeks has

00:13:24 ◼   ► been definitely very helpful in making sure that I'm aware of the blind spots I have

00:13:30 ◼   ► in terms of if I'm going to be an independent iOS developer, which is sort of what I'd

00:13:35 ◼   ► say is my title, if I don't have at least a glancing familiarity with Android and being

00:13:41 ◼   ► aware with it, it seems like I'm kind of tying one hand behind my back in terms of

00:13:45 ◼   ► my ability to do what I'm doing.

00:13:47 ◼   ► And I'm not saying that I'm gonna be diving in head first

00:13:49 ◼   ► and becoming an Android developer.

00:13:50 ◼   ► Like, let's not get crazy.

00:13:52 ◼   ► (laughing)

00:13:53 ◼   ► - I would love to see you get crazy.

00:13:55 ◼   ► - Just go crazy.

00:13:56 ◼   ► (laughing)

00:13:58 ◼   ► - I love that that's your version of getting crazy too.

00:13:59 ◼   ► - That's me getting crazy.

00:14:00 ◼   ► - Getting crazy is becoming an Android developer.

00:14:03 ◼   ► Which, and just more than you already are one.

00:14:06 ◼   ► - Exactly.

00:14:08 ◼   ► That's just how I roll.

00:14:09 ◼   ► So, I look at this though, and I'm like, okay,

00:14:12 ◼   ► this is not as bad as I had in my mind,

00:14:14 ◼   ► And it's a good thing to be aware of.

00:14:17 ◼   ► And so I'm glad I've kind of gone through this process.

00:14:19 ◼   ► And another thing that I've loved that's been kind of a nice--

00:14:24 ◼   ► and a nice thing to see is the Google Play infrastructure,

00:14:28 ◼   ► which you kind of imagine, given that Google made it,

00:14:31 ◼   ► is really good.

00:14:33 ◼   ► The number of things that you can just do natively,

00:14:36 ◼   ► which is their equivalent of iTunes Connect for us,

00:14:41 ◼   ► is there's a lot of stuff just baked into that that

00:14:44 ◼   ► really powerful and really clean and simple and it's nice, I mean obviously there's things

00:14:48 ◼   ► like not having review, and even I've run into this, like I haven't fully submitted

00:14:53 ◼   ► my app yet but I've done a couple of beta tests just internally, and it's really nice

00:14:59 ◼   ► that you just upload the APK file and you say add who you want to be beyond the beta

00:15:05 ◼   ► test which at this point is just myself, but then in the Google Play Store you just, like

00:15:11 ◼   ► an app update will appear in just the same way that if I push it out to a customer through

00:15:17 ◼   ► the main interface, you get a little update.

00:15:19 ◼   ► It would be like in the equivalent of in the App Store in that Updates tab, a little thing

00:15:23 ◼   ► would pop up.

00:15:24 ◼   ► There's no extra app that you have to install, there's no extra complexity there.

00:15:28 ◼   ► Like your beta testers just get an update.

00:15:31 ◼   ► It just happens to be a beta update.

00:15:33 ◼   ► And you see a lot of these kinds of things that are just really nice.

00:15:36 ◼   ► Their analytics is really good.

00:15:40 ◼   ► All the things are kind of just baked in nicely together, whereas I feel like iTunes Connect

00:15:44 ◼   ► has been adding a lot of this.

00:15:47 ◼   ► For a while, Google Play definitely destroyed iTunes Connect in terms of analytics, in terms

00:15:51 ◼   ► of being able to see a lot of information, which is really important in Android, where

00:15:57 ◼   ► I go into the analytics and I break down the distribution of my installs by Android version

00:16:04 ◼   ► or device type or device screen size.

00:16:07 ◼   ► And on iOS, a lot of those pie charts are kind of boring because it's like 80% of people

00:16:12 ◼   ► are on the latest iOS version, and the distribution between iPhone and iPad is fairly stable and

00:16:19 ◼   ► so straightforward.

00:16:20 ◼   ► But a lot of these pie graphs for Android are pretty complicated in terms of which versions

00:16:25 ◼   ► of Android is things.

00:16:26 ◼   ► But it's all been in there and is very easy to sort of understand and go through.

00:16:31 ◼   ► iTunes Connect is getting analytics and stuff, which is great, but it's kind of the interface

00:16:36 ◼   ► that they have in Google Play is really nice.

00:16:38 ◼   ► And it's been a nice, pleasant experience

00:16:42 ◼   ► to be good to go in there and work with.

00:16:46 ◼   ► - Our sponsor this week is Hover.

00:16:48 ◼   ► When you have a great idea for your project or blog,

00:16:51 ◼   ► you need to give it a great domain name.

00:16:52 ◼   ► And finding that perfect domain name

00:16:53 ◼   ► is ridiculously easy with Hover.

00:16:56 ◼   ► Now, it's incredibly easy with Hover

00:16:57 ◼   ► to set up your domain name

00:16:58 ◼   ► with your most popular website builders.

00:17:00 ◼   ► With this feature called Hover Connect,

00:17:02 ◼   ► you can set it up automatically with just a few clicks

00:17:04 ◼   ► with tons of popular website hosts.

00:17:06 ◼   ► There's no more digging through help articles

00:17:08 ◼   ► to figure out the DNS settings or anything else like that.

00:17:10 ◼   ► Hover Connect lets you set it up very quickly and easily.

00:17:13 ◼   ► And they also have transfers that are really easy.

00:17:15 ◼   ► If you already have a bunch of domains

00:17:16 ◼   ► scattered across other domain providers,

00:17:18 ◼   ► you can save tons of money by bringing them all to Hover.

00:17:21 ◼   ► All eligible domains will include free Whois privacy,

00:17:23 ◼   ► and with volume discounts,

00:17:24 ◼   ► the more domains you have in your account,

00:17:26 ◼   ► the more of a discount Hover will automatically apply.

00:17:28 ◼   ► So use Hover today to find the perfect domain name

00:17:30 ◼   ► for your idea.

00:17:32 ◼   ► Go to hover.com and use the promo code FASTREVIEW

00:17:34 ◼   ► at checkout to save 10% off your first purchase.

00:17:37 ◼   ► Once again, it's hover.com/promocode/fastreview

00:17:40 ◼   ► at checkout for 10% off your first purchase.

00:17:42 ◼   ► Thank you so much to Hover for their support of this show

00:17:44 ◼   ► and all of Relay FM.

00:17:46 ◼   ► Now, you probably noticed that the first few things

00:17:49 ◼   ► that I was talking about of being an Android developer

00:17:52 ◼   ► were pretty positive.

00:17:53 ◼   ► Overall, it's a pretty good experience.

00:17:56 ◼   ► It's not all positive, and I think

00:17:58 ◼   ► it seemed like I might spend the rest of the episode kind

00:18:01 ◼   ► of unpacking some of the things that were not so great.

00:18:05 ◼   ► And the first one that I wanted to talk about is the mind-bending experience of thinking

00:18:12 ◼   ► through and managing device compatibility.

00:18:15 ◼   ► So if I go into Google Play, and it has a little area that says, "This build of your

00:18:23 ◼   ► app is compatible to work with a certain number of devices."

00:18:27 ◼   ► and for my application right now,

00:18:29 ◼   ► that number of devices is 12,346.

00:18:33 ◼   ► - Wait, that's like models, not like users?

00:18:36 ◼   ► - That is models, so like in a way that like a 4S

00:18:40 ◼   ► or a 5S or a 6S would be a different device,

00:18:44 ◼   ► I believe it's 12,346, 12,346 devices.

00:18:49 ◼   ► - Well, this raises the obvious question,

00:18:50 ◼   ► how many Android devices are there?

00:18:53 ◼   ► - I don't know, a lot.

00:18:54 ◼   ► (laughing)

00:18:55 ◼   ► - Wow. - More than that,

00:18:57 ◼   ► Because I'm only at this point supporting back to Android 4.4,

00:19:03 ◼   ► which is a relatively old but not so old version.

00:19:07 ◼   ► So there's a lot of devices.

00:19:09 ◼   ► And in practical terms, some of that doesn't really matter.

00:19:13 ◼   ► A lot of these devices are similar.

00:19:16 ◼   ► If you're trying to worry-- I don't

00:19:18 ◼   ► worry about the difference between some iOS devices

00:19:22 ◼   ► too much these days either.

00:19:24 ◼   ► Conceptually, that lies them into the different screen

00:19:26 ◼   ► sizes. I don't differentiate between the 5 and the 5S, so maybe there's similar things.

00:19:32 ◼   ► But still, that's a lot of devices.

00:19:34 ◼   ► Yeah, I mean, it sounds like it's almost like the web in the world of Android in a

00:19:37 ◼   ► lot of ways, where it's like you have with your layout, you have this kind of flexible

00:19:42 ◼   ► flow box-based thing because you're really just targeting who knows what screen size.

00:19:47 ◼   ► It seems like the device models, it would probably be not that much different for most

00:19:53 ◼   ► and this obviously excludes things like games where the exact hardware specs are a lot more

00:19:58 ◼   ► important. But it seems like it'd be kind of like worrying about what kind of laptop

00:20:03 ◼   ► people are using to connect to your website. You basically need to know the screen size

00:20:07 ◼   ► and their browser, and that's about it.

00:20:11 ◼   ► And it's a weird thing though, because on my desk right now, where we're podcasting,

00:20:16 ◼   ► I can see probably eight to ten iOS devices that I've accumulated over the years, because

00:20:23 ◼   ► I've learned the lesson the hard way of I basically have kept every single iOS device

00:20:30 ◼   ► I've ever bought, and I only ever will give it to a friend or a family member or something

00:20:37 ◼   ► when it has aged out of compatibility with my applications. So at this point, anything

00:20:43 ◼   ► from a 4S and up, I've capped.

00:20:46 ◼   ► I have all these devices, whereas on Android, I have one Android device.

00:20:50 ◼   ► I think I have a Nexus 5, I think it's a Nexus 5, I'm not really sure.

00:20:54 ◼   ► I have a Nexus device that I bought a while back just to kind of play with and try, and

00:21:01 ◼   ► so I have to rely on emulators a lot.

00:21:04 ◼   ► Like I have, I don't know, at this point I think I have tested my app on six different

00:21:09 ◼   ► trying to try different things, but it's a really weird feeling to not be able to try

00:21:17 ◼   ► the app that you're shipping on a representative sample of the platforms or the devices where

00:21:24 ◼   ► you expect it to actually be used.

00:21:27 ◼   ► Which is, maybe it doesn't matter in practice, I'm not Alex Oft to find out when I actually

00:21:30 ◼   ► ship this update, but it is really disconcerting coming from the iOS world where I have a,

00:21:37 ◼   ► a physical copy of every iPhone that my apps currently support available to me.

00:21:46 ◼   ► Somewhere in this house, all the way back from my 4S from years ago to my 6S now, I

00:21:53 ◼   ► have a device that I can try my apps on.

00:21:56 ◼   ► Whereas I'm obviously never going to have 12,000 devices to test on, and even the thought

00:22:02 ◼   ► of trying to have a representative sample of those gets really expensive and complicated,

00:22:06 ◼   ► because these aren't devices that I buy naturally.

00:22:10 ◼   ► My iPhone collection has just been a natural thing that I've collected in real time, rather

00:22:15 ◼   ► than trying to go out and buy a bunch of $400-$600 devices.

00:22:20 ◼   ► And so that's definitely intimidating.

00:22:22 ◼   ► And related to that is definitely the SDK question.

00:22:27 ◼   ► The vast majority of people are not running the latest version of Android.

00:22:33 ◼   ► adoption curve is really, really slow.

00:22:37 ◼   ► When I look at my stats, the biggest hump right now for me is around Android 4.4, which

00:22:44 ◼   ► I think is at least three or four years old.

00:22:47 ◼   ► And so it's a really strange thing when you're trying to make sure that your app works well

00:22:54 ◼   ► on all of those.

00:22:55 ◼   ► There's a lot of stuff they do that's just really cool.

00:22:57 ◼   ► We have this app compatibility system where Google writes, like, it's kind of mind-bending,

00:23:04 ◼   ► but they write a bunch of classes that are backwards compatible with really old versions

00:23:09 ◼   ► of Android with the new features in them that you can include as a library into your application

00:23:17 ◼   ► so that your app will run and behave somewhat in a modern way on an old system.

00:23:24 ◼   ► That's interesting.

00:23:25 ◼   ► Which is really clever.

00:23:27 ◼   ► But also, that's never going to be quite as good as just, "Well, 90% of my users are

00:23:33 ◼   ► running iOS 9.3.2," or whatever the latest version is.

00:23:37 ◼   ► And that is very close to what we find with iOS.

00:23:41 ◼   ► And so there's just no need for any of this type of compatibility system.

00:23:48 ◼   ► And maybe in practice, I'm not sure how much it will really come to bite me, but it makes

00:23:51 ◼   ► me feel really nervous when I'm shipping something and I'm like, "I hope this works. I think

00:23:57 ◼   ► I've tried it on enough devices. I really don't know. I guess I'll just have to go through

00:24:01 ◼   ► and read my one-star reviews and see what they look like." Wow.

00:24:08 ◼   ► And the other thing, as I'm going through this, that has kind of been a little bit...

00:24:14 ◼   ► This is the softer, more emotional part of Android development, but it's a really strange

00:24:20 ◼   ► thing to not feel like I really know what I'm doing. It's a bit humbling, which is probably

00:24:27 ◼   ► a good thing, but it's definitely this strange feeling of I've been doing iOS work for so

00:24:33 ◼   ► long at this point that I feel like, I don't think it's hubris to say that I'm an expert

00:24:40 ◼   ► iOS developer. I've been doing this as a full-time profession for seven or eight years now.

00:24:46 ◼   ► Yeah, you definitely are an expert iOS developer.

00:24:48 ◼   ► If anybody in the world is, it's you.

00:24:52 ◼   ► Which is nice to have that feeling.

00:24:53 ◼   ► And then when I go to Android, I'm like, "I have no idea what I'm doing."

00:24:57 ◼   ► I'm going in and reading the Getting Started documentation.

00:25:01 ◼   ► I'm really diving in and trying to understand these things.

00:25:06 ◼   ► And some of it is even just really hard because I don't use an Android phone on a regular

00:25:10 ◼   ► basis.

00:25:11 ◼   ► my apps, and I'm like, "I'm just making iOS apps on Android," which probably means that

00:25:18 ◼   ► I'm not making really good apps on Android.

00:25:21 ◼   ► In a lot of ways, I'm making functional apps that work, but it's weird to, on the iOS side,

00:25:29 ◼   ► be able to feel like I'm able to ship top-tier apps in terms of what they're capable of doing,

00:25:35 ◼   ► the way they visually look, the way they behave, etc.

00:25:37 ◼   ► I can be confident on that end.

00:25:40 ◼   ► And it's, I guess the best word is humbling on Android to look at it and be like, "I

00:25:46 ◼   ► really don't know what I'm doing."

00:25:48 ◼   ► And some of this has been a good experience, I think, of getting over that and just saying,

00:25:52 ◼   ► like, "Okay, it's fine.

00:25:54 ◼   ► These apps aren't going to be as good as some of the apps, their equivalents on iOS.

00:25:59 ◼   ► That's fine.

00:26:01 ◼   ► It's a good thing for me as a developer and as a person to sort of be okay with that and

00:26:06 ◼   ► do the best I can, and it works out well in this particular case because I have a very

00:26:10 ◼   ► definite end to when I'll be able to work on this, so I can't be like, "Well, I'm going

00:26:15 ◼   ► to need to learn everything and dive into this for months and months because I'm definitely

00:26:19 ◼   ► not going to be working on Android starting the Monday of WWDC."

00:26:24 ◼   ► So I have to ship this update before then, and so it's just whatever the best I can do

00:26:28 ◼   ► between now and then is the best I'm ever going to be able to do.

00:26:32 ◼   ► But it's definitely a weird feeling, and I guess it gives me some sympathy for what it

00:26:35 ◼   ► it must be like for new iOS developers, too, when you come to the platform and you're like,

00:26:40 ◼   ► "Wow, this has gotten really complicated."

00:26:42 ◼   ► The number of things that a modern application has to be able to do is not insignificant,

00:26:49 ◼   ► and so learning all of those things in some ways from scratch again is a good reminder

00:26:53 ◼   ► of just how hard this job can be.

00:26:56 ◼   ► Although at least now you can click the "Fix code signing issues in Xcode" and it usually

00:27:00 ◼   ► works.

00:27:01 ◼   ► Does it?

00:27:02 ◼   ► Yeah, if you have a clean slate, it usually does work.

00:27:09 ◼   ► It's questionable.

00:27:12 ◼   ► I would not have the same confidence that you've had there.

00:27:15 ◼   ► I know what you're talking about.

00:27:16 ◼   ► It has gotten better.

00:27:17 ◼   ► It has definitely gotten better.

00:27:22 ◼   ► Code signing is always a funny thing.

00:27:24 ◼   ► Amusingly, I ran into this with Android, too.

00:27:28 ◼   ► I thought for a minute that I had misplaced my private signing key for Android, which

00:27:35 ◼   ► would be awkward because as best I can tell you can't reissue it.

00:27:40 ◼   ► And so in order for me to update my application, I have to have the same private key for subsequent

00:27:45 ◼   ► updates.

00:27:46 ◼   ► That's interesting.

00:27:47 ◼   ► And so I definitely had a moment of panic where like, "Oh gosh, I haven't signed this

00:27:52 ◼   ► for four years.

00:27:54 ◼   ► Where is this key?"

00:27:55 ◼   ► Eventually I found it, but definitely a pro tip if you're an Android developer, put that

00:28:00 ◼   ► somewhere safe.

00:28:02 ◼   ► It's important.

00:28:03 ◼   ► All right, well, I know we have almost no time left, but can you tell yet?

00:28:11 ◼   ► Was it worth it?

00:28:12 ◼   ► I think so.

00:28:13 ◼   ► Like I said, ultimately the things that I want to, professionally I want to make sure

00:28:19 ◼   ► that I'm doing good work in a way that is sustainable.

00:28:24 ◼   ► At its core, that's all I want to come,

00:28:26 ◼   ► one out of my career at this point.

00:28:28 ◼   ► I want to be doing work that I'm proud of

00:28:30 ◼   ► in a way that can sustain and feed my family

00:28:34 ◼   ► and be successful in that way.

00:28:37 ◼   ► And I feel like doing something like this,

00:28:39 ◼   ► spending a couple of weeks of working on Android,

00:28:41 ◼   ► like the app itself,

00:28:42 ◼   ► I don't expect to make a lot of money from,

00:28:44 ◼   ► I don't expect for it to be a runaway success.

00:28:47 ◼   ► But I like that in the back of my mind,

00:28:50 ◼   ► if iOS takes a turn in a direction

00:28:52 ◼   ► makes it really hard for me to work, I have Android as a backup in a way that is a bit

00:28:57 ◼   ► more tangible and a bit more concrete than if it was just this amorphous thing that I

00:29:02 ◼   ► hadn't touched in four years.

00:29:03 ◼   ► So I'd recommend it.

00:29:04 ◼   ► It seems like it's a good thing to be more diversified and more broadly experienced.

00:29:09 ◼   ► Okay, and with that we're out of time this week, so thanks for listening everybody and

00:29:13 ◼   ► we'll talk to you next week.

00:29:14 ◼   ► Bye.

00:29:14 ◼   ► Bye