PodSearch

Under the Radar

91: Removing Features

 

00:00:00 ◼   ► Welcome to Under the Radar, a show about independent iOS app development. I'm Marc Warment.

00:00:04 ◼   ► >> And I'm David Smith. Under the Radar is never longer than 30 minutes, so let's get

00:00:08 ◼   ► started.

00:00:09 ◼   ► >> So today we wanted to talk about having to remove features of the apps. And this is,

00:00:16 ◼   ► you know, I've done this a lot over time. So a lot of times it's kind of questionable

00:00:20 ◼   ► whether like you really have to remove something. It's kind of a blurry line of like, are you

00:00:24 ◼   ► removing something because some condition is changing or somebody is forcing you to

00:00:30 ◼   ► remove it or are you removing it because you don't like the feature anymore or it's too

00:00:35 ◼   ► hard to support or something like that. And I've done a lot of both, honestly, more the

00:00:43 ◼   ► latter than the former, honestly. But I think what I'm facing this summer is I'm having

00:00:52 ◼   ► to remove the send to watch feature from Overcast. This is a feature that would use the iPhone

00:00:59 ◼   ► app to transcode the podcast file to a smaller size and then set in bacon smart speed and

00:01:06 ◼   ► then send it over Bluetooth to the watch and then the watch would have its own little copy

00:01:11 ◼   ► of the file and then it could play the file directly from the watch to a pair of Bluetooth

00:01:16 ◼   ► headphones if you were, you know, out running with the watch and didn't have your phone

00:01:21 ◼   ► with you. This is a feature that people had requested for ever since the first watch came

00:01:27 ◼   ► out. It was the number one feature request from watch owners was the ability to have

00:01:33 ◼   ► stand alone playback, you know, playback without your phone. And basically, and this feature

00:01:38 ◼   ► I, it took me a very, very long time to get this working. I worked a lot on it this past

00:01:42 ◼   ► winter. I've probably invested something like three or four months of development time into

00:01:46 ◼   ► just this feature. And the main problem I kept facing was the background audio playback

00:01:56 ◼   ► APIs on watch OS are very, very rudimentary because watch OS has to run on this very,

00:02:01 ◼   ► very low power device. And one thing that basically doesn't exist in watch OS is background

00:02:08 ◼   ► execution of apps. Like a few can do it, mainly like workout processing apps can do it. But

00:02:14 ◼   ► almost nothing else on watch OS is allowed to persistently run in the background the

00:02:19 ◼   ► way audio apps on iOS are. You know, on iOS you have audio playback, VoIP, you have location

00:02:26 ◼   ► tracking like turn by turn directions. All these kinds of apps can stay in the background

00:02:31 ◼   ► indefinitely as long as the user is using them, they can keep staying in the background.

00:02:35 ◼   ► On watch OS, that list is much shorter. It's, and notably does not usually include audio

00:02:40 ◼   ► apps. And so there is, there are a few APIs you can use. The biggest one is the WK Audio

00:02:46 ◼   ► File Player API. But it's very, very rudimentary and honestly I've had a lot of problems and

00:02:53 ◼   ► shortcomings trying to use it, a lot of bugs, a lot of just missing features. Because the

00:02:58 ◼   ► way it works is it actually is out of process. You basically hand it a file URL and it plays

00:03:06 ◼   ► and then your app gets terminated in the background. And then, you know, at various times your

00:03:11 ◼   ► app could be woken back up again to be notified of stuff going on in the audio player. Maybe

00:03:15 ◼   ► if you're lucky or if the user interacts with you, you'll obviously wake up for that. But

00:03:20 ◼   ► otherwise you're kind of just, you're not running. And that makes it very, very hard

00:03:24 ◼   ► to make a good audio playback experience, especially for things like podcasts that have

00:03:28 ◼   ► to be resumable, that have to save your position, stuff like that. And in, so for forever, for

00:03:35 ◼   ► months I was fighting these APIs. I was, I could not get a good experience out of watch

