PodSearch

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.