87: Old Code Vs. New APIs
00:00:00
◼
►
Welcome to Under the Radar, 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, so let's get started.
00:00:10
◼
►
So today, in the summertime here after a big new iOS release like we have at WVDC every
00:00:16
◼
►
year, one of the decisions that we have to face as developers is when upgrading our existing
00:00:21
◼
►
apps to the new OS.
00:00:24
◼
►
And if you assume that you're only right into the new OS and you don't have to worry about
00:00:28
◼
►
like iOS 10 compatibility, and we'll talk about that later, deciding what of the new
00:00:32
◼
►
OS to adopt at all.
00:00:35
◼
►
And so this could take various forms.
00:00:37
◼
►
This is both new styles of the UI that the system apps pioneer or that the APIs make
00:00:41
◼
►
available to you, and also down to things like API choices.
00:00:46
◼
►
Because every time a new OS comes out, not only are there usually new styles you can
00:00:50
◼
►
take advantage of, but there's also usually new APIs that you could use that you might
00:00:54
◼
►
have already implemented manually in some way in your app in the past, and now there's
00:00:59
◼
►
a new system way to do it.
00:01:01
◼
►
And so there's always the question of whether you adopt that for your app and dump your
00:01:04
◼
►
custom thing or not.
00:01:06
◼
►
Because it isn't always an easy decision.
00:01:09
◼
►
So I think first we want to start out with the style element here.
00:01:12
◼
►
iOS 11 actually did not introduce a lot of new styling, as we had predicted it might,
00:01:19
◼
►
but it did introduce one that will affect almost every app I know of that's not a game,
00:01:23
◼
►
which is the new iOS 11 navigation bar style with the giant big bold black text as the
00:01:30
◼
►
title and then maybe an integrated search box, which is nice.
00:01:34
◼
►
But that big bold black text with the big white gap above it is very different from
00:01:39
◼
►
all previous navigation bar styles.
00:01:41
◼
►
And the navigation bar is an element that almost every productivity style or non-game
00:01:46
◼
►
app, there's a pretty good chance it uses a navigation bar somewhere in it.
00:01:49
◼
►
And so this affects lots of people, lots of apps.
00:01:52
◼
►
And the question is, like Overcast has a navigation bar, David, many of your apps do as well,
00:01:57
◼
►
the question is do you change your apps look to look like this?
00:02:02
◼
►
>> Yeah, and it's tricky.
00:02:04
◼
►
I think this one in particular, I've been struggling with it so much because I don't
00:02:10
◼
►
really like the new nav bar.
00:02:12
◼
►
>> Yeah, I knew the delay.
00:02:14
◼
►
>> So iOS 7 in some ways, which is another example of the big wholesale UI changes, I
00:02:21
◼
►
liked a lot of them.
00:02:22
◼
►
In fact, I liked them so much because they made my apps look better in comparison to
00:02:27
◼
►
the other apps because I didn't need a complicated rich detailed textures and dimensionality
00:02:34
◼
►
I could get rid of a lot of that and make a lot of progress.
00:02:36
◼
►
Whereas this one, I sort of like it sometimes, but the way that the nav bar is designed to
00:02:44
◼
►
interact with scrolling and things, I find really awkward and clumsy.
00:02:49
◼
►
And I sort of like the feel, but not so much.
00:02:54
◼
►
It's growing on me a little bit.
00:02:56
◼
►
As I've been updating Pedometer++ this last week, I've been making some changes to try
00:03:01
◼
►
it out, and I kind of like where it's going, but I don't really like their implementation.
00:03:06
◼
►
And so then I'm kind of in this place now where I'm starting to think, should I build
00:03:09
◼
►
my own navigation bar?
00:03:11
◼
►
>> The answer to that is almost always no.
00:03:13
◼
►
>> It probably is no, right?
00:03:15
◼
►
It's this weird question because I don't really like the way that if you have, you know, like
00:03:22
◼
►
it starts big and then as you scroll up it gets smaller, but it doesn't like shrink.
00:03:26
◼
►
It just sort of like jumps from one size to the other, which maybe it's just a beta thing,
00:03:31
◼
►
but it seems like that's kind of the way it's designed to work.
00:03:35
◼
►
But it's a struggle.
00:03:36
◼
►
And I think moreover, that style of UI will only fit in, like I would need to make other
00:03:44
◼
►
changes to the UI of my apps, you know, holistically to fit that kind of style.
00:03:50
◼
►
Like if you look at the music app, which is probably the best place to kind of, on iOS
00:03:54
◼
►
11, the best place to look at this, you know, it's, if you have this big bold nav title
00:04:00
◼
►
on that sort of left aligned in most places, you kind of then want, if you have section
00:04:07
◼
►
headings and things that are subsequently down the page, you probably want them to be
00:04:11
◼
►
big bold and left aligned.
00:04:14
◼
►
And it kind of lends this look to it that's different.
00:04:18
◼
►
And on the one hand, I kind of want to update my apps to look like that, mostly because,
00:04:25
◼
►
you know, I'm not as confident enough in my own design prowess to sort of like stand my
00:04:31
◼
►
own ground and be like, absolutely, you know, I'm better than where iOS is, you know, the
00:04:38
◼
►
system designers are saying that the apps should sort of be heading.
00:04:40
◼
►
And most of my apps too are things that are designed to fit in, you know, they're not
00:04:45
◼
►
super over, they're not super custom UIs, they tend to feel fairly native.
00:04:50
◼
►
And in many ways, kind of my goal for a lot of my apps is to feel like they are a system
00:04:55
◼
►
app, like that is sort of my high level design goal.
00:04:59
◼
►
And so it's definitely kind of a weird place to find myself.
00:05:05
◼
►
But like, I'm still kind of stuck right now on whether or not I should do it in this case.
00:05:09
◼
►
Yeah, I'm also still pretty undecided on the nav bar thing.
00:05:15
◼
►
I too do not like it, you know, upon first glance.
00:05:19
◼
►
And I'm trying to figure out because, you know, when they make changes like this, and
00:05:23
◼
►
I mentioned this before, so I'll make it brief, but when they make changes like this, it's
00:05:26
◼
►
hard to know whether this is something that only Apple apps will ever adopt, or whether
00:05:30
◼
►
this is going to become the new expected standard for all apps.
00:05:34
◼
►
Sometimes these things are only Apple apps, you know, in practice.
00:05:37
◼
►
And so this, and if you do something that's only Apple apps, at best, your app looks boring.
00:05:43
◼
►
At worst, it seems like you're trying to rip off Apple's apps.
00:05:46
◼
►
So it's, I'm not sure, should I have a giant title on my home screen that says overcast
00:05:53
◼
►
I don't know if that's the right move or not.
00:05:54
◼
►
It doesn't seem right to me right now.
00:05:56
◼
►
But I am going to play with things a little bit more throughout the summer.
00:06:00
◼
►
Yeah, and I think also it's probably something that I have in the back of my mind is, obviously
00:06:04
◼
►
Apple has a much better sense of the hardware roadmap going forward.
00:06:10
◼
►
And it's really complicated too, and as I'm trying to think about design changes to, you
00:06:15
◼
►
know, it's like, you end up like doubling, triple guessing yourself, because you're sort
00:06:18
◼
►
of like, well, are they doing it this way?
00:06:21
◼
►
Because on a future bit of hardware, this design will feel at home and make sense.
00:06:28
◼
►
And if they are, then like, in some ways, I can get a jumpstart on taking advantage
00:06:33
◼
►
of that if I kind of go where they're kind of leading.
00:06:37
◼
►
Or it could just be, that just happens to be what they like, and they're trying it now.
00:06:42
◼
►
And like, it's, this is the style for iOS 11.
00:06:45
◼
►
And then maybe iOS 12, it will change again.
00:06:47
◼
►
And like, that ambiguity is a little weird.
00:06:51
◼
►
I mean, it's sort of like this was like these emphasis this year on sort of safe edges on
00:06:57
◼
►
the side of the screen, and an overall emphasis on vertical space, like making it not particularly
00:07:05
◼
►
at a premium, which is like, maybe so are we talking that, you know, the widely rumored
00:07:09
◼
►
like edge to edge phone that's super long?
00:07:13
◼
►
I don't know.
00:07:14
◼
►
But it's, I kind of feel like if I, when I start looking for clues, I can start seeing
00:07:21
◼
►
clues, but then I start wondering, am I just making this stuff up?
00:07:23
◼
►
Yeah, the other thing to think about too is like, what if they change their mind really
00:07:28
◼
►
quickly on this?
00:07:29
◼
►
You know, this is based on, it basically looks as though the style that they've been kind
00:07:34
◼
►
of pounding out with Apple Music has now taken over the whole OS.
00:07:38
◼
►
And Apple Music is not a variable designed app.
00:07:41
◼
►
And so there's two other possibilities here.
00:07:44
◼
►
Maybe this is a bad design.
00:07:46
◼
►
You know, Apple, not everything Apple designs is good.
00:07:50
◼
►
Sometimes it doesn't work out and they change it in the next version.
00:07:52
◼
►
Apple Music has done that many times so far because they tried to cram a lot of functionality
00:07:56
◼
►
into one app and it's very hard to design.
00:07:59
◼
►
And so there is the distinct possibility that this is really just this year's fad and that
00:08:06
◼
►
it'll be different in 12, as you said.
00:08:08
◼
►
And if that's true, then it might not be worth wasting time switching all your whole UI to
00:08:12
◼
►
this if it's going to change in a year.
00:08:14
◼
►
So we'll, you know, we'll have to figure that out.
00:08:17
◼
►
And reality too is switching back and forth is almost certainly going to be confusing
00:08:24
◼
►
in terms of from a customer experience perspective.
00:08:26
◼
►
Obviously, their other apps are changing in this case and so it might feel more reasonable
00:08:32
◼
►
to change and if it changes again.
00:08:35
◼
►
But on the same time, it's like if they change again in iOS 12 and they kind of go even more
00:08:40
◼
►
all in on this, this is just like stage one of giant bold text everywhere.
00:08:46
◼
►
Then you're even more behind.
00:08:48
◼
►
Like, then you're two years behind and then you're kind of, that's an even more abrupt
00:08:53
◼
►
jump for your users if suddenly you're like, you know, I really need to get rid of all
00:08:56
◼
►
my, you know, small pitiful headers.
00:09:00
◼
►
I need to go to these gigantic headers.
00:09:03
◼
►
Like, it's a weird thing to play by myself, but I think right now, like if I had to make
00:09:08
◼
►
a call, I'm leaning towards mostly adopting the new look and just mostly hoping that,
00:09:16
◼
►
in doing so, I'm, you know, my future self will thank me for being ahead of this rather
00:09:25
◼
►
than finding myself either this fall when there's some new hardware announcement or
00:09:29
◼
►
something where like now this makes a lot of sense or just down the road as the years
00:09:33
◼
►
go on that if I'm not like building this sort of design technical debt, then I'm eventually
00:09:39
◼
►
going to have to pay off, that I can't just kick down, you know, sort of kick down the
00:09:42
◼
►
can for years and years.
00:09:44
◼
►
Because if I look back now at an iOS 6 app, you know, I look at that and it's like,
00:09:48
◼
►
oh man, this is, it looks really out of place.
00:09:51
◼
►
And maybe that's, in six months, that's not going to feel out of place, but maybe
00:09:55
◼
►
in a year it will.
00:09:57
◼
►
And then I'm just like digging myself into a hole by trying to hold on to the past.
00:10:02
◼
►
And the other problem though is that your users might resist change in your app.
00:10:07
◼
►
And this is something we'll get to in the second half of this.
00:10:09
◼
►
But first, we are sponsored this week by Indeed Prime.
00:10:13
◼
►
Indeed Prime helps tech talent such as us, software developers, data scientists, simplify
00:10:18
◼
►
their job search and land their dream job.
00:10:21
◼
►
Candidates get immediate exposure to the best companies with just one simple application
00:10:25
◼
►
to Indeed Prime.
00:10:27
◼
►
And companies on Indeed Prime's exclusive platform message the candidates with salary
00:10:31
◼
►
right up front.
00:10:32
◼
►
And the average software developer gets five employer contacts with an average salary offer
00:10:37
◼
►
of $125,000 a year.
00:10:40
◼
►
Indeed Prime is 100% free for candidates with no strings attached.
00:10:44
◼
►
So sign up now at Indeed.com/Prime.
00:10:48
◼
►
Once again, it's 100% free for job candidates.
00:10:51
◼
►
So sign up now at Indeed.com/Prime.
00:10:54
◼
►
Thank you very much to Indeed Prime for sponsoring this show.
00:10:57
◼
►
So we talked about this UI question we have now.
00:11:01
◼
►
And I have a couple of blurry lines on the way to the API discussion.
00:11:06
◼
►
One of them for me, probably the big one for me that I'm facing with Overcast is I spent
00:11:12
◼
►
a lot of time in Overcast 3.0 developing a custom full-time table view reordering method
00:11:17
◼
►
where you can drag around the manual order of playlist entries using a permanent little
00:11:24
◼
►
drag handle on the right side of the table cell.
00:11:27
◼
►
This was a ton of work and hacks and everything else.
00:11:30
◼
►
And I finally did get it working.
00:11:31
◼
►
And it mostly works as a few edge case bugs that are really hard to find and fix.
00:11:35
◼
►
But for the most part it works.
00:11:37
◼
►
And there's a nice little visible handle there.
00:11:39
◼
►
So it's obvious that you can do that.
00:11:41
◼
►
And it's fast to just instantly tap it and move something up.
00:11:45
◼
►
iOS 11 introduces a standard drag and drop API.
00:11:50
◼
►
One of the things it can do, part of what it does is offers full-time reordering to
00:11:54
◼
►
supported table views.
00:11:55
◼
►
And I'm really torn on whether I should dump my old custom implementation and move to this
00:12:03
◼
►
And this is something, I faced this a lot over the years with Instapaper.
00:12:07
◼
►
One of the examples I had with Instapaper was when they added a system dictionary that
00:12:13
◼
►
apps could bring up a dictionary pop-up controller.
00:12:16
◼
►
I had been shipping my own dictionary in the app.
00:12:19
◼
►
And so my app binary was like five megs worth of dictionary.
00:12:24
◼
►
And then the rest of it was like, it was a big part of the app binary.
00:12:27
◼
►
I had to write all this dictionary code.
00:12:29
◼
►
And I had my own little dictionary pop-ups.
00:12:31
◼
►
And the definitions, I forget where I was pulling them from.
00:12:33
◼
►
I think it was Wichenary or something, some kind of free source.
00:12:37
◼
►
So they were okay, but they weren't great.
00:12:40
◼
►
And my UI wasn't great.
00:12:42
◼
►
But it was, you know, done basically.
00:12:44
◼
►
And then Apple started shipping theirs.
00:12:45
◼
►
And I decided to make it an option.
00:12:50
◼
►
And you can use the system dictionary if you want, or you can use my old one.
00:12:54
◼
►
And that was totally the wrong move in retrospect.
00:12:58
◼
►
Because the system one looked nicer.
00:13:00
◼
►
It worked better.
00:13:01
◼
►
It had a better source for definitions.
00:13:03
◼
►
It required almost no code in my app to invoke.
00:13:07
◼
►
And if I would have only shipped the system one, it would have dramatically reduced the
00:13:10
◼
►
size of my binary.
00:13:11
◼
►
Instead, though, for a while, I think I eventually did remove it.
00:13:14
◼
►
But for a long, for I think a couple years, I just did both and made it an option.
00:13:18
◼
►
And this was just the worst of everything.
00:13:19
◼
►
This was now, I'm maintaining two different code paths.
00:13:21
◼
►
I have this option cluttering up my settings screen and making the app, you know, look
00:13:25
◼
►
more complicated for people.
00:13:27
◼
►
And losing my own dictionary support, it was a feature loss to remove that eventually.
00:13:35
◼
►
But that was a feature that almost nobody cared about.
00:13:38
◼
►
So all the advantages of using the system one and dumping the one I had written and
00:13:42
◼
►
been maintaining, I could have had those advantages earlier because really nobody cared about
00:13:46
◼
►
my implementation of this feature.
00:13:48
◼
►
So when I look back at Overcast's reordering handle problem, I'm a pro and cons list.
00:13:54
◼
►
The pros of replacing my drag and drop thing with the new drag and drop API, and this applies
00:14:00
◼
►
to so many things, is that, you know, first of all, new users coming to the app will expect
00:14:05
◼
►
your app to work in a standard system way.
00:14:09
◼
►
And so anything you do that deviates from the system is going to cause probably some
00:14:14
◼
►
usability hurdles for some people, maybe for a lot of people.
00:14:18
◼
►
And it also might make your app look old or weird or different.
00:14:21
◼
►
And sometimes that's cool.
00:14:23
◼
►
In many ways you want that in certain things, but it's hard to walk that balance and it's
00:14:29
◼
►
So the safest thing to do is to make your app behave like the system apps in things
00:14:33
◼
►
like basic UI control.
00:14:36
◼
►
Also, if I switch to the built-in one, I can dump all that buggy code.
00:14:42
◼
►
It's a huge set of hacks to make mine work.
00:14:47
◼
►
And it does, as I mentioned, it does occasionally cause UI bugs.
00:14:50
◼
►
And then I could also, the new API is also better than mine in that you can enable things
00:14:54
◼
►
like multi-episode drag.
00:14:56
◼
►
So you can pick one up and then you can tap a few additional episodes to add to a drag
00:15:01
◼
►
to maybe move like five episodes at once to the top of a list.
00:15:04
◼
►
Or you can even keep holding that down, hit back, back out of that playlist, and maybe
00:15:09
◼
►
drop them onto a new playlist.
00:15:10
◼
►
Like you can do so much cool stuff with the new API that mine will never be able to do.
00:15:15
◼
►
The other major thing is that if I wouldn't have my drag handle on the right side anymore,
00:15:22
◼
►
then I can replace that with a play button, a one-touch play button, which ever since
00:15:27
◼
►
3.0 made the cells not play by default when you tap them, people have been begging for
00:15:33
◼
►
And it's been this massive controversy in my user base and getting lots of one-star
00:15:37
◼
►
reviews over it and lots of people who are unhappy about it.
00:15:40
◼
►
And if I could devote like the right quarter of the cell to just a big play button, but
00:15:46
◼
►
still have the left three quarters of it bring up the menu thing and then move the info button
00:15:51
◼
►
into that menu where the play button was, I feel like I could solve a lot of problems
00:15:56
◼
►
However, this would be a UI change.
00:16:00
◼
►
And like any UI change you make, some people will be angry and will leave one-star reviews
00:16:06
◼
►
for years to come.
00:16:08
◼
►
And I mentioned this on Twitter last week and I think people didn't quite believe
00:16:12
◼
►
When I change something in the UI or if I ever remove a feature, some people are so
00:16:17
◼
►
mad about that that every single time I update the app, they will go and update their one-star
00:16:23
◼
►
review to make sure it's always on top.
00:16:26
◼
►
This is a real thing that people do.
00:16:29
◼
►
And if it was just one person ever who did that, okay, you can't please everybody.
00:16:35
◼
►
But because it's a small crowd that does that for pretty much everything I ever do,
00:16:41
◼
►
those actually add up.
00:16:42
◼
►
So if I have something in the app that is constantly angering old users of the app for
00:16:48
◼
►
some reason, that actually really does affect, I think, my downloads.
00:16:53
◼
►
Because especially with the new App Store only showing one review at a time and making
00:16:56
◼
►
it very hard to see that there are even more that you can swipe between, if the most helpful
00:17:02
◼
►
review at any given time is one of these one-star angry ones about a feature removal I did three
00:17:08
◼
►
years ago, that actually could really hurt downloads of the app.
00:17:12
◼
►
So anything you can do to not anger people too much while also not making your product
00:17:17
◼
►
bad is usually a good idea.
00:17:19
◼
►
So a big con for me for changing my drag-and-drop to the system UI would be that it would be
00:17:26
◼
►
a change and it would generate more of these people.
00:17:29
◼
►
The new one also, which is kind of annoying for me, the system control is slower to activate.
00:17:35
◼
►
You know, mine, you tap that drag handle and you can immediately move it.
00:17:37
◼
►
The system one, you got to tap and wait a second.
00:17:40
◼
►
It's almost like a long press.
00:17:41
◼
►
You got to tap and then a second later it kind of lifts up if you're still holding.
00:17:45
◼
►
And then you can drag it around.
00:17:46
◼
►
So there's a slight delay.
00:17:49
◼
►
But then the other thing is like once someone learns that in any app in the system, then
00:17:55
◼
►
they will know how to do it in all apps that support it.
00:17:58
◼
►
And I know that this isn't always that strong of a correlation.
00:18:02
◼
►
Things like the edit button in table view corners.
00:18:05
◼
►
Almost no one ever taps that.
00:18:06
◼
►
They don't know what it means.
00:18:07
◼
►
And anything buried behind the edit button might as well be invisible.
00:18:11
◼
►
So some things it doesn't work out for.
00:18:12
◼
►
But drag-and-drop is already a power user feature.
00:18:15
◼
►
Reordering playlists is already unfortunately a power user feature even though I've supported
00:18:19
◼
►
it since 1.0 and I really wish people would do it more often.
00:18:21
◼
►
The fact is they don't do it that often.
00:18:24
◼
►
So there is some benefit to have it be the new one and to have people only have to learn
00:18:31
◼
►
that once in the system.
00:18:33
◼
►
And what kind of pushes me over the edge on this and the reason I'm probably going to
00:18:38
◼
►
switch to the new one and dump my old one is that you think about what would you do
00:18:43
◼
►
if you were starting over from scratch.
00:18:44
◼
►
If you had a brand new app and you can apply this thinking to pretty much any of these
00:18:49
◼
►
Style, API, whatever.
00:18:50
◼
►
If I had a brand new app, how would I do it?
00:18:54
◼
►
If there was no legacy user base to worry about and no legacy code written yet.
00:18:58
◼
►
And there's no question I would do the system one.
00:19:00
◼
►
I would not write my own.
00:19:01
◼
►
I would definitely do the system one for this because my own is not better enough and is
00:19:05
◼
►
actually in some ways worse.
00:19:06
◼
►
So I would definitely use the system one.
00:19:08
◼
►
And that also means that any new competitor that comes around, not only will they not
00:19:13
◼
►
have to write yours, they won't have to write your big hack, but they will also use the
00:19:21
◼
►
And so you're going to be competing more and more against the system implementation
00:19:24
◼
►
of these things as you go.
00:19:25
◼
►
And you're going to be competing against apps that look and work like the system apps
00:19:30
◼
►
So you can look at a lot of decisions that try to avoid the sunk cost issues and say
00:19:36
◼
►
like, "Okay, well if I was starting clean, how would I do it?"
00:19:39
◼
►
And the answer is usually this new better way.
00:19:42
◼
►
So I think that's probably the answer here.
00:19:44
◼
►
Even though it will hurt in the short term and it might cause some people to get mad
00:19:49
◼
►
at me and leave one star reviews forever, I think overall the app would be better if
00:19:54
◼
►
it used the new system way.
00:19:56
◼
►
And overall I'm going to need to do that to be competitive now and in the future.
00:20:01
◼
►
So I should do that.
00:20:13
◼
►
Such that the new version is better than your current version.
00:20:20
◼
►
But not in all ways.
00:20:21
◼
►
Remember, it has that small delay which actually drives me nuts, but in a lot of other ways
00:20:25
◼
►
it's better.
00:20:28
◼
►
It's better in ways that a significant number of users would appreciate and be able to benefit
00:20:35
◼
►
You'd be deleting a lot of code.
00:20:36
◼
►
There's some clear wins that you can take advantage of.
00:20:39
◼
►
And at the end of the day, hostage star driven development is almost certainly a bad idea.
00:20:49
◼
►
I know exactly where you're coming from with a feeling of it can be so frustrating where
00:20:54
◼
►
a vocal small minority of users can have an oversized impact on the way your app appears
00:21:05
◼
►
in the app store.
00:21:06
◼
►
That is really unfortunate.
00:21:08
◼
►
But the reality is, and this is something I have to keep reminding myself too, is that
00:21:13
◼
►
in order for -- if my business, and I hope it is, has longevity, the majority of my users
00:21:22
◼
►
are still to come.
00:21:24
◼
►
As big as the app may be at this point, hopefully more people will download it from today forward
00:21:31
◼
►
than today going back.
00:21:34
◼
►
Because if that isn't the case, then the app is slowly dying and it could be okay, but
00:21:40
◼
►
it's not the best.
00:21:42
◼
►
Whereas if it's going up and getting better, then what I want to do is make choices today
00:21:48
◼
►
that are going to make the experience better for the future user.
00:21:53
◼
►
In this case, deleting a bunch of code is better probably mostly just in so far as you
00:21:58
◼
►
don't have to maintain your old version anymore.
00:22:01
◼
►
Especially something that's kind of hacky and non-standard.
00:22:05
◼
►
Maybe iOS 10 or iOS 11 doesn't get broken right away, but maybe it gets broken in a
00:22:13
◼
►
different update.
00:22:14
◼
►
In some random update down the road, suddenly your thing just completely doesn't work and
00:22:19
◼
►
you didn't install 11.1.2's beta, so you didn't realize that it was broken, and then suddenly
00:22:26
◼
►
it doesn't work at all.
00:22:28
◼
►
Whereas shifting to something that is system-supported and this is the new way that Apple is pushing
00:22:33
◼
►
us to use, you avoid that situation.
00:22:36
◼
►
So there's always that too in the background.
00:22:40
◼
►
In general, the more you can pay off these technical debts, just deal with it right now,
00:22:45
◼
►
and then your future self will likely appreciate that, almost certainly.
00:22:49
◼
►
And there will be some people who are angry or grumpy, but unless you, at a certain point,
00:22:56
◼
►
realize I've had to make peace with the fact that either my app is going to get better
00:22:59
◼
►
over time, and in doing so will have an ever-increasing number of grumpy people.
00:23:06
◼
►
That number will go up over time.
00:23:09
◼
►
The law of a long-running app.
00:23:12
◼
►
That is either what's going to happen, the app is going to get better, and at the same
00:23:15
◼
►
time there's also going to be more and more grumpy people.
00:23:18
◼
►
Or the app is going to stay the same, and there are probably going to be fewer and fewer
00:23:23
◼
►
people overall.
00:23:25
◼
►
That's a good point.
00:23:27
◼
►
One of those two scenarios is probably going to happen, and hopefully the rate of new people
00:23:31
◼
►
that you're able to gain by making your app better and better and better will far outweigh
00:23:38
◼
►
the proportion of grumpy people over time, and that's probably a better place to be.
00:23:44
◼
►
That is a growth mindset that I want the app to be as the best thing it can possibly be,
00:23:51
◼
►
and just ignore as much as we can what's going on in the past, and just say, "You know what?
00:23:56
◼
►
It's going to annoy some people.
00:23:58
◼
►
You know who I want to make happy?
00:24:00
◼
►
A, I want to make me happy, because if I'm not happy with the app, if I'm annoyed by
00:24:05
◼
►
it, or there's lots of old code that I'm having to deal with and work around, that's not good
00:24:09
◼
►
for anybody, because then I don't want to work on it.
00:24:12
◼
►
I don't want to dive into it.
00:24:13
◼
►
I'm probably going to be, in my case, I'll probably be more apt to get my attention shifted
00:24:19
◼
►
to something else that's like, "Ooh, look, ARKit's shiny.
00:24:22
◼
►
Let me just dive over there and start working on ARKit apps and just start ignoring these
00:24:27
◼
►
That's not good.
00:24:28
◼
►
In theory, it's like if I want this app to be exciting for me to develop, that's good
00:24:31
◼
►
for the customer.
00:24:32
◼
►
Then hopefully it's also good for the customer, and the app is just getting better and better.
00:24:36
◼
►
So, yeah, these situations, every summer, it almost feels like it's this new challenge,
00:24:43
◼
►
but the reality is we've probably been fighting this battle for years and years, and every
00:24:48
◼
►
year the same thing comes up of this feeling of, "Ooh, should I go for it and should I
00:24:54
◼
►
But I'm pretty sure, I think history has shown me that I probably should.
00:24:58
◼
►
It's in the same way that at the moment you said you left an option to do the old way
00:25:04
◼
►
in Instapaper, my immediate giant alarm bells go off, and it's like, "No, no, no!
00:25:10
◼
►
That is the worst!"
00:25:11
◼
►
That's never the right decision.
00:25:14
◼
►
Instead of having the best of both worlds, it's like you actually end up with the worst
00:25:17
◼
►
of both worlds.
00:25:18
◼
►
It's now like you get none of the benefits and all of the drawbacks.
00:25:22
◼
►
Yeah, exactly.
00:25:23
◼
►
And all your users will all request that.
00:25:26
◼
►
They will all say, "Oh, can you just make it an option?
00:25:28
◼
►
Give me back the old way.
00:25:29
◼
►
Make it an option."
00:25:30
◼
►
No, the answer is always no.
00:25:32
◼
►
That is not good for the app.
00:25:33
◼
►
And so I think we can kind of wrap this up with one of the questions that indie developers
00:25:38
◼
►
face most often every summer when new iOS shiny stuff comes out, which is, "When can
00:25:44
◼
►
I drop support for the old OS so I can start building stuff exclusively around the new
00:25:51
◼
►
In some cases, it's pretty much impossible to use the new stuff unless you break compatibility
00:25:56
◼
►
and unless you start requiring the new OS on day one or whatever.
00:26:01
◼
►
Some of the more fundamental UI things you pretty much can't conditionally enable in
00:26:05
◼
►
any reasonable way that doesn't involve keeping around a whole copy of your old app in the
00:26:09
◼
►
binary, which by the way, people will sometimes request that too.
00:26:14
◼
►
Don't do that.
00:26:15
◼
►
But anyway, and I think if you apply everything we've just said to this question, different
00:26:22
◼
►
apps have different needs and different requirements.
00:26:25
◼
►
If you're a consultant and you're making apps for people who, for like a big company
00:26:29
◼
►
that needs to support as many people as possible, well then you have a different set of constraints
00:26:34
◼
►
But if you're making indie apps yourself and you're just making apps like selling
00:26:40
◼
►
directly and you don't have to answer to the needs of some big company that has to
00:26:44
◼
►
serve millions of people and everything, then I would say the choice is very clear.
00:26:49
◼
►
For all of the reasons we just talked about using new APIs, you can also say, "You know
00:26:55
◼
►
I can just work with the newest OS.
00:26:56
◼
►
Like I can make my app require the newest OS at or near the newest OS's release."
00:27:02
◼
►
So at or near the fall, and you can have all the benefits that somebody would have if they
00:27:09
◼
►
had no legacy, if they had no existing users to make one star reviews, if they had no legacy
00:27:13
◼
►
code that they had to maintain or no sunk cost fallacy with the things they wrote in
00:27:19
◼
►
You can apply all that same logic to the question of, "Should I dump iOS 10 support and require
00:27:24
◼
►
iOS 11 as soon as possible and that way I can use all this new stuff?"
00:27:28
◼
►
The answer for indies is usually, "Yes, you can."
00:27:30
◼
►
>> And I think too, the biggest thing where I've ended up is that if supporting old OS's
00:27:38
◼
►
is holding you back in any way, almost certainly just drop the old OS and move forward.
00:27:46
◼
►
If there isn't this clear, obvious thing where you need to do it, don't just do it for fun,
00:27:54
◼
►
because at least in the short term, it probably slightly slows down your downloads potentially,
00:28:02
◼
►
just insofar as now your app is compatible with a smaller percentage of the user base.
00:28:07
◼
►
But it's one of these things that if at any point you're like, "Oh, I wish I could do
00:28:11
◼
►
this, but iOS compatibility?"
00:28:13
◼
►
Then it's like, "All right, that's it.
00:28:16
◼
►
Conversation's over.
00:28:17
◼
►
Drop support for the old OS and just plow forward."
00:28:20
◼
►
As soon as you hit that point, you'd run into it.
00:28:23
◼
►
But one thing I will also mention to just be thoughtful of, and this is from my bias
00:28:27
◼
►
as a watch developer that I want to mention, be very thoughtful about how you do it between
00:28:32
◼
►
iOS and watchOS.
00:28:35
◼
►
Because things can get really crazy if you support, in this case, watchOS 4, but still
00:28:43
◼
►
You can end up in some very funny places that people won't be able to...
00:28:48
◼
►
The person who stays then on iOS 10 can then never install your watch app, and it actually
00:28:54
◼
►
just gets deleted off their watch and things.
00:28:57
◼
►
Or somebody took me off too.
00:28:58
◼
►
If you make the same version, upgrade the requirement for both iOS and watchOS, then
00:29:05
◼
►
when that version gets installed on someone, or when that person upgrades to iOS 11 and
00:29:11
◼
►
that version of your app gets installed, if they haven't upgraded their watch yet, it'll
00:29:15
◼
►
get uninstalled from the watch.
00:29:17
◼
►
So something to keep in mind, not great, but in general, be aggressive.
00:29:23
◼
►
Every time I've been aggressive, I've been worried, and it's never turned out to actually
00:29:26
◼
►
be a problem.
00:29:27
◼
►
And with that, we're out of time this week.
00:29:29
◼
►
Thanks everybody for listening, and we'll talk to you next week.
00:29:32
◼
►
[BLANK_AUDIO]