Under the Radar

118: Original Research


00:00:00   Welcome to Under the Radar, a show about independent iOS app development.

00:00:03   I'm Marco Arment.

00:00:04   >> And I'm David Smith.

00:00:05   Under the Radar is never longer than 30 minutes, so let's get started.

00:00:10   So this week, as is often the case, I think when topics can come out of current work that

00:00:16   we're doing, I feel like we tend to get the best topics.

00:00:20   And this week's topic, I think, comes from work I'm doing currently in my app, Sleep

00:00:25   Plus Plus, which is a sleep tracker, where I'm working on doing automatic sleep detection

00:00:31   and sleep analysis, which is a feature that I've long been asked for by my users, but

00:00:37   I've never quite gotten to.

00:00:39   And so for the last week or so, this is what I've been working on, and the process so far

00:00:44   has been pretty promising that this is something that I'm going to be able to do.

00:00:49   But I think it's an interesting topic and a broader thing to talk about in just sort

00:00:53   of generally talking about things that kind of feel like original research or primary

00:00:57   research you could call it.

00:01:00   So often when we're developing something, when we're making an app or a product, there's

00:01:06   much of it that is not new or novel in any real sense.

00:01:10   If you're -- the process of taking data, putting it in a database, taking that data out, putting

00:01:16   it in a table view, there's nothing original and special there.

00:01:22   But often if you want to have something, an app that's really compelling or has an interesting

00:01:27   hook to it, you're going to have to do things that are beyond that.

00:01:31   And so in many ways you end up kind of doing this kind of research.

00:01:35   You're kind of inventing something in a real sense of the word invention.

00:01:41   And not every app has to have this, certainly, but it is something that I've found that is

00:01:46   good to have in your toolbox as something that you're not scared to try, that if you

00:01:51   have an idea about I wonder if I could do this kind of -- usually there's some kind

00:01:55   of processing involved.

00:01:57   Maybe it's image processing.

00:01:58   You're working on a camera app and you want to do some kind of image filters or an audio

00:02:02   app and maybe you're doing some audio processing.

00:02:04   Or in my case I'm doing -- I'm analyzing users' movement and heart rate and that kind of thing.

00:02:11   There's usually some kind of processing involved.

00:02:14   And doing this kind of research I think gives your app an advantage, both in terms of it

00:02:21   being more useful to your customers, which is probably far more important, that my goal

00:02:25   with doing automatic sleep detection is that more people will track their sleep more often

00:02:31   because they won't have to remember to start and stop the motion tracking like they do

00:02:35   currently.

00:02:36   It'll just happen automatically, which sounds great.

00:02:40   But it also creates this nice little sort of competitive advantage that there's now

00:02:44   this little moat around your app that anybody who wants to compete feature by feature with

00:02:50   you now has to go through and build it themselves.

00:02:54   They have to do that research.

00:02:56   They have to work out how to do it.

00:02:59   And fair enough, it's easier the second time.

00:03:02   Somebody looking at what you have done, even if they'd never see your code or understand

00:03:07   your methodology, simply knowing that a solution exists with a given set of inputs is a tremendous

00:03:15   advantage versus the number of times that I've gone down a road where I'm like, "I

00:03:18   wonder if I could," and then I spend a week and I work on something and it doesn't

00:03:21   work out.

00:03:22   And so I give up, and that never seems the light of day.

00:03:25   It's easier knowing that a solution does exist.

00:03:27   But it's still a competitive advantage.

00:03:28   It's still a road that they have to go down and work that they have to do.

00:03:33   So it's an advantage in that regard.

00:03:36   And as I was working on my stuff, I was thinking about you, Marco, and how voice boost and

00:03:41   smart speed are two kind of similar types of things that weren't necessarily like

00:03:45   your app was the first one to ever do them.

00:03:47   But the way that you've done them and the work that you did to add those to your app

00:03:53   is now this competitive advantage that you can sort of hold over your competitors.

00:03:58   - Yeah, I mean, I've said before that I think kind of a recipe for a pretty good useful

00:04:06   app that is kind of a good balance between diving in and spending a whole bunch of time

00:04:11   on hard stuff nobody will ever notice versus being really basic and having no competitive

