PodSearch

Under the Radar

181: Supporting The Previous OS

 

00:00:00 ◼   ► - Welcome to Under the Radar,

00:00:02 ◼   ► a show about independent iOS app development.

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

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

00:00:06 ◼   ► Under the Radar is never longer than 30 minutes,

00:00:08 ◼   ► so let's get started.

00:00:09 ◼   ► - So today I'm gonna talk about opportunities

00:00:12 ◼   ► and opportunity costs.

00:00:14 ◼   ► We had a great opportunity in the podcast app world

00:00:18 ◼   ► a couple of weeks ago, because for some reason,

00:00:22 ◼   ► Apple Podcasts was crashing for a lot of people that day.

00:00:27 ◼   ► My guess is it was some kind of like server response

00:00:28 ◼   ► that contained an invalid JSON value or something like that,

00:00:31 ◼   ► like some value where like the app decoded

00:00:32 ◼   ► and it immediately crashed.

00:00:33 ◼   ► But whatever it was, the Apple Podcast app was crashing

00:00:36 ◼   ► for tons of people on a particular day.

00:00:39 ◼   ► And I started hearing about this in my Twitter feed,

00:00:42 ◼   ► and I thought this is an opportunity.

00:00:45 ◼   ► And when you're an indie, you gotta think about,

00:00:46 ◼   ► you gotta kinda think on your feet like this.

00:00:48 ◼   ► Like when something happens, there's an opportunity for,

00:00:51 ◼   ► oh, this might be a really good day for my app

00:00:53 ◼   ► for some reason, whether maybe somebody wrote about you

00:00:55 ◼   ► or linked to you, or maybe there's something like this

00:00:57 ◼   ► that happens in the market where like, wait a minute,

00:00:59 ◼   ► if the Apple Podcast app is crashing

00:01:00 ◼   ► for lots of people today, a lot more people than usual

00:01:03 ◼   ► are going to be looking for another podcast app.

00:01:06 ◼   ► And so I thought, what a great time to go increase

00:01:10 ◼   ► all of my search ads bids for the day.

00:01:12 ◼   ► - Genius, genius.

00:01:14 ◼   ► - Went to Apple Podcasts, or I went to the Apple search ads

00:01:16 ◼   ► interface, I just doubled all my bids for that day.

00:01:20 ◼   ► You know what, this is a great opportunity,

00:01:22 ◼   ► I'm gonna get lots of new installs today.

00:01:25 ◼   ► And I wanna compete even better than usual

00:01:27 ◼   ► against my competitors.

00:01:28 ◼   ► And I kinda watched everything roll in over the day.

00:01:31 ◼   ► And the search ads actually didn't end up costing me

00:01:34 ◼   ► that much, I get something like 5% of my installs

00:01:39 ◼   ► from search ads, it's not a big number,

00:01:41 ◼   ► to the point where it's almost not worth running them.

00:01:44 ◼   ► But that day, I did see a something like 300% increase

00:01:48 ◼   ► in total downloads compared to the average day

00:01:51 ◼   ► for the weeks beforehand.

00:01:52 ◼   ► It was a huge spike in downloads that day.

00:01:55 ◼   ► And unfortunately Apple fixed their podcast app

00:01:58 ◼   ► the next day, but I had one really awesome day.

00:02:01 ◼   ► - You can only hope that will last for so, just so, so long.

00:02:05 ◼   ► - Exactly.

00:02:06 ◼   ► And it's the kind of thing, again, I feel like as indies

00:02:08 ◼   ► we should watch out for that kind of opportunity

00:02:10 ◼   ► because it doesn't come along often,

00:02:12 ◼   ► and there's a lot to be said for paying attention

00:02:15 ◼   ► to sources that might tell you when something

00:02:19 ◼   ► like this happens, and being ready for that.

00:02:22 ◼   ► Whatever it means to be ready for you,

00:02:24 ◼   ► and that can mean a lot of different things

00:02:25 ◼   ► for all the different apps.

00:02:26 ◼   ► But for the rest of this episode, I wanna talk about

00:02:29 ◼   ► something I've been doing wrong that has cost me a lot of,

00:02:35 ◼   ► not big opportunities, but potentially hundreds

00:02:38 ◼   ► of small ones each day.

00:02:40 ◼   ► Overcast is no longer compatible with iOS 12.

00:02:43 ◼   ► And when I first made this decision,

00:02:46 ◼   ► when I talked to the show about it,

00:02:48 ◼   ► there were a number of factors that led to me

00:02:50 ◼   ► dropping support for 12 fairly soon after 13 came out.

00:02:54 ◼   ► I think it was a couple of weeks after it came out.

00:02:55 ◼   ► And part of it was, I've always espoused on this show

00:03:00 ◼   ► and my other shows, I've always espoused like,

00:03:03 ◼   ► just if you're an indie, just go for the latest OS

00:03:05 ◼   ► and drop support for the other ones very quickly

00:03:07 ◼   ► because most people will go along with you

00:03:10 ◼   ► and it reduces your testing workload,

00:03:12 ◼   ► and you can use all the new APIs immediately

00:03:13 ◼   ► and everything like that.

00:03:15 ◼   ► And this time it backfired on me.

00:03:18 ◼   ► This time it's hurting in a way that either

00:03:22 ◼   ► it hasn't hurt before or I haven't been noticing before.

00:03:26 ◼   ► To give you some idea, about 15% of my users

00:03:30 ◼   ► are still on iOS 12, and that wouldn't be so bad.