00:03:43 ◼   ► background audio playback. The problem was not sending the files over all of that. That

00:03:46 ◼   ► has its own problems of things like it's very, very slow, there's no way to detect the progress

00:03:51 ◼   ► of a transfer, which is very, very bad for the user experience. But even if you can get

00:03:57 ◼   ► past the transferring of the files or even if you could have the watch download the files

00:04:01 ◼   ► directly over Wi-Fi or over maybe a future cellular connection watch, you still would

00:04:06 ◼   ► have the problem of background audio playback on watchOS. And so what happened was, this

00:04:12 ◼   ► past spring an app called WatchPlayer by Peter Knapp came out and it uncovered for me a new

00:04:18 ◼   ► method of basically if you said you were a workout processing app, you could use AV audio

00:04:26 ◼   ► player and use it directly and your app would stay running all the time without interfering

00:04:32 ◼   ► with other workout processing apps. It would just do the right thing. It would do what

00:04:35 ◼   ► you want. It would stay in the background as audio was playing and allow you to do things

00:04:41 ◼   ► like save your position reliably and not have to deal with all the out of process bugs of

00:04:45 ◼   ► WK Audio File Player and stuff like that. It was, and it didn't have any kind of weird

00:04:51 ◼   ► interaction with remote controls or the now playing screen, which is part of the problems

00:04:55 ◼   ► I have with the WK Audio File Player API. It has a lot of weird interactions there. Anyway,

00:05:01 ◼   ► so this was finally a way to fairly reliably play audio in the background on watchOS. So

00:05:07 ◼   ► I switched over to this method and I released this feature. And it turns out that this was

00:05:13 ◼   ► not intended to work this way by Apple. And so this feature no longer works this way in

00:05:21 ◼   ► watchOS 4. WatchOS 4, you can only, if you want background audio playback, you can only

00:05:26 ◼   ► use WK Audio File Player. All the, the method of saying you're a workout app to really play

00:05:31 ◼   ► audio, that no longer works on watchOS 4. So now I'm faced with this massive dilemma

00:05:38 ◼   ► of well, I can go back and rewrite the whole thing again for WK Audio File Player, the

00:05:44 ◼   ► out of process API. But that had a lot of problems and a lot of bugs and a lot of shortcomings.

00:05:51 ◼   ► And just weird behavior, like for instance it tries to hook into the remote control button

00:05:58 ◼   ► so if you were to hit skip forward or seek forward on a Bluetooth headphone or if you

00:06:05 ◼   ► were to go to the now playing screen and hit the fast forward button. What that does for

00:06:10 ◼   ► WK Audio File Player is what you'd expect from music. It goes to the next track. Podcast

00:06:15 ◼   ► apps all interpret this as seek forward by 30 seconds or whatever you've set it to. So

00:06:21 ◼   ► for podcast what you want is very, very different than that. And when you are controlling the

00:06:25 ◼   ► audio player and you have a proper remote control API like you do on iOS, you can interpret

00:06:30 ◼   ► that as whatever you want and you can do that. On watchOS, because this is all happening

00:06:36 ◼   ► out of process, out of your control with WK Audio File Player, watchOS tries to do the

00:06:42 ◼   ► right thing. So it just invalidates that file and seeks to the next one. If you are a podcast

00:06:49 ◼   ► app, you don't have a next one or you might have used WK Audio Q File Player or Audio

00:06:54 ◼   ► File Q Player, whatever it's called. But you have no way to interpret that click as something

00:07:00 ◼   ► else or that fast forward command as something else. So it just ends the track you're listening

00:07:05 ◼   ► to and goes to maybe the next podcast or whatever else. And I tried so many crazy hacks with

00:07:10 ◼   ► this. So for instance, splitting up podcasts into like 10 second chunks and just giving

00:07:15 ◼   ► it a queue of like 400 files for a show.

00:07:18 ◼   ► Perfect. What could go wrong?

00:07:20 ◼   ► Yeah. Unsurprisingly, watchOS did not appreciate that approach for various resource limitations