00:04:15   advantage and having no compelling features.

00:04:17   I think a really good balance between those two is do like one or two hard things in your

00:04:23   app.

00:04:24   And everything else doesn't need to be like a hard, impressive, technical thing.

00:04:28   But if you have like one or two, that can really make an app.

00:04:33   And for Instapaper, originally that was the text parser.

00:04:36   And later on I did some Kindle stuff that was a little bit crazy and weird things with

00:04:42   pagination on the iPhone.

00:04:44   But that was a relatively small number of features.

00:04:46   Ultimately the great value of that app was pretty boring stuff.

00:04:51   And then the text parser was like the big one.

00:04:54   And for Overcast, yeah, I think Smartspeed and Voice Boost are pretty significant features

00:04:58   that are hard and require some deep learning, or not deep learning, require like some deep

00:05:07   knowledge of low level audio manipulation and audio mastering and stuff like that to

00:05:13   really do that well.

00:05:15   And I had to learn a lot of that stuff and it was hard.

00:05:19   I happen to like that kind of hard work so it was fun for me.

00:05:22   And it still is fun whenever I work on it today.

00:05:25   But that was really hard stuff.

00:05:26   I had to learn mostly by like Google searches and trial and error of things like DSP audio

00:05:35   processing.

00:05:36   Like how to do that and what I'm actually manipulating with the audio signals and how

00:05:40   not to do it.

00:05:41   And all the different ways to do it that make it sound crappy.

00:05:44   So I can avoid those ways and eventually figuring out ways to do it that sound good or that

00:05:49   can't be noticed.

00:05:52   That is all really hard work but I've always enjoyed that kind of low level data work.

00:05:59   Not necessarily in the sense of big data but just working in low level C functions in performance

00:06:07   critical like large blocks of numbers and operations using things like the accelerate

00:06:13   functions in iOS.

00:06:14   I always like that stuff.

00:06:16   But if I spend all of my time doing that in Overcast I would be unbalanced.

00:06:23   Right now I'm kind of battling with my self discipline.

00:06:27   What I really want to be working on a lot of the time is the work I'm doing for Voice

00:06:31   Boost 2 which is just rarely Voice Boost but just going to sound better and work better

00:06:36   with more stuff.

00:06:37   And that's all this wonderful low level stuff making my own audio processing functions and

00:06:44   everything and it's exactly this kind of thing.

00:06:48   But what my customers actually want is not for me to make Voice Boost 2 for the most

00:06:54   part.

00:06:55   What my customers really want is boring stuff like everybody wants me to give them a smart

00:06:59   playlist that shows all their starred items.

00:07:02   That's a really boring thing that I need to do because that's what they actually want.

00:07:07   Most of the app is boring stuff like that.

00:07:10   Sort of management and basic UI for things.

00:07:14   I still don't have a way for people to change their email address on their account.

00:07:19   Stuff like that.

00:07:20   That's what people actually want.

00:07:22   So it's important when you're doing these kind of cool, fun, low level math type features

00:07:27   or data analysis type features, it's important to make sure you also keep that balance though

00:07:31   of not spending too much of your time on it.

00:07:37   This is kind of cynical but not wasting too much time on stuff that's really hard to market

00:07:43   to people.

00:07:44   One of the reasons why a lot of people assume that Overcast invented silent skipping and

00:07:51   dynamic processing on podcasts is because I was the first one to figure out how to market

00:07:55   those features to people.

00:07:59   That isn't just dumping money into ads.

00:08:03   I didn't actually ever really do that.

00:08:06   Not until very recently have I tried that.

00:08:09   Marketing this kind of feature is about making sure people know it's there and telling them

00:08:16   why it's so good in some way.

00:08:19   And so for these features, I gave them names that were not just plain text descriptions.

00:08:25   I didn't say shorten silences and I didn't say boost the volume or use a dynamics compressor.

00:08:32   I didn't name those features those things.

00:08:34   I gave them branded names.

00:08:36   I trademarked those names.

00:08:38   I put those names on everything.

00:08:40   I added features like it showed you how much time you had saved with the silent skipper

00:08:45   feature because I need to show people that this feature that when it's turned on they