00:03:34 ◼   ► But that also means that new customers

00:03:37 ◼   ► who are looking for a podcast app,

00:03:41 ◼   ► if they're still on iOS 12, I'm not getting those downloads.

00:03:45 ◼   ► I'm not even getting presented to those people as an option.

00:03:48 ◼   ► And my number of new downloads has dropped significantly

00:03:52 ◼   ► since iOS 13 was released.

00:03:56 ◼   ► And it's hard to attribute that entirely

00:03:58 ◼   ► to not being compatible with 12, because also in 13,

00:04:02 ◼   ► like I'm sure the app store changed,

00:04:04 ◼   ► searches, search algorithms changed,

00:04:06 ◼   ► maybe my competitors are doing better against me

00:04:08 ◼   ► than they were before in various ways,

00:04:10 ◼   ► like reviews or search ad bids or whatever.

00:04:13 ◼   ► So there's lots of factors that's hard to control for this,

00:04:15 ◼   ► but certainly I know that there's a lot of people out there

00:04:19 ◼   ► who are looking for a new podcast app on iOS 12,

00:04:25 ◼   ► and I no longer show up for those people.

00:04:28 ◼   ► And I'm also seeing other factors,

00:04:31 ◼   ► like I'm getting emails every day,

00:04:34 ◼   ► a pretty good number of them now,

00:04:36 ◼   ► from people saying, "Hey, I'm still running 12,

00:04:39 ◼   ► "I tried to redownload Overcast and it's gone,

00:04:41 ◼   ► "what happened?"

00:04:42 ◼   ► Or, "Why is Overcast suddenly gone from the app store?"

00:04:45 ◼   ► Or a new one to me, my test flight build for iOS 12,

00:04:49 ◼   ► like the last compatible test flight build

00:04:52 ◼   ► just expired a few days ago,

00:04:53 ◼   ► and so I'm getting tons of emails from people who,

00:04:56 ◼   ► and I didn't even consider this,

00:04:57 ◼   ► tons of emails from people who had the test flight build,

00:04:59 ◼   ► and that expired and they can't install the new ones,

00:05:01 ◼   ► it requires 13, and what happens for this

00:05:05 ◼   ► is they launch the expired app

00:05:08 ◼   ► and it just crashes on launch.

00:05:09 ◼   ► - Sure.

00:05:10 ◼   ► - And if they go to test flight,

00:05:11 ◼   ► it won't let them do anything,

00:05:12 ◼   ► and if they go to the app store,

00:05:13 ◼   ► it won't let them do anything.

00:05:13 ◼   ► (laughing)

00:05:14 ◼   ► So it's actually terrible, and this is, again,

00:05:17 ◼   ► like I never really saw this before

00:05:20 ◼   ► because I always ran much smaller betas in previous years,

00:05:23 ◼   ► but my current beta is like thousands of people.

00:05:27 ◼   ► So what I'm seeing stats-wise, again,

00:05:30 ◼   ► I have about 15% today on iOS 12,

00:05:33 ◼   ► and if I look back about a month ago,

00:05:39 ◼   ► a month ago it was 18%.

00:05:42 ◼   ► That's not dropping very quickly.

00:05:45 ◼   ► Also, a month ago, of that 18% that are still on 12,

00:05:51 ◼   ► about seven or eight percent of it

00:05:53 ◼   ► were on devices that can't run 13, like the iPhone 6.

00:05:57 ◼   ► - Yeah.

00:05:58 ◼   ► - And today, that seven or eight percent is six to seven percent

00:06:02 ◼   ► so we had this fall season of a bunch of new devices

00:06:07 ◼   ► being released and these aren't being replaced that quickly.

00:06:13 ◼   ► And you can look back and you can say,

00:06:15 ◼   ► well, fall's kind of over, new devices,

00:06:18 ◼   ► the new phones are all out and everything

00:06:20 ◼   ► so people kind of haven't updated that quickly.

00:06:22 ◼   ► You can also look forward and say,

00:06:24 ◼   ► well, the holidays are upon us now

00:06:25 ◼   ► and so maybe a lot of people will get new phones

00:06:29 ◼   ► for the holidays, although that's kind of expensive

00:06:31 ◼   ► for most people, but new phones for the holidays,

00:06:34 ◼   ► maybe that'll boost things there.

00:06:38 ◼   ► But either way, that's only about half the people

00:06:43 ◼   ► who are sticking on 12 so far who can't run 13.

00:06:46 ◼   ► The other half are people who just haven't installed 13 yet

00:06:49 ◼   ► and I think a lot of that is because 13 has

00:06:52 ◼   ► a well-earned reputation of being buggy.

00:06:56 ◼   ► And this is kind of this unexpected cost

00:06:59 ◼   ► to a buggy release cycle that the public hears about that

00:07:06 ◼   ► and the public knows, the public is not stupid,

00:07:08 ◼   ► they hear 13 is buggy and they don't install it.

00:07:11 ◼   ► And so there's a lot of people out there

00:07:13 ◼   ► who are just gonna stick on 12 for a long time.

00:07:16 ◼   ► And I think combined with the bugginess of 13,

00:07:20 ◼   ► the fact that 12 was the first iOS update

00:07:24 ◼   ► to drop support for old hardware in two years,

00:07:27 ◼   ► usually it's one year and this was a two-year span

00:07:29 ◼   ► so they dropped two years worth of hardware instead of one.

