Under the Radar

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:33   and things.

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:52   like that?

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:12   Like maybe?

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:16   Yeah.

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:01   Yeah.

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:02   new one.

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:28   risky.

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:32   this.

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:55   for people.

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:11   me.

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:48   changes.

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:19   system one.

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:29   more often.

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:02   >>

00:20:13   Such that the new version is better than your current version.

00:20:19   >>

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:26   >>

00:20:27   Sure.

00:20:28   It's better in ways that a significant number of users would appreciate and be able to benefit

00:20:34   from.

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:26   Yeah.

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:57   It's great.

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:26   apps."

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:53   not?"

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:49   APIs?"

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:33   there.

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:54   what?

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:18   the past.

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:40   iOS 10.

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:22   It's fine.

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   Bye.

00:29:32   [BLANK_AUDIO]