00:08:51   don't really notice is doing something for them.

00:08:54   And all of that was to help market these features that I spent a lot of time on, this low level

00:09:00   fun stuff because otherwise nobody would know they were there and the few people who would

00:09:06   find them and turn them on wouldn't really understand how good they are because they're

00:09:11   both kind of like subtle effects most of the time.

00:09:15   And so they both kind of like they help you out in a subtle way.

00:09:18   But if you don't know that, if you're not being shown or told that in some compelling

00:09:22   way, then a lot of that effort is wasted.

00:09:26   And so it's very important when you're planning these kind of features to make sure

00:09:30   that, A, you're not spending too much time on them to the exclusion of features that

00:09:36   people actually need or want more.

00:09:39   And B, that you're not going to invest a ton of time into something like this that is unmarketable

00:09:43   in some way.

00:09:44   Like you have to include in your planning for features like this how you're going to

00:09:49   communicate the existence and the value of these features to your customers.

00:09:54   - Yeah, and I think what's cool is that once you've done that, like if you work out a way

00:09:58   to communicate to your customer that you do some hard work, you can find a way to communicate

00:10:05   that to your customer, you end up with something that is really compelling in a weirdly insidious

00:10:12   way.

00:10:13   That like I struggle to, I feel bad if I listen to podcast type audio, like long form audio,

00:10:20   without the silences removed now.

00:10:23   Because in my back of my mind, I feel like I'm wasting time.

00:10:26   And so like that is a hook that you now have like placed in me that if I listen to something

00:10:30   long form, I will find a way to turn that into something that I can listen to with something

00:10:36   like Smart Speed.

00:10:37   Just because it's, now that's what I expect.

00:10:41   Because you've wrapped it up, you've wrapped up this kind of original, like it's not original

00:10:45   in the sense that you were the first person to come up with it, but original in the sense

00:10:49   that you had to do a lot of hard low level work to make it happen.

00:10:53   You're not just building, it's not just like AV, you're not just doing your AV player dot,

00:10:59   you know, remove silences equal true.

00:11:02   Like if that was the case, I wish it was that easy.

00:11:04   That would be great, right?

00:11:06   But that's not the case.

00:11:07   You had to do all of this whole cloth development to make it work.

00:11:11   Now you have this great little advantage that, you know, one of the things that would keep,

00:11:16   it keeps me in overcast rather than another podcast player is that I don't want to lose

00:11:21   this thing that I now have.

00:11:23   And so it's this little moat that other people could certainly build it.

00:11:25   It's not like it's technically crazy to build Smart Speed or to build Voice Boost, but building

00:11:33   an app in general is difficult.

00:11:35   And then tackling one of these features is also kind of hard.

00:11:39   So it's just this nice little, undertaking one of these.

00:11:43   I think you're definitely right though.

00:11:44   Be careful that you're like taking on something that you can show, you have something to show

00:11:48   for at the end.

00:11:49   But if you do and it does make sense, it's a wonderful little, it's a wonderful way to

00:11:55   create value that is defensible rather than easily copied by somebody else.

00:12:02   - But it's also, it's important to also realize that nothing is gonna be yours forever.

00:12:06   Like overcast was the only mass market podcast player that had these features for a while.

00:12:13   But now it isn't.

00:12:14   And it never really was the absolute only one, but it was the only really mass market

00:12:19   one.

00:12:20   And now it's not.

00:12:22   And more of them are gonna keep adding features like this.

00:12:27   I had a couple good years there.

00:12:28   It bought me some time.

00:12:30   Similar to Apple with the iPhone launch, the original iPhone.

00:12:33   And Steve famously said that it was five years ahead of the competition.

00:12:36   And that basically proved to be true.

00:12:38   That was roughly correct.

00:12:39   It took Android a long time to reach the minimum quality that the iPhone had years earlier.

00:12:46   And so it buys you some time when you have something like this.

00:12:50   But not necessarily tons of time.

00:12:53   And it's definitely a limited amount.

00:12:55   It will end.

00:12:56   And so it's important not to rest on your laurels and not to assume that something cool

00:13:01   you do is gonna be yours forever.

00:13:03   So maybe that's doing cooler things.