00:07:34 ◼   ► So it was drop devices for the first time in two years.

00:07:37 ◼   ► And in that two years, the devices have continued

00:07:40 ◼   ► to get more expensive and to have longer useful lifetimes

00:07:44 ◼   ► where people are keeping their phones longer

00:07:46 ◼   ► because they're so expensive to replace and everything.

00:07:48 ◼   ► So the reality I think that I'm facing here

00:07:52 ◼   ► is that dropping iOS 12 so aggressively after 13 came out

00:07:57 ◼   ► was way more costly to me than I expected

00:08:02 ◼   ► and than I would ever have predicted.

00:08:04 ◼   ► And I probably should have predicted it,

00:08:05 ◼   ► but the fact is I didn't.

00:08:07 ◼   ► And this is also different from my previous experience

00:08:09 ◼   ► because Overcast is a wider appeal app

00:08:13 ◼   ► than Instapaper or the magazine or anything else I ever made.

00:08:16 ◼   ► It's also bigger than those apps.

00:08:18 ◼   ► It has a bigger install base and it's a different market

00:08:20 ◼   ► because it's a free up front app

00:08:23 ◼   ► and most users use it the freeway.

00:08:26 ◼   ► And so that I think also lets me serve

00:08:28 ◼   ► a much wider audience and as the audience gets wider,

00:08:32 ◼   ► I get a lower percentage of early adopters

00:08:35 ◼   ► and so more and more people are sticking on the old OS

00:08:39 ◼   ► for longer.

00:08:41 ◼   ► And so what I have now is this combination of factors

00:08:44 ◼   ► that basically means that dropping iOS 12,

00:08:48 ◼   ► I probably did it too aggressively.

00:08:50 ◼   ► If I care about market share, which is also new,

00:08:53 ◼   ► I didn't care about market share from my previous apps,

00:08:55 ◼   ► if I care about market share, which I do,

00:08:58 ◼   ► and it's a free app which gets a lot more people

00:09:01 ◼   ► in, I don't think I can aggressively drop the old OS anymore

00:09:05 ◼   ► and this is compounded by additional factors.

00:09:08 ◼   ► iOS 12, so one of the reasons why I dropped it

00:09:12 ◼   ► is that I knew that there was this mechanic

00:09:14 ◼   ► that you can mark versions as, like this version is okay

00:09:18 ◼   ► for people to re-download in the past

00:09:20 ◼   ► and by default, all versions are marked that way.

00:09:22 ◼   ► And I knew that there was this mechanic

00:09:24 ◼   ► that people could just install the last iOS 12

00:09:28 ◼   ► compatible version of Overcast while I continued

00:09:30 ◼   ► to make a 13 only version ahead of it.

00:09:33 ◼   ► But that mechanic does not work as well

00:09:35 ◼   ► as I thought it would.

00:09:36 ◼   ► The critical downside of that mechanic

00:09:40 ◼   ► is that it only works for people who have downloaded

00:09:43 ◼   ► your app before, not new customers.

00:09:47 ◼   ► So if somebody on a 12 device searches for Overcast today

00:09:50 ◼   ► that's not compatible with it,

00:09:52 ◼   ► Overcast doesn't even show up in the search results.

00:09:54 ◼   ► It's not like it shows up and it lets them download

00:09:56 ◼   ► the last compatible 12 version.

00:09:57 ◼   ► That's how I thought it would work.

00:09:58 ◼   ► Nope, it's gone.

00:10:00 ◼   ► It's as if it doesn't exist.

00:10:02 ◼   ► That's why I'm getting emails from people saying,

00:10:03 ◼   ► "Well, why did you pull Overcast off the App Store?"

00:10:05 ◼   ► Because if you're running 12, that's how it looks.

00:10:08 ◼   ► It's just gone.

00:10:10 ◼   ► The only way you, even people who have it

00:10:12 ◼   ► are having trouble finding it because the only way

00:10:15 ◼   ► you can re-download it is to go to your profile,

00:10:18 ◼   ► the little head in the corner,

00:10:19 ◼   ► which no one even knows you can tap.

00:10:21 ◼   ► Then go to the purchased section, find it there

00:10:23 ◼   ► and hit the cloud to download it there.

00:10:25 ◼   ► And even that, I'm hearing reports that even that

00:10:27 ◼   ► doesn't work correctly in earlier versions of 12, like 12.1.

00:10:32 ◼   ► It works in 12.4, but not 12.1.

00:10:34 ◼   ► And if you have a 12.1 device and you go to

00:10:36 ◼   ► Software Update today, it's gonna upgrade you to 13,

00:10:39 ◼   ► not 12.4.

00:10:40 ◼   ► So if you're holding on to 12, it's a total mess.

00:10:43 ◼   ► It's a total mess.

00:10:44 ◼   ► And so this has ended up costing me way more

00:10:49 ◼   ► than I thought it would cost me to go to 13

00:10:51 ◼   ► because the experience on 12 is way worse than I expected

00:10:56 ◼   ► for people who don't have it yet, and even for those who do.

00:11:00 ◼   ► - Yeah, it's such a, I feel like,

00:11:03 ◼   ► I mean, in some ways it's not surprising.

00:11:06 ◼   ► It's this thing we have to navigate every single year.

00:11:10 ◼   ► Like, every summer we have a decision to make,

00:11:12 ◼   ► or how aggressively are we going to adopt

00:11:14 ◼   ► whatever the new thing is?

00:11:15 ◼   ► And there's this calculus between how many people

