Developing Perspective

#198: Boring and Superstitious.


00:00:00   Hello and welcome to Developing Perspective. Developing Perspective is a podcast discussing

00:00:04   news of note in iOS development, Apple, and the like. I'm your host, David Smith. I'm

00:00:08   an independent iOS developer based in Herndon, Virginia. This is show number 198, and today

00:00:14   is Wednesday, October 8th. Developing Perspective is never longer than 15 minutes, so let's

00:00:18   get started.

00:00:21   So what I'm going to do today may superficially seem a little bit silly, but I had an interesting

00:00:28   I always try and find these little nuggets out

00:00:29   of my day-to-day development work

00:00:31   that I think will make good episodes.

00:00:33   And this particular one is coming out

00:00:35   of an experience I had with Emoji++ and the update

00:00:39   that I submitted last Friday for it.

00:00:42   So in the first version of Emoji++ that shipped,

00:00:47   the version that I shipped out not necessarily

00:00:49   knowing if it was going to be approved,

00:00:51   not necessarily expecting it to get any attention,

00:00:53   that version had a rather fatal flaw in it,

00:00:57   where once you added something to favorites,

00:01:01   you were unable to do anything with it thereafter.

00:01:03   You couldn't move it.

00:01:03   You couldn't remove it.

00:01:05   It was just in there forever in the order

00:01:07   in which you favorited things, which is terrible.

00:01:09   And I take full responsibility for that.

00:01:12   It was just one of those things that I just never quite got

00:01:15   to in the process, and I thought I had or didn't.

00:01:17   And it just kind of slipped through and didn't make it in.

00:01:21   And so once I launched Emoji++ and it had a fairly warm

00:01:25   reception and did well, I was like, oh goodness, I'm going to need to fix this. I'm going to

00:01:30   need to make it so that you can edit favorites. Which seems simple enough, I suppose. I mean,

00:01:34   you would think that editing a list of favorites in an interface is fairly well established

00:01:41   at this point. But you'd be slightly wrong. Or at least you probably should think that

00:01:47   you're slightly wrong. Because there's a lot that goes on in an application, especially

00:01:52   an app like this that's a custom keyboard that you don't have a lot of space to do things

00:01:56   on that you really need to be thoughtful about.

00:02:00   And so first, it's probably fair to say, if you don't have the app or have never seen

00:02:03   the app-- well, first, if you don't have the app or don't want to try it, I mean, maybe

00:02:09   give it a try.

00:02:10   I think it's a lot of fun.

00:02:11   There's a link in the show notes to it and go get it ready to go.

00:02:13   But if not, there's also an animated GIF in the show notes that'll show you kind of what

00:02:18   I'm talking about, because I'm going to be talking, assuming that you kind of know what

00:02:22   Emoji++ looks like.

00:02:24   So if you've never seen it, that might be a bit confusing.

00:02:26   So just a small disclaimer there.

00:02:29   All right.

00:02:29   So you have favorites.

00:02:30   And you create favorites in Emoji++

00:02:33   by long pressing on any item.

00:02:37   And this was intentionally, perhaps, a little bit

00:02:40   not directly intuitive in the sense

00:02:43   that I wanted to make sure that the core interface, the I want

00:02:45   to find an emoji interface, was as streamlined as possible.

00:02:49   That core tab where it's all about-- the core goal

00:02:54   of the app was that you have one big list of emoji

00:02:56   that you can slide through, and then

00:02:57   a little speed bar on the side that you

00:02:59   can jump very quickly through.

00:03:00   And so I want to make that interface as stripped down

00:03:03   as possible.

00:03:03   So long press on something, and then it

00:03:05   flies into the favorites.

00:03:06   Makes a lot of sense.

00:03:08   But once you're in favorites, then I

00:03:10   started to think, well, how would I make it that you

00:03:12   could do stuff around there?

00:03:14   And this is where things start to get interesting.

00:03:17   There's two options that I kind of saw.

00:03:20   And maybe I'm just not an imaginative enough designer

