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   [