00:11:18 ◼   ► do we think will get the new thing quickly,

00:11:20 ◼   ► how many people are gonna be stuck on older versions,

00:11:24 ◼   ► what are the things in the new iOS that will

00:11:27 ◼   ► kind of require us to move forward?

00:11:30 ◼   ► There are certain things that, if it requires

00:11:33 ◼   ► a very structural change in our application

00:11:35 ◼   ► to adopt the new operating system, then it becomes

00:11:38 ◼   ► increasingly difficult to have backwards compatibility.

00:11:41 ◼   ► Or sometimes we have ones where there's really no,

00:11:44 ◼   ► there's no structural change, there's no reason

00:11:46 ◼   ► to drop support other than just simplicity,

00:11:49 ◼   ► but it's not a technical reason.

00:11:52 ◼   ► But this year I think was definitely a tricky one.

00:11:54 ◼   ► And the funny thing is, I think I remember

00:11:56 ◼   ► when you and I were talking about this on the show,

00:11:59 ◼   ► I think I came to an inch close to following you

00:12:03 ◼   ► down the path of adopting iOS 13 soon.

00:12:06 ◼   ► But I think I ended up just almost out of laziness.

00:12:10 ◼   ► I was like, oh, I don't wanna deal with that,

00:12:11 ◼   ► 'cause when I did that I got a few deprecation warnings,

00:12:14 ◼   ► and then I was like, oh, I don't wanna clean those up,

00:12:16 ◼   ► I'll just keep 12 in there.

00:12:18 ◼   ► Turns out, apparently that was a good,

00:12:20 ◼   ► that laziness was well-founded.

00:12:22 ◼   ► But it is such a tricky thing.

00:12:24 ◼   ► And I mean, my numbers are even worse for you.

00:12:27 ◼   ► I was pulling them about kind of where iOS 12 is.

00:12:31 ◼   ► Like for me, iOS 13 is only about 68%

00:12:35 ◼   ► of my users on Podometer, which is my biggest app

00:12:38 ◼   ► at this point, and it, of that, 16% of those people

00:12:43 ◼   ► are running devices that won't get--

00:12:46 ◼   ► - Oh no.

00:12:47 ◼   ► - iOS 13 ever.

00:12:50 ◼   ► So the absolute best I could get to

00:12:54 ◼   ► is starting to get to like, you know,

00:12:57 ◼   ► in the low 80s maybe of percent.

00:13:00 ◼   ► - Right, and even that's probably unrealistic.

00:13:02 ◼   ► Like until those devices are no longer used,

00:13:04 ◼   ► that's even, I think that's unrealistic.

00:13:06 ◼   ► I think you're looking at 75% at most for a while.

00:13:08 ◼   ► - Yeah, and especially I think, I was thinking too,

00:13:11 ◼   ► like those, especially like the five S's I think

00:13:14 ◼   ► will start to like end of life themselves.

00:13:18 ◼   ► They will reach the end of their useful life.

00:13:20 ◼   ► - That's a great euphemism.

00:13:21 ◼   ► - Yeah, like they're gonna, they're just,

00:13:24 ◼   ► that's a really old, I mean that app is as old

00:13:27 ◼   ► as Podometer++ is at this point,

00:13:28 ◼   ► because I launched the app like the day

00:13:30 ◼   ► the iPhone 5S launched basically.

00:13:33 ◼   ► But the six and six plus I think is interesting,

00:13:37 ◼   ► 'cause I think they were part of the battery

00:13:39 ◼   ► replacement program, if I remember correctly.

00:13:41 ◼   ► So like a whole bunch of them just got brand new batteries.

00:13:45 ◼   ► And like I feel like those six and six plus

00:13:48 ◼   ► is gonna be around, and for me, like the six

00:13:50 ◼   ► especially, is the third most popular phone

00:13:55 ◼   ► across all of my users.

00:13:57 ◼   ► - Wow.

00:13:58 ◼   ► - It accounts for 9% of my users.

00:14:01 ◼   ► Like just that one, the iPhone 6.

00:14:03 ◼   ► And so, it's gonna take a very long time

00:14:09 ◼   ► for them to go away, I think.

00:14:11 ◼   ► And in many ways, that's not necessarily a problem.

00:14:16 ◼   ► But it's a weird thing that I feel like next year,

00:14:19 ◼   ► which whenever iOS 14 comes out,

00:14:21 ◼   ► I still may need to be supporting iOS 12,

00:14:25 ◼   ► because even if that number gets down a little bit,

00:14:30 ◼   ► if it's like maybe it's 5% of my users

00:14:32 ◼   ► are running iPhone 6s, it gets really tricky

00:14:35 ◼   ► to wanna just not support them at all.

00:14:39 ◼   ► And I mean, some of my other apps are a much better position.

00:14:41 ◼   ► Like Sleepless Plus has 90% of its users on iOS 13,

00:14:46 ◼   ► which I think is largely because it requires

00:14:49 ◼   ► an Apple Watch, and I feel like there's a correlation

00:14:54 ◼   ► between the person who has the Apple Watch

00:14:55 ◼   ► and the person who has a newish phone

00:14:57 ◼   ► and is updating to iOS 13 more quickly.

00:15:01 ◼   ► But, you know, for certainly for Perimeter++,

00:15:05 ◼   ► I feel like I'm kind of in a similar spot to you,

00:15:06 ◼   ► where it's like 12 is probably gonna be part of my life

00:15:10 ◼   ► for a very long time.