00:13:06   Maybe that's finding other ways to remain competitive in the future.

00:13:11   But keep in mind that when you're deciding what to do, when you're planning on doing

00:13:16   out your app, when you are trying to allocate time, keep in mind again the value of these

00:13:21   features will not last forever.

00:13:23   So let that inform how much time that you allocate to them.

00:13:27   Anyway, we are brought to you this week by Squarespace.

00:13:31   Enter offer code radar at checkout to get 10% off your first purchase.

00:13:35   Make your next move with Squarespace.

00:13:36   Squarespace lets you easily create a website for your next idea with a unique domain, warbiting

00:13:42   templates and much more.

00:13:43   Whether you want to create an online store or a portfolio site or a blog or even a podcast,

00:13:50   Squarespace is an all-in-one platform that lets you do any of those things.

00:13:54   Or all of those things.

00:13:55   There's nothing to install, no patches or updates to worry about, no upgrades to do.

00:14:00   You don't have to worry about any of that stuff because Squarespace has it covered.

00:14:05   And if there's anything that you need help with or if anything goes wrong, they have

00:14:08   award-winning 24/7 customer support if you need any help.

00:14:12   They let you quickly and easily grab a unique domain name when you're getting started.

00:14:15   And all of these award-winning templates they have are beautifully designed for you to show

00:14:20   off your great ideas.

00:14:21   And you can customize the template to your heart's content and really make it yours.

00:14:26   Squarespace plans start at just $12 a month.

00:14:29   And you can start a free trial with no credit card required by going to squarespace.com.

00:14:34   When you sign up, make sure to use the offer code radar to get 10% off your first purchase

00:14:38   and to show your support for Under the Radar.

00:14:40   We thank Squarespace for their support.

00:14:43   Squarespace, make your next move, make your next website.

00:14:47   So now that you've decided that you're going to go down the road of doing some kind of

00:14:50   an original research project to like add a new feature to your app, I was thinking, how

00:14:55   do you, A, it's like there's lots of different approaches I think you can take to something

00:15:00   like that.

00:15:01   And one thing that I wanted to start off talking about is how when I do these types of things,

00:15:05   I always take a very, I guess you'd call it the empirical approach rather than the theoretical

00:15:11   approach that I try and just, you know, I get in there and I just start to build things.

00:15:18   I try a lot of things and just experiment.

00:15:21   I just try and generate a lot of data as best I can and then run, you know, test cases through

00:15:31   my system, whatever it may be, because I find that I'm just not very academic.

00:15:36   And I used to, I think earlier in my career, be intimidated by the fact that I just wasn't

00:15:43   particularly academic in that way, that I'm not coming at it from a, you know, a theoretical

00:15:48   approach that I'm then trying to work out how to implement.

00:15:53   In many ways, I start with implementations.

00:15:54   I start with just like, well, let me see if this works.

00:15:56   Well, let me see if this works.

00:15:58   And I, in theory, a theoretical approach would help you get to the right solution more directly,

00:16:05   or at least in a more straightforward way.

00:16:07   But I would encourage anybody who's slightly intimidated by the feeling that, oh, man,

00:16:13   it's like this needs to be super theoretical.

00:16:15   It's like, maybe, depending on what you're working on, but often a more direct empirical,

00:16:21   just like kind of do your best approach will often get there.

00:16:26   And in my experience, you know, gets you there well enough and can allow you to create these

00:16:31   features without needing a lot of theoretical knowledge, without a lot of deep, and potentially

00:16:35   like the deep understanding.

00:16:36   You may not understand exactly why a particular method is working, but it can work for you.

00:16:42   And you could argue whether that's good or not, but I found it to work well.

00:16:46   So just an encouragement is don't be too scared of things if you can just sort of approach

00:16:51   them more directly.

00:16:52   Yeah, I too am pretty weak on the academic side.

00:16:57   I'm especially weak in the advanced math, really.

00:17:01   Things like calculus, I really never took or, well, I took it but failed it.

00:17:07   Most of the advanced linear algebra stuff, I have a very, very weak understanding of.

00:17:12   Really almost all advanced math, I really just either never took in college and just

00:17:16   never learned it afterwards, or I took it and took it so poorly that I really just know

