PodSearch

Under the Radar

Under the Radar 7: Building New Features

 

00:00:00   welcome to under the radar a show about

00:00:02   independent iOS development I'm Marco

00:00:04   Arment and I'm David Smith under the

00:00:06   radar is never longer than 30 minutes so

00:00:08   let's get started so today what we

00:00:11   wanted to kind of unpack is the process

00:00:15   that we go through when we're building a

00:00:17   feature out in an app it's not like the

00:00:20   whole app itself like starting from I

00:00:22   have this you know have this vague idea

00:00:23   for something and now let's go like go

00:00:24   to Xcode and start a new project but as

00:00:27   you know as a product as an app

00:00:30   developed and gets better over time

00:00:32   you're going to inevitably have these

00:00:33   little like huh here's this feature I

00:00:36   have here's this thing that I want to do

00:00:37   and I want to you know to add it in and

00:00:41   the way in which you go about that is

00:00:43   something that is requires a different

00:00:45   kind of level of concern or planned

00:00:47   fulness then you're just starting from

00:00:49   scratch because obviously you're

00:00:50   smashing it into an existing piece bit

00:00:52   of code and also just the constraints

00:00:55   around what you're doing are different

00:00:57   and recently I ran into something where

00:00:59   I thought it was an interesting kind of

00:01:00   progression that I found that I was

00:01:01   going through I mean I was adding a

00:01:03   feature to sleep plus plus which is my

00:01:05   Apple watch sleep tracker basically I

00:01:07   wanted to be able to you record your

00:01:09   night's activity and you end up with

00:01:10   like a graph of how well you slept and

00:01:12   people asked feature I got many many

00:01:14   times like I want to be able to trim the

00:01:16   night at the end of the at the end of

00:01:18   you know it says if I wake up in the

00:01:19   morning and I don't stop it right when I

00:01:21   wake up I wanted to say actually I woke

00:01:22   up at this time seems a very reasonable

00:01:25   feature the thing that I found was

00:01:27   interesting is I went through the

00:01:28   process of building this out and so it's

00:01:29   like now it's basically a part of the

00:01:31   app is I tend to go kind of I start off

00:01:35   with like huh that's an interesting idea

00:01:36   how would I build that and then I kind

00:01:39   of I tend to work a little bit like from

00:01:41   the bottom up and the top down when I'm

00:01:44   working on a feature like this which is

00:01:46   seemed kind of funny like I started the

00:01:47   data level and start being like what

00:01:49   data would I need to record how would I

00:01:50   record that what migrations do I need to

00:01:52   do in my database what changes will I

00:01:54   have to make there and I start building

00:01:56   the basic structure for that on the

00:01:57   bottom and then I start on the top top

00:01:59   down in a really simplistic way like I

00:02:01   start off with what's the UI going to

00:02:03   look like but I don't actually build

00:02:05   that UI I just take whatever stock

00:02:07   control I can find like I think in this

00:02:09   case I took a UI slider threw it into

00:02:11   interface builder

00:02:13   that up to that apply to transform to it

00:02:15   cuz I needed it to slide vertically so I

00:02:17   just like rotated it by 90 degrees and

00:02:19   that was my basic control eventually I

00:02:22   ended up replacing that with a whole

00:02:23   custom UI and all kinds of things like

00:02:24   that but starting in that sort of top

00:02:27   down as simple as I can on the UI side

00:02:29   and then as robust as I can on the

00:02:32   bottom side is something that it seems

00:02:34   to work for me and it's an approach

00:02:37   though that I found that if like if I

00:02:39   don't if I can't end up with something

00:02:40   that I can use and can start playing

00:02:42   with quickly that's why I sort of the

00:02:43   top down is important from like just

00:02:45   really basic simple UI I really struggle

00:02:48   with actually getting things done did

00:02:50   you have a similar experience for me it

00:02:53   like any any feature that I that I want

00:02:56   to build

00:02:56   I always just build it as quickly as I

00:03:00   can and start using it myself and you

00:03:02   know my process or like we talked a

00:03:04   little bit about betas in previous

00:03:05   episodes and everything my process for

00:03:06   forward testing out features is really I

00:03:09   just test them out myself for as long as

00:03:12   I can before I show them to anybody else

00:03:13   at all before I even said into beta