00:15:11 ◼   ► - We are brought to you this week by Linode.

00:15:14 ◼   ► With Linode, you can instantly deploy

00:15:15 ◼   ► and manage an SSD server in the Linode cloud.

00:15:18 ◼   ► You can get a server running in just seconds

00:15:20 ◼   ► with your choice of Linux distro,

00:15:21 ◼   ► resources, and node location.

00:15:24 ◼   ► Linode serves their customers with the help

00:15:26 ◼   ► of 10 data centers around the globe.

00:15:29 ◼   ► They recently added Toronto, Canada,

00:15:31 ◼   ► and I believe they're about to add,

00:15:32 ◼   ► or just did add, Mumbai, India,

00:15:34 ◼   ► and there's a whole bunch more to choose from.

00:15:35 ◼   ► You can place these anywhere.

00:15:37 ◼   ► Linode features native SSD storage,

00:15:39 ◼   ► a 40 gigabit network behind it all, Intel Xeon E5 processors.

00:15:44 ◼   ► So this is top of the line hardware, top of the line network,

00:15:47 ◼   ► and you can serve your customers even faster than before.

00:15:51 ◼   ► And so you don't have to stress about overspending,

00:15:52 ◼   ► Linode has designed their pricing tiers

00:15:54 ◼   ► to feature hourly billing with the added bonus

00:15:56 ◼   ► of a monthly cap on all plans and add-on services,

00:15:59 ◼   ► such as backups and node balancers.

00:16:01 ◼   ► And I gotta say, I've been using Linode myself

00:16:03 ◼   ► for almost a decade now, and they are just fantastic.

00:16:08 ◼   ► They're a great host.

00:16:09 ◼   ► They have been a fantastic value.

00:16:11 ◼   ► The entire time I've been with them,

00:16:13 ◼   ► they've been the best value in the business.

00:16:14 ◼   ► They're constantly upgrading things.

00:16:16 ◼   ► Whenever technology allows them to,

00:16:17 ◼   ► and giving you more for your money, it's fantastic.

00:16:20 ◼   ► They're also hiring.

00:16:22 ◼   ► So if you wanna learn more and see what they're looking for,

00:16:23 ◼   ► go to linode.com/careers.

00:16:26 ◼   ► Linode has pricing options to suit everyone.

00:16:28 ◼   ► Plans start at one gig of RAM on your server

00:16:30 ◼   ► for just $5 a month, and they have lots of plans above that,

00:16:34 ◼   ► including high memory plans,

00:16:35 ◼   ► depending on what your needs might be.

00:16:37 ◼   ► And they have a special offer for our listeners.

00:16:39 ◼   ► You can go to linode.com/radar,

00:16:41 ◼   ► and use promo code radar2019 to get $20

00:16:44 ◼   ► towards any Linode plan.

00:16:46 ◼   ► That could be four months free on that one gig plan.

00:16:48 ◼   ► And with a seven-day money-back guarantee,

00:16:50 ◼   ► you have nothing to lose.

00:16:51 ◼   ► So give Linode a try today at linode.com/radar,

00:16:55 ◼   ► promo code radar2019, learn more,

00:16:57 ◼   ► sign up and make the most of that $20 credit.

00:17:00 ◼   ► Our thanks to Linode for their support of this show

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

00:17:04 ◼   ► So if I do go back to 12, what's it gonna cost me?

00:17:08 ◼   ► You know, the iOS 13 API changes,

00:17:12 ◼   ► like you mentioned a few minutes ago,

00:17:13 ◼   ► like there's new APIs, some of which you have to,

00:17:16 ◼   ► like basically break all your previous app to implement

00:17:18 ◼   ► or to implement something that will only work on 13.

00:17:22 ◼   ► I thought those API changes were gonna be

00:17:25 ◼   ► more appealing than they have ended up being so far.

00:17:28 ◼   ► And I thought I would adopt them more quickly

00:17:31 ◼   ► than I have so far.

00:17:33 ◼   ► And in practice, there's been a number of changes,

00:17:35 ◼   ► like the new background tasks API is a good example.

00:17:37 ◼   ► I adopted that, 'cause it's better in a few ways.

00:17:41 ◼   ► And it's actually been worse,

00:17:42 ◼   ► because it seems to be buggy still,

00:17:44 ◼   ► and I'm hearing lots of reports from people who basically,

00:17:47 ◼   ► it's just never calling the background tasks anymore.

00:17:49 ◼   ► And so it's like, I've actually kind of regressed

00:17:52 ◼   ► by moving to that API, and if I reinstate 12 compatibility,

00:17:57 ◼   ► I will have to go back to the old API for background tasks,

00:18:00 ◼   ► but that actually might not be that bad.

00:18:02 ◼   ► I also thought, you know,

00:18:04 ◼   ► I thought I'd be using things like Swift UI.

00:18:08 ◼   ► And you can't use Swift UI on 12,

00:18:10 ◼   ► so I would have to not do that,

00:18:11 ◼   ► but I haven't even started that yet.

00:18:12 ◼   ► And it turns out Swift UI is still extremely young,

00:18:16 ◼   ► and I'm probably not gonna adopt it

00:18:19 ◼   ► for another year or two.

00:18:21 ◼   ► So that, I feel like, has kind of gone away as well.

00:18:25 ◼   ► There's a bunch of new small APIs that I don't use yet,

00:18:29 ◼   ► but that I would like the option to use,

00:18:31 ◼   ► so things like the new Collection View layout

