Under the Radar

167: The WWDC Hangover


00:00:00   Welcome to Under the Radar,

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

00:00:04   I'm Mark Orment.

00:00:06   - And I'm David Smith.

00:00:07   Under the Radar is never longer than 30 minutes,

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

00:00:10   - So Dave, I have a confession to make.

00:00:13   I have a WWDC hangover.

00:00:14   - Although you indulged a little too much in the new APIs.

00:00:18   - There is so much.

00:00:20   So here we are, we're recording a week after WWDC.

00:00:24   The dust is starting to settle.

00:00:27   We got such a big year this year

00:00:29   that I personally am kind of feeling overwhelmed

00:00:33   and I'm having a hard time figuring out

00:00:36   what to tackle this summer at all

00:00:38   and what to tackle first.

00:00:41   Because there's so much that we got.

00:00:43   I mean, this was a WWDC for the ages.

00:00:46   This was, I would say, the biggest one

00:00:49   since the Swift announcement about,

00:00:51   what, five years ago was that?

00:00:52   - Imagine, so we're on Swift 5 now,

00:00:54   but yes, that sounds about right,

00:00:55   that it was about four or five years ago.

00:00:57   And there are just, we got so many huge new APIs,

00:01:02   so many foundational shifts and things we can do.

00:01:05   We got almost everything we were asking for,

00:01:08   like on the API front, really,

00:01:10   which is kind of amazing.

00:01:11   And there are so many things that any one or two of these

00:01:15   would have made for a pretty good summer

00:01:16   and a pretty good year, and we got like six of them.

00:01:19   (laughs)

00:01:20   - Which is a little overwhelming.

00:01:22   - A little.

00:01:22   - It is like, I remember feeling,

00:01:26   I always go around WWDC with a notebook,

00:01:28   where I try and, and one of my lists,

00:01:31   I keep like six lists, and one of my lists is always,

00:01:34   this is the thing, something I need to follow up on.

00:01:37   Like some kind of offhand comment they make,

00:01:39   or some API or news thing that they mention,

00:01:42   that I'm like, huh, that's interesting to look at.

00:01:44   And usually that's maybe like two or three things

00:01:46   at the end of the week.

00:01:48   'Cause these are usually things that aren't

00:01:51   the obvious things that I have to look at.

00:01:53   If they're making a change to HealthKit

00:01:54   that affects my apps, I'm gonna know all about that.

00:01:57   But there's always also those things

00:01:59   that are just like interesting and more side notes.

00:02:01   And this year that was like two pages of small writing

00:02:06   in my book, where there's all these things

00:02:07   that are just kept coming.

00:02:09   And in some ways it makes sense.

00:02:10   I feel like last year we had,

00:02:12   like last year felt like a tune-up.

00:02:14   It felt like it was this year where,

00:02:16   we got some good stuff and things got better.

00:02:19   But for the most part, it was much more incremental

00:02:22   and much more just these small improvements to things.

00:02:26   Which in some ways was nice,

00:02:27   and it made for a much quieter summer.

00:02:28   But this year feels like,

00:02:30   it's like the dam is burst and all the things

00:02:34   that they've been holding back

00:02:35   or they've been working on in secret

00:02:37   for years and years and years now,

00:02:38   all finally appeared all at once.

00:02:41   And like, that's great.

00:02:43   But yeah, where do we start?

00:02:44   - Exactly, I mean, like my list of like significant things

00:02:48   I want to tackle this summer.

00:02:51   Like I spent yesterday still trying

00:02:53   to get AirPlay 2 to work,

00:02:54   'cause I keep making small progress.

00:02:56   I went to a lab, I talked to the people at the lab,

00:02:58   they were great, so I got a few tips

00:03:00   on things I could try to solve my problems.

00:03:02   So I started trying that yesterday.

00:03:04   Still didn't get anywhere,

00:03:05   but I'm getting slowly, you know, fewer problems.

00:03:09   You know, the first thing I usually do

00:03:12   when there's a new beta is I set my minimum deployment target

00:03:17   to the newest version of the OS

00:03:19   and look at all the deprecation warnings I get.

00:03:21   And I try to see, all right, how do I tackle these?

00:03:24   And usually fixing deprecation warnings

00:03:27   is a really easy job because it's like,

00:03:29   oh, the value of this constant changed.

00:03:31   Like the activity, the style of spinner activity indicators,