00:03:16   testers usually like you know an

00:03:17   overcast I mentioned last in last

00:03:19   episode I mentioned that that voice

00:03:22   boost started out as as having different

00:03:24   levels it was not just an honour and off

00:03:26   switch it actually had multiple modes

00:03:28   and I lived with that for months before

00:03:33   I showed anybody else before the beta

00:03:35   started and everything and and I really

00:03:36   I did a similar thing I mean like you

00:03:38   know my UI for controlling these things

00:03:40   is mostly just stock UI kit I very

00:03:43   rarely make custom controls or what I do

00:03:46   they're usually pretty lightweight

00:03:48   subclasses of the built-in buttons and

00:03:50   labels and sliders and stuff like that

00:03:52   or I you know they might just be like a

00:03:55   slight wrapper with like with one of

00:03:57   those as a subview and then and and you

00:04:00   know like a few of the labels here and

00:04:02   there but for the most part I'm using

00:04:04   mostly stock stuff because you can get

00:04:05   really really far with stock components

00:04:09   in a UI kit especially with all the all

00:04:11   the custom appearance stuff that they've

00:04:12   added in the last few OS versions really

00:04:14   I have found very little reason to to

00:04:17   really build out tons of custom control

00:04:20   stuff and and I've instead focused on

00:04:22   like just skinning UI kit well and so

00:04:25   yeah and so when I when I build these

00:04:26   features I mean

00:04:27   voice boost as I mentioned it used to be

00:04:29   it used to have four levels

00:04:31   it used to be off reduce enhance and

00:04:35   boost and I went I was about to launch

00:04:38   with this I really thought this was

00:04:39   gonna be what I launched with and I had

00:04:42   rationales for all of them

00:04:43   so the reduce mode would actually cut

00:04:46   off it was actually a high-pass and

00:04:48   low-pass filter it would actually cut

00:04:49   off big chunks of the top and bottom end

00:04:52   for podcasts that were produced with

00:04:54   flaws with either way too much bass or

00:04:57   sometimes sometimes a lot of sometimes

00:04:59   podcasts would have like very high

00:05:01   pitched noise and so I thought a reduced

00:05:04   move would actually be useful and then

00:05:06   and in the the volume boosting modes I

00:05:09   actually had to I had enhance and boost

00:05:11   and it was just two different degrees of

00:05:13   the same thing really of the the EQ and

00:05:16   the compression and with boost being a

00:05:17   much more aggressive compression setting

00:05:19   what I found in the beta was people were

00:05:21   very confused by this because it just

00:05:23   labeled dynamics reduce off enhanced

00:05:26   boost like okay what does dynamics mean

00:05:29   you know somebody who is not an audio

00:05:31   engineer is that referring to motion

00:05:33   like what it was it was a very confusing

00:05:35   thing people were confused as to why

00:05:37   they would ever want to reduce the

00:05:39   dynamics of something and between

00:05:41   enhance and boost well what does that

00:05:42   mean is this like enhanced like CSI

00:05:44   where you're uncovering detail that is

00:05:46   magically there somehow you know and it

00:05:49   doesn't really communicate that

00:05:50   enhancing booster basically two

00:05:52   different dynamics of the same thing it

00:05:55   was a very confusing feature and I

00:05:57   didn't you know I mentioned last time I

00:05:59   didn't see the confusing aspect of it

00:06:01   because I made it and so I knew what it

00:06:04   was I didn't have to explain to myself

00:06:06   what it was my tester started started

00:06:08   seeing this and seeing that it was

00:06:09   probably you know not ideal one day

00:06:12   during testing I I just mocked up a

00:06:14   quick little thing where I realized that

00:06:16   I was just leaving it in boost most of

00:06:18   the time because after trying to there

00:06:19   options here and there during

00:06:21   development

00:06:21   I discovered that boost was just the

00:06:23   best one and that's the way I wanted to

00:06:26   leave almost everything like I almost

00:06:28   never wanted any of the other options so

00:06:30   that's when I decided you know what I'll

00:06:32   solve two problems I'll solve the the

00:06:34   intuitiveness problem and and the UI

00:06:37   understandability problem with what this

00:06:38   feature actually is

00:06:40   and you know I don't actually want these

00:06:42   other modes you know in practice I find