00:17:21   nothing about it.

00:17:22   So whenever I'm looking up online, looking up some kind of algorithm, and I start to

00:17:27   see the mathematic notation, I'm just like, "Aw, crap.

00:17:30   I'm probably not going to figure this out."

00:17:32   And sometimes I try and plow through, and the simpler ones I can kind of work out the

00:17:37   pseudocode of how to do in my language that I know what they're trying to tell me how

00:17:42   to do.

00:17:43   But once something comes to, "Oh, you have to read these academic papers to understand

00:17:49   how to do this algorithm," or something, that's usually when I bail out because I try sometimes,

00:17:54   but I can't usually get through them.

00:17:58   So what I do with a lot of my approaches to these hard math or data problems is really

00:18:04   fairly simple things.

00:18:06   I'm pretty good at coming up with, just off the top of my head, coming up with some kind

00:18:10   of heuristic of like, "Oh, maybe if I look for this pattern and I give it some kind of

00:18:16   weight in a scoring algorithm, that maybe this will be better."

00:18:22   And sometimes that works, most of the time it doesn't, but occasionally I get something

00:18:25   out of it that is pretty useful.

00:18:28   And that's how I tend to do these kind of things.

00:18:31   It's basically like trial and error to develop some kind of heuristic or algorithm that is

00:18:37   really not a very mathematically advanced algorithm.

00:18:41   It's really just large amounts of dumb math, large amounts of basic arithmetic.

00:18:48   That I can do.

00:18:49   But you don't need necessarily an advanced knowledge of sophisticated math and the more

00:18:58   advanced stuff.

00:18:59   That being said, I do think my lack of knowledge there holds me back to some degree.

00:19:04   There's a lot of statistical methods, things like, especially when dealing with things

00:19:10   like large data sets, dealing with things like data clustering and statistical analysis

00:19:15   of large pools of data.

00:19:17   I basically don't understand any of that.

00:19:19   And that is holding me back to some degree.

00:19:22   So I do want to get better at some of that stuff, but ultimately you don't necessarily

00:19:26   need to if you can't or don't want to.

00:19:29   You can get pretty far without the knowledge of some of that advanced math stuff.

00:19:34   And the thing that's key there is that your solution may not be optimal, but you may get

00:19:40   a solution.

00:19:41   I mean, in a weird way, it makes me think of how if you didn't understand what multiplication

00:19:49   was but you knew how to do addition, you could still end up with the same result.

00:19:53   You're right in a for loop that just adds a bunch of times.

00:19:56   Sure.

00:19:57   Which is obviously kind of a trivial example of this, but that is often I think the impression

00:20:03   that I have is that often my approach is repeated addition rather than multiplication because

00:20:07   I don't understand the higher concept.

00:20:09   But you don't get a—I still end up with 20 with four times five.

00:20:15   I just may—the fact that I add five to itself four times versus just being able to do it

00:20:20   directly with multiplication, that's less efficient, but the answer is the same.

00:20:24   It's still 20.

00:20:25   And computers are so fast.

00:20:27   Even on our phones and our watches, microprocessors these days are just so ridiculously fast that

00:20:32   for a lot of problems like this, even if you just have kind of like a brute force solution

00:20:39   or even if it's like an imprecise solution, that is probably both fast enough and good

00:20:44   enough for a lot of times.

00:20:46   Yeah.

00:20:47   And so, you know, it's—which is an encouragement that it's like, yeah, it's like you—it's

00:20:51   okay and that's like that's fine and it's, you know, as with any—a lot of these kind

00:20:55   of discussions you can get into like is it well—well, is it certainly better or is

00:20:58   it more efficient to have a more theoretical approach or fundamental understanding?

00:21:02   Of course.

00:21:03   But, you know, if—in order to gain that level of understanding, you almost certainly

00:21:08   have to be—spend a lot more time and, you know, like to become an expert in that area

00:21:16   is going to take a lot of time and be a lot of distractions away from other things.

00:21:19   So it may not be worth getting that level of understanding.

00:21:23   So you know, just worth keeping in mind.

00:21:25   Yeah, definitely.

00:21:26   In terms of the actual building of these things, I think it seemed worth actually sort of diving