00:03:36   like the old styles are deprecated, now there's new ones.

00:03:38   Like I can't use white anymore or gray,

00:03:40   I have to use medium and large.

00:03:41   Fine, that took like one minute to go through my code

00:03:44   and then replace those, it was fine.

00:03:46   But there's also a significant other deprecations

00:03:49   that will require like adoption of entirely new APIs.

00:03:52   And that's things like background refresh, which is huge.

00:03:56   Context menus from 3D Touch, also huge.

00:04:01   Lots of small things like using the status bar frame

00:04:04   to detect orientation, there's all sorts of stuff

00:04:07   that is deprecated in iOS 13.

00:04:08   It's a huge year for just like fixing deprecation warnings

00:04:12   and using the new, and migrating to whatever replaces them.

00:04:15   Like normally that's a small job.

00:04:17   This year that's gonna be probably two weeks.

00:04:20   And then there's also, maybe one week,

00:04:23   so there's also the entire thing about Catalyst,

00:04:27   formerly called Marzipan on podcasts,

00:04:29   where you can bring your iPad app to the Mac.

00:04:30   That's awesome, but it's gonna take some work.

00:04:34   And as I started doing it with my app,

00:04:37   I realized that's a bigger job than I expected it to be.

00:04:40   I'm gonna have to do more work than I expected there.

00:04:43   There's a lot more Mac-specific UI considerations

00:04:48   that you should probably be making.

00:04:49   Like for me, one of the biggest ones is

00:04:51   using my iPad app on the Mac right now really is clumsy

00:04:54   because of my two-column navigation

00:04:57   that's navigating what's really a three-column hierarchy

00:05:00   of navigation stack.

00:05:02   And so I wanna make a three-column view,

00:05:03   but that's more work I have to do.

00:05:06   They also finally gave me Siri audio intents,

00:05:09   which is huge.

00:05:10   That could have been half the summer right there,

00:05:12   just implementing all the new Siri kit stuff,

00:05:14   which is so much better than it was last year.

00:05:16   It kinda makes me mad that I spent last summer doing it

00:05:20   because I have to rip out a lot of that now and redo it.

00:05:23   But oh well.

00:05:24   But that's a huge thing right there.

00:05:25   Siri audio intents, that could be three weeks

00:05:28   of development right there.

00:05:30   Then they did sign in with Apple,

00:05:33   which I'm not sure if I should use yet,

00:05:35   but I probably should offer it.

00:05:37   I don't need to, I don't fit the requirement

00:05:38   of needing to offer it, but I probably should offer it anyway

00:05:42   because that's a thing.

00:05:44   I also would love, there's this new core data

00:05:48   and cloud kit synchronization API.

00:05:51   - Danger, danger.

00:05:52   - I know.

00:05:53   - I have flashbacks to a very bad situation that happened,

00:05:56   what is it, six years ago when they first tried that?

00:05:58   - Yeah, yeah, and that was very bad.

00:06:00   But this is not that.

00:06:02   That was Siri cloud kit.

00:06:03   This looks a lot better.

00:06:04   And I watched the video on that and I'm like,

00:06:06   man, I would love to free myself of user data.

00:06:10   Right now I have to manage all this user data on my servers.

00:06:13   I would love to free myself of that burden

00:06:16   and get myself out of the business

00:06:18   of running most of the servers I run.

00:06:20   I would still probably run some for crawling

00:06:22   and proxying stuff, but I would get myself

00:06:25   out of the business of running most of my servers,

00:06:26   which I'm increasingly hating.

00:06:28   So that would be huge, but moving my entire data layer

00:06:32   like that would also be a massive job.

00:06:35   That's like a whole year right there of getting that right.

00:06:39   It would be six months of the initial implementation

00:06:41   and then six months of bug fixes of getting,

00:06:43   'cause it's changing the way sync and data storage work

00:06:46   and user accounts, and my users ultimately

00:06:49   wouldn't care about that.

00:06:51   I would care and I would benefit, but they mostly wouldn't

00:06:54   and they would probably be angry at the process

00:06:57   where no new features basically happen

00:06:58   in the app for a long time.

00:07:00   Also, there's the entire question of Swift UI,

00:07:05   which is huge.

00:07:07   Swift UI, formerly known as Amber and the rumor mill,

00:07:10   this is massive.

