#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
◼
►
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: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: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: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
◼
►
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: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:38
◼
►
me, david@developingperspective.com. Hope you have a great week, happy coding, and I'll talk to you next week. Bye.