00:06:44   out this isn't that important so I'll

00:06:46   cut I'll cut those features I'll make it

00:06:48   one button

00:06:48   it's either boost on or off and I call

00:06:50   it voice boost mostly because it wasn't

00:06:52   being next to smart speed so it needed

00:06:54   two words because it would look weird if

00:06:55   it only had one this is how I make

00:06:58   future decisions important yeah yeah and

00:07:01   and and that's how that feature came to

00:07:03   be and I'll see if I can put a link in

00:07:05   the show notes of I always take

00:07:07   screenshots along the way of designing

00:07:09   the app and so I had this whole history

00:07:12   of like how the app looked in various

00:07:14   stages of development and who all

00:07:15   prototyping various features and so I

00:07:17   actually have a screen shot of it with

00:07:18   these four features and I'll show you

00:07:20   the effects pane with this and then you

00:07:21   can you can see like how the one I went

00:07:24   with with just the two big buttons was

00:07:26   so much simpler that's a lot of very

00:07:29   long-winded way of saying that I I kind

00:07:32   of evolve features as much as I can both

00:07:35   using it myself and then showing beta

00:07:36   testers before I before they ever get to

00:07:39   the public and I think it's very

00:07:41   important not only to to have that

00:07:44   process when adding features but also to

00:07:47   really consider like you know if I had

00:07:49   if I had released this the way I

00:07:51   originally I originally had it with

00:07:52   these four different options and then

00:07:54   later decided what I decided are in the

00:07:56   data that you know this actually she

00:07:57   don't really just be one thing then

00:07:59   that's a feature removal to a lot of

00:08:01   people who use the other ones and then

00:08:02   and you got to go into that very

00:08:04   carefully and I'm not one to avoid

00:08:07   feature removals

00:08:09   I have often angered people by removing

00:08:12   features but it is it is a lot harder to

00:08:15   remove features politically after you've

00:08:17   already shipped them to people so I

00:08:18   think one thing to also consider is like

00:08:20   how do you remove a feature from an app

00:08:23   and how do you how does that how do you

00:08:26   decide when to do that when is the right

00:08:28   time to do that and and how do you

00:08:29   manage user expectations and user

00:08:32   feelings about that

00:08:33   yeah and I think it also speaks a little

00:08:35   bit to one of the something that you

00:08:37   have to get you're used to is that you

00:08:40   are inevitably going to build features

00:08:42   that won't ship that you're gonna build

00:08:45   stuff that ultimately just doesn't work

00:08:48   out and I think there's a certain amount

00:08:51   of just like distancing yourself from

00:08:53   your work enough that you can

00:08:54   look at it like I feel definitely gone

00:08:56   on this path where I'm thinking hey this

00:08:57   is hey this would be an awesome new

00:08:59   feature and especially this is dangerous

00:09:00   when it's a really interesting technical

00:09:02   problem mmm like I think I have this

00:09:04   really cool solution to a problem I'd go

00:09:07   down this go down the path and I started

00:09:09   adding though these features and it's

00:09:10   like building it all out

00:09:11   and you get to the end and you're just

00:09:12   like it's a really interesting salute to

00:09:14   a solution to a problem that people

00:09:16   don't actually have or it makes the gap

00:09:18   really harder to understand or more

00:09:21   complicated or less intuitive and at the

00:09:23   end being able to say like you know I

00:09:25   just need to throw this away like that

00:09:27   was that's a dead end

00:09:28   like that is just not gonna go anywhere

00:09:31   and in like having done that now so many

00:09:35   times where I'll create this you know

00:09:36   create this branch go down it and then

00:09:38   end up deciding that this is actually

00:09:39   not gonna work I'm just gonna throw it

00:09:41   away is definitely an encouragement and

00:09:43   a reminder to not spend too much time on

00:09:45   things to in terms of trying to quickly

00:09:48   get to a point that you can really

00:09:50   evaluate how useful something is because

00:09:53   it's there's so many things that in my

00:09:55   head

00:09:55   sound like they'll be really cool and

00:09:56   really fun and when you implement them

00:09:58   like don't really aren't actually as

00:10:01   useful as you think or the the more like

00:10:04   good and bad situation is when you'll

00:10:05   show it to somebody and like they'll

00:10:08   you're sure you'll give them something