00:07:13   Now, it's also, I started playing with that.

00:07:15   It's super early.

00:07:16   It's clearly a 1.0, but it's surprisingly good

00:07:21   for a 1.0, but it's still, to me,

00:07:24   there's a huge learning curve there,

00:07:26   because I also, by the way, need to really

00:07:29   finally learn Swift and dive into it fully.

00:07:31   I've used Swift for a couple years,

00:07:35   but I wouldn't say I know it.

00:07:37   I spent the plane ride home and a couple days after

00:07:42   just reading through the Swift book

00:07:43   and finally teaching myself a lot more of the details

00:07:47   about how this language works and how to use it,

00:07:50   but I still have to start using it.

00:07:51   Now, I want to really dive into Swift fully

00:07:54   and start writing all new code in Swift

00:07:57   whenever that's reasonably possible,

00:07:59   but I have an app that is 99% Objective-C,

00:08:01   and so there's a bunch of overhead,

00:08:04   both conceptually and in code, of doing that,

00:08:07   of starting to write new code in Swift

00:08:09   if it's interacting with an almost entirely Objective-C app.

00:08:12   There's some overhead to that, and so I have to,

00:08:16   or I want to learn an entire language

00:08:19   that is pretty new to me still,

00:08:21   use that to write new UI code in a new UI framework

00:08:25   that fortunately you can also adopt Swift UI in parts

00:08:28   in a UI kit app and other languages,

00:08:31   but that's still integration.

00:08:34   There's barriers, there's bridges, there's transfers.

00:08:37   There's friction there, not to mention the fact

00:08:39   that Swift UI is itself brand new,

00:08:42   and so there's very little documentation,

00:08:44   very few tutorials.

00:08:45   Swift UI, as it stands today, is going to be,

00:08:50   adopting that today is going to be the hardest version

00:08:53   of Swift UI to adopt that we will ever have

00:08:55   because it is so young and so minimally documented,

00:08:59   and there's no sample code, there's no tutorials.

00:09:01   So that's very, very young, and there's still

00:09:04   the giant question, as I was playing with it,

00:09:07   I had the giant question of how do I know what I can do?

00:09:12   That's really hard for me with Swift UI.

00:09:14   I would, okay, well, you type in the box, whatever,

00:09:17   you get some crazy Swift error

00:09:19   if you do anything slightly wrong

00:09:21   because the crazy syntax hacking they're using

00:09:24   to get it to work, it produces incredibly unfriendly

00:09:28   Swift errors if you miss a brace somewhere

00:09:31   or if you use a type that isn't implying a return

00:09:36   of the correct value or something, it's real weird.

00:09:40   Or if you actually see the, if you right-click on a block

00:09:44   and you say move to method, and you see the method signature

00:09:47   it generates, you realize quite how complex and crazy

00:09:52   this language is of trying to fit this fairly dynamic system

00:09:56   into this incredibly rigid language,

00:09:59   and there's all these generics everywhere,

00:10:01   and it's a mess once you go slightly below the surface.

00:10:04   So there is a huge learning curve there.

00:10:07   You can do the simple stuff quickly,

00:10:09   but more complex stuff is gonna take us a while

00:10:11   to figure out how to do and to really internalize

00:10:14   how this works.

00:10:15   So Swift UI, that's a huge thing I wanna tackle this summer.

00:10:19   And I also wanna rewrite my entire watch app

00:10:21   using Swift, Swift UI, and combine a whole new thing

00:10:25   to me as well with the independence goal

00:10:29   and with direct syncing to the internet

00:10:31   and direct downloading from the internet

00:10:33   so that the standalone playback is much more reliable.

00:10:36   So that's another thing I wanted to do,

00:10:38   and I have this huge dilemma of not only like

00:10:42   where do I even start with all this stuff,

00:10:44   'cause what I just described is like three years of work.

00:10:46   - You got three months, it'll be fine.

00:10:48   - Yeah, right, exactly, I have three months,

00:10:50   at the end of which my customers will want all of this.

00:10:53   (laughs)

00:10:54   And then, and I think a lot of this comes down to

00:10:56   a dilemma that I have that I think a lot of us

00:10:59   are probably facing right now,

00:11:01   which is the dilemma of wanting to rewrite code

00:11:04   using the new stuff.

00:11:06   Like we have a code base that works,

00:11:09   but there's all this new stuff that in many ways is better

