PodSearch

Developing Perspective

#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:21 ◼   ► do.

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.