00:10:09   to react to and their response is like

00:10:11   huh that's interesting why doesn't it

00:10:14   just do this and they make it sort of

00:10:16   like there's this like that clarifying

00:10:18   simplification that you're just not

00:10:20   seeing because you're deep down in the

00:10:22   weeds of the coolness of the feature or

00:10:25   what like in this petit on this

00:10:27   particular track and it turns out a much

00:10:29   better solution is it's like in this

00:10:31   case with with voice boosts it's like

00:10:32   you're the dynamics and things I think

00:10:34   are it's like it's really these are

00:10:35   really interesting and optioned

00:10:37   interesting options that you could kind

00:10:38   of go down but at the end it's like

00:10:40   really what people want is to make it

00:10:42   louder so they can hear voices clearer

00:10:44   and so you just need on and off and

00:10:47   that's probably but good enough and you

00:10:49   have to be willing to say like you know

00:10:51   all the other stuff that I was doing

00:10:52   like the really sophisticated dynamic

00:10:55   stuff with like okay

00:10:56   maybe I just don't ship that because

00:10:57   it's just gonna make it more confusing

00:10:59   rather than actually better for most

00:11:01   people right because that was it was

00:11:03   exactly the kind of thing where like it

00:11:04   was technically interesting it was

00:11:07   technically impressive you know not

00:11:08   a lot of podcast apps have enhanced

00:11:10   dynamics and and EQ controls and

00:11:12   everything so it was it was like a cool

00:11:14   thing to do if I would have shipped that

00:11:17   because I it was kind of like showing

00:11:18   off

00:11:19   my audio engine and my audio

00:11:21   manipulation skills I guess but in

00:11:24   reality that was really just showing off

00:11:26   for my benefit and and it wasn't hot

00:11:28   like it was actually me it would be

00:11:30   making the app worse to ship it that way

00:11:32   because it was more confusing because as

00:11:35   you said like not a lot of people really

00:11:36   had that problem very often not even I

00:11:39   had the problem often enough to use my

00:11:40   own feature very much so it's it really

00:11:43   does take a lot of editing and I feel

00:11:46   like there's there's a good balance to

00:11:47   be struck here between but the way I do

00:11:50   it I move pretty slowly and like you

00:11:53   know with streaming like I was I had

00:11:55   streaming working to to varying degrees

00:11:58   of work probably three months before I

00:12:01   shipped it but I wanted that very long

00:12:03   testing period because I wanted to be

00:12:04   very conservative with it they have a

00:12:06   lot of time just using it on my own

00:12:07   phone before I even gave it to testers

00:12:10   let alone to the public and at the on

00:12:12   the other side the other extreme of this

00:12:15   of like the the feature deployment speed

00:12:17   here is kind of like they get the kind

00:12:20   of like continuous release paradigm

00:12:22   where you just kind of ship something

00:12:23   out there as quickly as you possibly can

00:12:25   as soon as you have the idea for it and

00:12:27   see if it takes maybe do some a be

00:12:28   testing or you know see what people's

00:12:30   reactions are I feel like the the the

00:12:32   better balance is somewhere in the

00:12:33   middle of those things I feel like I

00:12:35   move too slowly the way I do things but

00:12:37   something like that where you're

00:12:39   constantly adding or moving things it

00:12:41   makes it first of all it makes it harder

00:12:42   to remove things but and second of all I

00:12:44   think I think you you increase the the

00:12:47   annoyance rate of your users like when

00:12:50   you do things like when Twitter rolls

00:12:52   out a new feature and it goes out to a

00:12:54   random subset of people first and

00:12:55   everyone else hears about it like wait

00:12:57   why don't I have this or why is my

00:12:59   timeline all of a sudden different or

00:13:00   you know why does this not work the way

00:13:02   I expected to and everyone else's works

00:13:04   fine these two extremes of like when how

00:13:06   often you ship things how how much

00:13:08   testing you do internally versus just

00:13:10   ship into the public and seeing what

00:13:11   they think first there is a healthy

00:13:14   balance to be struck between those two

00:13:15   extremes I haven't started but III think

00:13:17   I would rather be on the if unbalance in

00:13:21   that way

00:13:22   I think I'd rather be unbalanced in the

00:13:23   direction that I am which is on the on