00:11:11   and in many ways can reduce the amount of that code

00:11:13   or can eliminate certain problems that we're having.

00:11:15   And so it's so tempting to want to rewrite

00:11:19   what already works, what we already have.

00:11:22   And like on one level, that is a terrible idea.

00:11:26   Like there's the famous old Joel and Software post about it,

00:11:28   like this is known in the industry,

00:11:29   like rewriting stuff that already works from scratch

00:11:32   is usually not a good idea.

00:11:34   It usually is not nearly as easy as you think it will be.

00:11:38   It usually has a large period afterwards

00:11:41   where you basically have to refix all the bugs

00:11:43   that you fixed over the last X years,

00:11:44   like you've refixed them in the new system,

00:11:47   and customers don't really usually care

00:11:49   or benefit from whatever you did under the hood.

00:11:52   But it's so tempting to do this, to get the new stuff,

00:11:56   to simplify things and to eliminate certain classes of bugs

00:11:58   or problems that you were having, but your old code works.

00:12:01   And it's rarely a good idea to rewrite what works.

00:12:05   But at the same time, I look at this and I think,

00:12:07   well, I do need to learn some of this stuff,

00:12:09   so this might be a good way to do it.

00:12:10   And also, legacy code, like a huge legacy code base

00:12:14   and just like the general idea of a legacy burden

00:12:17   is a liability when a new competitor can come in

00:12:22   and outrun you if they only use the new stuff.

00:12:28   How long does it take, if you have five years

00:12:31   of your code base, how long would it take

00:12:34   for a new competitor to come in and match you

00:12:38   and then outrun you if they were only using the new stuff,

00:12:41   if they didn't have your legacy?

00:12:43   You gotta think about that.

00:12:44   I have no idea even where to start with any of this.

00:12:49   So instead, I will start with our sponsor

00:12:51   and then you can tell me where to start afterwards.

00:12:53   - I can tell you what to do, don't worry, I got this.

00:12:55   - Okay, good, please, I'm really depending on you.

00:12:58   So we are brought to you by Linode.

00:13:01   With Linode, you can instantly deploy and manage

00:13:03   an SSD server in the Linode cloud.

00:13:05   You can get a server running in just seconds

00:13:07   with your choice of Linux distro,

00:13:08   resources and node location.

00:13:11   It doesn't matter if you're working on your first server

00:13:14   or deploying a complex system, Linode is where to go.

00:13:17   They offer the fastest hardware network

00:13:20   with outstanding customer support if you ever need help

00:13:22   and it's super easy to launch a Linode cloud server.

00:13:25   They also now have block storage available in Newark,

00:13:28   Fremont, Dallas, Atlanta, Frankfurt, London and Singapore,

00:13:31   soon to be released in Tokyo and they have this all new

00:13:34   version four RESTful API that's now out of beta

00:13:37   that includes a great CLI, including an officially supported

00:13:40   Python CLI.

00:13:41   So also right now, Linode is hiring.

00:13:45   So if you want to learn more and check out what they are

00:13:46   looking for, just go to linode.com/careers.

00:13:49   Now I love Linode, I've been there for over eight years now.

00:13:52   I have all my servers hosted there and really,

00:13:55   you know, I said earlier, I'm trying to get myself out

00:13:57   of running so many servers but it's not their fault at all.

00:13:59   Linode is great, like everything they do for me

00:14:01   is super easy.

00:14:03   It's like if you want to run a server with minimal

00:14:05   complexity, minimal effort and honestly minimal price,

00:14:09   they are the place to go.

00:14:10   Their pricing options are fantastic.

00:14:13   Their plans start at one gig of RAM for just $5 a month.

00:14:16   They also offer high memory plans, dedicated CPU plans

00:14:19   and lots of other specialties in case you need that

00:14:21   and Linode has a special offer for our listeners.

00:14:23   If you go to linode.com/radar and use promo code radar2019,

00:14:28   you will get $20 towards any Linode plan.

00:14:31   So on that $5 a month plan, that could be four months free

00:14:34   and with a seven day money back guarantee,

00:14:36   you have nothing to lose.

00:14:37   So give Linode a try today at linode.com/radar,

00:14:41   promo code radar2019 to learn more, sign up

00:14:44   and make the most of that $20 credit.

00:14:46   Thank you so much to Linode for their support of this show

00:14:48   and all of Relay FM.