00:03:23   to do better, but I think I kind of saw two different options.

00:03:27   You can kind of have the long press,

00:03:32   create init to turn on edit mode with Wiggle kind of thing,

00:03:36   sort of like how the iOS home screen works.

00:03:38   Or you just hit a button that says edit, probably,

00:03:43   or something like that.

00:03:44   You hit the edit button and it goes into edit mode and then you can move things around and

00:03:50   delete them with a little X on the corner, etc.

00:03:52   And then you hit done and you're out of it.

00:03:55   And those two modes are functionally will ultimately accomplish the same thing.

00:04:00   And the core editing experience in both of them is pretty much the same.

00:04:05   And ultimately though, I went with an edit button rather than the more gesture based

00:04:10   approach.

00:04:11   And the reasons for that I think are just kind of interesting to unpack.

00:04:16   Because it's not really a straightforward thing.

00:04:18   It's not the kind of decision, you know, sometimes I'm building things and I know exactly how

00:04:23   I want to do it.

00:04:24   I know what's the right answer.

00:04:26   With this, I really didn't.

00:04:28   I really didn't know what was the right answer.

00:04:30   Because both sides have advantages.

00:04:32   So first I'm going to kind of unpack the long press approach.

00:04:36   So you know, the advantage of it is that it doesn't waste space.

00:04:40   And I had a couple of people look at the design and the reaction I almost always got was,

00:04:45   "Hmm, that edit button wastes some space."

00:04:49   But it, you know, so in the long-press version, there's no wasted space.

00:04:55   You just have to know that if you long-press on something, it'll go into edit mode.

00:05:01   Which is nice that you don't have to use the UI.

00:05:03   You do, of course, also have the other question of, like, how do you get out of it?

00:05:07   So is it just when you tab out of it, do you long press again?

00:05:11   Long presses and movement get a little complicated.

00:05:14   But you can sort those out.

00:05:15   On the home screen where you have that same mode,

00:05:17   you hit the Home button to get out of it.

00:05:22   Or you could make the Done button appear, I suppose.

00:05:25   There's lots of things that you could do.

00:05:27   But all of those things are kind of complicated.

00:05:30   And especially because long press means something else

00:05:33   in my app already, when I started,

00:05:36   I went down that path a little bit,

00:05:37   where long press would be delete,

00:05:39   or long press would be edit mode.

00:05:42   And I started using it.

00:05:44   And I started to think, well, this is kind of confusing.

00:05:46   I'm having this weird feature mismatch inside my app,

00:05:51   where in one place, you do this one gesture,

00:05:55   and something will happen.

00:05:56   And in this other place, you do a long press,

00:05:58   and you get a completely different behavior.

00:06:01   And that's weird, because if you long press and get this cool

00:06:04   edit mode on the favorite screen, why don't you get a long press? If you long press on

00:06:09   the main screen, can't you reorder the emoji there? And maybe you should be able to, but

00:06:14   that seems to get more complicated. What I really discovered though is I wanted to make

00:06:19   this obvious. I wanted to make this straightforward. And understanding that having an extra 25

00:06:26   points at the bottom of my UI taken up by a button, if it means that I'm never going

00:06:34   get a help desk request from somebody being, "How do I edit the favorites?" is kind of

00:06:40   valuable.

00:06:41   And it reminded me of something that's two things that I'll commend to you for further

00:06:46   reading after this episode that are linked to the show notes.

00:06:49   One was an article by Cap Watkins called "The Boring Designer" that I recently read.

00:06:54   And it had something that kind of stuck out at me that I thought was kind of interesting.

00:06:58   He's talking about attributes of the designer, the person.

00:07:02   One of the things that he said they tend to do that stuck with me is that he said they

00:07:06   often would choose the obvious over the clever in their own designs.

00:07:12   And the more I thought about that, and the more you think about his reasons for that,

00:07:16   that kind of makes sense.

00:07:18   There are so many things that we do in app design where we're trying to kind of be clever

00:07:24   rather than obvious.

