Under the Radar

Under the Radar 91: Removing Features


  welcome to under the radar a show but

  independent iOS app development I'm mark

  Worman and I'm David Smith under the

  radar is never longer than 30 minutes so

  let's get started so today we wanted to

  talk about having to remove features of

  the apps and this is you know I've done

  this a lot over time so a lot of times

  it's kind of questionable whether like

  you really have to remove something it's

  kind of a blurry line of like are you

  removing something because some

  condition is changing or somebody is

  forcing you to remove it or are you

  removing it because you don't like the

  feature anymore or they it's hard it's

  too hard to support or something like

  that and I've done a lot of both

  honestly more the latter than the former

  honestly but III think but what I'm

  facing this summer is is I'm having to

  remove the send to watch feature from

  overcast this is a feature that would

  use the iPhone app to transcode the the

  podcast file to a smaller size and then

  set in bacon smart feed and then send it

  over Bluetooth to the watch and then the

  watch would have its own local copy of

  the file and then it could play the file

  directly from the watch to a pair of

  bluetooth headphones if you were you

  know out running with the watchman and

  didn't have your phone with you this is

  a feature that people had requested for

  ever since the first watch came out it

  was it was the number one feature

  request from watch owners was the

  ability to have standalone playback you

  know playback without your phone and

  basically and and this feature I took me

  a very very long time to get this

  working I worked a lot on it this past


  I've probably invested something like

  three or four months of development time

  and to just this feature and the the

  main problem I kept facing was the the

  background audio playback api's on watch

  OS are very very rudimentary because

  watch OS has to run on this very very

  low power device and one thing that

  basically doesn't exist in watch OS is

  background execution of apps like

  few can do it mainly late workout

  processing apps can do it but almost

  nothing else on watch os is allowed to

  persistently run in the background the

  way audio apps on iOS are you know in

  iOS you have audio playback voice you

  have location tracking like turn my turn

  directions all these kinds of apps can

  stay in the background indefinitely as

  long as the user is using them they can

  keep staying the background on watch OS

  that list is much shorter it's it and

  notably does not usually include audio

  apps and so there is there are a few

  api's you can use them the biggest one

  is the WK audio file player api but it's

  very very rudimentary and honestly I've

  had a lot of problems and shortcomings

  trying to use it a lot of bugs a lot of

  just missing features because the way it

  works is it actually is out of process

  it you basically hand it a file URL and

  it plays and then your app gets

  terminated in the background and then

  you know at various times your app could

  be woken back up again to be notified of

  stuff going on and the audio player

  maybe if you're lucky or if the user

  interacts with you you'll obviously wake

  up for that but otherwise you're kind of

  just you're not running and that that

  makes it very very hard to make a good

  audio playback experience especially for

  things like podcasts that have to be

  resumable they have to save your

  position and stuff like that and in so

  forever 4 months I was fighting these

  api's I was I just I could not get a

  good experience out of watch background

  audio playback the problem was not

  sending the files over all of that has

  its own problems of things like it's

  very very slow there's no way to detect

  the progress of a transfer which is very

  very bad for the user experience but

  even if you can get past the

  transferring of the files or even if you

  could have the watch download the files

  directly over over Wi-Fi or over maybe a

  future cellular connection and watch you

  still have would have the problem of

  background audio playback on watch OS

  and so what happened was this past

  spring an app called watch player by

  peter knapp came out and it it uncovered

  for me a new method basically if you if

  you said you were a work out process

  you could use a V audio player and use

  it directly and your app would stay

  running all the time without interfering

  with other workout processing apps it

  would just do the right thing it would

  do what you want it would it would stay

  in the background

  as audio was playing and allow you to do

  things like save your position reliably

  and not have to deal with all the out of

  process bugs of WK audio file player and

  stuff like that it was and it didn't

  have any kind of weird interaction with

  remote controls or the now playing

  screen which is part of the problems I

  have with the deputy audio file player

  API it has a lot of weird interactions

  there anyway so this was finally a way

  to fairly reliably play audio in the

  background on watch OS so I switched

  over to this method and I released this

  feature and it turns out that this was

  not intended to work this way by Apple

  and so this feature no longer works this

  way in watch OS for watch OS 4 you can

  only if you want background audio

  playback you can only use WK audio file

  player all the the method of saying your

  a workout app to really play audio that

  no longer works and watch OS 4 so now

  I'm faced with this massive dilemma of

  well I can go back and rewrite the whole

  thing again for WK audio file player the

  out of process API but that had a lot of

  problems and a lot of bugs and a lot of

  shortcomings and just weird behavior

  like for instance it tries to it tries

  to hook into the remote control buttons

  so if you were to hit you know skip

  forward or seek forward on a bluetooth

  headphone or if you were to go to the

  now playing screen and hit the

  fast-forward button what that does for

  double K audio file player is what you'd

  expect from music it goes to the next

  track podcast apps all interpret this as

  seek forward by 30 seconds or whatever

  you've set it to so for podcasts what

  you want is very very different than

  that and when you are controlling the

  audio player and you have a proper

  remote control API like you do on iOS

  you can interpret that as whatever you

  want and you can you can do that on

  watch OS because this is all happening

  out of

  process out of your control with WK

  audiophile player watch OS tries to do

  try to do the right thing so it's it

  just invalidates that file and seeks to

  the next one if you are podcast app you

  don't have a next one or you might have

  used a WK audio cue file player or audio

  file queue play or whatever it's called

  but you have you have no way to

  interpret that that click as something

  else or that that fast forward command

  of something else

  so it just ends the track you're

  listening to and goes to maybe the next

  podcast whatever else and I tried so

  many crazy hacks with this so for

  instance splitting up podcasts into like

  10 second chunks and just giving the key

  like 400 files for first show I think

  what could go wrong yeah unsurprisingly

  watch OS did not appreciate that

  approach various resource limitations I

  think it probably didn't expect me to

  have a playlist with 400 entries of

  ten-second files so yeah that didn't

  that wasn't great and so again like I I

  tried all these hacks to try to get this

  this wk audiophile player to give an

  experience good enough for podcast

  listening and basically it just didn't

  happen it didn't happen four months ago

  you know it didn't happen for the four

  months I was working on it last winter

  and I've tried over the last few weeks

  to do it again and with watch OS 4 and

  it's not any better in watch OS 4 it

  still has all the same shortcomings and

  all the same bugs and yes I have filed

  many radars and I have I have you know

  forward them to evangelists and things

  like that but the fact is like

  background audio playback I don't think

  is is a very high priority on Apple

  watch compared to like everything else

  they have to do like apples very busy

  this time of year with things like iOS

  and you know the new phones at never and

  all the new stuff for iPad and

  everything so while I have filed bugs

  and contacted you know the appropriate

  people I I don't think I I don't think

  these bugs are going anywhere basically

  the beta Siri the beta season is almost

  over and they haven't gone anywhere so

  so I wouldn't expect them to

  so I'm faced with this decision of like

  do I move to this new API which is much

  worse for my purposes in every possible

  way and way buggy or introduces all

  sorts of new problems and requires all

  sorts of crazy hacks like you

  using the timer and pulling things that

  are supposed to be kvo compliant but are

  and stuff like that like just a lot of

  bugs and a lot of weird workarounds that

  you have to do pulling things to see if

  they're playing is or if they're stalled

  because sometimes the is playing

  attribute is wrong like it's there's all

  sorts of problems that I can't even I

  can't even overstate how many problems

  there are with this API and so I can

  switch to that but it's going to be way

  way worse than it is now and right now

  the feature is barely shippable as it is

  like with the watch OS 3 version that

  was barely shippable and I probably

  shouldn't have shipped it but I did or I

  can remove this feature now and just say

  sorry everyone it didn't work out and

  this has complicate like some people

  have said like well I can I'll just

  leave my watch on watch OS 3 well that's

  not very that's not gonna work because

  first of all if I leave this feature in

  for everyone else when they upgrade to

  watch OS 4 it stops working even if I

  don't recompile the app for macho' s4

  and then second of all if I update my

  app to iOS 11 and watch OS 4 then if

  their watch is still on three it'll just

  be deleted from the wrap when they

  update the phone app so they would have

  to also not update to iOS 11 and that's

  unlikely you know so anyway I'm

  basically stuck and I have to remove

  this feature and this is this is really

  a tricky decision because the good thing

  is not a lot of people use this feature

  it's used by something like 0.1%

  according to my analytics of active

  users so it's it's a very very low

  number but that point 1% is gonna be

  really mad and I've tried to warn them

  on Twitter ahead of time and say you

  know hey just so you know I've been

  working on this not going well but but

  I've decided it's really out now and I'm

  not going I'm going to remove this

  feature like the decision is made and

  I'm also going to remove it like now

  rather than in in a month and a half or

  whatever you know whenever iOS 11 ships

  and watch OS 4 because I don't want my

  entire iOS 11 updates story to be a

  removal of a major feature and I don't

  want all the one star ratings that I'm

  definitely going to get by removing this

  feature to apply to my big iOS 11 update

  I want I want to get this out of the way

  now and I and I want to kind of stop the

  influx of new customers finding this

  feature and getting accustomed to it

  only to have it be ripped away from them

  in a month and a half or whatever so I'm

  going to remove this feature now and

  it's it's always a very tricky balance

  because like again it's like you have to

  think about all these things that you

  have to consider like you're definitely

  gonna make a lot of people angry you're

  definitely gonna get a lot of one-star

  reviews it's going to hurt the app for a

  while but the feature wasn't very good

  to begin with and I've been getting

  one-star reviews over the current

  feature as it is today even even from

  people who love the rest of the app but

  they want this feature to work better so

  they say one-star for their whole app

  because they're mad at this feature so

  like it's uh what should I do

  does this sound reasonable I think it

  does I think the reality in a situation

  like this is that like the the biggest

  things that come to mind is at a certain

  point there's like the the sunk cost

  fallacy that you have to deal with of

  the that feeling of like because you've

  put so much into something that you

  should put more into it to save that

  effort that you put into it before


  so like in this case the thing that you

  I'd always have in the back of my mind

  is this like am i continuing to work on

  this feature because I've spent months

  working on this feature or does this

  feature still make sense in and of

  itself like if I was coming at it fresh

  to have that in the back of your mind

  and then to it's like is what is this

  feature getting in the way of you know

  being made because you know it's it's

  like especially as a 1 as a one-person

  developer you know or even a small team

  like you you're the one thing that you

  can't get more of is time and attention

  to work on your app and to make the part

  of the vdf that 99.9% of your other

  users interact with better and so the

  biggest things I'm like it is so hard to

  say did you just like accept the fact

  that this is going to be unfortunate

  that this is not going to be pleasant

  for who knows how long for

  you know I mean it could be indefinitely

  problematic for the very small group of

  people but hopefully it's you know for a

  month or something or for a couple of

  weeks when you know the update comes out

  where this gets pulled but the reality

  is trying to please that small group of

  people indefinitely trying to sort of

  pile hacks on top of hacks of this crazy

  feature is just never gonna it's no it's

  never gonna win and so you kind of have

  to at some point just say you know we

  tried it it didn't work I'm very sorry

  and move on because otherwise you're

  just yeah the app is just gonna get

  stuck and I mean if it's in a weird way

  it's like Thea the reverse of the Sun

  cost fallacy is you start to think in

  terms of like should I have pulled this

  project earlier should I you know put it

  in what could I have done in the mean

  time and you know it's not that you want

  to just you know only slightly try

  experimental interesting features and if

  at the first sign of trouble back out

  because you know a lot of the cool and

  interesting things that differentiate

  apps and make them useful and

  interesting are these kind of more

  experimental like going down these crazy

  routes and seeing if it can work and

  coming up with interesting workarounds

  and you know crazy hacks like I love

  that part of things but I think at a

  certain point you have to decide you

  know is this could does this continue to

  be worthwhile and it sounds like in your

  skin your case like I absolutely agree

  that it's time for it to go and it's

  just gonna be one of those things where

  they will you know you can work on the

  messaging around that you can try your

  best to kind of message that and maybe

  you'll end up putting message may be

  having messaging in the app to try and

  communicate that because in the majority

  of you users almost certainly aren't you

  know following overcast FM on Twitter or

  whatever or reading your blog like

  messaging that as best you can to try

  and make sure that you know people are

  at least have some understanding about

  what's going on but ultimately it's like

  the being held hostage by a vocal

  minority is just going to stall

  everything else out and though you know

  if anything the best thing is to do is

  to just call it quits like I like that

  you're just you decided to do it early

  and the cycle just get it done and just

  put that to the side so you can focus on

  your next big updates for iOS 11 because

  you know

  once you've done it the nice thing in

  many ways at least it's a funny thing to

  say but I want things I like about the

  app store is that like I don't it's not

  like I work in a physical retail store

  or something like that where if I do

  something that my customers don't like

  they reach out to like to me

  specifically in a like a physical way

  that I can't avoid like if you make

  something do something lips may upset

  some people you can in some ways isolate

  yourself from that and just move on at

  least for a period of time let it die

  down and focus on the things that are

  gonna make your app better for everyone

  else because almost certainly like that

  is better for the future of the app then

  trying to hold hold on to a feature and

  like in this case your hand is kind of

  forced but I mean there's even

  situations where you have to make like

  any change in an app is going to have

  this exact same experience I think like

  if you change the font or you change the

  color or you change the layout people

  will be upset like there's just that is

  the that is the inevitable reality of

  any change but if that change is making

  the app better then it's kind of

  essential to just develop a bit of a you

  know it's like I struggled with this a

  lot early in the early days of my to

  indie career with this feeling very

  personal about it but a certain point

  I've had to just develop a thick and

  thick enough skin to say whatever this

  is the I'm trying to make the app as the

  best app that I can make it and just go

  with that and hope and hope that people

  accept that you know like the majority

  better for more people is always almost

  certainly better than leaving it as it

  was for a small group of people this

  this has been a lot of my rationale for

  for choosing to remove this feature now

  because like I have you know like the

  sunk cost fallacy is definitely a play

  here and but but I think what you what

  you just described and what I will now I

  guess coin the the the lost opportunity

  cost tragedy like I like I could have

  done so much more for the main app in

  the time I've spent on this feature and

  and if I would have known this feature

  would have cost so much time I probably

  wouldn't have started tackling it in the

  first place but you know that that's all

  gone now like that now you have to focus

  on well what do I have now and the fact

  is I'm already like more

  than halfway through the summer and I

  have done relatively little to adapt the

  main app for iOS 11 because I keep

  getting stuck and watch problems and

  developing for the watch in general it

  as you know it's better than probably

  anybody it's complicated and it's slow

  going you know like it's it's a very you

  know because it is first of all this

  like kind of sister device to the phone

  so it has like you have to do a lot of

  things through the phone first and then

  over the Bluetooth or Wi-Fi to the watch

  and it also is very you know rudimentary

  performance hardware because it has to

  fit in a watch like it has to have the

  power and hope to fit in the watch and

  everything else like it's very low

  powered hardware the OS is fairly young

  the api's are fairly young and they're

  and very limited so it's it's just very

  slow going development wise everything

  you do to develop for the watch is more

  difficult and more cumbersome the cycles

  of division of developing and testing

  and debugging are all longer just

  because it's this low-power thing that's

  complex and tied to your phone so watch

  development for me has just been a

  massive time sync and a lot of a lot of

  my users do use the watch app but you

  know way more people use the watch app

  than whoever used the send to watch

  offline playback and part of that you

  know the feature could be better I mean

  I'm not saying it was perfect before but

  you know it could be way better actually

  but the fact is like it is not worth

  investing as much time as I've been

  investing in the watch app for the

  amount of use that she gets you know

  still by far like I have something like

  15% of my users who have the watch app

  installed but only about one percent of

  the daily actives actually interact with

  it like they have it running in case

  they need it

  very few people actually use it or

  interact with it more than just looking

  at it or glancing at it or even just

  having it installed and never launching

  it so I need to now just my time

  allocation for the reality of the usage

  of the watch app and how and how

  expensive time wise it is for me to


  into it you know like I said like it's

  just it's so it's just so slow going to

  to make real progress on the watch it's

  just it's difficult and it's expensive

  so what I need to do now is focus on the

  the main app the main UI the main

  interactions people actually do with it

  because that they know that's what I'm

  focused on for I was 11 this is no

  secret I'm as we discuss I'm adopting

  the new drag-and-drop api's I'm updating

  some of the UI you know here and there

  for various like little behavioral

  tweaks that people have wanted and stuff

  like that so like I have I have a good

  amount of work still to do all my table

  views and iOS 11 have weird animation

  bugs and are broken because of the way

  the change table view sizing everything

  I still haven't haven't started dealing

  with that yet because I haven't had

  times I keep losing time to massive you

  know tar pits of watch development so I

  just need to end the watch development

  now and and it's okay like I'm going to

  maintain the app and update the app over

  time but it has to be a small scope it

  has to be like this watch app will

  continue to work and I'm gonna make it

  as fast as I possibly can and even fast

  to interact with which by the way is

  actually better without the offline

  feature because then I have back to a

  one page interface and I don't have to

  link all these dextra frameworks and

  everything is what actually is way

  faster without without the that the lot

  the offline playback and it's easier to

  touch it without your touch is being

  interpreted as swipes so that's nice

  anyway so the watch app is way better

  without this feature and it's more in

  line with the amount of time and has

  earned from from my development time for

  the usage it actually gets like for the

  for those 1% of people who were

  interacting with it every day I want to

  make it really fast cuz 1% is not great

  but it isn't like if I leave it without

  the offline playback it isn't that big

  of a time suck but that does not make it

  worth investing half of my development

  year into it when the rest of the app

  needs attention to you know be

  responsive as week by indeed prime

  indeed prime helps tech talent such as

  yourself and other software developers

  and data scientists simplify their job

  search and

  and their dream job indeed prime

  candidates get immediate exposure to the

  best tech companies with just one simple

  application - indeed prime companies on

  indeed primes exclusive platform message

  the candidates with salary information

  right up front and the average software

  developer gets five employer contacts

  and an average salary offer of one

  hundred and twenty five thousand dollars

  a year

  indeed prime is a hundred percent free

  for candidates no strings attached 100%

  free for you sign up now and indeed.com

  slash prime once again indeed.com slash

  prime thank you very much - indeed prime

  for sponsoring our show so the thing

  that you as you're saying that that

  Casso comes to mind I think just in

  general is the being aware of the trap

  of how we allocate our time as as we

  work on our abs because this is

  something that I've actually been

  struggling with a lot recently and I

  have like the double fold problem of

  where do I allocate my time within an

  app and then where do i hella Kate my

  time within a variety of apps that I

  have well of course and I think this is

  this loops back into the sort of this

  this topic around removing features

  because it is so easy to get stuck in

  these rabbit holes I find where you kind

  of you're working on something that

  isn't actually giving you a lot of

  return and I think it is so like that

  means that the traps that I am so easily

  falling into ones where you get like the

  feedback we get from our customers

  whether that be an email or online you

  know in in the app and the app store

  wherever it comes comes from we get this

  feedback and it's so easy to misconstrue

  the representativeness of that feedback

  and I think I can in this case it's like

  if you you know you got the you had a

  lot of you had this feeling that you had

  a lot of people requesting offline watch

  playback like from there you know this

  was a highly requested feature since the

  watch came out great it turns out point

  1 percent of people actually used it in

  practice right right like and I think

  that is something that is it's like the

  best way to remove a feature

  probably is - never had it in the first

  place which is pretty like like

  pre-emptive removal which did you know

  does it like doesn't it doesn't dig you

  out if I say that the situation you find

  yourself in now and I mean in the

  reality is you're just gonna have to

  sound you know it's like you just have

  to navigate it as best you can

  it's out in the world but I think to

  wrap this up at the thing that comes to

  mind for me is its I'm increasingly

  trying to be very analytical about where

  I'm spending my effort to try and

  maximize the output from that because it

  is otherwise I end up spending time on

  these apps or on these features that you

  know I get the impression are well are

  very desired but the reality is they're

  not in the common case they're these

  sort of these edge case users or uses of

  the app or honestly even more

  problematic are thoth ones where they

  change the core functionality to be

  slightly worse make a custom or a

  special use case slightly better like

  those are the situations where it's I

  think it's very important to when we're

  going into these kinds of things it's

  like to take that step back and say like

  how many people realistically are going

  to probably use this and do I have any

  measures in my app that I can use to

  identify that like you know even just at

  the basic level of like what percentage

  of my apps of users in this case like

  have an Apple watch and like knowing

  that number ahead of time you know like

  that is the absolute if every single

  person used it all that would be this

  many people and like you can go down

  that road of being very thoughtful about

  it ahead of time because otherwise you

  end up in you know in this situation and

  I've gotten myself in there many times

  myself where it's it's it's so easy to

  get sucked it down these these things

  that can become these likely yeah like

  you sink you said tarp it's like that's

  what it feels like sometimes where you

  and almost certainly we're at our best

  when we're able to move quickly when

  we're able to focus on features that

  look if we can make that core experience

  better and better and better and

  reflects like the refining having the it

  having the attention and the patience to

  refine that core experience over and

  over and being okay with letting other

  opportunities go fall to the side

  because I think I don't know if you ran

  into this but what I often run into

  wouldn't these kind of these side

  features is I have this this fear I

  guess like the fear of missing out like

  I don't want to be it's like I know this

  opportunity exists like here's this

  functionality here's this thing that I

  could build you know in this case

  building offline watch play black like

  it's it's a known thing it isn't this

  crazy novel invention that you've come

  up with it's like it's a pretty obvious

  next step be it's like is it getting

  over the fear that someone else is going

  to do it someone else is going to do it

  better and as a result like they're

  going to have this runaway success that

  crushes you in your business like that's

  a constant fear of mine but the reality

  is that it's almost certainly not the

  case it's possible like in the same way

  that it's possible to like win the

  lottery and in some ways the odds are

  probably more similar it's like it's the

  there's a point oh one percent chance of

  this that that situation happening but

  the reality is the vast move or more

  likely thing is that your app will would

  lose out and fall to and fall away

  because the core experience got worse

  over time rather than that it didn't

  have some one little feature and like

  that's really hard like I've had having

  to say no to something that I know that

  I can do but just would end up being

  this massive time suck is really hard

  but it's probably an essential thing for

  us to do otherwise we're just gonna you

  know like I don't know what the next

  features that you are I we are going to

  add to our apps that were ultimately

  going to kind of regret and maybe you

  have to walk back from and have to

  navigate and take our lumps when we

  remove it but almost certainly there's

  opportunities are going to keep

  presenting themselves and we just have

  to try and focus on the right things

  is this all your like subtle long way of

  saying that you want me to bring back

  one touch play back no no no no that's


  I'm okay with the to touch what about

  the play button on the right side is

  that is I could enough play button on

  the right side is perfect okay yeah but

  but it is an example of like it's that

  it's that core experience of you know

  overcast like the optimizing those are

  those the behavior of playing a podcast

  is like a core experience that should be


  yeah and that's where you should be

  spending your time rather than worrying

  about the side features that a few

  people use a few people love like there

  may be super passionate and that's

  awesome but that's not most your users

  and that's get going down that road too

  far it's just gonna end up you know

  missing it's like missing out on way

  bigger opportunities than missing out on

  this small potato opportunity over here

  not to mention I gotta fix on my broken

  table views still that's alright thanks

  for listening everybody and we'll talk

  to you next week bye