00:07:27 ◼   ► I think. It probably didn't expect me to have a playlist with 400 entries of 10 second files.

00:07:32 ◼   ► So yeah, that wasn't great. And so again, I tried all these hacks to try to get this

00:07:38 ◼   ► WK Audio File Player to give an experience good enough for podcast listening. And basically

00:07:44 ◼   ► it just didn't happen. It didn't happen for the four months I was working on it last winter.

00:07:50 ◼   ► And I've tried over the last few weeks to do it again with watchOS 4 and it's not any

00:07:55 ◼   ► better than watchOS 4. It still has all of the same shortcomings and all these same bugs.

00:08:00 ◼   ► And yes, I have filed many radars and I have forwarded them to evangelists and things like

00:08:06 ◼   ► that. But the fact is, background audio playback I don't think is a very high priority on Apple

00:08:12 ◼   ► Watch compared to everything else they have to do. Apple's very busy this time of year

00:08:17 ◼   ► with things like iOS and getting the new phones out and all the new stuff for iPad and everything.

00:08:22 ◼   ► So while I have filed bugs and contented the appropriate people, I don't think these bugs

00:08:28 ◼   ► are going anywhere basically. The beta season is almost over and they haven't gone anywhere

00:08:32 ◼   ► so I wouldn't expect them to. So I'm faced with this decision of like, do I move to this

00:08:38 ◼   ► new API which is much worse for my purposes in every possible way and way buggier and

00:08:45 ◼   ► introduces all sorts of new problems and requires all sorts of crazy hacks like using a timer

00:08:51 ◼   ► and polling things that are supposed to be KVO compliant but aren't, stuff like that.

00:08:56 ◼   ► A lot of bugs and a lot of weird workarounds that you have to do, polling things to see

00:09:00 ◼   ► if they're playing or if they're stalled because sometimes the is playing attribute is wrong.

00:09:05 ◼   ► Like there's all sorts of problems that I can't even overstate how many problems there

00:09:11 ◼   ► are with this API. And so I can switch to that but it's going to be way, way worse than

00:09:17 ◼   ► it is now. And right now the feature is barely shippable as it is, like with the watchOS

00:09:22 ◼   ► 3 version that was barely shippable and I probably shouldn't have shipped it but I did.

00:09:27 ◼   ► Or I can remove this feature now and just say sorry everyone, it didn't work out. And

00:09:34 ◼   ► this is complicated, like some people have said like well I can, I'll just leave my watch

00:09:38 ◼   ► on watchOS 3. Well that's not very, that's not going to work because first of all if

00:09:43 ◼   ► I leave this feature in for everyone else, when they upgrade to watchOS 4 it stops working

00:09:46 ◼   ► even if I don't recompile the app for watchOS 4. And then second of all if I update my app

00:09:51 ◼   ► to iOS 11 and watchOS 4 then if their watch is still on 3 it'll just be deleted from

00:09:57 ◼   ► the wrap when they update the phone app. So they would have to also not update to iOS

00:10:02 ◼   ► 11 and that's unlikely, you know, so anyway. I'm basically stuck and I have to remove

00:10:07 ◼   ► this feature. And this is really a tricky decision because the good thing is not a lot

00:10:15 ◼   ► of people use this feature. It's used by something like 0.1% according to my analytics

00:10:19 ◼   ► of active users so it's a very, very low number. But that 0.1% is going to be really

00:10:28 ◼   ► mad. And I've tried to warn them on Twitter ahead of time and say you know, hey just so

00:10:32 ◼   ► you know I've been working on this, not going well but I've decided it's really

00:10:36 ◼   ► out now and I'm not going, I'm going to remove this feature. Like the decision is

00:10:40 ◼   ► made and I'm also going to remove it like now rather than in a month and a half or whatever,

00:10:47 ◼   ► you know, whenever iOS 11 ships and watchOS 4. Because I don't want my entire iOS 11

00:10:54 ◼   ► updates story to be a removal of a major feature. And I don't want all the one star ratings