00:14:49   So Dave, where do I start?

00:14:52   What do I do?

00:14:54   - This year is worse than the normal pattern

00:14:56   but I think the normal pattern still helps us get out

00:14:59   of this hole because this year there's just more,

00:15:01   there's more choices, there's more options,

00:15:03   there's more things that we can do

00:15:05   but I think the approach I think that I found works well

00:15:09   in past years, I think still applies well here,

00:15:13   is that ultimately the next three months

00:15:17   are about making sure that our users' expectations

00:15:21   for new and user-facing, invisible

00:15:26   and heavily marketed by Apple features are taken care of

00:15:30   which I think is both good for our customers

00:15:33   in terms of obviously giving them the new things

00:15:36   that they're looking for and expecting

00:15:38   and also as a side benefit, useful in terms of being part

00:15:42   of the marketing and editorial push that will happen

00:15:46   September, October.

00:15:48   And this year I feel like a lot of that stuff

00:15:50   is going to be, it's like making sure we do obviously

00:15:53   the dark mode on--

00:15:55   - Oh, I forgot about that. - On iOS

00:15:57   which is less complicated,

00:15:59   like Overcast already has a dark mode,

00:16:01   Pedometer++ already has a dark mode.

00:16:03   But now I have to think about do I offer it as an option

00:16:06   to follow the system setting

00:16:08   or to keep your own independent setting

00:16:09   'cause this always happens, whenever the system adds

00:16:11   something like rotation lock or something,

00:16:13   then apps that already had that as a separate option

00:16:16   are faced with these problems of if you just follow

00:16:19   the system and remove the option from your app,

00:16:21   then users will complain because they're like,

00:16:23   I want to keep the system in light mode

00:16:25   but I want your app in dark mode.

00:16:27   And so then you have to decide whether to not follow

00:16:30   the system or whether to have another preference

00:16:33   that says follow the system preference

00:16:35   or use my own preference.

00:16:37   - That is going to be tricky, but at least

00:16:41   the fundamental work, like the hard part with dark mode

00:16:43   was making all your views have dynamic theming.

00:16:47   That's the part that was really challenging

00:16:49   and more difficult, but that's a feature that I think

00:16:51   users are going to expect and especially it's a feature

00:16:55   where people are going to really,

00:16:57   you would really stand out if you didn't adopt it.

00:17:00   Because if the user has switched their phone into dark mode

00:17:03   and they're going around between all these black apps

00:17:06   and then suddenly they come to one of yours

00:17:08   and it's like this blinding white screen of brightness,

00:17:13   that's going to stand out both in terms of burning their eyes

00:17:18   as well as like, oh, whoa, what's going on here?

00:17:21   And so that's a feature that I think we absolutely need

00:17:23   to make sure is absolutely ready day one.

00:17:28   And I think that's a feature that doesn't feel young,

00:17:31   doesn't feel particularly problematic.

00:17:34   It's something that they trialed in Mac OS before.

00:17:36   So in my mind it's kind of like starting there.

00:17:40   Like start with those kind of visual features,

00:17:42   making sure we adopt some of the new card-based things

00:17:46   for modals and there's a few things like that

00:17:48   where there's new sort of visual things

00:17:52   that users are going to expect.

00:17:54   I think going along those same lines,

00:17:57   I feel like on the watch the big push

00:17:59   is going to be independence.

00:18:01   And so if you have a watch app,

00:18:03   I feel like it is imperative that you make it independent

00:18:06   and have it be independent at the beginning.

00:18:09   And it's more important that probably for day one

00:18:11   that it is independent than that it uses SwiftUI

00:18:16   and has all the fancy new UI things you can do there

00:18:18   and the new capabilities, but it's like at the very least

00:18:22   it needs to be able to be something that you can use

00:18:25   in some form by itself.

00:18:28   Like that seems like something that's,

00:18:30   it seems like the general theme is

00:18:32   that's a very important thing,

00:18:33   it doesn't really make sense now,

00:18:34   but it will probably make a lot of sense this fall.

00:18:36   That's kind of the vibe I get.

00:18:37   And then what I tend to do is I'll lay out

00:18:40   the rest of the features and the things that I want to do.

00:18:42   And I'll start with the customer.

00:18:44   Start with things that they will notice

00:18:46   that they would appreciate, that would make their experience

00:18:50   of using the app better.