00:18:33 ◼   ► that makes certain things easier.

00:18:34 ◼   ► There's all sorts of stuff like that,

00:18:35 ◼   ► and if I remain compatible with 12 for a while longer,

00:18:38 ◼   ► like maybe this whole year, I can't use those yet.

00:18:42 ◼   ► But again, I haven't used those yet,

00:18:45 ◼   ► so, and I have a lot to do in the app

00:18:48 ◼   ► that people are asking for or that I want to do

00:18:50 ◼   ► that doesn't require all that stuff.

00:18:53 ◼   ► I also would have to go back and basically backport

00:18:57 ◼   ► some of my UI changes, or undo some of my UI changes,

00:18:59 ◼   ► like I did the segmented control change

00:19:02 ◼   ► on my podcast screen.

00:19:04 ◼   ► And I'll have to either re-implement the old one for 12,

00:19:07 ◼   ► or figure out a way to make that look okay on 12.

00:19:10 ◼   ► I have to redo or undo my dark mode logic

00:19:14 ◼   ► to un-simplify what I did with 13, or remove,

00:19:18 ◼   ► so dark mode becomes more complicated.

00:19:20 ◼   ► I won't be able to adopt the new shortcuts yet

00:19:25 ◼   ► in quite the same way, but I haven't yet anyway,

00:19:28 ◼   ► and honestly, it doesn't seem like it's that big of a deal,

00:19:31 ◼   ► and not a lot of people are asking for it,

00:19:33 ◼   ► and working on shortcuts is about as soul-crushing

00:19:36 ◼   ► as working on the Apple Watch for me,

00:19:37 ◼   ► so I might just delay that for another year.

00:19:41 ◼   ► The big thing is that I'm working on this

00:19:43 ◼   ► AirPlay 2 audio engine, and it depends on a bug

00:19:46 ◼   ► that was fixed in 13.1, so my AirPlay 2 engine

00:19:51 ◼   ► will not work before 13.1.

00:19:53 ◼   ► That's kind of okay though, because it's also having

00:19:56 ◼   ► some drawbacks in testing so far,

00:19:58 ◼   ► and the API is not available on the Apple Watch,

00:20:01 ◼   ► so I would like to write a new engine that works on 12, 13,

00:20:06 ◼   ► and the Apple Watch, and then dynamically switch

00:20:09 ◼   ► to the AirPlay 2 engine only when it's sending

00:20:11 ◼   ► to AirPlay speakers.

00:20:12 ◼   ► That's more complicated, but I'm kind of leaning

00:20:14 ◼   ► in that direction otherwise anyway,

00:20:17 ◼   ► so it's less of an issue, right?

00:20:20 ◼   ► And then the bigger thing is that if I'm gonna re-add

00:20:25 ◼   ► support for 12, it's going to result in just more

00:20:30 ◼   ► development for a market that is shrinking.

00:20:33 ◼   ► The number of people who use iOS 12 is going down

00:20:36 ◼   ► over time, not up, and so logically, and if I think

00:20:40 ◼   ► from a business perspective, from a small business

00:20:42 ◼   ► perspective, and we talked about this before,

00:20:45 ◼   ► it makes a lot more sense to invest in,

00:20:48 ◼   ► if you have limited time, obviously, to invest in areas

00:20:51 ◼   ► where you are, they're like growth areas,

00:20:55 ◼   ► to not put a lot of effort into dying businesses

00:20:58 ◼   ► or shrinking markets, right?

00:21:01 ◼   ► But in this case, the market's really big.

00:21:03 ◼   ► If it really is like 25% of new customers

00:21:05 ◼   ► or something like that, I'm feeling that,

00:21:08 ◼   ► that's costing me, and it doesn't seem like it's shrinking

00:21:11 ◼   ► that much, and so what it really comes down to is

00:21:15 ◼   ► not that I shouldn't invest in this, but that I should

00:21:18 ◼   ► invest in it if it's not gonna take a whole lot

00:21:22 ◼   ► to make it worth readdressing 25% of the market

00:21:26 ◼   ► that I'm currently missing.

00:21:27 ◼   ► And that's a very different calculus.

00:21:30 ◼   ► It's gonna result in a higher testing workload,

00:21:32 ◼   ► it's gonna result in bugs that will only occur on 12

00:21:36 ◼   ► that I will need to figure out and fix and support,

00:21:40 ◼   ► but I'll have to keep my testing devices,

00:21:44 ◼   ► I'll have to keep a couple of them on 12,

00:21:44 ◼   ► which I already have a couple, so I have an SE and a seven

00:21:48 ◼   ► that I have on 12, so that should be okay.

00:21:51 ◼   ► And it's just, it feels kind of gross, it's not very fun,

00:21:56 ◼   ► it doesn't, this isn't a good thing, and every single

00:21:59 ◼   ► conditional check in the code is technical debt,

00:22:02 ◼   ► that I'll have to, it's adding complexity,

00:22:04 ◼   ► it's adding new test cases that I'll have to check over time

00:22:08 ◼   ► and deal with forever until I can remove them.

00:22:12 ◼   ► And that's not fun either, but I think the costs

00:22:16 ◼   ► are lower than I expected them to be because I'm not

00:22:19 ◼   ► adopting all these new APIs yet and have no immediate plans

00:22:22 ◼   ► to do so, so the cost of keeping 12 compatibility

00:22:26 ◼   ► are lower than I thought they would be,