00:11:00 ◼   ► that I'm definitely going to get by removing this feature to apply to my big iOS 11 update.

00:11:04 ◼   ► You know, I want to get this out of the way now and I want to kind of stop the influx

00:11:10 ◼   ► of new customers finding this feature and getting accustomed to it only to have it be

00:11:15 ◼   ► ripped away from them in a month and a half or whatever. So I'm going to remove this

00:11:19 ◼   ► feature now. And it's always a very tricky balance because again, it's like you have

00:11:24 ◼   ► to think about all these things. You have to consider like you're definitely going

00:11:28 ◼   ► to make a lot of people angry. You're definitely going to get a lot of one star reviews. It's

00:11:33 ◼   ► going to hurt the app for a while. But the feature wasn't very good to begin with and

00:11:39 ◼   ► I've been getting one star reviews over the current feature as it is today. Even from

00:11:44 ◼   ► people who love the rest of the app but they want this feature to work better so they say

00:11:49 ◼   ► one star for the whole app because they're mad at this feature. So like, it's, what

00:11:55 ◼   ► should I do? Does this sound reasonable?

00:11:57 ◼   ► I think it does. Because I think the reality in a situation like this is that like the

00:12:04 ◼   ► biggest things that come to mind is at a certain point there's like the sunk cost fallacy

00:12:08 ◼   ► that you have to deal with of the feeling of like because you've put so much into

00:12:13 ◼   ► something that you should put more into it to save that effort that you put into it before.

00:12:20 ◼   ► So like in this case, the thing that I'd always have in the back of my mind is this

00:12:23 ◼   ► like am I continuing to work on this feature because I've spent months working on this

00:12:28 ◼   ► feature? Or does this feature still make sense in and of itself? Like if I was coming at

00:12:32 ◼   ► it fresh? So you have to have that in the back of your mind. And then two, it's like

00:12:37 ◼   ► is what is this feature getting in the way of being made? Because you know, it's like,

00:12:46 ◼   ► especially as a one person developer, or even a small team, like you're the one thing that

00:12:52 ◼   ► you can't get more of is time and attention to work on your app and to make the part of

00:12:59 ◼   ► the app that 99.9% of your other users interact with better. And so the biggest things I'm

00:13:07 ◼   ► like, it is so hard to say, to just like accept the fact that this is going to be unfortunate

00:13:14 ◼   ► that this is not going to be pleasant for who knows how long for, you know, I mean,

00:13:19 ◼   ► it could be indefinitely problematic for that very small group of people. But hopefully,

00:13:23 ◼   ► it's you know, for a month or something or for a couple of weeks when the you know, the

00:13:27 ◼   ► update comes out where this gets gets pulled. But the reality is trying to please that small

00:13:33 ◼   ► group of people indefinitely trying to sort of pile hacks on top of hacks of this crazy

00:13:39 ◼   ► feature is just never going to it's never going to win. And so you kind of have to at

00:13:44 ◼   ► some point just say, you know, we tried it, it didn't work. I'm very sorry, and move on

00:13:50 ◼   ► because otherwise, you're just the app is just going to get stuck. And I mean, it's

00:13:54 ◼   ► in a weird way, it's like the the reverse of the sunk cost fallacy is you start to think

00:13:58 ◼   ► in terms of like, should I have pulled this project earlier? Should I, you know, would

00:14:03 ◼   ► it in what could I have done in the meantime, and you know, it's not that you want to just,

00:14:09 ◼   ► you know, only slightly try experimental interesting features. And if at the first sign of trouble

00:14:13 ◼   ► back out, because you know, a lot of the cool and interesting things that differentiate

00:14:19 ◼   ► apps and make them useful and interesting, are these kind of more experimental, like

00:14:23 ◼   ► going down these crazy routes and seeing if it can work and coming up with interesting

00:14:27 ◼   ► workarounds and, you know, crazy hacks, like, I love that part of things. But I think at

00:14:31 ◼   ► a certain point, you have to decide, you know, is this does this continue to be worthwhile?