00:18:52   And start there and then just kind of work backwards.

00:18:55   Because many of the architectural changes

00:18:58   and the kind of under the hood improvements that we get,

00:19:02   you know, that were made possible this year.

00:19:04   Like there's huge amounts of stuff with,

00:19:07   you know, I remember in our kind of like

00:19:08   Wants and Wishes episode we asked

00:19:09   for better UITableView stuff.

00:19:11   And we got a lot of that.

00:19:13   Like there was a, we have this whole new

00:19:15   difficult data source system that can, you know,

00:19:18   we give you dynamic and thoughtful updates to UITableView

00:19:21   to make sure you don't get into an inconsistent state.

00:19:25   That's great.

00:19:25   But if you have a current system that works

00:19:27   and that's just going to be made better,

00:19:29   you know, it's like that gets pushed farther down

00:19:32   the line in my mind.

00:19:33   Because ultimately, it's like what I want to do is,

00:19:36   you know, push forward those features

00:19:38   that people are going to notice.

00:19:39   That are going to get attention,

00:19:40   that are going to make my users life better.

00:19:42   That are actually going to be quality of life improvements

00:19:44   for them.

00:19:45   And then it's this process from there of working back down,

00:19:48   you know, progressively deeper in the stack.

00:19:50   Getting towards things that like start benefiting me

00:19:53   rather than my customer.

00:19:54   And like, I don't know if that's the exact right approach,

00:19:58   but what's something that I've found sort of over the years

00:20:00   that seems to work well is to have that,

00:20:03   just start with the user and work your way back

00:20:05   rather than it is so easy to get stuck

00:20:08   on the things that are exciting.

00:20:09   The things that are really cool and would make your life,

00:20:12   like the developer, you know, you or my,

00:20:14   or our listeners life easier.

00:20:16   Like those things are great, but they're also,

00:20:19   like no one's ever going to notice.

00:20:20   And like in many ways, like you know you're going down

00:20:23   a tricky road when it's a feature where your goal

00:20:26   is that the user doesn't notice.

00:20:27   Where your goal is that you've switched something out

00:20:30   under the hood and they should never be aware of it.

00:20:33   And if that's the case, like absolutely do that.

00:20:35   And that is a great feature for like, you know,

00:20:37   the end of the year, January, February,

00:20:39   when things tend to slow down and the initial,

00:20:43   you know, sort of push of this has settled out.

00:20:46   But that's sort of the general approach

00:20:49   I'm taking this year.

00:20:49   And I think the only slight exception to that is,

00:20:53   with SwiftUI on the watch, is an area that I feel

00:20:55   very conflicted about.

00:20:58   Because we finally have the ability to make

00:21:01   like a genuinely interactive, not kind of horrible

00:21:05   and broken watch interface.

00:21:07   And if you've listened to the show for a long time,

00:21:09   I love making watch apps.

00:21:10   Like, it's my jam, I love it.

00:21:12   And I'm very tempted to dive into SwiftUI,

00:21:16   probably sooner than I should.

00:21:18   Because it's a very young, it's a very young framework.

00:21:21   I mean, I'm sure it's been developed

00:21:23   and been working on for years at Apple.

00:21:24   But it's not something that has been out in the public,

00:21:27   and been battle tested, and is in wide use by Apple itself.

00:21:31   And it's something that is very young.

00:21:34   And it was a funny thing I kept saying this last week,

00:21:36   is that I felt really smug for never learning auto layout,

00:21:40   never learning size classes, never learning storyboards.

00:21:44   Like, there's all these UI frameworks and platforms

00:21:47   that Apple has introduced over the years,

00:21:48   and I never used them, because I was just happy

00:21:50   doing what I was doing.

00:21:51   And here's another one they're presenting.

00:21:53   And I think the effort behind it makes me think

00:21:56   it's a bit more comprehensive than those kind of things,

00:22:00   those previous UI paradigms, which were all about

00:22:03   taking the old version and making it better.

00:22:06   But the reality is, if I want to make cool watch apps,

00:22:08   I'm going to need to learn it.

00:22:10   And I kind of want to start making those now.

00:22:12   But in my mind, that's my dessert at the end of the summer

00:22:16   for hopefully when, hey, the bugs are kind of starting

00:22:18   to get worked out, and we're on beta six of the Swift UI,

00:22:23   which is hopefully going to be a lot better than it is now,