00:07:26   And when I step back from that for a minute and I sort of think, why am I trying to do

00:07:31   that, I very quickly start to think, am I just trying to show off? Am I trying to be

00:07:35   fancy? Like, who do I think this is helping? By hiding away a feature, an important feature,

00:07:43   behind a gesture, whose life am I making better? Is the app somehow -- is the fact that it's

00:07:50   visually more stripped down better for the user? When the user wants to do something,

00:07:57   they need to just be able to do it. They don't want to have to think about it. I don't want

00:08:00   to have to have my users think about what it is that they need to do in order to accomplish

00:08:05   what it is they're trying to do. And so it's important to think about trying to make sure

00:08:09   we're choosing the obvious over clever, at least more often than not. There are obviously

00:08:16   times to be clever, and those functionalities are typically going to be those things where

00:08:21   you are doing—it's a functionality that is sort of an advanced user. Like, I hate

00:08:29   trying to segment my users, because--

00:08:31   and we shall get into something I'll

00:08:32   talk about in a minute--

00:08:33   I hate to segment users into basic and advanced.

00:08:37   You can have sort of maybe experienced and inexperienced,

00:08:39   but I don't want to look at my customers

00:08:42   or look at my users and say, well, you're dumb

00:08:46   and you're smart.

00:08:47   I don't want to say that, oh, this is a power user feature.

00:08:49   You could say, well, as you use the app more and more,

00:08:52   you could say, well, you're more experienced

00:08:55   and so you're looking for more capability.

00:08:58   But it's not about you, it's just your experience with my application.

00:09:05   But editing favorites doesn't fall into that category.

00:09:09   It's a pretty core thing, which is perhaps somewhat more embarrassing that I missed it

00:09:13   in the first version, but we'll just let that slide.

00:09:17   And you can start to think about an application in this way.

00:09:21   I think you'll often end up in a better place, because ultimately what you want is happy,

00:09:26   passionate users.

00:09:27   You want people who use the application, it does exactly what it is they need without

00:09:34   them having to feel like they're foolish, without them feeling like they're doing something

00:09:40   wrong.

00:09:43   The next link that I have is by Kathy Sierra, which is an article she wrote about creating

00:09:48   passionate users.

00:09:50   And right at the end of it, there's a really great graph called the "Feturitis Curve,"

00:09:56   is what she calls it.

00:09:57   And it's kind of plotting user happiness versus the number

00:10:01   of features in your application.

00:10:02   And it's kind of pointing out that as you go up,

00:10:06   as you add features initially from zero--

00:10:08   like you start with no features, your user

00:10:10   is not particularly happy-- and then as you add features,

00:10:13   they'll get happy.

00:10:14   You'll kind of have the like, oh, this is nice,

00:10:16   but I wish I could do more.

00:10:17   Mm, I'm so glad they added that.

00:10:19   The next feature, oh yeah, that's cool.

00:10:21   Oh yeah, that's awesome.

00:10:22   I rule.

00:10:22   They start internalizing this like, yeah,

00:10:24   This does what I want, and it does it in a way that makes me awesome.

00:10:28   And then they are happy.

00:10:29   And then you hit this tipping point where as your app gets more featureful, or gets

00:10:34   more complicated, I would add to it.

00:10:36   Then you start to get into users thinking questions like, hmm, maybe I need to look

00:10:40   at the manual.

00:10:41   Huh, I wonder where I go to do this.

00:10:46   And then they start to be like, I suck.

00:10:47   I can't use this application.

00:10:51   a very hard balance to find between those two things, where you want to make it featureful,

00:10:58   but you don't want to make it complicated. You want to make it obvious and easy to use.

00:11:02   And that's ultimately why I did an edit button. Maybe it's glazy, you could say, but ultimately,

00:11:07   when I thought about it and I went back and forth on this for how I could enable this

00:11:10   mode, it seemed the way that every user would know how to use it. And because that's the

00:11:15   case, that's what I wanted to do.

00:11:19   Now, for a little bit of an amusing side note

