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