00:22:25   where I chewed through 35% of the battery on my laptop

00:22:30   at the airport trying to work on it for 10 minutes.

00:22:33   And Xcode was using 600% of my CPU doing the live preview.

00:22:38   And I don't know why.

00:22:39   It wasn't like I was building this crazy complicated thing.

00:22:42   But that's developer tools.

00:22:43   It's the first beta of something that is clearly not,

00:22:47   has not been optimized for battery performance

00:22:50   at this point.

00:22:52   That is not what it's there for.

00:22:54   And so maybe beta five, beta six,

00:22:57   that's a good time to pick that up.

00:22:58   And in the meantime, focus on anything

00:23:00   that the user is going to see.

00:23:01   And then I suppose there's also this other side thing

00:23:04   of deciding what we're going to do with adoption

00:23:06   in terms of requiring iOS 13 or watchOS 6.

00:23:11   And deciding that now because it gets really awkward

00:23:14   to kind of, either you need to intentionally be developing

00:23:17   in parallel features or you need to decide now

00:23:21   that you're going to cut support

00:23:22   and be able to push that off

00:23:24   and deal with deprecation in that way now

00:23:28   because deciding late in the summer

00:23:29   is just going to mean that you've either done double the work

00:23:31   or you've dug yourself into a big hole.

00:23:34   - Yeah, I mean, my usual approach to that

00:23:37   is to take advantage of the fact

00:23:39   that I'm a one-person company with lots of early adopter users

00:23:43   and just require the new OS pretty soon after it's out,

00:23:46   either on day one or maybe a couple of weeks

00:23:48   or a month later.

00:23:49   'Cause the people on the old OS,

00:23:52   the old apps that they have that won't auto update

00:23:55   to the new version still work.

00:23:57   Overcast, 2019 point, whatever it's going to be,

00:24:01   when the new version ships, that's still going to work

00:24:06   for a while probably.

00:24:08   And this year, last year, the iOS 12 transition

00:24:11   didn't cut off hardware support for any devices,

00:24:13   but this year the iOS 13 transition does.

00:24:15   So there is some argument to hold back a little bit,

00:24:20   but ultimately, for me, I'd rather lose those users

00:24:25   'cause that's, lose them having the latest version

00:24:28   because it is a relatively small percentage

00:24:30   after not too long than have to write

00:24:34   two different code bases or have to, if available,

00:24:38   all this stuff in my code and add to my workload

00:24:42   and add to my maintenance and then get reports about like,

00:24:43   oh well, if you do this certain thing with the new version

00:24:47   on iOS 12, it crashes, and then I have to bring up

00:24:50   an iOS 12 instance of something or have a test device

00:24:52   lying around for that.

00:24:54   That's no fun.

00:24:55   And for a one-person shop, that is a pretty big burden.

00:25:01   So I always plow full steam ahead and require the new thing

00:25:04   pretty much immediately, and that has worked out fine.

00:25:08   - I will say, this is one of those years

00:25:10   where I am sorely tempted to go down that road,

00:25:13   where I think typically I take the same approach

00:25:15   that you take of, or that you don't,

00:25:18   I take the opposite approach of supporting

00:25:21   one or two levels back, but this year I feel like

00:25:23   I'm very tempted by what you do because it does feel

00:25:26   like the kind of year where pushing the,

00:25:30   it's like the platform itself is being pushed

00:25:32   so far forward that trying to hold onto the past

00:25:36   is just going to feel awkward in a way that,

00:25:39   and certainly obviously on the watchOS platform,

00:25:42   that's going to be, you can do night and day difference

00:25:45   between the two platforms in terms of on watchOS 5

00:25:48   and watchOS 6, and supporting them both in parallel.

00:25:51   They're two very fundamentally different systems,

00:25:54   and so having a, essentially all you could do

00:25:58   is take the old version of the app and leave it

00:26:01   in its own little UI tree, often a little,

00:26:05   it's like put it in a box off in the corner,

00:26:07   and if you happen to launch on that device,

00:26:10   like you go into that box and you stay in that box.

00:26:13   But, and then if you're running the latest stuff,

00:26:16   you get the new thing, but, and the reality is,

00:26:18   I think, it's like, I think this year I'm so tempted,

00:26:21   I'm not there yet, but I'm so slowly tempted by the,

