#193: Update Treadmill.
00:00:00
◼
►
Hello and welcome to Developing Perspective. Developing Perspective is a podcast discussing
00:00:04
◼
►
news of note and iOS development to Apple and the like. I'm your host, David Smith.
00:00:08
◼
►
I'm an independent iOS developer based in Virginia. This is show number 193. And today
00:00:14
◼
►
is Friday, August 8th. Developing Perspective was never longer than 15 minutes. So let's
00:00:19
◼
►
get started. All right, today I am going to dive into the wonderful wide world of app
00:00:25
◼
►
and kind of unpack them a little bit,
00:00:27
◼
►
hopefully give you some kind of a good construct
00:00:30
◼
►
to think about app updates in, why you should do them,
00:00:33
◼
►
why you maybe shouldn't do them, that sort of thing.
00:00:36
◼
►
And a lot of this-- the reason I'm doing it today
00:00:39
◼
►
is coming out of a blog post that hopefully many of you have seen
00:00:43
◼
►
where I did a fairly detailed analysis
00:00:46
◼
►
of the state of app updates in the App Store.
00:00:49
◼
►
And I recommend that if you're listening to this, if you can,
00:00:53
◼
►
Go and read that at some point, either before or after you listen to this.
00:00:57
◼
►
It's constructive, I think, to get a good sense of what the state of the App Store is
00:01:03
◼
►
as it relates to app updates more generally.
00:01:07
◼
►
And generally speaking, the results from my analysis were pretty interesting.
00:01:12
◼
►
Along the lines of things like finding out that about 50% of top apps, so apps that are
00:01:18
◼
►
charting in the US App Store in the top 100, in their category have been updated in at
00:01:23
◼
►
least the last three months, or 26% of apps overall have been
00:01:28
◼
►
updated in the last three months.
00:01:30
◼
►
Which is, if you think about it, is a pretty remarkable
00:01:32
◼
►
thing, that that high proportion of apps are seeing
00:01:35
◼
►
constant updates.
00:01:36
◼
►
And obviously, there's also apps that are being newly
00:01:38
◼
►
released, but that's a pretty high proportion.
00:01:41
◼
►
And if I look at it over the course of the last year, so
00:01:44
◼
►
the last 12 months, it's 86% of top apps were updated in
00:01:48
◼
►
the last year, and 60% of overall in the App Store apps
00:01:52
◼
►
are updated, which is kind of remarkable when you start to think about it.
00:01:56
◼
►
That 60% of apps in a store as large as 1.2 million apps have seen some kind of update
00:02:04
◼
►
or activity in the last year.
00:02:06
◼
►
That's a lot of apps.
00:02:08
◼
►
That's a lot of updates.
00:02:09
◼
►
That's a lot of people putting energy into updating their apps.
00:02:13
◼
►
And especially when you put it in the context of the majority of those people are probably
00:02:16
◼
►
not actually seeing huge amounts of traffic or downloads from their apps, based on my
00:02:21
◼
►
my own experience, if you're not ranking fairly highly in the store, you're probably seeing
00:02:25
◼
►
very low traffic for a lot of, you know, in a lot of categories. And so there's a lot
00:02:31
◼
►
of apps just being updated in general, out of course, out of necessity, whatever. But
00:02:38
◼
►
it's a lot of apps. I mean, if you think about it, that 300,000 apps were updated in the
00:02:43
◼
►
last three months in the App Store, at least like that's pretty crazy. And there were actually
00:02:49
◼
►
probably more individual updates in the last three months,
00:02:53
◼
►
considering many apps are updated more than once
00:02:55
◼
►
in the last three months.
00:02:56
◼
►
But 300 of the apps were updated in at least that three months.
00:03:00
◼
►
That's a ton of work.
00:03:01
◼
►
There's a lot of people putting a lot of energy and effort
00:03:04
◼
►
in making sure that the apps are up-to-date and refreshed
00:03:09
◼
►
and all these types of things.
00:03:11
◼
►
And that's a lot of energy going into that.
00:03:13
◼
►
And I imagine if you're an app developer,
00:03:14
◼
►
that's something that you think about yourself.
00:03:16
◼
►
And so what I wanted to do today is in that context
00:03:20
◼
►
to think about the types of updates
00:03:22
◼
►
that we do to our applications,
00:03:24
◼
►
trying to think through some of the reasons we do them,
00:03:27
◼
►
the types of them, what they are,
00:03:28
◼
►
and then hopefully ask some thought-provoking questions
00:03:31
◼
►
about why we're doing that to make sure
00:03:33
◼
►
that we're spending all this energy and all this time
00:03:36
◼
►
in ways that is going to be effective for our customers
00:03:39
◼
►
as well as for ourselves.
00:03:41
◼
►
So when I think about it, I think of the app updates
00:03:45
◼
►
falling into a couple of different categories.
00:03:48
◼
►
And for the purposes of what I'm saying here,
00:03:51
◼
►
I'm not talking about the actual binary that you ship
00:03:54
◼
►
as an update to the store,
00:03:56
◼
►
because an actual shipped update will include
00:03:58
◼
►
many different categories potentially of update,
00:04:01
◼
►
just by its nature.
00:04:02
◼
►
It may have a variety of the things
00:04:04
◼
►
that I'm going to be unpacking now.
00:04:06
◼
►
So don't think about it in those terms,
00:04:07
◼
►
but these are any change
00:04:09
◼
►
that you're making to your application
00:04:11
◼
►
once you've shipped it the first time is an update.
00:04:14
◼
►
and you have to think about what those different types of updates are,
00:04:18
◼
►
because if you can't categorize them,
00:04:20
◼
►
it's often difficult to reason about the effectiveness and importance of them,
00:04:27
◼
►
especially when you're trying to balance
00:04:29
◼
►
the various different choices and options you have for how you spend your time.
00:04:33
◼
►
You need to know what it is you're doing so that you can understand why you're doing it,
00:04:37
◼
►
so you can ultimately understand whether you should be doing it.
00:04:40
◼
►
So the first kind of update is what I would call a compatibility update.
00:04:44
◼
►
This is an update that exists to allow the existing feature set of an application work a new hardware,
00:04:52
◼
►
a new operating system against a new API in the back end, something like that.
00:04:56
◼
►
You're not really adding things, you're just making sure that it continues to work and fixing it.
00:05:01
◼
►
These are often things that you'll have to do around the iOS updates.
00:05:05
◼
►
And some of the changes that you are making
00:05:09
◼
►
are not adding functionality or improving things.
00:05:11
◼
►
They're just addressing bugs.
00:05:13
◼
►
Apple changed the way that rotation works.
00:05:15
◼
►
And so you need to make a change to your code
00:05:17
◼
►
to make it so the rotation continues to work.
00:05:20
◼
►
That's not enhancing the functionality.
00:05:21
◼
►
It's just making it so that the existing functionality works.
00:05:24
◼
►
The next kind of update are remedial.
00:05:27
◼
►
So a remedial update is something
00:05:29
◼
►
that is designed to correct a flaw or deficiency
00:05:33
◼
►
in the existing functionality.
00:05:34
◼
►
So this is your bug fix update at its simplest.
00:05:38
◼
►
But essentially, it's something where you had originally said,
00:05:41
◼
►
the app does X. It turned out it didn't quite do X.
00:05:45
◼
►
And so you do an update to make it so that X actually works.
00:05:49
◼
►
The next type of update is what I would
00:05:51
◼
►
call a defensive update.
00:05:54
◼
►
This is an app update that you're
00:05:57
◼
►
trying to do to keep up with competition,
00:05:58
◼
►
that you're doing something as a reaction to another customer--
00:06:02
◼
►
or sorry, to a competitor so that your customers like your app
00:06:07
◼
►
as well as they do of someone else.
00:06:09
◼
►
And this is very similar to the next kind,
00:06:11
◼
►
which is an enhancement update.
00:06:12
◼
►
An enhancement update adds functionality or capability to an app.
00:06:16
◼
►
And I'm splitting those out in terms of a defensive update
00:06:18
◼
►
versus an enhancement update,
00:06:20
◼
►
because the motivation of why you're doing them is different,
00:06:23
◼
►
even though the actual end result may be the same.
00:06:25
◼
►
You're potentially just adding functionality or capabilities to your app
00:06:28
◼
►
in either case.
00:06:29
◼
►
If you're doing it defensively,
00:06:31
◼
►
you need to be thoughtful about why you're doing it
00:06:34
◼
►
in a way that is different than if it's self-motivated
00:06:36
◼
►
or motivated by your customers asking for a feature.
00:06:39
◼
►
If you're just doing it to keep up with the Joneses,
00:06:43
◼
►
you need to be very thoughtful.
00:06:45
◼
►
And so I'm splitting them out because I
00:06:46
◼
►
think I've found from my own experience
00:06:47
◼
►
that to be a helpful way to think about it.
00:06:50
◼
►
That am I doing this because someone else is doing it,
00:06:52
◼
►
or am I doing this because I think
00:06:54
◼
►
this is best for my own app?
00:06:56
◼
►
So defensive and enhancement.
00:06:59
◼
►
The next kind is a marketing update.
00:07:02
◼
►
And this is an update whose purpose is drawing attention
00:07:05
◼
►
to your application or to try and gather or garner more
00:07:09
◼
►
revenue for your application.
00:07:10
◼
►
Sometimes you're not actually doing much to actually--
00:07:14
◼
►
at its core, changing the functionality of your
00:07:16
◼
►
application.
00:07:17
◼
►
But there are things that you're doing whose purpose is
00:07:19
◼
►
to try and do gather marketing.
00:07:22
◼
►
One part of this to think about is the way that you do
00:07:24
◼
►
version numbering is essentially almost always a
00:07:28
◼
►
a marketing update to your application.
00:07:30
◼
►
You're making a change from whatever the old version number
00:07:32
◼
►
is to the new version number.
00:07:34
◼
►
That's a marketing decision.
00:07:35
◼
►
That isn't really a technical decision.
00:07:37
◼
►
You know, deciding when I'm going to call this a 2.0
00:07:39
◼
►
versus a 1.5.6 is a marketing decision.
00:07:43
◼
►
And it's a marketing update that you're making when you're
00:07:45
◼
►
sitting down to plan out your update.
00:07:48
◼
►
And that could also be a rebranding effort,
00:07:50
◼
►
or adding other in-app purchases,
00:07:52
◼
►
or repartitioning things, or some of those types of things.
00:07:55
◼
►
But there are choices you're making
00:07:56
◼
►
that are on the marketing side of your application.
00:07:58
◼
►
And the last kind of app update is a refactoring update.
00:08:04
◼
►
This is a change that you're making to your application
00:08:06
◼
►
that doesn't actually change the user-facing portions of your application,
00:08:10
◼
►
or certainly not in a way that they would likely be noticing
00:08:13
◼
►
or its intent isn't for them to notice,
00:08:15
◼
►
but it improves it internally in some way that makes your life easier
00:08:19
◼
►
or makes your code cleaner or more reliable or something like that.
00:08:23
◼
►
And so that's different, obviously, than a remedial update
00:08:25
◼
►
where you're fixing bugs, because those are things
00:08:28
◼
►
that the user would have probably noticed,
00:08:29
◼
►
whereas refactoring is things where
00:08:30
◼
►
you're trying to be more proactive rather than reactive.
00:08:35
◼
►
So you have compatibility, remedial, defensive,
00:08:38
◼
►
enhancement, marketing, and refactoring updates.
00:08:42
◼
►
All right, so in that construct, if you
00:08:44
◼
►
think about app updates in those six buckets,
00:08:47
◼
►
what are the things that you need
00:08:49
◼
►
to be thinking about as you plan an update, right?
00:08:51
◼
►
Because the process of doing an app update
00:08:54
◼
►
is in some ways different and distinct than the process and thought process that you should
00:08:58
◼
►
be having when you're designing the initial release of an application.
00:09:02
◼
►
Once you, when you're doing your initial release, you don't have any baggage.
00:09:06
◼
►
You don't have all these constraints of existing users on your platform with a specific set
00:09:11
◼
►
of expectations, with a specific set of wants, with data that you have to migrate.
00:09:16
◼
►
There's a lot of things that you have to do that are much more complicated once you're
00:09:19
◼
►
doing your first update versus when it's an internal build
00:09:24
◼
►
or something that hasn't yet been released.
00:09:26
◼
►
And so you need to be thoughtful about this.
00:09:28
◼
►
The first question I always try to think about is,
00:09:32
◼
►
is this update necessary?
00:09:34
◼
►
And if so, why concretely am I doing it?
00:09:41
◼
►
I find left to my own devices, I will often
00:09:45
◼
►
do updates just because they are kind of cool or interesting to me technically or personally.
00:09:53
◼
►
You can have good reasons to do something, but they may not actually be applicable to
00:09:59
◼
►
a wide audience in your application, or you're just doing it because you can.
00:10:04
◼
►
Those are situations where it's very dangerous, I think, to be making a change to your application
00:10:08
◼
►
if you don't have a good, concrete reason for why you're doing it.
00:10:13
◼
►
I found in my own experience that you can end up wasting a lot of time if you don't
00:10:17
◼
►
have a good reason for doing an update.
00:10:18
◼
►
If you're doing it just because you think you should or because, well, that's what you
00:10:22
◼
►
You put out an app update, then you do a couple of bug fix releases, and then you look for
00:10:26
◼
►
your 1.1 and you start thinking about what are my 0.1 releases going to be.
00:10:31
◼
►
You just kind of are looking for things to do rather than having a good reason to do
00:10:35
◼
►
them in the first place.
00:10:37
◼
►
The most important question you usually have to ask is, will adding this functionality
00:10:42
◼
►
or will doing this change improve the app for the majority of my users?
00:10:46
◼
►
And often the answer to that is kind of a hard one
00:10:50
◼
►
because your initial feature set is very often designed
00:10:54
◼
►
around addressing your core set of users' needs.
00:10:58
◼
►
And your updates will often be trying to address
00:11:00
◼
►
a diminishingly small number of your users.
00:11:03
◼
►
If it is an update that will address a problem
00:11:06
◼
►
that your majority of users are having,
00:11:08
◼
►
well, that's probably a deficiency in your 1.0,
00:11:10
◼
►
But that's fine.
00:11:11
◼
►
Like, obviously, do that thing.
00:11:12
◼
►
If you can do something that makes your application more
00:11:15
◼
►
functional, useful, or better for 90% of your users,
00:11:18
◼
►
of course, do it.
00:11:20
◼
►
But if it isn't, you want to try and characterize an update
00:11:23
◼
►
in terms of what proportion of your users
00:11:25
◼
►
is it actually going to improve, and to make sure you wrap
00:11:28
◼
►
your head around that, to make sure you're reality checking
00:11:30
◼
►
its importance and the validity of that.
00:11:35
◼
►
Another thing to also keep in mind along that same track
00:11:38
◼
►
is making sure that the people you're doing--
00:11:41
◼
►
you're implementing it for your actual user,
00:11:43
◼
►
rather than for your vocal minority,
00:11:45
◼
►
or for famous or fancy people, right?
00:11:48
◼
►
Something that I know for myself is you'll often
00:11:50
◼
►
read a review of your application,
00:11:52
◼
►
if you're fortunate enough to be written up in a review of,
00:11:54
◼
►
you know, someone who does app reviews.
00:11:56
◼
►
And they'll pull out something and say,
00:11:58
◼
►
I don't like that it does X.
00:12:00
◼
►
And because it's coming from the kind of a source or a place
00:12:03
◼
►
that you respect, you often will sometimes
00:12:06
◼
►
to put disproportionate value on that feedback, or at least I will.
00:12:09
◼
►
And so I need to always make sure that I'm checking myself and saying,
00:12:12
◼
►
"Is this something that is only happening to this kind of particular,
00:12:16
◼
►
you know, this particular reviewer or writer,
00:12:18
◼
►
or is this something that would actually happen to,
00:12:20
◼
►
or be a problem for most users?"
00:12:22
◼
►
Because on the flip side,
00:12:23
◼
►
one of the things, the questions you need to ask is,
00:12:25
◼
►
"Will adding this functionality hurt the experience of any of my users?
00:12:30
◼
►
Will doing this change in any way detract or hurt their experience?
00:12:35
◼
►
Is it going to make something more complicated?
00:12:37
◼
►
Is it going to remove some functionality
00:12:38
◼
►
that they may have relied on?
00:12:40
◼
►
Is it going to add a risk that something
00:12:43
◼
►
goes wrong with their data?
00:12:44
◼
►
Because you need to understand and have, I think,
00:12:46
◼
►
concrete language around that for yourself.
00:12:49
◼
►
Because if it does, if it is going
00:12:50
◼
►
to hurt the experience of some of your users,
00:12:53
◼
►
sure, you better make sure that you're doing it
00:12:55
◼
►
for the right reason then.
00:12:56
◼
►
You need to go back three questions and be like,
00:12:58
◼
►
why am I doing this?
00:13:00
◼
►
Because you're hurting somebody in the process of doing this,
00:13:03
◼
►
And that's always going to have consequences.
00:13:07
◼
►
Lastly, the last question you always
00:13:10
◼
►
want to ask when you're doing an update
00:13:11
◼
►
is, do I expect to be compensated for the time
00:13:14
◼
►
that I'm going to put into this update?
00:13:16
◼
►
And by that, I mean updates are taking your time away
00:13:18
◼
►
from something else, right?
00:13:20
◼
►
You could be working on a new app.
00:13:21
◼
►
You could be working on marketing
00:13:23
◼
►
for your application for the functionality that
00:13:26
◼
►
already exists.
00:13:27
◼
►
You could be doing contracting.
00:13:28
◼
►
You could be playing with your kids.
00:13:30
◼
►
You could always be doing other things with your time.
00:13:32
◼
►
And something that I've had to learn myself is that very often I do updates because I
00:13:37
◼
►
feel like somehow I need to or should, but I don't really have a good plan for making
00:13:42
◼
►
sure that I'm actually being compensated for that time.
00:13:45
◼
►
Doing a big point one release or doing a big app update, but without a mechanism for that
00:13:49
◼
►
really to have an impact on your sales is often going to be a very disappointing thing
00:13:54
◼
►
where you spend a lot of time, you put something out there and your sales barely change because
00:13:59
◼
►
It's not either expanding your market,
00:14:01
◼
►
it's not creating a new opportunity for your existing customers
00:14:04
◼
►
to give you money if it's adding in a purchase,
00:14:06
◼
►
if it's adding a tip jar, if it's adding advertising, whatever it is.
00:14:09
◼
►
If you're not creating an opportunity for the update to give you revenue,
00:14:13
◼
►
you need to be very, very careful about why you're doing it.
00:14:16
◼
►
I know I've had to rein myself in a lot of times
00:14:18
◼
►
where I think of something that's cool that I could do,
00:14:21
◼
►
but in reality, doing that update won't really actually benefit me.
00:14:25
◼
►
All right, that's my kind of high-level discussion of updates.
00:14:28
◼
►
Hopefully that was helpful.
00:14:29
◼
►
Like I said, you want to be thoughtful about when you're
00:14:31
◼
►
reviewing an update to make sure you're doing it
00:14:33
◼
►
for the right reasons and reasons
00:14:34
◼
►
that you're going to be compensated for.
00:14:36
◼
►
If you have any questions or comments about the show,
00:14:38
◼
►
you can email me, david@developingperspective.com
00:14:41
◼
►
or @m_davidsmith on Twitter.
00:14:43
◼
►
Maybe have a great week.
00:14:44
◼
►
Happy coding, and I will talk to you later.