00:21:30   into the way that—the approach that I've taken.

00:21:32   Like I'll talk to my recent example with automatic sleep tracking where—so, you know,

00:21:39   I'm going to add this to an app.

00:21:41   My usual approach is to create a completely separate app.

00:21:45   I've tried—and eventually it'll end up being a branch in the main app, but usually

00:21:49   I just create a completely new app that has none of the overhead, none of the other things

00:21:55   going on.

00:21:56   And mostly I do that because then I can just kind of—if I go down a bad line of thinking

00:22:03   and it just ends up in a dead end, I can just throw it away and start again.

00:22:06   And it's easier, I find, for me to just kind of have the super focused, lightweight

00:22:11   app.

00:22:12   You know, I don't need to go to a particular place in the app.

00:22:14   Like often I end up doing stuff just in the view to finish launching.

00:22:18   Like it's basically a command line app just running on an iPhone.

00:22:21   Like you end up doing that kind of thing where you make it as quick and as simple as possible

00:22:26   and it's focused in on exactly what the problem is.

00:22:30   I find that to be a very helpful approach.

00:22:32   I tend to do my work there to validate that something is possible.

00:22:38   And then I'll start to work on how will I take that and turn it into the final version.

00:22:44   And that first version I have no consideration at all to code quality.

00:22:49   Often I will completely throw that code away.

00:22:52   I will end up reimplementing it just using all the lessons I learned from all of that

00:22:58   throwaway code.

00:22:59   But by taking such a quick and dirty approach to it, it means that I can work much more

00:23:03   quickly and iterate on it.

00:23:05   That I don't need to feel like I'm writing code that is going to end up needing to be

00:23:09   production quality.

00:23:11   I can ignore all the errors.

00:23:12   I can just sort of make it so that it just works on exactly what I'm trying to do.

00:23:17   So in this case, I have built a separate app that tries to automatically detect and analyze

00:23:25   sleep data out of all the various health inputs that we have.

00:23:31   And I just sat there and iterated on that until I got it to work.

00:23:34   And now I'm going through the process of actually turning that understanding and the data that

00:23:40   I can get out of that, completely reimplemented from scratch that all those algorithms and

00:23:46   methods that I came up with again.

00:23:48   In this case, it was actually slightly amusing, because I built my prototype app in Swift.

00:23:53   And then my C++ is an Objective-C app.

00:23:56   And so I was going to reimplement it anyway.

00:24:01   And it actually kind of worked well to keep me from being lazy and just copy/pasting things

00:24:04   that I actually went through and had to be thoughtful in that translation from the prototype

00:24:10   app to the actual app to make sure that I'm actually taking care of all the edge cases

00:24:14   and things.

00:24:15   That's an approach that I find works pretty well.

00:24:18   And then once you can get it into the app, then you can actually start working through

00:24:22   the actual-- making it of a higher quality.

00:24:26   But I find doing it and developing and prototyping in a separate app and then moving in once

00:24:31   you kind of have the basics worked out works pretty well for me.

00:24:35   So I'm curious, because I think it goes back to our competitive advantage argument earlier.

00:24:41   Why are you adding this feature?

00:24:43   Mostly because I think it makes the app better.

00:24:46   And I think I wish I did it.

00:24:49   And I know I often hear from people who use my competitors' app because they do it.

00:24:54   And it turned out to be much easier than I thought it was going to be.

00:25:00   I had in my mind that it was going to be really hard, and so I'd been putting off working

00:25:03   on it.

00:25:04   And because I have a lot of existing sleep data calculated in my old method, I was able

00:25:11   to much more quickly, I think, work out a way to process all this data and end up with

00:25:16   very similar results because I could just kind of try lots of things, and I could very

00:25:21   quickly see if it worked or wasn't going to work.

00:25:24   And I think it's a competitive advantage.

00:25:26   And I know it's a feature that I will use myself.

00:25:29   The ability to have your Apple Watch just track your sleep without-- all you have to

00:25:33   do is wear it while you sleep, and then it's all taken care of.

00:25:37   And so I think it's an advantage in that regard because you'll actually use the app more because

00:25:41   right now you have to remember to use it, which is always difficult.