00:22:28 ◼   ► whereas the costs of not having 12 compatibility

00:22:33 ◼   ► have proven way higher than I thought they would be.

00:22:36 ◼   ► - Yeah, it's interesting, I feel like there's two ways

00:22:40 ◼   ► that I've dealt with dual compatibility,

00:22:44 ◼   ► or I guess like dual operating systems in the past.

00:22:48 ◼   ► There's the version which I think is the more,

00:22:49 ◼   ► like the traditional version, which is the,

00:22:52 ◼   ► you try and essentially move the app forward

00:22:55 ◼   ► so that it is equivalent on both platforms.

00:22:59 ◼   ► You know, like when you're talking about like,

00:23:01 ◼   ► well if in 13 a UI control has a new API

00:23:05 ◼   ► that needs to be adjusted and the old one it doesn't,

00:23:07 ◼   ► you kind of, you end up having two versions of that,

00:23:11 ◼   ► or one version that's like, has lots of if checks,

00:23:14 ◼   ► and you're trying to kind of keep the two in sync,

00:23:16 ◼   ► and even just from a features perspective,

00:23:18 ◼   ► that if you want to add a feature, you kind of have to,

00:23:20 ◼   ► you add it to both as far as you can.

00:23:25 ◼   ► The other version that I've done,

00:23:26 ◼   ► and this is something that I think,

00:23:27 ◼   ► it's trickier on iOS potentially,

00:23:30 ◼   ► but on watchOS it is something that I have found

00:23:34 ◼   ► almost essential to do there, is you can,

00:23:37 ◼   ► I've sometimes also gone take in the route

00:23:39 ◼   ► where I essentially ship two versions of the app

00:23:43 ◼   ► inside of the app, and based on what version you are

00:23:48 ◼   ► at launch, it'll run into, sort of run into one or the other.

00:23:52 ◼   ► And on the Apple Watch, this is something that's kind of,

00:23:54 ◼   ► is more something that I've had to do because

00:23:57 ◼   ► of the way that you have to define the entire UI structure

00:24:00 ◼   ► in a storyboard ahead of time.

00:24:02 ◼   ► And so it gets really tricky if you want to like,

00:24:05 ◼   ► chain, if you want to add one of the new controls

00:24:07 ◼   ► into a thing, well then you can't use that scene anymore

00:24:10 ◼   ► in anything that deals with the old thing

00:24:14 ◼   ► because it can't launch that particular scene

00:24:16 ◼   ► in the storyboard.

00:24:17 ◼   ► And so you end up with like, well then I have to duplicate

00:24:19 ◼   ► it and have one that's the old one, and one that's the new one

00:24:21 ◼   ► and at a certain point I just decided, you know,

00:24:22 ◼   ► I'm just gonna like, just completely force it

00:24:25 ◼   ► and I just have like two different trees in the storyboard

00:24:27 ◼   ► that are completely separate from each other

00:24:28 ◼   ► and that ended up working out surprisingly well.

00:24:31 ◼   ► And the tricky thing with that approach is then it means

00:24:33 ◼   ► that like you have this thing where from a support

00:24:35 ◼   ► perspective you'll have like, you'll mention a feature

00:24:37 ◼   ► in a screenshot or on your website.

00:24:40 ◼   ► And if you're running the old version,

00:24:42 ◼   ► it just doesn't exist, which may happen anyway.

00:24:44 ◼   ► Like some features just aren't possible,

00:24:46 ◼   ► but I feel like there's this interesting,

00:24:48 ◼   ► there's an interesting tension or opportunity there too.

00:24:51 ◼   ► I feel like for the situation you find yourself in,

00:24:54 ◼   ► it's almost like, what is the minimum amount of work

00:24:58 ◼   ► that you could do to just enable it to run on iOS 12?

00:25:03 ◼   ► Like the absolute minimum, like if you just change

00:25:06 ◼   ► your build target down to 12, launched on a 12 phone,

00:25:11 ◼   ► like what are the things that would be horribly broken

00:25:13 ◼   ► or crash or obviously there's a few of the things

00:25:17 ◼   ► that Xcode is very helpful with where it says like,

00:25:19 ◼   ► you're calling an API that doesn't exist,

00:25:20 ◼   ► so you need to wrap those.

00:25:23 ◼   ► But for the most part, like if there's this minimum set,

00:25:25 ◼   ► and in some cases it might mean that like the 12 experience

00:25:29 ◼   ► isn't quite as good as the iOS 13 experience,

00:25:33 ◼   ► I wonder if that might be a reasonable approach

00:25:35 ◼   ► for you to take here that rather than necessarily trying

00:25:38 ◼   ► to build up the 12 experience, put a lot of time,

00:25:42 ◼   ► energy and effort into making the 12 experience

00:25:45 ◼   ► really, really good, it's like making the 12 experience

00:25:48 ◼   ► reasonable and then being able to continue,

00:25:51 ◼   ► you sort of go back to focusing on 13,

00:25:53 ◼   ► once you've almost checked the box of 12, you're in there,

00:25:56 ◼   ► and it's your show up in the app store again,

00:26:00 ◼   ► and all of the kind of the positive things there,

00:26:02 ◼   ► but rather than necessarily viewing,

00:26:03 ◼   ► like needing to necessarily go back and backport

00:26:06 ◼   ► everything back in there, like just viewing it as

00:26:09 ◼   ► it's a compatibility thing rather than a,

00:26:12 ◼   ► like it's a platform that you're developing for in that way,