00:13:25   the side of being too conservative and

00:13:27   too slow because ultimately I want my

00:13:29   app to always have a reputation of being

00:13:32   carefully considered yeah and I think

00:13:36   honestly that the app store itself is

00:13:38   structured such that you can't do

00:13:40   continuous release in a in a functional

00:13:44   way because your app it always has to go

00:13:47   through a preview which can take a

00:13:48   non-deterministic amount of time at

00:13:50   least about a week and you have to be

00:13:53   able to you can only ship things to the

00:13:56   store that you can live with for at

00:13:58   least a week probably which depending on

00:14:02   which were the kind of change that

00:14:03   you're rolling out and the significance

00:14:05   of it or like if there's a problem with

00:14:07   it if you have to have a certain amount

00:14:09   of conservatism to make sure that you're

00:14:11   not putting something out there that is

00:14:13   going to be very problematic for your

00:14:14   product that if for a week it's horribly

00:14:17   broken or really confusing like you

00:14:19   can't just change that you know could

00:14:21   like continuous deployment and things

00:14:23   works great for an app like a web app or

00:14:25   something that you can change in real

00:14:26   time or in many earth-like if you're in

00:14:28   the Google Play Store for example you

00:14:30   can do something like that a lot more

00:14:32   there because you can bro out updates

00:14:33   more quickly but in general it's

00:14:37   definitely something that you have to be

00:14:38   thoughtful about and understand that

00:14:40   it's going to like this is going to go

00:14:41   out and you have no control over

00:14:43   necessarily when someone's going to be

00:14:45   able to change and so I mean you can

00:14:48   certainly go down the crazy roads where

00:14:50   you Bill have like a be testing built

00:14:52   into your app and it has multiple code

00:14:53   paths and things but that just seems

00:14:55   like a nightmare to me but it's

00:14:57   definitely something that I think I'm

00:14:59   more on the release things quicker

00:15:01   approach that like I tend to bite off

00:15:06   nice small things focus on them get them

00:15:09   like working and then put it out there

00:15:11   and in general I think that seems to

00:15:15   work for me and I think mostly of

00:15:16   something that even it's just an

00:15:17   attention span thing look I really

00:15:18   struggle to like when I hear you talked

00:15:21   about working on features for months

00:15:22   like that is really intimidating to me

00:15:25   because I think I would lose interest

00:15:27   and once I got it so like once I get

00:15:29   something working all the crazy edge

00:15:31   cases are harder for me to have the

00:15:33   discipline to track down and so I tend

00:15:35   to

00:15:36   just focus and simplify the problem down

00:15:37   to a point vet oh look all the edge

00:15:39   cases seem to have sort of fallen off as

00:15:42   best I can which is a different kind of

00:15:44   approach but I found kind of works for

00:15:46   me well I mean that's honestly that's

00:15:48   probably the more healthy approach is

00:15:50   you know to ship something that is that

00:15:53   is smaller but complete and chip that

00:15:56   faster rather than wait until you have

00:15:58   something that is complete but is big

00:16:01   and sprawling and that there then and

00:16:04   then that takes six months you know like

00:16:05   that yeah I think your approach there's

00:16:06   probably the healthier one yeah but it

00:16:08   requires I guess some of it too and

00:16:12   maybe is its it's the interesting thing

00:16:13   of trying to decide a most interesting

00:16:15   direction to ship the conversation to is

00:16:17   how do you tell me how we decide what

00:16:20   features to add I think is it really

00:16:22   interest it's like it's a very

00:16:24   complicated set of variables that I find

00:16:27   that I'm balancing for these days where

00:16:28   on the one hand you have the desire to

00:16:32   make something good to ship a good

00:16:34   product to ship software that's useful

00:16:35   that people like you have the constraint

00:16:38   and that you're trying to optimize for

00:16:40   around like business model and business

00:16:42   plan like well adding this feature

00:16:44   increase the number of people who are

00:16:48   using my app or paying for my app or in

00:16:50   some way contributing to the bottom line

00:16:52   in my business is this feature something

00:16:55   that's going to motivate me and make me

00:16:56   interested and trying to balance the

00:16:59   sort of attention between those is I

00:17:01   think more definitely more art than

00:17:03   science because there's not at least at

00:17:06   least I haven't found a good way to