00:11:22   about why I chose not to make the icons wiggle

00:11:25   when in edit mode, this is one of these funny things

00:11:27   as an iOS developer that I have gradually developed

00:11:30   a large set of superstitions.

00:11:32   And I use superstition intentionally.

00:11:35   I know that's a kind of absurd word.

00:11:37   But over time, I've had all kinds of little experiences.

00:11:41   And one of them, I remember, is having someone

00:11:44   getting an app rejected because their icons wiggled

00:11:48   when they went into delete mode.

00:11:49   And Apple said that it went against the guideline talking

00:11:54   about simulating home screen and home screen-like experiences.

00:12:00   Whether or not that's really a reasonable thing or something

00:12:03   that would actually happen anymore,

00:12:05   I was realizing I have a whole collection

00:12:07   of these little superstitions that I

00:12:08   apply to app development.

00:12:10   And some of the other ones that I thought of

00:12:12   were if I'm trying to rush an update out to my customers,

00:12:18   It's an important one, so like this emoji++ update.

00:12:20   I always say automatically approve.

00:12:22   I don't say wait for developer release.

00:12:24   And it's coming from this vague notion

00:12:26   that I've had that it seems vaguely anecdotally

00:12:30   that things go slightly faster in that mode, which

00:12:33   you could rationalize away as saying, well,

00:12:35   if Apple looks at it and says, well,

00:12:37   this one is going to immediately go out to the store,

00:12:39   and this other one is going to have

00:12:41   to wait some period of time before the developer releases

00:12:44   it, well, let me prioritize the one that's immediately

00:12:46   going to go hit the store rather than the other one.

00:12:49   I have no idea if that's the case.

00:12:51   It probably isn't.

00:12:52   But I have all these little superstitions, and so that's why I didn't make the apps wiggle,

00:12:56   because I didn't want to risk an app getting rejected.

00:12:58   Maybe I'll make them wiggle in a future update, an update that if it gets rejected, I'm not

00:13:01   quite as pressed on.

00:13:03   But whenever I'm doing these kind of quick, rushed updates that I want to get out as soon

00:13:06   as possible, I always have these little tiny little things that I'm doing that are completely

00:13:12   absurd.

00:13:13   all the same because I guess over time you always just kind of build up these superstitions

00:13:18   of that, how you could make it go a little faster.

00:13:20   I mean, in the same way that if I want an update to go faster, I always make my version

00:13:23   numbers smaller.

00:13:25   So like rather than making it 1.1, I'll make it 1.0.1, maybe indicating to the app reviewer

00:13:31   that I didn't really change much, I just fixed a few things.

00:13:35   And obviously if you go to the extreme of that, you end up with the kind of terrible

00:13:39   launch release notes that you seem like a lot of apps are getting to where they're just

00:13:42   like, oh, a few bug fixes and performance improvements.

00:13:45   They're not actually explaining it,

00:13:47   which maybe is because they're superstitious about if they

00:13:49   write a long list of things that changed,

00:13:51   then the app reviewer is going to go through each one of those

00:13:54   like a checklist.

00:13:55   I don't know.

00:13:56   These are the funny things about being an app developer.

00:13:58   But anyway, that's kind of where I

00:14:00   wanted to go for today's show.

00:14:01   Hopefully that's interesting.

00:14:02   I know it's just one button in a keyboard app.

00:14:04   But I find that so often it is easy,

00:14:08   especially in our community, to glorify the complex over the obvious, to glorify the kind

00:14:15   of clever over the intuitive.

00:14:18   And I think in a lot of cases, for a lot of applications, you're better off making something

00:14:26   that is easy and obvious to understand.

00:14:28   And it'll make your customers happier and your customer support easier.

00:14:32   That's it for today's show.

00:14:33   As always, if you have questions, comments, concerns, or complaints, I'm @_davidsmith

00:14:37   on Twitter.

00:14:38   me, david@developingperspective.com. Hope you have a great week, happy coding, and I'll talk to you next week. Bye.