00:14:35 ◼   ► And it sounds like in your in your case, like, I absolutely agree that it's time for it

00:14:39 ◼   ► to go. And it's just going to be one of those things where they will, you can work on the

00:14:44 ◼   ► messaging around that you can try your best to kind of message that and maybe you'll end

00:14:48 ◼   ► up putting message maybe having messaging in the app to try and communicate that because

00:14:54 ◼   ► the majority of your users almost certainly aren't, you know, following overcast FM on

00:14:58 ◼   ► Twitter or whatever or reading your blog, like messaging that as best you can to try

00:15:03 ◼   ► and make sure that, you know, people are at least have some understanding about what's

00:15:07 ◼   ► going on. But ultimately, it's like the being held hostage by a vocal minority is just going

00:15:14 ◼   ► to stall everything else out. And the you know, if anything, the best thing is to do

00:15:17 ◼   ► is to just call it quits. I like that you're just you decided to do it early and the cycle

00:15:22 ◼   ► just get it done. And just put that to the side so you can focus on your next big updates

00:15:27 ◼   ► for iOS 11. Because, you know, once you've done it, the nice thing in many ways, at least,

00:15:33 ◼   ► it's a funny thing to say, but one of the things I like about the App Store is that

00:15:35 ◼   ► like, I don't it's not like I work in a physical retail store, or something like that, where

00:15:41 ◼   ► if I do something that my customers don't like, they reach out to like, to me specifically,

00:15:46 ◼   ► in a like a physical way that I can't avoid. Like, if you make some make do something that

00:15:51 ◼   ► upsets some people, you can in some ways, isolate yourself from that and just move on,

00:15:56 ◼   ► at least for a period of time, let it die down and focus on the things that are going

00:16:00 ◼   ► to make your app better for everyone else. Because almost certainly, like that is better

00:16:04 ◼   ► for the future of the app than trying to hold hold on to a feature. And like, in this case,

00:16:09 ◼   ► you're kind of your hand is kind of forced. But I mean, there's even situations where

00:16:13 ◼   ► you have to make any change in an app is going to have this exact same experience. I think

00:16:19 ◼   ► like, if you change the font, or you change the color, or you change the layout, people

00:16:24 ◼   ► will be upset. Like there's just that is the that is the inevitable reality of any change.

00:16:29 ◼   ► But if that change is making the app better, then it's kind of essential to just develop

00:16:34 ◼   ► a bit of a, you know, it's like I struggled with this a lot early in the early days of

00:16:37 ◼   ► my indie career, with this feeling very personal about it. But at a certain point, I've had

00:16:42 ◼   ► to just develop a thick and thick enough skin to say, whatever, this is the I'm trying to

00:16:47 ◼   ► make the app as the best app that I can make it. And just go with that and hope and hope

00:16:52 ◼   ► that people accept that, you know, like, the majority, it's making it better for more people

00:16:57 ◼   ► is always almost certainly better than leaving it as it was for a small group of people.

00:17:04 ◼   ► This has been a lot of my rationale for for choosing to remove this feature now because

00:17:08 ◼   ► like I have, you know, like the sunk cost fallacy is definitely at play here. And but

00:17:12 ◼   ► but I think what you what you just described and what I will now I guess coin the the the

00:17:18 ◼   ► lost opportunity cost tragedy. Like, I like I could have done so much more for the main

00:17:25 ◼   ► app in the time I've spent on this feature. And and if I would have known this feature

00:17:30 ◼   ► would have cost so much time, I probably wouldn't have started tackling it in the first place.

00:17:35 ◼   ► But you know that that's all gone now. Now you have to focus on well, what do I have

00:17:39 ◼   ► now? And the fact is I'm already like more than halfway through the summer. And I have

00:17:46 ◼   ► done relatively little to adapt the main app for iOS 11 because I keep getting stuck in

00:17:51 ◼   ► watch problems and developing for the watch in general. As you know, it's better than