00:17:08   really know that other than just like

00:17:09   this feels right like every now and then

00:17:12   I'll get asked by people you know like

00:17:14   how do I plan releases like how do I

00:17:16   said do I sit down like not like I

00:17:18   wanted to do like some kind of waterfall

00:17:19   think but do I have like a big release

00:17:21   plan like you would you probably need to

00:17:23   have if you were trying to apply a team

00:17:25   of developers onto something and it's

00:17:27   like I tend to just sit down and look at

00:17:29   my apps and be like what could be made

00:17:30   better

00:17:31   what would I enjoy building well that

00:17:33   and then think about huh I suppose that

00:17:36   might make people like the app more and

00:17:37   then go with it but then you're also

00:17:39   more often than not I'll look at an app

00:17:41   and be like the apps kind of done like

00:17:43   maybe I should just leave it and work on

00:17:45   you know move on to the next step and I

00:17:47   guess that's why I end up with so many

00:17:48   apps but

00:17:49   like trying to decide what features

00:17:50   worth actually doing is really hard

00:17:53   deciding when an app is is basically

00:17:56   done or doesn't need massive attention

00:17:58   for at least a little while that is a

00:18:00   skill that that I think iOS developers

00:18:03   need and many of us myself included

00:18:06   often don't do it right or don't have

00:18:08   that skill because the economics of iOS

00:18:11   are such that you really do have a much

00:18:15   better chance of success if you have

00:18:16   multiple apps and the the additional

00:18:20   value that you will get sales wise or

00:18:22   money wise the additional value you will

00:18:24   get out of doing a big feature update to

00:18:27   an existing app might not be worth the

00:18:30   effort that it will require to be put

00:18:32   into that to do and a lot of a lot of

00:18:35   people want the the the model of just

00:18:38   having one app that they work on forever

00:18:40   well not forever but the you know one

00:18:42   app that they pour tons of time into

00:18:44   polishing everything up and and being

00:18:46   able to live off just that one app and

00:18:48   that is that is very rare to actually

00:18:51   have that in the App Store and and to be

00:18:54   successful at that not because you know

00:18:57   Apple is is keeping us all down or

00:18:59   anything but because in most cases most

00:19:03   apps you hit you hit a wall of

00:19:05   diminishing returns where like the most

00:19:08   people's needs are satisfied by it who

00:19:11   will find it and who will want it and

00:19:13   who will pay for most people's need to

00:19:15   get satisfied pretty early on in

00:19:16   development and then you're just kind of

00:19:17   like adding stuff just really for your

00:19:21   benefit trying to make the app better to

00:19:22   boost sales or to get more press at some

00:19:25   point or get it to get upgrade revenue

00:19:27   maybe at whereas the customers really

00:19:29   aren't in great need of those things and

00:19:32   the best example of that kind of thing

00:19:33   is Microsoft Office and you see like

00:19:35   over time all the all the challenges

00:19:38   Microsoft faced over the last 20 years

00:19:40   of like just trying to get people to buy

00:19:42   office upgrades and and when everyone's

00:19:45   sitting around saying you know what

00:19:46   Microsoft Wars been working fine for me

00:19:48   I don't really need anything else

00:19:50   please don't add anything else you know

00:19:52   because every time I upgrade I paid this

00:19:53   large amount of money and then

00:19:54   everything gets slower and some things

00:19:56   are different and I have to retrain

00:19:57   myself or my staff and so you have like

00:20:00   customers who are actually kind of

00:20:01   asking you please don't upgrade this

00:20:03   so I feel like you know if you take

00:20:05   lessons from from the industry in the

00:20:06   past you can kind of see like a lot of

00:20:09   times a given limited resources and

00:20:11   limited time that you have as an

00:20:13   individual or as a small company doing

00:20:15   an upgrade to to a product for the sake

00:20:17   of upgrading it is not necessarily the

00:20:20   best use of your time and and you David

00:20:22   you know you have I think a very good

00:20:24   sense of that possibly even an overly

00:20:26   aggressive sense of that but I think

00:20:27   it's sir very well in that you don't

00:20:30   seem to pour a lot of effort into into

00:20:33   massive upgrades to apps that don't

00:20:35   necessarily warrant them and you are

00:20:36   very happy to try new apps way more