00:26:15 ◼   ► which I don't know if that's, like sometimes I feel like

00:26:17 ◼   ► I'm overly pragmatic with this kind of stuff,

00:26:20 ◼   ► which is, but it's something to think about maybe.

00:26:23 ◼   ► - Yeah, I mean that's a very good point,

00:26:25 ◼   ► but like honestly I think my app has diverged

00:26:29 ◼   ► from 12 compatibility way less than you might think,

00:26:34 ◼   ► like I don't think it's gonna take a lot,

00:26:37 ◼   ► I haven't started this yet, I was thinking about doing it

00:26:39 ◼   ► over the break maybe, but the reason I made it 13 compatible

00:26:43 ◼   ► was for my own convenience to avoid a whole bunch of like,

00:26:46 ◼   ► you know, checks on, basically to adopt 13's changes

00:26:50 ◼   ► as quickly as possible and avoid a lot of like,

00:26:54 ◼   ► you know, if available checks and double implementations

00:26:59 ◼   ► of things, but the reality is like they just haven't

00:27:02 ◼   ► proven to be that necessary, like all the new APIs,

00:27:05 ◼   ► again I really thought I'd be using Swift UI already,

00:27:07 ◼   ► I thought I'd be redesigning my root screen

00:27:09 ◼   ► to use the new collection view already,

00:27:11 ◼   ► and I just haven't done that yet,

00:27:12 ◼   ► and there's a lot of other stuff that's more important

00:27:14 ◼   ► that people are asking me to do, or that I want to do,

00:27:17 ◼   ► that is potentially a year of work,

00:27:20 ◼   ► or at least like six months of work,

00:27:21 ◼   ► and it's like if I can spend a day making my app

00:27:25 ◼   ► compatible with 12 again, which might be all it takes,

00:27:29 ◼   ► then that's gonna be really worth it.

00:27:30 ◼   ► Now if it's gonna take a month,

00:27:32 ◼   ► that might not be worth it anymore, right?

00:27:34 ◼   ► But you know, I don't think it's gonna actually

00:27:35 ◼   ► be that much effort.

00:27:36 ◼   ► - Yeah, and I think that's made it to the point

00:27:38 ◼   ► is it's like, if it takes a day, it's a no brainer,

00:27:41 ◼   ► like if that's all it is, that you can just like

00:27:43 ◼   ► do a few if checks and go back and forth,

00:27:45 ◼   ► and then it's like, as it scales up from there,

00:27:47 ◼   ► it just, the strategy and approach you take

00:27:50 ◼   ► may start to diverge, or like you have different

00:27:52 ◼   ► feature sets or different things,

00:27:54 ◼   ► but that like, oh this feature just doesn't work great on,

00:27:59 ◼   ► like it's gonna, it would be a mountain of work

00:28:00 ◼   ► to get this new feature that you did on,

00:28:02 ◼   ► or you know, in 13 to work on 12,

00:28:04 ◼   ► it's like okay, well I just won't, but yeah,

00:28:07 ◼   ► and it's like as long as it's not then sort of

00:28:09 ◼   ► handcuffing you for the future,

00:28:11 ◼   ► where there's like issues or problems with your,

00:28:14 ◼   ► that you would love to address in the 13 version,

00:28:17 ◼   ► but would be really awkward or cumbersome to do

00:28:20 ◼   ► in a 12 compatible way, like that would,

00:28:23 ◼   ► I'd start to get nervous about like,

00:28:25 ◼   ► you know, oh I need to re-architect

00:28:27 ◼   ► with the collection view stuff and take advantage

00:28:29 ◼   ► of the new difficult data source and stuff,

00:28:32 ◼   ► and like I'd love to be able to do that, but I can't.

00:28:34 ◼   ► And I just, so it means that like,

00:28:36 ◼   ► but like until when is the thing that always

00:28:38 ◼   ► kind of sticks in my head, like is that gonna,

00:28:40 ◼   ► when are we gonna be able to drop 12,

00:28:41 ◼   ► and it's like, is it next fall, is it the following fall?

00:28:46 ◼   ► - Yeah, that's a good question.

00:28:48 ◼   ► - At least I feel good that 12 was a reasonable start,

00:28:50 ◼   ► like it was a reasonable OS, like of all the versions

00:28:52 ◼   ► to kind of be stuck on potentially,

00:28:54 ◼   ► but that's definitely a tricky,

00:28:56 ◼   ► it's a tricky calculus going forward for sure.

00:28:59 ◼   ► - Yeah, I mean I just, I think back to like

00:29:01 ◼   ► all the years that I've been saying,

00:29:02 ◼   ► yeah just drop it on day one, you can use the new stuff,

00:29:04 ◼   ► and everyone right in saying like man, I wish I could,

00:29:06 ◼   ► but I work for this big company

00:29:07 ◼   ► and they require us to keep compatibility.

00:29:09 ◼   ► Now I'm like ah crap, I've become that company.

00:29:12 ◼   ► - You've become that person who does the if checks

00:29:14 ◼   ► in your own code.

00:29:15 ◼   ► - Because I'm telling myself I have to keep compatibility

00:29:18 ◼   ► for my own business reasons.

00:29:20 ◼   ► - Yeah.

00:29:21 ◼   ► - Oh God.

00:29:23 ◼   ► All right, thanks for listening everybody,

00:29:24 ◼   ► and we will talk to you in two weeks.

00:29:26 ◼   ► - Bye.

00:29:27 ◼   ► [