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: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: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: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: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: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: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: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: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:23
◼
►
All right, thanks for listening everybody,
00:29:24
◼
►
and we will talk to you in two weeks.