00:17:57 ◼   ► probably anybody. It's complicated and it's slow going. You know, like it's it's a very,

00:18:03 ◼   ► you know, because it is first of all this like kind of sister device to the phone. So

00:18:08 ◼   ► it has like you have to do a lot of things through the phone first and then over the

00:18:11 ◼   ► Bluetooth or Wi-Fi to the watch. And it also is very, you know, rudimentary performance

00:18:16 ◼   ► hardware because it has to fit in the watch like it has to have the power envelope to

00:18:21 ◼   ► fit in the watch and everything else. Like it's very low powered hardware. The OS is

00:18:24 ◼   ► fairly young. The API's are fairly young and very limited. So it's it's just very slow

00:18:32 ◼   ► going development wise. Everything you do to develop for the watch is more difficult

00:18:37 ◼   ► and more cumbersome. The cycles of developing and testing and debugging are all longer just

00:18:43 ◼   ► because it's this low power thing that's complex and tied to your phone. So watch development

00:18:50 ◼   ► for me has just been a massive time sink. And a lot of a lot of my users do use the

00:18:58 ◼   ► watch app. But, you know, way more people use the watch app than whoever used the send

00:19:03 ◼   ► to watch offline playback. And part of that, you know, the feature could be better. I'm

00:19:08 ◼   ► not saying it was perfect before, but, you know, it could be way better actually. But

00:19:12 ◼   ► the fact is like it is not worth investing as much time as I've been investing in the

00:19:18 ◼   ► watch app for the amount of users it gets. You know, still by far like I have something

00:19:22 ◼   ► like 15% of my users who have the watch app installed, but only about 1% of the daily

00:19:28 ◼   ► actives actually interact with it. Like they have it running in case they need it. Very

00:19:33 ◼   ► few people actually use it or interact with it more than just looking at it or glancing

00:19:38 ◼   ► at it or even just having it installed and never launching it. So I need to now adjust

00:19:44 ◼   ► my time allocation for the reality of the usage of the watch app and how expensive time

00:19:53 ◼   ► wise it is for me to invest time into it. You know, like it's just so slow going to

00:20:01 ◼   ► make real progress on the watch. It's difficult and it's expensive. So what I need to do now

00:20:07 ◼   ► is focus on the main app, the main UI, the main interactions people actually do with

00:20:14 ◼   ► it. Because that's what I'm focusing on for iOS 11. This is no secret. As we discussed,

00:20:19 ◼   ► I'm adopting the new drag and drop APIs. I'm updating some of the UI here and there

00:20:24 ◼   ► for various little behavioral tweaks that people have wanted and stuff like that. So

00:20:28 ◼   ► I have a good amount of work still to do. All my table views in iOS 11 have weird animation

00:20:35 ◼   ► bugs and are broken because of the way that it changes table view sizing and everything.

00:20:38 ◼   ► I still haven't started dealing with that yet because I haven't had time. I keep losing

00:20:43 ◼   ► time to massive tar pits of watch development. So I just need to end the watch development

00:20:52 ◼   ► now. And it's okay. I'm going to maintain the app and update the app over time but it

00:20:59 ◼   ► has to be a small scope. It has to be like this watch app will continue to work and I'm

00:21:06 ◼   ► going to make it as fast as I possibly can and even faster to interact with which by

00:21:09 ◼   ► the way is actually better without the offline feature because then I have back to a one

00:21:13 ◼   ► page interface and I don't have to link all these extra frameworks and everything so it

00:21:16 ◼   ► actually is way faster without the offline playback and it's easier to touch it without

00:21:23 ◼   ► your touch being interpreted as swipes. So that's nice. Anyway, the watch app is way

00:21:29 ◼   ► better without this feature and it's more in line with the amount of time it has earned

00:21:35 ◼   ► from my development time for the usage it actually gets. For those 1% of people who

00:21:41 ◼   ► are interacting with it every day, I want to make it really fast because 1% is not great

00:21:45 ◼   ► but it isn't like if I leave it without the offline playback, it isn't that big of a time