00:20:39   often than most people I know yeah and I

00:20:41   think some of it is coming from

00:20:43   understanding that I remember I refuse

00:20:47   ago I hadn't the insert the realization

00:20:50   that the way we version number our apps

00:20:54   that is sort of in some ways somewhat

00:20:57   our art like it's kind of arbitrary that

00:20:59   we tend to do this this concept of like

00:21:01   a major a major update and then in there

00:21:03   you have minor updates and then you have

00:21:04   bug pickups updates like you have like

00:21:06   two point one point six or something and

00:21:08   it's coming from a world where you made

00:21:13   your money only on major updates and so

00:21:16   you had to kind of create this sense of

00:21:19   you put out a major update to get a

00:21:21   bunch of money and then you do minor

00:21:24   updates in many ways to build goodwill

00:21:26   and bug fix updates just to fix things

00:21:29   but like you do these minor update

00:21:30   updates to build goodwill with your

00:21:32   customers they have this feeling of like

00:21:34   they bought like this basic thing and

00:21:37   then hey they got this other stuff for

00:21:38   free like they got all these these minor

00:21:40   updates these other improvements for

00:21:41   free and then you come around just like

00:21:43   all right now it's time to shake that

00:21:45   treat the money tree again and down will

00:21:48   answer like here's version two and you

00:21:51   kind of you know it's like now it's like

00:21:52   all right now all that goodwill I had

00:21:53   I'm kind of cashing it in and saying

00:21:55   please you know please give me give me

00:21:56   some money again and you have to have

00:21:58   some kind of feature or some kind of

00:21:59   thing that you're able to point to and

00:22:02   say like this is why you should pay me

00:22:03   money now but in the App Store and at

00:22:06   least in a lot of way the way the App

00:22:07   Store economics work that isn't actually

00:22:09   the reality anymore that it isn't a

00:22:11   situation where like most of my apps

00:22:15   don't make any

00:22:17   like when I do a major update I see a

00:22:20   little bump maybe in revenue but overall

00:22:23   it's really just about sustaining and

00:22:25   maintaining a level of revenue in the

00:22:27   long run and that changes a lot that

00:22:29   mentality that like the version numbers

00:22:31   of my apps are in some ways kind of

00:22:32   arbitrary like they're almost more just

00:22:34   marketing things like if I'm trying to

00:22:35   get a the attention of the press then I

00:22:37   may call it a bigger number but I could

00:22:40   also just call it version 1 version 2

00:22:41   version 3 version 4 and it would be just

00:22:44   as descriptive as far as my customers

00:22:46   are concerned yeah I find the same thing

00:22:49   with you know with paid apps especially

00:22:50   where like you know if you that the

00:22:53   massive version number change is really

00:22:55   good for press but it in sales you know

00:22:59   the sales can result from that press you

00:23:01   get a little sales bump sometimes but

00:23:03   I've always found that whenever I've

00:23:05   done major updates to to apps this is go

00:23:08   all the way back to Instapaper or

00:23:10   certainly overcast

00:23:11   whenever I've done like significant

00:23:12   feature updates or major like you know

00:23:14   x2 updates there is a bump but it's a

00:23:17   pretty small bump in sales and it's and

00:23:20   every every major version bump is

00:23:22   smaller than the one that came before it

00:23:24   yeah and you know so you really are I

00:23:27   think you're right it really is about

00:23:29   maintenance like you are you are keeping

00:23:31   the app up-to-date you are keeping it

00:23:33   competitive in a competitive field you

00:23:35   are keeping users interested but I don't

00:23:38   I don't think any of those things

00:23:39   require major X dot o updates really

00:23:43   ever necessarily you know you can you

00:23:46   can you can add like moderate scale

00:23:48   features over time as they come and and

00:23:50   achieve most that same goal respond to

00:23:53   this week by image X image XCOM /u tr4

00:23:57   under the radar image X is basically an

00:24:00   image CDN that they serve your images

00:24:04   but you can do operations on them so you

00:24:06   can resize them you can trend you can

00:24:08   translate their formats you can you know

00:24:10   scale and crop and and twist and change

00:24:14   the colors and do everything that you

00:24:15   can add annotations to them the number

00:24:18   of operations you can do on these images

00:24:20   simply by adding URL parameters and

