Under the Radar

Under the Radar 118: Original Research


  welcome to under the radar a show about

  independent iOS app development I'm

  Marco Arment and I'm David Smith under

  the radar is never longer than 30

  minutes so let's get started

  so this week as as is often the case I

  think when topics can come out of a

  current work that where did that do

  we're doing I feel like we tend to get

  the best topics and and this week's

  topic I think comes from work I'm doing

  currently in my Apsley plus plus which

  is a sleep tracker where I'm working on

  doing automatic sleep detection and

  sleep analysis which is a feature that

  I've long been along been asked for by

  my users but I've never hadn't quite

  quite gotten to and so I'm good for the

  last week or so this is what I've been

  working on and the process so far has

  been pretty promising that this is

  something that I'm going to be able to

  do but I think there's an interesting

  topic and a broader thing to talk about

  in just sort of generally talking about

  things that are kind of feel like

  original research or a primary research

  you could call it so often when we're

  developing something when we're making

  up an app or a product it's there's much

  of it that is is not new or novel in any

  real sense you know if you're you know

  the process of you know taking data

  putting it in a database taking that

  data out putting it in a table view like

  that there's nothing original and

  special there but and often if you want

  to have something at an app that's

  really compelling or has a hook to it

  you're going to have to do things that

  are beyond that and so in many ways you

  end up kind of doing this kind of

  research you kind of inventing something

  in a real sense of the word invention

  and not every app has to have this

  certainly but it is something that I've

  found that is good to have in your

  toolbox as something that you're not

  scared to try that if you have an idea

  about I wonder if I could do this kind

  of you know usually there's some kind of

  processing involved you know maybe it's

  image processing you're working on a

  camera app and you want to do some kind

  of image filters or an audio app and

  maybe you're doing some audio processing

  or in my case I'm doing you know I'm

  analyzing a user's movement and heart

  rate and

  that kind of thing there's usually some

  kind of processing involved and doing

  this kind of research I think gives your

  app an advantage both in terms of it

  being more useful to your customers

  which is probably far more important

  that you know my goal with doing

  automatic sleep detection is that more

  people will track their sleep more often

  because they won't have to remember to

  start and stop the motion tracking like

  they do currently it'll just happen

  automatically which sounds great but

  it's also creates this nice little sort

  of competitive advantage that there's

  now this little moat around your app

  that anybody who wants to compete to

  feature by feature with you now has to

  go through and build it themselves they

  have to do that research they have to

  work out how to do it in fair enough

  it's easier the second time you know

  somebody looking at what you have done

  even if they'd never see your code or

  understand your methodology and simply

  knowing that a solution exists with a

  given set of inputs is you know a

  tremendous advantage versus the number

  of times that I've gone down a road

  where I'm like I wonder if I could and

  then I spend a week and I work on

  something and it doesn't work out and so

  I give up and that never sees the light

  of day it's easier knowing that a

  solution does exist but it's totally

  competitive advantage it's still a road

  that they have to go down and work that

  they have to have to do so it's an

  advantage in that regard and as I was

  working on my stuff I was thinking with

  you buy you Marco and how voice boosts

  and smart speed are two kind of similar

  types of things that weren't necessarily

  like your app was the first one to ever

  do them but the way that you've done

  them and the work that you did to you

  know to add those to your app is now

  this competitive advantage that you know

  you can sort of hold over your

  competitors yeah I mean I I've said

  before that I think kind of a recipe for

  a pretty good useful app that is kind of

  a good balance between diving in and

  spending a whole bunch of time on hard

  stuff nobody will ever notice versus

  being really basic and having no

  competitive advantage and having no

  compelling features I think a really

  good balance between those two is do


  or to hard things in your app and do

  everything else doesn't need to be like

  a hard impressive technical thing but if

  you have like one or two that can really

  make an app and you know for instant

  paper originally that was the text

  parser and later on I did like some

  Kindle stuff that was a little bit crazy

  and and like you know weird like things

  with pagination on the iPhone like but

  that was a relatively small number of

  features ultimately the the great value

  of that app was pretty boring stuff and

  then you know the text parser was like

  the big one and for overcast yeah I

  think smart speed and voice booster are

  pretty significant features that are you

  know that are hard and and you know

  require some some deep learning or not

  deep learning require like some deep

  knowledge of low-level audio

  manipulation and and audio mastering and

  stuff like that to really do that well

  and I had to learn a lot of that stuff

  and it was hard I happen to like that

  kind of hard work so it was it was fun

  for me and it still is fun and whenever

  I work on it today but that was really

  hard stuff I had to learn mostly by like

  Google searches and trial and error of

  things like DSP audio processing like

  how to do that and what I'm actually

  manipulating with the audio signals and

  and how not to do it and all the

  different ways to do it that make it

  sound crappy so I can avoid those ways

  and and eventually figuring out ways to

  do it that sound good or that that can't

  be noticed that that is all really hard

  work but I've always enjoyed like that

  kind of like low-level data work not

  necessarily in a sense like big data but

  like just like working like working them

  in low-level C functions on in

  performance in performance critical like

  large blocks of numbers and operations

  using things like the like the

  accelerate functions in iOS like I

  always like that stuff but if I spend

  all of my time doing that in overcast

  dial I would be unbalanced like you know

  right now like I'm kind of battling my

  in with my self-discipline what I really

  want to be working on a lot of the time

  is the work I'm doing for voice boost

  too which is just rarely voice boosts

  but just it's gonna sound better

  work better with more stuff and that's

  all this wonderful low-level stuff

  making my own audio processing functions

  and everything and it's gonna be it's

  it's exactly this kind of thing but what

  my customers actually want is not it's

  for me to make voice boos to for the

  most part but my customers really want

  is boring stuff like everybody wants me

  to give them like a smart playlist that

  shows all their starred items that's a

  really boring thing that I need to do

  because that's what they actually want

  most of the app is boring stuff like

  that like download management and you

  know basic you know UI for things I

  still don't have a way for people to

  change their email address on their

  account because it's stuff like that

  that's what people actually want so it's

  important at when you're doing like

  these kind of like cool fun like low

  level math type features or data

  analysis type features it's important to

  make sure you also keep that balance

  though of not spending too much of your

  time on it and as much as that this is

  kind of cynical but not wasting too much

  time on stuff that's really hard to

  market to people like one of the one of

  the reasons why a lot of people assume

  that overcast invented silence skipping

  and dynamic processing on podcasts is

  because I was the first one to figure

  out how to market those features to

  people and that like and a lot and that

  isn't just like you know dumping money

  into ads I didn't actually ever really

  do that like it not until recently have

  I tried that marketing that you know

  this kind of feature is about making

  sure people know it's there and telling

  them why it's so good in some way and so

  for these features like I gave them

  names that were not just like you know

  plain text descriptions I didn't say

  like shortened silences and I didn't say

  boost the volume or use a dynamics

  compressor like I didn't mean those

  features those things I gave them

  branded names I trademarked those names

  I put those names on everything

  I added features like it showed you how

  much time you had saved with the silent

  skipper feature because I need to show

  people that this

  that when it's turned on they don't

  really notice is doing something for

  them and all of that was to help market

  these features that I spent a lot of

  time on this low level fun stuff because

  otherwise nobody would know they were

  there and the few people who would find

  them and turn them on wouldn't really

  understand how good they are because

  they're both kind of like subtle effects

  most of the time and so they both kind

  of like they help you out in a subtle

  way but if you don't know that if you're

  not being shown or told that in some

  compelling way then a lot of that effort

  is wasted and so it's very important

  when you're when you're planning these

  kind of features to make sure that a

  you're not spending too much time on

  them to the exclusion of features that

  people actually need or want more and be

  that you're not going to invest a ton of

  time into something like this that is

  unmarketable in some way like you have

  to include in your planning for features

  like this how you're going to

  communicate the existence and the value

  of these features to your customers yeah

  and I think what's cool is that once

  you've done that like if you work out a

  way to communicate to your customer that

  you do this you do some hard work you

  can find a way to communicate that to

  your customer you end up with a

  something that is really compelling in a

  weirdly insidious way that like I

  struggled to I feel bad if I listen to

  podcast type

  like a long-form audio without the

  silences removed now because that in my

  back of my mind I feel like I'm wasting

  time and so like that is a hook that you

  now have like placed in me that if I

  listen to something long form I will

  find a way to turn that into is

  something that I can listen to with

  something like smart speed just because

  it's now that's what I expect because

  you've wrapped it out you've wrapped up

  this kind of original like it's not

  original in the sense that you were the

  first person to come up with it but

  original in the sense that you had to do

  a lot of a hard low level work to make

  it happen

  you don't just build it it's not just

  like av you're not just doing your ABA v

  player dot you know remove silence is

  equal true like

  that was the case I wish it was that

  easy like that would be great right but

  that's not the case you had to do all of

  this her whole cloth development to make

  it work I think now you have this great

  little advantage that you know it one of

  the things that would keep it keeps me

  an overcast rather than another podcast

  player is that I don't want to lose that

  the this thing that I now have and so

  it's this little mote that other people

  could certainly build it it's not like

  it's technically crazy to build a smart

  speed or to build build voice boost but

  it's you know building building an app

  in general is difficult and then taste

  tackling one of these features you know

  is also kind of hard so it's just this

  nice little it's it's undertaking one of

  these I think you're definitely right

  though be careful that you're like

  taking on something that you can show

  you can show you have something to show

  for at the end but if you do and it does

  make sense like it's a wonderful little

  it's a wonderful way to create value

  that is heart you know it's defensible

  rather than you know easily easily

  copied by somebody else but it's also

  it's important to also realize that like

  nothing is gonna be yours forever like

  overcast was the only mass-market

  podcast player that had these features

  for a while but now it isn't and in you

  know and it ever really was the absolute

  only one but it was it was you know the

  only like really mass-market one and now

  it's not and it's and more of them are

  gonna keep adding features like this

  like I had a couple good years there it

  bought me some time you know similar to

  like Apple with the iPhone launched the

  original iPhone and you know Steve

  famously said that it was five years

  ahead of the competition and that

  basically proved to be true it that was

  that was roughly correct like it took

  Android a long time to to reach like the

  minimum quality that the iPhone had you

  know years earlier and so it you know it

  buys you some time when you have

  something like this but not necessarily

  tons of time and it's definitely a

  limited amount like it it will it will

  end and so it's important not to rest on

  your laurels and and not to assume that

  something cool you do is going to be

  yours forever so maybe that's doing

  cooler things maybe that's finding other

  ways to remain competitive you know in

  in the future but you know keep in mind

  that you know when you're when you're

  deciding what to do when you're planning


  your app when you are trying to allocate

  time keep in mind again the value of

  these features will not last forever so

  let that inform how much time that you

  allocate to them anyway we are brought

  to you this week by Squarespace enter

  offer code radar at checkout to get 10%

  off your first purchase make your next

  move with Squarespace

  Squarespace lets you easily create a

  website for your next idea with a unique

  domain award-winning templates and much

  more whether you want to create an

  online store or a portfolio site or a

  blog or even a podcast Squarespace is an

  all-in-one platform that lets you do any

  of those things or all of those things

  there's nothing to install no patches or

  updates to worry about no upgrades to do

  you don't have to worry about any of

  that stuff because Squarespace has it

  covered and if there's anything that you

  need help with or if anything goes wrong

  they have award-winning 24/7 customer

  support if you need any help they let

  you quickly and easily grab a unique

  domain name and your getting started and

  all of these award-winning templates

  they have are beautifully designed for

  you to show off your great ideas and you

  can customize the template to your

  heart's content really make it yours

  Squarespace plans start at just $12 a

  month and you can start a free trial

  with no credit card required by going to

  Squarespace com

  when you sign up make sure to use the

  offer code radar to get 10% off your

  first purchase and show your support for

  under the radar

  we thank Squarespace for their support

  Squarespace make your next move make

  your next website so now that you

  decided that you're going to go down the

  road of doing some kind of an original

  research project to like add a new

  feature to your app I was thinking how

  do you say it's like it's like there's

  lots of different approaches I think you

  can take to something like that and one

  thing that I wanted to start off talking

  about is how when I do these types of

  things I always take a very guess you

  call it the empirical approach rather

  than the theoretical approach that I try

  and just you know I get in there and I

  just start to build things I try a lot

  of things and it's just experiment I try

  and generate a lot of data as best I can

  and then we will run you know run the

  test a test you know test cases through

  my system whatever it may be because I

  find that I'm just not very academic and

  I used to I think earlier in my career

  be intimidated about by the fact that I

  just wasn't particularly academic in

  that way that I'm not coming at it from

  a you know a theoretical approach that

  I'm then trying to work out how to

  implement ice in many ways I start with

  implementations I start with just like

  well let me see if this works well let

  me see if this works and I in theory a

  theoretical approach would help you get

  to the right solution more directly or

  at least in a more straightforward way

  but it would encourage anybody who

  doesn't have who's slightly intimidated

  by the feeling that oh man's like this

  needs to be super theoretical it's like

  maybe medium depending what you're

  working on but often a more direct

  empirical just like kind of where do

  your do your best approach will often

  get there and in my experience you know

  gets you gets you there well enough and

  can you know that allow you to create

  these features without needing a lot of

  theoretical knowledge without a lot of

  deep and potentially like the deep

  understanding you may not understand

  exactly why yeah particularly method is

  working but it can work for you and you

  know you could bargain with it that's

  good or not but I found it to work well

  so do you know just an encouragement it

  don't be don't be too scared of things

  if you can just sort of approach them

  more directly yeah I I too am pretty

  weak on the academic side I'm especially

  weak in in the advanced math really like

  things like you know calculus I really

  never took or I took it but failed it um

  you know most of the advanced like

  linear algebra stuff I have a very very

  weak understanding of really almost all

  advanced math I really just either never

  took in college and just never learned

  it afterwards or I took it and took it

  so poorly that I really just know

  nothing about it

  so whenever I'm looking up online

  looking up some kind of algorithm and

  and I started to see the mathematic

  notation I'm just like ah crap I'm

  probably not gonna figure this out and

  sometimes like try and plow through and

  the simpler ones I can I can kind of

  work out like the pseudocode of how to

  do in my language that I know what there

  trying to tell me how to do but like you

  know once something comes to like oh you

  have to read these academic papers to

  understand how to do this algorithm or

  something that's usually when I bail out

  because I try sometimes but it's I can't

  usually get through them and so what I

  do with with a lot of my approaches to

  like these hard you know math or data

  problems is really fairly simple things

  like I I'm pretty good at coming up with

  just all semi I'll stop my head coming

  up with some kind of heuristic of like

  oh maybe if I you know look for this

  pattern and I give it this some kind of

  like wait in a scoring you know

  algorithm that maybe this will be better

  and sometimes that works most of the

  time it doesn't but occasionally I get

  something out of it that that is pretty

  useful and and that's that's how I tend

  to do that these kind of things it's

  it's basically like trial and error to

  develop some kind of heuristic or

  algorithm that is really not a very

  mathematically advanced algorithm it's

  really just like you know large amounts

  of dumb math large amounts of like basic

  arithmetic that I can do but you don't

  need necessarily an advanced knowledge

  of you know sophisticated math and you

  know the more advanced stuff that being

  said I do think my lack of knowledge

  there holds me back to some degree like

  there's a lot of you know statistical

  methods things like you know especially

  when dealing with things like large data

  sets dealing with things like data

  clustering and and you know statistical

  analysis of large pools of data I

  basically don't understand any of that

  and that is holding me back to some

  degree so I do want to want to get

  better at some of that stuff but

  ultimately you don't necessarily need to

  if you if you can't or don't want to

  like you can get pretty far without the

  knowledge of some of that advanced math

  stuff yeah and the thing that's key

  there is that you can your solution may

  not be optimal but you may get a

  solution I mean it's sort of in a weird

  way it makes me think of how like if you

  don't under if you didn't understand

  what multiplication was but you knew how

  to do addition you could still end up

  with the same result

  you're writing for loop the best

  sure right like which is obviously kind

  of like a trivial example of this but

  that is often I think the approach that

  the impression that I have is that often

  my approach is repeated addition

  rather than multiplication because I

  don't understand the higher concept but

  you don't get it like like I still end

  up with 20 with 4 so you know 4 times 5

  I just may even add the fact that I add

  5 to itself 4 times versus just enough

  to do it directly with multiplication

  that's less efficient but this is the

  answer the same is still 20 and I'm like

  computers are so fast even on our phones

  and our watches like micro processors

  theses are just so ridiculously fast

  that for a lot of problems like this

  even if you just have kind of like a

  brute force solution or even if it's

  like an imprecise solution that is

  probably both fast enough and good

  enough for a lot of times yeah and so

  you know it's it's it's which is an

  encouragement that it's like yeah it's

  like you did you it's okay and that's

  like that's fine and it's you know as

  with any all out of these kind of

  discussions you can get into like is it

  well well is it certainly better is it

  more efficient to have this have a more

  theoretical approach or fundamental

  understanding of course but you know if

  in order to gain that level of

  understanding you almost certainly have

  to be spend a lot more time and you know

  like like to become an expert in that

  area is gonna take a lot of time and be

  a lot of distractions away from other

  things so it may not be worth getting

  that level of understanding so you know

  just worth worth keeping in mind yep

  definitely um in terms of the actual

  building of these things I think it

  seemed worth to actually sort of diving

  into the way that the approach that I've

  taken I'll talk to my recent example

  with automatic sleep tracking where so

  you know I'm gonna add this to an app my

  usual approach is to create a completely

  separate app I've try and then

  eventually it'll end up being a branch

  in the main ow but usually I just create

  a completely new app that has none of

  the overhead and none of the other

  things going on and mostly I do that

  because then I can just kind of if it

  goes if I go down if I go down a bad

  line of thinking and it just ends up in

  a dead end I can just throw it away and

  start again and it's it's easier I find

  me to just kind of have the Super's

  focused lightweight app you know I don't

  need to go to a particular place in the

  app like often I end up doing stuff just

  in the you know view did finish

  launching like it's basically a command

  line app just running on an iPhone like

  I end up doing that kind of thing where

  you make it as quick and as simple as

  possible and it's focused in on exactly

  what the problem is now I find that to

  be a very helpful approach I tend to do

  my work there to validate that the you

  know is that something is possible and

  then I'll start to work on how will I

  take that and turn it into the you know

  the final version and that first version

  I have no consideration at all to code

  quality often I will completely throw

  that code away I will just repeat you

  know how we'll end up reimplemented it

  just using all the lessons I learned

  from all of that throwaway code but by

  taking such a quick and dirty approach

  to it it means that I can work much more

  quickly and iterate on it that I don't

  need to feel like you know I'm writing

  code that is going to end up needing to

  be production quality you know I can

  ignore all the errors I can just sort of

  make it so that it just works on exactly

  what I'm trying to do you know and so in

  this case I have yeah hadn't had us you

  know built a separate app that you know

  tries to automatically detect and

  analyze you know lease lease leaked data

  out of all the various health inputs

  that we have and I just sat there and

  iterated on and that until I got it to

  work and then now I'm going through the

  process of actually you know turning

  that understanding and the data that I

  can get out of that yeah completely

  reimplemented from from scratch that all

  those algorithms and methods that I came

  up with again in this case was actually

  slightly amusing because I built my

  prototype app in Swift and then my

  supposed suppes plus is an objective-c

  app and so I was I was going to be

  implemented anyway and it actually kind

  of worked well to keep me from being

  lazy and just copy pasting things that I

  actually went through and had to be

  thoughtful in that translation from the

  prototype app to the actual app to make

  sure that I'm actually taking care of

  all the edge cases and things but that's

  an approach that I find works pretty

  well and then once you can get it into

  the app then you can actually start

  you sort of start working through the

  actual you know making it of a higher

  quality but I find you're doing it as

  developing and prototyping in a separate

  app and then graduate and then moving in

  once you kind of have the basics worked

  out works pretty well for me so and I'm

  curious you know because I think it goes

  back to are like you know competitive

  advantage argument earlier why are you

  at in this feature mostly because I

  think it makes the app better and I

  think I wish I I wish I did it and I

  know I often hear from people who use my

  competitors app because they do it and

  so and it turned out to be much easier

  than I thought it was gonna be I had in

  my mind it was gonna be really hard and

  so I've been putting off working on it

  and I because I have a lot of existing

  sleep data calculated my old method I

  was able to much more quickly I think

  work out and work out a way to process

  all this data and end up with very

  similar results because I could just

  kind of try lots of things and I could

  very quickly see if it worked or worked

  or wasn't gonna work and I think it will

  you know it's a competitive advantage

  and I know it's a feature that I will

  use myself you know the ability to have

  your Apple watch just track your sleep

  without all you have to do is wear it

  while you sleep and then it's all taken

  care of and so I think it's an advantage

  in that regard because you'll actually

  use the app more because right now you

  have to remember to use it which is

  always difficult yeah and that makes a

  lot of sense like that that obviously is

  a compelling feature and you know i-i've

  heard podcast when people talk about how

  you know they're comparing your app to

  one of the competitors that there's

  automatic stuff and like and I thought

  oh that sounds compelling but you know I

  too would have assumed that was really

  hard and that's also kind of a you know

  another I think it may be good close

  note here is like a lot of the like if

  you're a developer and and you think of

  or you see some other app that that you

  know or you know you were to think of a

  feature that you want to do that sounds

  really hard or impossible try it because

  it might not be like I first thought

  that you know like that doing pagination

  and Instapaper would be really hard and

  it turned out it really wasn't i'm

  similar like if you think like oh you

  know i would love to do this kind of

  analysis on you know some feature in

  with but with data but the iphone

  probably can't handle it it's probably

  like you know to but

  to computationally intensive try it

  because it might not be yeah that's

  another area where I've found like I

  always assume that oh maybe I I probably

  can't do things like run a live FFT on

  the audio stream without having a big

  battery impact and the answer so a lot

  of times is nope you totally can it's

  totally fine the device is really fast

  these days yeah and it's just kind of a

  nice thing to be like there is something

  just really fun and encouraging when you

  hit on something that you thought would

  be really hard that actually turned out

  to not be crazy hard and like that was a

  really fun thing and it speaks to

  actually the last thing I want to

  mention too is I've found tremendously

  valuable as quickly as I can working out

  how to visualize the problem that I'm

  working on in a way that I can see

  rather than just like data that's you

  know being NS logged out to the console

  that's a good time so in a lot in like

  in a lot of my apps like in this book in

  this case with you know sleep tracking

  there's a lot it's essentially it's very

  timeline based you know I'm looking at a

  variety of inputs over time and so I

  just have a really simple app or a view

  controller that just has a has a scroll

  view in it and all of the data points

  that I have on it I just create a UI

  view and they throw it into it which is

  horrific aliy you know unperformed I

  have like 10,000 UI views in one scroll

  view it's fine there's better ways to do

  graphing you know like actually doing

  pagination and stuff so I'm only

  rendering the stuff that I need to but

  like it's fine it's in this purse iPad

  but visualizing it making it so that I

  can see the connections and like in this

  case it was you know I ended up

  visualizing the outputs of my first

  first couple of attempts and aligning

  them with the outputs of my previous

  method and they lined up perfectly and I

  was like well this works well that's


  and so visualizing that as quickly as

  you can it's just some that I can't

  emphasize enough that and I know you

  know something I think I saw you were

  talking about with your your voice boost

  to stuff you do the same thing but like

  as soon as you can see it it's both

  motive motivating in terms of

  encouraging you that you're on the right

  track as well as you know very quickly

  showing you the areas that aren't

  working and the things you need to

  change exactly it makes a huge

  difference yeah anyway so go forth do


  research try and you know not be

  intimidated by things do you think are

  too hard and see no see what you can

  come up with because I think if you can

  come up with these things like and it

  turns out that they're easier than you

  thought maybe like you can make it you

  can create it creates a tremendous value

  in your app that I think you know as

  especially if you as a smaller team or

  as a smaller developer there is an

  immense advantage to having these little

  things that are hooks that are marketing

  lines that are reasons why someone might

  want to try your app versus something


  Thanks listening everybody I'm gonna

  talk to you next week bye