0:00:00Hello and welcome to Under the Radar. Under the Radar is a show about independent iOS
0:00:04app development. I'm David Smith. Usually I am joined by Marco Arment, but unfortunately
0:00:08he has lost his voice and that makes broadcasting profoundly difficult. But nevertheless, the
0:00:14show will never be longer than 30 minutes, so let's get started.
0:00:17Okay, so I'm not sure how many people actually who listen to the show would remember, but
0:00:24back several years ago, I used to do a show by myself called Developing Perspective, and
0:00:29that show was never longer than 15 minutes, which was a constraint that I put on myself,
0:00:37mostly so that I would actually do the show. I found that when I started it out, I just
0:00:42wanted to have a podcast, and I decided that having it be this open-ended thing was much
0:00:47more intimidating than every week, just saying, "Well, I'll just sit down and think of 15
0:00:52minutes of things to say. How hard can it be to talk for 15 minutes?" And so I developed
0:00:57the skill of doing that, and what I decided to do this week, because Marco is sick, was
0:01:01to refresh that skill and do two roughly 15-minute segments of the show this week, partly because
0:01:11I think that works well for a single-person thing to break it into chunks, but also just
0:01:17as a general rule, I try and make sure that I never lose skills once I gain them. I think
0:01:22in general that's a good way to approach life, that in general we should hopefully be learning
0:01:26new things as we go. We should be improving ourselves and getting better, and if I lose
0:01:32a skill that I've learned or it becomes too rusty to be useful, that's not great. That's
0:01:36problematic. And so I was like, "Well, this is actually a perfect opportunity for me to
0:01:41refresh the skill of doing a single show, a one-man show, 15 minutes or less, not because
0:01:47I expect to need that skill in the short term, but nevertheless I want to make sure I don't
0:01:51lose it." So that's the general flow of this week, and I'm going to do two short segments,
0:01:58and hopefully it works. We'll be back to our normally scheduled programming next week,
0:02:01so if it doesn't work, don't worry, just come back next week and it'll be back to normal.
0:02:06So for our first topic that I wanted to talk about this week, I'm going to talk about the
0:02:10perils and pitfalls of developing things, being driven mostly by a fear of missing out
0:02:17rather than a conscious choice or desire. And this is a situation that I find myself
0:02:24in this week, and this is a pattern that has happened many times over my development career
0:02:30where I see an opportunity. I see something that I think I could take advantage of. I
0:02:36see something that I could be a part of, and sometimes these opportunities are big, sometimes
0:02:43these opportunities are small, but nevertheless, these are opportunities. And the pitfall and
0:02:49the danger that I've had to learn is that so often, while the opportunity may be good,
0:02:54while the opportunity may be genuine, it may not always be for me. It may be something
0:03:01that isn't worth pursuing because it will put myself in a position down the road that
0:03:07will be slightly problematic or won't be genuine or true to my interests or passions or whatever
0:03:12you want to look at it. And the specific example why this is top of mind for me this week is
0:03:18there was an article that I'll link to in the show notes that was about how the new
0:03:23Apple Watch Series 3 now has the ability to track skiing and snowboarding workouts. And
0:03:28Apple has kind of made a big deal about this. You know, a big article in their main PR section,
0:03:34they seem to kind of push it out to a variety and a pretty wide swath of news publications.
0:03:42They're trying to make a big deal out of this. And that's awesome. And one of the people
0:03:46who are being featured in this is a friend of mine, Curtis Herbert, who makes the Slopes
0:03:50app, which, you know, by all accounts, I'm not a skier or snowboarder myself, which I'll
0:03:54get to in a minute is why this is problematic. But he makes this great app that looks perfect.
0:03:59And he's had this great Slopes diary where he has talked through kind of the independent
0:04:05development aspects of this app. It's a very, you know, he, for the most part, is an independent
0:04:10app that, you know, he develops himself. And it's really cool to see him being held up
0:04:17there with a couple of other apps. But what's awkward for me is that this was a feature
0:04:22that I thought about adding to Workouts++. Because basically, in the Series 3 Apple Watch,
0:04:29they, you know, they added a, you know, some tools to make monitoring skiing and snowboarding
0:04:37workouts fairly straightforward, that in many ways, I can treat them like other workout
0:04:42types that, like a run or a cycle or something like that, where the watch itself is doing
0:04:48a lot of the tricky processing that I ordinarily would need to have done myself, you know,
0:04:56in terms of safe, you know, segmenting your activity so that it can detect when you're,
0:05:00you know, when you're going downhill, when you're maybe on a ski lift and partitioning
0:05:04things out, calculating a variety of statistics about this. And it made it a lot fairly straightforward.
0:05:10And when I saw this feature come out, or be added to the SDK, I knew this was something
0:05:15that Apple was going to kind of be putting some weight behind. And I think some of that
0:05:19was just because, A, they mentioned it specifically during the Series 3 Apple Watch, like on stage
0:05:27presentation that they made this kind of offhand comment that didn't really have any best,
0:05:32any backing in like, information at the time that he just like, Jeff Williams just mentioned
0:05:38that this is going to be great for skiing and snowboarding apps. And then it didn't
0:05:43really there wasn't much to it until I think it was watchOS 4.2 actually added the, the
0:05:51workout types and all this workout processing stuff. And so then suddenly all these apps
0:05:54could take advantage of it. And, you know, it's like, when it's mentioned on stage, when
0:06:00it's mentioned kind of late cycle like this, it seems like the kind of thing where it's
0:06:03a good marketing opportunity for Apple to kind of create a something topical and newsworthy
0:06:09about a product, you know, just try and, you know, bump up sales again, thought that they
0:06:13necessarily need it. But in terms of, you know, it's this, it's after the Christmas
0:06:17rush of watch purchases, I imagine they're looking for opportunities to, you know, give
0:06:23give people a reason to get an Apple Watch and specifically to get a new Apple Watch
0:06:26to get a Series 3 Apple Watch. And so it made sense that this was going to be something
0:06:30they would push. And so I investigated this and I, you know, I will say like, I'm not
0:06:35a skier or snowboarder, I have like fallen down the hill a few times in my life, trying
0:06:40to ski, or trying to snowboard, but it's never really been something that I do. It's something
0:06:45I've done for fun, maybe. I think I did it once in the last 10 years. And it was fine.
0:06:50And it was interesting. But it wasn't, it's not something that I avidly do. It's not something
0:06:54that I have a passion for. And I tried to implement this feature. And it was in some
0:07:01ways straightforward, like I could very easily add it to Workouts++. But I didn't really
0:07:05know how people would use it in practice, the things that they would actually want or
0:07:11be interested in. And then also, it was kind of tricky for me, because to really test something
0:07:16like this, you probably have to go skiing, and you probably have to go snowboarding.
0:07:21And I'm sure I could have found somebody to beta test it or kind of work on it. But it's
0:07:24a hard thing if it's not something that I have really any personal connection to, and
0:07:29don't know somebody, you know, who will go skiing or snowboarding on a regular basis.
0:07:33You know, I similarly in Workouts++, I don't do a lot of swimming myself. But I have my
0:07:40wife and I have a good friend who does go swimming a lot, and they were able to give
0:07:45me a lot of good feedback. And you know, going swimming on a regular basis is much more practical
0:07:50than going skiing or snowboarding on a regular basis. And I mean, I remember seeing Curtis
0:07:54talking about how he, you know, had to go on these trips where he was, you know, skiing
0:07:59down a mountain with a, you know, a laptop in his backpack, trying to kind of then like
0:08:03stopping at the bottom and checking how it was working, and then, you know, doing it
0:08:07again. And like, it's a really complicated thing to test and to debug. And there was
0:08:11no simulator support for it either. So that was doubly tricky. So in the end, I decided
0:08:16to not add this feature, to not pursue being part of the push for skiing and snowboard
0:08:26tracking apps. And then now, this week, you know, I see the fruits of what may have possibly
0:08:33been if I had pursued it. And that's not to say that if I'd added it to Workouts++ that,
0:08:38you know, my app would have been caught up in this publicity push. But I think there
0:08:42is a non-zero chance of that nevertheless. But I don't regret it at all. And I kind of
0:08:48wanted to unpack why I don't regret it. And I think it's coming from an experience I've
0:08:52had many times where often I see something that is clear that Apple is going to push,
0:08:58that there is going to be this sort of this opportunity for quote unquote, like free publicity.
0:09:04And I've got pursued it in the past. But the awkward reality is that publicity is not free.
0:09:10That is, in fact, comes with tremendous costs. And often they are the kind of external hard
0:09:15to quantify type of costs that are the most insidious. You know, for example, iMessage
0:09:20apps was an example of something like this where it was, you know, when iMessage apps
0:09:26were introduced to iOS, they were kind of pushed and promoted. And it seemed like something
0:09:31that Apple was going to put a fair bit of weight to. And I, you know, was like, okay,
0:09:37great, let's go for it. Let's make some iMessage apps. And I made iMessage apps for a bunch
0:09:40of my apps. And as best I can tell, it's led to almost no use or very limited use, nevertheless.
0:09:48You know, I don't have great statistics for it. But I from what I can understand, the
0:09:54apps are very poorly used. And I have to maintain them going forward. And I didn't really get
0:10:01much out of it. In that case, there was, you know, Apple was promoting them. And I my apps
0:10:09were picked up in a couple of the, you know, the promotional things in the App Store. And,
0:10:13you know, certainly not to the degree of an article in, you know, in the PR section. But
0:10:18it was, you know, certainly something that had a little bit of push. But the awkward
0:10:22thing is, even when I was making them, I was looking at these things and being like, is
0:10:26anyone actually going to use this? Like, is this really the way someone is going to, you
0:10:32know, choose to interact with the app and we're like kind of forcing it into into something
0:10:37that I didn't really understand, that I didn't use myself and that, you know, as a result
0:10:43was never really going to have that level of care and attention and quality that I think
0:10:49you you would hope or I, you know, I ideally have in a product you make. And this is where
0:10:55I think sort of like the end lesson comes from this is that it's important to, you know,
0:11:01develop things because you want to develop them that because you think it'll be interesting
0:11:07or useful, or ideally even something that you will use yourself on a regular basis.
0:11:14I know for myself that my best apps are the ones that I use myself on a regular basis
0:11:19that I use every day that are solving actual felt problems that I feel and apps that I'm
0:11:25not developing out of a fear of missing out on an opportunity that I'm not just like doing
0:11:29it because or to try and time or take advantage of something because if I don't use if I don't
0:11:36use it on a regular basis, if it isn't, you know, sort of any in any way kind of overlapping
0:11:41with my interests, it's it even if it does get picked up, even if it does create an opportunity,
0:11:46I'm either then going to be stuck kind of maintaining something I don't care about,
0:11:50or probably more likely I'll end up having to maintain or having to kill off or, you
0:11:55know, make tricky decisions about something that didn't actually pay off in the first
0:12:00place. So anyway, it was just an experience I had this week that I saw this and I was
0:12:05like super glad and excited for the people who got picked up. But definitely in the back
0:12:09of my mind, I had this twinge of, well, that could have been me, you know, well, like I
0:12:14could have done that I started going down that road. And as a brief aside, slightly
0:12:18comedically, when I was initially testing this, because like I said, you there's no
0:12:23simulator support to test my initial like prototype implementation of this, I tried
0:12:28to work out how best to simulate skiing or snowboarding. And the best I could come up
0:12:33with in terms of a motion and activity that would simulate skiing was that I rode my bike
0:12:40up the biggest hill I could find in my neighborhood, and then sort of glided down the hill as you
0:12:47know, sort of fairly quickly, and got to the bottom, waited a minute and then walked my
0:12:51way back up kind of trying to simulate being in a ski lift. And I did that a couple of
0:12:56times to simulate being a ski run, which half worked half didn't, but was, you know, nevertheless,
0:13:01slightly comedic. And I imagine me, my neighbors think that I was kind of crazy to just be
0:13:06I was just biking up and down this hill over and over and over again. But you know, that
0:13:11was not the life that I wanted. And so I decided to can it and I feel good about that. So you
0:13:15know, just something to keep in mind that you when you're developing things, make sure
0:13:19you're doing it for good reasons and for reasons that you think it might be sustainable going
0:13:24forward.
0:13:26This episode of under the radar is brought to you by Linode with Linode you have access
0:13:29to a suite of powerful hosting options with prices starting as low as $5 a month and you
0:13:33can be up and running with your own Linode server in the Linode cloud in under a minute.
0:13:38Linode offers industry leading performance with native SSD storage, a 40 gigabit network,
0:13:42and 95 processors. They have 10 data centers spread all over the world for great redundancy
0:13:47as well as moving your servers close to your customers. They have an API that's great for
0:13:52automating tasks and getting quickly set up and repeatably set up and as well as making
0:13:57everything accessible and manageable via command line. And all of Linode's pricing tiers now
0:14:02feature hourly billing with a monthly cap so that you can make sure that you're never
0:14:07surprised at the end of the month and they offer great things like backups and node balancers
0:14:11for doing more advanced operations. I use Linode. They are a tremendous op that I they
0:14:16find to be tremendously useful and they allow me to not worry about the servers the server
0:14:21side of my hosting. I can focus on the application side which is great. And they have fantastic
0:14:26pricing their prices for one gigabyte of RAM start at only $5 a month and they offer all
0:14:31the way up to super high memory plans with 16 gigabytes of RAM. As a listener of this
0:14:35show if you sign up to at Linode.com/radar you'll only be supporting us but you'll also
0:14:40get $20 towards any Linode plan on a one gigabyte RAM plan that would be four months free and
0:14:47you also have a seven day money back guarantee so there's nothing to lose. So you can go
0:14:51to Linode.com/radar to learn more sign up and take advantage of a $20 credit or use
0:14:56the promo code radar 2018 at checkout to make the same savings. Thank you so much to Linode
0:15:02for sponsoring this show. All right. So I also for the second topic for the second episode
0:15:09the second sub episode inside of this episode I wanted to talk a little bit about communicating
0:15:14changes to customers. And this is something that I ran into this last week as well where
0:15:21I made a big change to the way that pedometer++ works in terms of the ability to migrate steps
0:15:28from one app from one phone to another. So if you get a new phone you can move your old
0:15:31history along with it even if you're not doing a backup and restore to that phone which is
0:15:36a feature a lot of people have wanted for a while. And it's top of mind because I added
0:15:43this feature that has been I have been asked periodically by customers for a long time
0:15:48and then I continued to still get support requests asking people for it which clearly
0:15:54is a an example of the fact that you know people don't really read the change notes
0:15:59they don't read that what's new in the App Store most people probably honestly never
0:16:03open the updates tab in the App Store. If you have automatic updates turned on the updates
0:16:08will just you know kind of happen for you in the background and even if you do periodically
0:16:13go there you know you may not have read the exact one associated with the most recent
0:16:18change or with a particular change I guess. And so it's kind of a tricky thing because
0:16:23in my mind I hadn't really thought about it when I did this update. I hadn't really thought
0:16:28more in more detail about how best to communicate this change. But in retrospect I really should
0:16:35have it's really is something that I should have talked about or thought about and tried
0:16:40to find ways to communicate more directly to my users about this because you know if
0:16:47it's a feature that they want I and it's in the app you know hopefully they can find it
0:16:52because for every one person who is actually going to reach out to me and say hey you know
0:16:56it'd be great if I could do this thing and there's probably going to be 10 people who
0:17:00just assume it isn't there and leave the app frustrated and I definitely don't want that.
0:17:05So first I guess the first lesson from this experience is to assume that nobody ever reads
0:17:11the release notes. Some people will and that's great and I think it's important to write
0:17:15good release notes to write release notes in such a way that they aren't just like you
0:17:21know we are always striving to make our app better. This app this update includes stuff.
0:17:26That's not really helpful. I don't find those kind of release notes particularly useful.
0:17:31I understand why some bigger applications or typically these big faceless companies
0:17:36will tend to do that but and I can understand why they do that but I find especially being
0:17:42an independent developer it's a great opportunity to endear myself slightly to my users to write
0:17:48good change notes and to make them personal like I try and actually write them as though
0:17:52I'm writing a letter to my customer because if the customer is reading that that is functionally
0:17:56what I'm doing. I'm directly communicating with them and so I want to take advantage
0:18:00of that but I think I need to assume that nobody's ever going to read those and so think
0:18:06about whenever I make changes to the application how to communicate that. The one extreme this
0:18:13is something that I've never done myself and honestly I would not recommend but it's probably
0:18:16worth mentioning is the approach of the like big pop up or banner or like the modal blocking
0:18:24walkthrough or you can do the thing where like the first time you launch the app you
0:18:28have like it's slightly grayed out with like call outs or arrows or you know bubbles like
0:18:33you can really go on the one extreme very heavy handed with this and be like hey look
0:18:38over here here's this cool new thing and the reason I tend to not like those is it assumes
0:18:46that A that the user is going to be interested in whatever the new feature is you know that
0:18:50they're going to want to go you know they want to interrupt whatever it is they're doing
0:18:55even though in this case you're interrupting them and ostensibly for their benefit it's
0:18:59still you're interrupting them you're still doing something that is not the reason they
0:19:03open the app in the first place most likely and so it's you're kind of getting in their
0:19:08way and it also is it kind of is awkward to manage in terms of which you know in practice
0:19:17most applications have a lots of more lot many more new users than existing users like
0:19:25over time your user base will grow which is wonderful hopefully but you know if there's
0:19:29this this the retention rate of most applications is relatively low you know say 10% 20% and
0:19:35so you're most of your people are being onboarded for the first time anyway and so you really
0:19:41you should also make sure that it is optimized not just for communicating change but for
0:19:46communicating in the first place that for helping a new user understand the application
0:19:50and you can't you know it's not like if every time I make a change I added a new pop-up
0:19:55or a new bubble or something to the application you know and you launch the app and it's like
0:19:59here's 26 things you end up with you know these screens we often see them in like Mac
0:20:04apps where it's like you know would you like the tip of the day and it's a kind of an in
0:20:08elegant solution to this problem where you know if your app has gotten so complex or
0:20:13detailed to the point that you know users are going to need a lots of help to find their
0:20:19way around like that's tricky and problematic and I can it's understandable like I'm not
0:20:24saying it's a bad thing in that situation but I try and avoid it if I can because it
0:20:29much rather have an application that is intuitive and understandable without needing to result
0:20:34resort to something like that.
0:20:36So how to how to do it and as I was thinking about this and what am I going to be doing
0:20:42going forward is the a great thing to do is to make careful tweaks to the copy to the
0:20:48text of the application to help make these things clearer so in this case the way that
0:20:55I implemented it is that you can now I've always in the app had the ability to export
0:21:00your step data to a CSV file so you know you can export it for people some people like
0:21:05to do it for you know use in Excel or numbers or something or they want to you know they
0:21:12want to be able to have a an exchangeable format of their step data so great I've added
0:21:17that I had that in the app for a very long time and with the export feature I included
0:21:23the sort of the export transfer file in the same email that you get when you export the
0:21:28CSV because that was very straightforward it was very simple to do there and intuitively
0:21:32it made sense to me but I realize in retrospect there's no way for them to know that this
0:21:38new thing is now there and so one little change I'm going to make is I'm going to tweak the
0:21:45the copy of that section of the app so rather than saying export steps you'll now say export
0:21:49slash transfer steps and it still keeps it simple it still isn't create this you know
0:21:54I'm not like duplicating buttons and options in the application which could add more complexity
0:21:59but I'm just adding a word and I think that word will do a long way to communicating that
0:22:06this is possible and hopefully for new customers who find themselves in a situation where they
0:22:10want to transfer their steps they'll now immediately know how to go there another thing that comes
0:22:15to mind and this isn't applied in my particular situation but is that is important to always
0:22:20think about what the default for a new option should be and be thoughtful about this because
0:22:26that's often a great way for a customer to understand or to come across a new feature
0:22:31so for example in my big update that I'm working on for sleep plus plus I'm adding a the concept
0:22:37of a nightly sleep goal you know so say how many hours of sleep would you like to have
0:22:41a night and there's a bunch of little cues within the application to try and make it
0:22:46you know try and reward you or encourage you when you've done that and not like punish you
0:22:50but to make it make you aware of the time of you know the times when you haven't been
0:22:53able to do that and you start to think about well how am I going to communicate this new
0:22:59feature well it's like hey it's important to have a thoughtful default that if I default
0:23:04that to a number that is too high it's going to come across immediately in the negative
0:23:10you know so if the first time you launch the app and it says you know essentially I'll
0:23:15all the nights turn red because oh man you you know you haven't been hitting your sleep
0:23:19goal recently but they haven't even set their sleep goal well that's kind of that's not
0:23:23so great so instead I'm going to set the you know it's like I'm going to default the goal
0:23:27to something on the lower side of what is still probably considered good so I think
0:23:31I'm going to go for seven hours you know it's like in general most people say eight hours
0:23:35is a good goal for sleep I'm going to start at seven and then hopefully for a lot of people
0:23:40they'll have a lot of you know have this kind of nice mix of red and green steps you start
0:23:44to be like or of red and green nights you look at it and be like oh this is great like
0:23:50something's interesting is happening here maybe you go to settings and maybe you find
0:23:53out that you can now set this goal but I'm kind of trying to do it in a way by using
0:23:58the default such that it is intriguing rather than confounding hopefully that will help
0:24:04and I think in just in general whenever you add a new feature it's you know it's something
0:24:09that you have to keep in mind that you know you're probably going to need to choose an
0:24:13option should you know should this feature be turned on by default or off by default
0:24:17you know just the user needs to should they want should they have to actively take steps
0:24:22to turn it on or should it just automatically be turned on and you just have to be really
0:24:27thoughtful about this one thing that's also kind of awkward with this a lot of times I
0:24:30find is it's deciding the right time to prompt for privacy options in iOS so as another example
0:24:39in the sleep plus plus update there's automatic sleep tracking now which requires that you
0:24:44give me your you know prompt you that you have to give me permission to access a variety
0:24:50of other health database types and in general that you know is is fine but I don't want
0:24:57to necessarily you know then that the first time you launch the app after you have installed
0:25:03the updates to just immediately prop up this health dialogue out of nowhere saying hey
0:25:07hey I need your health data like that's kind of creepy and not really great and so what
0:25:12I'm expecting to do instead is pop up a message at the top of the app at the top of the main
0:25:19table view saying hey the app can do sleep automatic sleep sleep tracking now would you
0:25:24like to enable it and have a little switch there and if they hit the switch it'll pop
0:25:28up the health permission prompt at that point and I think that's going to be a much more
0:25:34comfortable thing that you know more people are going to want to actually give me access
0:25:38to their health data in that way and I think overall that's probably going to be a more
0:25:44successful way to communicate that than just popping up the health prompt and assuming
0:25:47they want to turn it on because honestly most people do want to probably want to turn it
0:25:50on but nevertheless if I prompt if I just pop it up right away initially like that might
0:25:56be really confusing or it might not be a nice feeling that like all of a sudden they didn't
0:26:02do nothing change from their perspective because the app just updated underneath of them and
0:26:06then now all of a sudden I'm asking for their health data so that's just something I'm going
0:26:10to do there but I think it's important to just be thinking about this process and to
0:26:13think about how to make it useful for your use for your for your customers and to just
0:26:18you know kind of allow you to get full credit in some ways for these changes that you're
0:26:23making though I suppose no matter what you do here it's also probably just worth saying
0:26:28I expect that people are still going to miss it and the people you're still going to get
0:26:31customer support requests asking for features that are things that you missed and I'll leave
0:26:36you with something that I think it was I think it was Gus Mueller the maker of Acorn was
0:26:42talking about once when I was talking with him and he was saying how he I don't think
0:26:47it was him he was talking about how he likes getting customer support requests for things
0:26:51that are confusing because they're an opportunity to see where the problems are in your design
0:26:57and to improve on them that if you can look at you know when someone misses something
0:27:03as as a negative experience that like someone asking for a customer support is can be a
0:27:08bad thing but on the flip side you know here's an opportunity to make the app clearer that
0:27:13someone has told you hey here's this part of your application that was confusing or
0:27:16problematic or difficult and so it gives you an opportunity to design a fix for it and
0:27:21so have taken that perspective of like in this case you know communicating change is
0:27:26an opportunity and if if you try and communicate that change and your customer doesn't get
0:27:31it then you know that's a fault on yours to hopefully correct going forward all right
0:27:36that's it for this this week like I said hopefully next week we'll be back to our normally scheduled
0:27:42programming hopefully Marco will find his voice again and we can go back to our normal
0:27:46thing but anyway other than that I hope you have a good week and I will talk to you later
0:27:50bye
0:27:51[BLANK_AUDIO]