00:24:23   signing the URLs is incredible I mean

00:24:26   the you can you can resize them to any

00:24:28   dimension of course you can you can crop

00:24:30   you can letter

00:24:30   any kind of resizing needs you have they

00:24:32   can do it but you can also edit you can

00:24:34   do things like blur filters you can do

00:24:37   all sorts of special effect you can

00:24:38   adjust the colors the toning you can

00:24:41   really do quite a bit with image X I use

00:24:44   it myself for overcast and I I have I've

00:24:47   been very impressed with it it is very

00:24:49   very fast overall I would say image X is

00:24:52   really worth looking at if you if you

00:24:54   need image manipulation either for your

00:24:57   app where you're serving you know pull

00:24:59   images off the web you need to do

00:25:00   something with them into an app or for

00:25:02   web pages it's especially nice for web

00:25:03   pages because you can you can do things

00:25:06   like surf responsive images serve

00:25:07   different resolutions to different

00:25:08   browsers there's there are lots of

00:25:10   libraries if you want to to use client

00:25:13   libraries they have lots of those

00:25:14   including one for Swift called iris

00:25:16   which is from the developers over at ho

00:25:18   dinky I feel like if you look at ho

00:25:19   dinky is a watch

00:25:21   website like a watch enthusiast website

00:25:22   and and they have beautiful imagery all

00:25:25   over the site and that's all powered by

00:25:27   image X so you can see a great example

00:25:28   of all the things that can do there

00:25:30   anyway check it out today image Dick's

00:25:32   calm this IMG I XCOM slash utr thanks a

00:25:36   lot to image X for sponsoring our show

00:25:38   all right and I think enclosing down

00:25:41   this one thing that I was trying to

00:25:43   think through is like the concrete

00:25:46   example of the best kind of features to

00:25:48   add to an app and there's the thought

00:25:52   that came to mind is something that

00:25:54   they'll talk about in video gaming what

00:25:57   you're doing like the be doing a patch

00:25:59   or an update to an app and our to the

00:26:00   game and they'll call them quality of

00:26:02   life improvements which are changes that

00:26:05   don't change the fundamental nature of

00:26:08   your app it R of the game in this case

00:26:10   but are things that make using it better

00:26:13   like it's just a quality of life thing

00:26:14   it makes doing this operation that used

00:26:16   to be kind of annoying or complicated or

00:26:19   awkward simple or more straightforward

00:26:22   and like that kind of quality of life

00:26:23   update when I'm looking at an app that I

00:26:26   have and I'm trying to think of what it

00:26:27   features I need to add the first thing

00:26:29   that I always try and think through and

00:26:31   I think it's a great place to start

00:26:32   it's like are there any quality of life

00:26:34   improvements I can do is there some

00:26:35   operation right now that is common and

00:26:38   frequent but awkward and annoying and if

00:26:40   I can find anything like that like that

00:26:42   is by far the low-hanging fruit

00:26:44   that I need to make sure that I'm taken

00:26:45   care of before I worry up too much about

00:26:48   inventing new problems to solve

00:26:51   like is there are there existing

00:26:53   problems that I have that the app solves

00:26:56   but solves in a way that I could be make

00:26:57   better and if I do that that's where I

00:26:59   think you get the most bang for your

00:27:00   buck and that's where building features

00:27:02   out and doing these little improvements

00:27:05   that you can ultimately like you can you

00:27:07   can over time make your app just more

00:27:09   better and better without making it more

00:27:11   and more complicated or more and more

00:27:13   sprawling alright thanks a lot for

00:27:16   listening this week please recommend us

00:27:18   an overcast if you get a chance help

00:27:20   spread the show tell a friend we'd love

00:27:22   to get more listeners to the show and if

00:27:25   you want to support our network and us

00:27:27   at relay FM I relay of have just

00:27:29   launched memberships recently you can

00:27:32   you can pay money optionally to any

00:27:33   relay FM show or to all really FM shows

00:27:36   if you want to just give like a nice

00:27:38   basically a monthly donation to us we

00:27:40   appreciate that if you feel like it if

00:27:41   not no big deal

00:27:42   thanks a lot to image for sponsoring and

00:27:44   yeah thank you all for listening and

00:27:46   we'll talk to you next week bye