Podcast Search

Under the Radar

Under the Radar 7: Building New Features

Select a time to play from there. The line being spoken is highlighted as the audio plays.

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

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

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

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

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

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

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

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

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

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

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

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

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

0:00:30developed and gets better over time

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

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

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

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

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

0:00:43something that is requires a different

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

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

0:00:49scratch because obviously you're

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

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

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

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

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

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

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

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

0:01:05Apple watch sleep tracker basically I

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

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

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

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

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

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

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

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

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

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

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

0:01:27interesting is I went through the

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:02:11interface builder

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:02:48with actually getting things done did

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

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

0:02:56to build

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

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

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

0:03:04little bit about betas in previous

0:03:05episodes and everything my process for

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

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

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

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

0:03:16testers usually like you know an

0:03:17overcast I mentioned last in last

0:03:19episode I mentioned that that voice

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

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

0:03:26switch it actually had multiple modes

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

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

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

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

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

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

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

0:03:46they're usually pretty lightweight

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

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

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

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

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

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

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

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

0:04:05really really far with stock components

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

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

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

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

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

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

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

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

0:04:26features I mean

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

0:04:29it used to have four levels

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

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

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

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

0:04:42rationales for all of them

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

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

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

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

0:04:52for podcasts that were produced with

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

0:04:57sometimes sometimes a lot of sometimes

0:04:59podcasts would have like very high

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

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

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

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

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

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

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

0:05:17much more aggressive compression setting

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

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

0:05:23labeled dynamics reduce off enhanced

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

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

0:05:31engineer is that referring to motion

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

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

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

0:05:39dynamics of something and between

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

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

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

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

0:05:49doesn't really communicate that

0:05:50enhancing booster basically two

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

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

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

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

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

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

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

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

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

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

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

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

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

0:06:19options here and there during

0:06:21development

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

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

0:06:26leave almost everything like I almost

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

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

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

0:06:34intuitiveness problem and and the UI

0:06:37understandability problem with what this

0:06:38feature actually is

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

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

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

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

0:06:48one button

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

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

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

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

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

0:06:58future decisions important yeah yeah and

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

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

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

0:07:07screenshots along the way of designing

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

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

0:07:14stages of development and who all

0:07:15prototyping various features and so I

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:07:51originally I originally had it with

0:07:52these four different options and then

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

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

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

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

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

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

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

0:08:07feature removals

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

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

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

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

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

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

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

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

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

0:08:29manage user expectations and user

0:08:32feelings about that

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

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

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

0:08:40are inevitably going to build features

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

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

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

0:08:51of just like distancing yourself from

0:08:53your work enough that you can

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

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

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

0:08:59feature and especially this is dangerous

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

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

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

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

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

0:09:10like building it all out

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

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

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

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

0:09:18really harder to understand or more

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

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

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

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

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

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

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

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

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

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

0:09:41away is definitely an encouragement and

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

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

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

0:09:50evaluate how useful something is because

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

0:09:55head

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:10:35really interesting and optioned

0:10:37interesting options that you could kind

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

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

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

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

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

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

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

0:10:52like the really sophisticated dynamic

0:10:55stuff with like okay

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

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

0:10:59rather than actually better for most

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

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

0:11:04was technically interesting it was

0:11:07technically impressive you know not

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

0:11:10dynamics and and EQ controls and

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

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

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

0:11:18off

0:11:19my audio engine and my audio

0:11:21manipulation skills I guess but in

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:11:55streaming working to to varying degrees

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

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

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

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

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

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

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

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

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

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

0:12:20of like continuous release paradigm

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

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

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

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

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

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

0:12:32better balance is somewhere in the

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

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

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

0:12:39constantly adding or moving things it

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

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

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

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

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

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

0:12:54random subset of people first and

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

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

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

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

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

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

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

0:13:08testing you do internally versus just

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

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

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

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

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

0:13:21that way

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

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

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

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

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

0:13:32carefully considered yeah and I think

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:14:17broken or really confusing like you

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

0:14:21like continuous deployment and things

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

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

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

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

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

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

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

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

0:14:38thoughtful about and understand that

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

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

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

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

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

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

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

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

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

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

0:14:59more on the release things quicker

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

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

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

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

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

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

0:15:17attention span thing look I really

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

0:15:21about working on features for months

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

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

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

0:15:29something working all the crazy edge

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

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

0:15:35to

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

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

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

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

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

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

0:15:48probably the more healthy approach is

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:16:40around like business model and business

0:16:42plan like well adding this feature

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

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

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

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

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

0:16:56interested and trying to balance the

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

0:17:01think more definitely more art than

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:17:30better

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

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

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

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

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

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

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

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

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

0:17:48apps but

0:17:49like trying to decide what features

0:17:50worth actually doing is really hard

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

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

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

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

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

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

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

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

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

0:18:16multiple apps and the the additional

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

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

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

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

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

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

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

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

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

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

0:18:44polishing everything up and and being

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

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

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

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

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

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

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

0:19:05diminishing returns where like the most

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

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

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

0:19:15get satisfied pretty early on in

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

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

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

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

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

0:19:27maybe at whereas the customers really

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

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

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

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

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

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

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

0:19:45sitting around saying you know what

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

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

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

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

0:19:53large amount of money and then

0:19:54everything gets slower and some things

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

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

0:20:00customers who are actually kind of

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

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

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

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

0:20:09times a given limited resources and

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

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

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

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

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

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

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

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

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

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

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

0:20:35necessarily warrant them and you are

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

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

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

0:20:43understanding that I remember I refuse

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:21:30updates to build goodwill with your

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

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

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

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

0:21:40updates these other improvements for

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:22:15don't make any

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

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

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

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

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

0:22:29mentality that like the version numbers

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

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

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

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

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

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

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

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

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

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

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

0:22:53massive version number change is really

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

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

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

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

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

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

0:23:10certainly overcast

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

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

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

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

0:23:20every every major version bump is

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

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

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

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

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

0:23:33competitive in a competitive field you

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:24:20simply by adding URL parameters and

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

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

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

0:24:30you can letter

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

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

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

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

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

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

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

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

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

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

0:24:54need image manipulation either for your

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

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

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

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

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

0:25:06like surf responsive images serve

0:25:07different resolutions to different

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

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

0:25:13libraries they have lots of those

0:25:14including one for Swift called iris

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

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

0:25:19dinky is a watch

0:25:21website like a watch enthusiast website

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

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

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

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

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

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

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

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

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

0:25:43think through is like the concrete

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

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

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

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

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

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

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

0:26:02life improvements which are changes that

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

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

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

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

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

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

0:26:19awkward simple or more straightforward

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:26:48inventing new problems to solve

0:26:51like is there are there existing

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

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

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

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

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

0:27:02out and doing these little improvements

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

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

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

0:27:11and more complicated or more and more

0:27:13sprawling alright thanks a lot for

0:27:16listening this week please recommend us

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

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

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

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

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

0:27:29launched memberships recently you can

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

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

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

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

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

0:27:41not no big deal

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

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

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