00:25:45   - Yeah, and that makes a lot of sense.

00:25:47   That obviously is a compelling feature.

00:25:49   And I've heard podcasts where people talk about how they're comparing your app to one

00:25:54   of the competitors that does automatic stuff, and I thought, "Oh, that sounds compelling."

00:25:57   But I too would have assumed that was really hard.

00:26:00   And that's also kind of another, I think, maybe a good closing note here is a lot of

00:26:04   the-- if you're a developer and you think of or you see some other app or you think

00:26:10   of a feature that you want to do that sounds really hard or impossible, try it because

00:26:15   it might not be.

00:26:17   Like I first thought that doing pagination in Instapaper would be really hard, and it

00:26:22   turned out it really wasn't.

00:26:24   Similarly, if you think like, "Oh, I would love to do this kind of analysis on some feature

00:26:29   but with data, but the iPhone probably can't handle it.

00:26:34   It's probably too computationally intensive."

00:26:37   Try it because it might not be.

00:26:40   But that's another area where I've found like I always assume that, "Oh, maybe I probably

00:26:44   can't do things like run a live FFT on the audio stream without having a big battery

00:26:49   impact."

00:26:50   And the answer a lot of times is, "Nope, you totally can.

00:26:53   It's totally fine.

00:26:54   These devices are really fast these days."

00:26:56   >> Yeah.

00:26:57   And it's just kind of a nice thing to be-- like there is something just really fun and

00:27:03   encouraging when you hit on something that you thought would be really hard that actually

00:27:07   turned out to not be crazy hard.

00:27:09   And that was a really fun thing.

00:27:10   And it speaks to actually the last thing that I want to mention too is I've found tremendously

00:27:14   valuable as quickly as I can working out how to visualize the problem that I'm working

00:27:19   on in a way that I can see rather than just data that's being NS logged out to the console.

00:27:26   >> That's a good tip.

00:27:28   >> In a lot of my apps, like in this case with sleep tracking, it's essentially very

00:27:33   timeline-based.

00:27:34   I'm looking at a variety of inputs over time.

00:27:37   And so I just have a really simple app or a view controller that just has a scroll view

00:27:42   in it.

00:27:43   And all of the data points that I have on it, I just create a UI view and I throw it

00:27:47   into it, which is horrifically unperformant.

00:27:50   I have like 10,000 UI views in one scroll view, but it's fine.

00:27:56   There's better ways to do graphing, like actually doing pagination and stuff.

00:28:00   So I'm only rendering the stuff that I need to, but it's fine.

00:28:03   It's in this prototype app.

00:28:04   But visualizing it, making it so that I can see the connections.

00:28:07   And in this case, I ended up visualizing the outputs of my first couple of attempts and

00:28:13   aligning them with the outputs of my previous method, and they lined up perfectly.

00:28:17   And I was like, "Well, this works.

00:28:19   Well, that's amazing."

00:28:21   And so visualizing that as quickly as you can is just something that I can't emphasize

00:28:25   enough.

00:28:26   And I know this is something I think I saw you were talking about with your voice boost

00:28:30   too stuff.

00:28:31   You do the same thing.

00:28:32   As soon as you can see it, it's both motivating in terms of encouraging you that you're

00:28:37   on the right track as well as very quickly showing you the areas that aren't working

00:28:42   and the things you need to change.

00:28:43   >> Enoch - Exactly.

00:28:44   It makes a huge difference.

00:28:45   >> Michael - Yeah.

00:28:46   But anyway, so go forth, do some original research, try and not be intimidated by things

00:28:53   that you think are too hard, and see what you can come up with.

00:28:56   Because I think if you can come up with these things, and it turns out that they're easier

00:28:59   than you thought maybe, it creates a tremendous value in your app that I think, especially

00:29:07   as a smaller team or as a smaller developer, there is a tremendous advantage to having

00:29:11   these little things that are hooks, that are marketing lines, that are reasons why someone

00:29:17   might want to try your app versus something else.

00:29:19   >> Enoch - Thanks for listening everybody, and we'll talk to you next week.

00:29:22   >> Michael - Bye.

00:29:23   [BLANK_AUDIO]