00:21:49 ◼   ► suck but that does not make it worth investing half of my development year into it when the

00:21:57 ◼   ► rest of the app needs attention to. Anyway, we are sponsored this week by Indeed Prime.

00:22:02 ◼   ► Indeed Prime helps tech talent such as yourself and other software developers and data scientists

00:22:07 ◼   ► simplify their job search and land their dream job. Indeed Prime candidates get immediate

00:22:13 ◼   ► exposure to the best tech companies with just one simple application to Indeed Prime. Companies

00:22:18 ◼   ► on Indeed Prime's exclusive platform message the candidates with salary information right

00:22:23 ◼   ► up front and the average software developer gets five employer contacts and an average

00:22:27 ◼   ► salary offer of $125,000 a year. Indeed Prime is 100% free for candidates, no strings attached,

00:22:34 ◼   ► 100% free for you. Sign up now at Indeed.com/Prime. Once again, Indeed.com/Prime. Thank you very

00:22:43 ◼   ► much to Indeed Prime for sponsoring our show.

00:22:46 ◼   ► So the thing that you're, as you're saying that, that also comes to mind I think just

00:22:50 ◼   ► in general is the being aware of the trap of how we allocate our time as we work on

00:23:01 ◼   ► our apps because this is something that I've actually been struggling with a lot recently

00:23:04 ◼   ► and I have like the double fold problem of where do I allocate my time within an app

00:23:10 ◼   ► and then where do I allocate my time within a variety of apps that I have.

00:23:15 ◼   ► Oh, of course.

00:23:17 ◼   ► And I think this loops back into this sort of this topic around removing features because

00:23:24 ◼   ► it is so easy to get stuck in these rabbit holes I find where you kind of you're working

00:23:29 ◼   ► on something that isn't actually giving you a lot of return and I think it is so like

00:23:36 ◼   ► the things that the traps that I am so easily fallen into are ones where you get like the

00:23:42 ◼   ► feedback we get from our customers whether that be an email or online you know in in

00:23:46 ◼   ► the app in the App Store wherever it comes comes from we get this feedback and it's so

00:23:51 ◼   ► easy to misconstrue the representativeness of that feedback and I think like in this

00:23:58 ◼   ► case it's like if you you know you got the you had a lot of you had this feeling that

00:24:03 ◼   ► you had a lot of people requesting offline watch playback like from there you know this

00:24:08 ◼   ► was a highly requested feature since the watch came out great turns out point one percent

00:24:15 ◼   ► of people actually used it in practice right like and I think that is something that is

00:24:21 ◼   ► it's like the best way to remove a feature probably is to never had it in the first place

00:24:27 ◼   ► which is pretty like like preemptive removal which didn't like doesn't doesn't dig you

00:24:34 ◼   ► out of a city the situation you find yourself in now and I mean the reality is you're just

00:24:38 ◼   ► gonna have to sound you know it's like you just have to navigate it as best you can it's

00:24:41 ◼   ► out in the world but I think to wrap this up at the thing that comes to mind for me

00:24:45 ◼   ► is it's I do I'm increasingly trying to be very analytical about where I'm spending my

00:24:52 ◼   ► effort to try and maximize the output from that because it is otherwise I end up spending

00:24:58 ◼   ► time on these apps around these features that you know I get the impression are well are

00:25:03 ◼   ► very desired but the reality is they're not in the common case they're these sort of these

00:25:08 ◼   ► edge case users or uses of the app or honestly even more problematic are the ones where they

00:25:15 ◼   ► change the core functionality to be slightly worse a custom or a special use case slightly

00:25:24 ◼   ► better like those are the situations where it's I think it's very important to when we're

00:25:30 ◼   ► going into these kinds of things it's like to take that step back and say like how many

00:25:34 ◼   ► people realistically are going to probably use this and do I have any measures in my

00:25:38 ◼   ► app that I can use to identify that like you know even just at the basic level of like

00:25:44 ◼   ► what percentage of my apps of users in this case like have an Apple watch and like knowing