00:26:24   you know, like the dark side of what you're talking about,

00:26:27   Marco, because it's like, it is, Apple has done

00:26:31   such a good job of being really annoying

00:26:34   about watch, about updating to the latest stuff.

00:26:37   Like, they are annoyingly aggressive about it.

00:26:40   You know, every time I pick up one of my testing phones,

00:26:43   it's like, it's every, it feels like every two or three

00:26:46   hours, it's like, hey, you know there's a new version

00:26:48   of iOS, hey, you know there's a new version of iOS.

00:26:50   And then like, watches are even the same way now.

00:26:52   Like, they're very aggressive about it,

00:26:55   and they get around the problem of not making it

00:26:58   so that you could, that it takes so long to do the update

00:27:00   by saying, hey, the next time your watch is on a charger,

00:27:04   we'll go ahead and install it for you.

00:27:05   You don't have to do anything.

00:27:06   And so then, like, more likely than not,

00:27:09   that's going to happen there.

00:27:10   And like, I've seen right now, you know,

00:27:12   watchOS adoption is very, very good.

00:27:13   Like, of devices that can support watchOS 5,

00:27:16   I think I'm at like 98.8% are running watchOS 5.

00:27:20   Like, it is huge.

00:27:21   Very, very good from four to five.

00:27:23   And like, fair enough.

00:27:24   - That's better than the phone adoption rate.

00:27:25   - I think it is, and it's like, I think there's an element

00:27:27   of it's just so aggressive, and really, you know,

00:27:31   pushes people to do it.

00:27:33   And the reality is, like, there's going to be those people

00:27:36   who are on devices who we can't support

00:27:39   if that's the road we go down.

00:27:40   And like, that's frustrating.

00:27:42   Like, you know, if you're running a Series 0 watch,

00:27:45   or a 5S, a 6, or a 6+, like, you're kind of out of luck

00:27:49   with this new stuff.

00:27:50   But that's going to be a smaller and smaller group of people

00:27:53   and it's not really, like, that's the features

00:27:56   that are going to, you know, excite new customers

00:27:59   and excite Apple and excite people who are, you know,

00:28:02   who are going to write about your apps.

00:28:04   They're interested in the new stuff.

00:28:05   They're not that interested in the effort and time it took

00:28:08   for you to support the old things.

00:28:10   And so, like, this definitely feels like a year

00:28:12   where Apple has taken this inflection point

00:28:14   and they're, like, heading in a new direction,

00:28:17   and like, burning the ships and starting, you know,

00:28:20   sort of heading out with them,

00:28:21   maybe is, like, a good choice this year.

00:28:24   - Yeah, 'cause, you know, like, I'm not going to say

00:28:25   that there's no cost of doing this.

00:28:27   Like, there is a cost of losing the support

00:28:30   of the previous OS.

00:28:32   And it is significant for some apps.

00:28:34   But there is also a cost of not doing that.

00:28:37   There's also a cost of maintaining support on your side.

00:28:40   So, like, you have to weigh those costs.

00:28:43   And for certain apps or for certain companies,

00:28:45   it makes sense to, you know, keep the old support around

00:28:47   for a while, but especially for independent developers,

00:28:50   I think there's a huge argument to be had

00:28:52   of just require the newest thing and be done with it.

00:28:54   Because you save so much on your side

00:28:56   and your time is so precious as an indie, like,

00:28:59   that you might have to lose a few customers to do that.

00:29:03   But the cost difference might be such

00:29:05   that it actually makes sense to do that.

00:29:07   - Yeah, and I think one thing,

00:29:08   the only thing I'll say with that is,

00:29:09   if you are going to go down that road,

00:29:11   make sure your last version before you drop support

00:29:13   is a really good version.

00:29:14   - Yeah. (laughs)

00:29:15   - That's just a pro tip.

00:29:16   I've been down that road, I've made that mistake.

00:29:18   Don't do that.

00:29:19   Make sure it's a really, like, solid, bug-free,

00:29:21   like, excellent version that you would feel happy

00:29:24   running out into the future for who knows how many years.

00:29:28   - All right, with that, we're out of time,

00:29:30   so thank you for listening, everybody.

00:29:32   Good luck tackling all your stuff.

00:29:34   I'm gonna try myself and we'll report back in two weeks.

00:29:37   - All right, bye.

00:29:38   - Bye.

00:29:39   [ Silence ]