00:25:49 ◼   ► that number ahead of time you know like that is the absolute if every single person used

00:25:53 ◼   ► it well that would be this many people and like you can go down that road of being very

00:25:58 ◼   ► thoughtful about it ahead of time because otherwise you end up in you know in this situation

00:26:02 ◼   ► I've gotten myself in there many times myself where it's it's so easy to get sucked down

00:26:08 ◼   ► these these things that can become these like the like you think you said tar pits like that's

00:26:12 ◼   ► what it feels like sometimes very and almost certainly we're at our best when we're able

00:26:18 ◼   ► to move quickly when we're able to focus on features that will you know if we can make

00:26:22 ◼   ► that core experience better and better and better and it's like the refining having the

00:26:28 ◼   ► it having the attention and the patience to refine the core experience over and over and

00:26:32 ◼   ► being okay with letting other opportunities go fall to the side because I think I don't

00:26:38 ◼   ► know if you ran into this but when I often run into with these kind of these side features

00:26:42 ◼   ► is I have this this fear I guess it's like the fear of missing out like I don't want

00:26:47 ◼   ► to be it's like I know this opportunity exists like there's here's this functionality here's

00:26:52 ◼   ► this thing that I could build you know in this case building offline watch play black

00:26:56 ◼   ► like it's a known thing it isn't this crazy novel invention that you've come up with it's

00:27:01 ◼   ► like it's a pretty obvious next step being it's like is it getting over the fear that

00:27:08 ◼   ► someone else is going to do it someone else is going to do it better and as a result like

00:27:14 ◼   ► they're going to have this runaway success that crushes you in your business like that's

00:27:20 ◼   ► a constant fear of mine but the reality is that is almost certainly not the case like

00:27:25 ◼   ► it's possible like in the same way that it's possible to like win the lottery and in some

00:27:30 ◼   ► ways the odds are probably more similar it's like it's the there's a point oh one percent

00:27:35 ◼   ► chance of this that that that situation happening but the reality is the vast far more likely

00:27:41 ◼   ► thing is that your app will would lose out and fall to and fall away because the core

00:27:47 ◼   ► experience got worse over time rather than that it didn't have some one little feature

00:27:54 ◼   ► and like that's really hard like I've having to say no to something that I know that I

00:27:58 ◼   ► can do but just would end up being this massive time suck is really hard but it's probably

00:28:05 ◼   ► an essential thing for us to do because otherwise we're just gonna you know like I don't know

00:28:09 ◼   ► what the next feature that you or I will are going to add to our apps that we're ultimately

00:28:13 ◼   ► going to kind of regret and maybe have to walk back from and have to navigate and take

00:28:16 ◼   ► our lumps when we remove it but almost certainly there's opportunities are going to keep presenting

00:28:22 ◼   ► themselves and we just have to try and focus on the right things is this all your like

00:28:29 ◼   ► subtle long way of saying that you want me to bring back one touch playback no no no

00:28:35 ◼   ► that's fine I'm okay with the two touch what about the play button on the right side is

00:28:39 ◼   ► that is that good enough play button on the right side is perfect okay but it is an example

00:28:45 ◼   ► of like it's you that it's that core experience of you know of overcast like the optimizing

00:28:51 ◼   ► those are those then you know the behavior of playing a podcast is like a core experience

00:28:57 ◼   ► that should be perfect yeah and that's where you should be spending your time rather than

00:29:01 ◼   ► worrying about the side features that a few people use a few people love like there may

00:29:07 ◼   ► be super passionate and then like that's awesome but that's not most your users and that's

00:29:12 ◼   ► get going down that road too far it's just going to end up you know missing it's like

00:29:15 ◼   ► missing out on way bigger opportunities than missing out on this small small opportunity

00:29:20 ◼   ► over here not to mention I gotta fix all my broken table views still that too thanks for

00:29:25 ◼   ► listening everybody and we'll talk to you next week bye

00:29:28 ◼   ► [BLANK_AUDIO]