#197: Speculative Development.
00:00:00
◼
►
Hello and welcome to Developing Perspective. Developing Perspective is a podcast discussing
00:00:04
◼
►
news of note, anonymous development, Apple, and the like. I'm your host, David Smith.
00:00:08
◼
►
I'm an independent iOS developer based in Herner, Virginia. This is show number 197.
00:00:12
◼
►
Today is Friday, October 3rd. Developing Perspective is never longer than 15 minutes, so let's
00:00:18
◼
►
get started. All right. So I'm going to be talking today about what I call, I guess,
00:00:26
◼
►
speculative development and the role
00:00:29
◼
►
that it can kind of play in keeping you, as a developer,
00:00:32
◼
►
sane and happy, as well as potentially creating
00:00:34
◼
►
opportunities for yourself down the road.
00:00:37
◼
►
And this is drawing from-- I always
00:00:39
◼
►
like to try and draw it from topical experiences
00:00:41
◼
►
that I'm having as a developer.
00:00:43
◼
►
And so today I'm going to be talking about my experience
00:00:46
◼
►
with an app I just released called Emoji++.
00:00:49
◼
►
So back this summer, when Apple announced
00:00:52
◼
►
that you could do custom keyboards,
00:00:55
◼
►
Like I've said many times on the show, whenever a new API,
00:00:58
◼
►
a new major piece of functionality comes out,
00:01:00
◼
►
I always try to think, well, what would I do with that?
00:01:02
◼
►
What could I do with that?
00:01:03
◼
►
How could I make use of this hot new technology in a way
00:01:07
◼
►
that-- what could I build now that I previously wouldn't
00:01:11
◼
►
have been able to build?
00:01:12
◼
►
Because that's ultimately the question that is most
00:01:14
◼
►
interesting with major iOS updates.
00:01:16
◼
►
Like, it's all the compatibility stuff.
00:01:17
◼
►
There's the things that are getting better and better.
00:01:19
◼
►
But what's really interesting is the things
00:01:21
◼
►
that are completely new that you just couldn't do before.
00:01:24
◼
►
And keyboards is definitely one of those things.
00:01:26
◼
►
You just couldn't do keyboards before.
00:01:28
◼
►
Now you can.
00:01:29
◼
►
And I always love trying to also wrap my hands
00:01:31
◼
►
around these new technologies to make sure
00:01:33
◼
►
that I have a good understanding of how the platform works,
00:01:36
◼
►
that I have a good understanding of most of the parts about it.
00:01:39
◼
►
And in general, I would say I do.
00:01:40
◼
►
Like if it's everything that isn't related
00:01:42
◼
►
to graphics and games, I have a pretty good understanding
00:01:45
◼
►
about how it works on iOS, just from having
00:01:46
◼
►
done this so many times.
00:01:48
◼
►
And so when I saw a keyboard, I was like, what would I do?
00:01:50
◼
►
What about the current text input methods
00:01:53
◼
►
I not like on iOS?
00:01:55
◼
►
And the honest answer for text is I don't really have any many complaints.
00:01:59
◼
►
The iOS 8 keyboard is great for me.
00:02:01
◼
►
I like the little predictive thing at the top.
00:02:03
◼
►
I've played around a little bit with some of these ones since they've come out with
00:02:06
◼
►
like the swipey things and some people swear by them.
00:02:09
◼
►
They don't really do it for me, but I think a lot of that's just muscle memory and if
00:02:12
◼
►
I switched, I'm sure I could get used to it, but I don't really feel compelled to switch.
00:02:16
◼
►
But I did think about one thing that always kind of annoyed me and that was how the way
00:02:21
◼
►
the emoji keyboard worked on iOS. Yep, this is going to be me talking about emoji, which
00:02:27
◼
►
if you're not familiar with, emoji are those little, these tiny little, I don't know how
00:02:33
◼
►
to say it, these little pictures of funny, silly, interesting things that you can send
00:02:38
◼
►
as part of text messages or as part of tweets or emails or whatever. And there's a really
00:02:45
◼
►
powerful way to convey meaning concisely. So what I love about emoji is that you can
00:02:50
◼
►
sends someone a thumbs up. And a thumbs up carries with it a lot of good meaning without
00:02:56
◼
►
having to like deal with all the nuance and connotation of actually writing it out and
00:03:00
◼
►
message out in prose. It just be like, yeah, I acknowledged I hear you coming soon. Hear
00:03:06
◼
►
that. Yes, you're awesome. Like there's so many different meanings that you can kind
00:03:09
◼
►
of put on it that I really like it like it for communication. And I'm good friends with
00:03:13
◼
►
with a guy named Casey Liss, you may have heard of,
00:03:16
◼
►
who loves emoji and has perhaps raised my level in terms
00:03:24
◼
►
of emoji use.
00:03:26
◼
►
But I always hated the emoji keyboard on iOS,
00:03:29
◼
►
because it was built in this kind of just mind-bending way,
00:03:32
◼
►
where it has these five pages or tabs,
00:03:35
◼
►
and then within those tabs, there's up to 10 sub-pages
00:03:39
◼
►
that you swipe through.
00:03:41
◼
►
And so if you don't know exactly where you're looking for,
00:03:43
◼
►
it's almost impossible to find anything.
00:03:45
◼
►
And even if you do know what you're doing,
00:03:47
◼
►
you're probably sitting there swiping like five or six times
00:03:50
◼
►
And fair enough, over time this gets better,
00:03:53
◼
►
because the emoji you actually use
00:03:55
◼
►
end up on your recently used page,
00:03:57
◼
►
and so you can find them there.
00:03:59
◼
►
But that's kind of awful.
00:04:00
◼
►
That's kind of a hack.
00:04:01
◼
►
And so I was like, well, how could I make this better?
00:04:06
◼
►
It's kind of silly.
00:04:07
◼
►
Emoji is silly.
00:04:08
◼
►
But it's something that I thought
00:04:12
◼
►
would be worth trying to tackle.
00:04:14
◼
►
And it's a nice, focused, simple problem.
00:04:16
◼
►
So I figured, let's try this.
00:04:18
◼
►
Now, the tricky thing, of course, with that
00:04:20
◼
►
is that I knew previously Apple has stopped
00:04:24
◼
►
approving emoji-related apps, as far as I know.
00:04:27
◼
►
I'm not completely confident on that.
00:04:28
◼
►
But I know there was a period where emoji apps were
00:04:31
◼
►
And they were ultimately kind of scammy,
00:04:33
◼
►
because all they really did was enable the emoji keyboard,
00:04:37
◼
►
initially was only available, I think,
00:04:38
◼
►
in Japanese localizations or something like that.
00:04:41
◼
►
It wasn't really doing what it said on the tin.
00:04:46
◼
►
It wasn't giving you an emoji keyboard so much
00:04:48
◼
►
as enabling a system feature.
00:04:50
◼
►
And so after a while, Apple said,
00:04:51
◼
►
you know, we're just going to enable the emoji keyboard
00:04:54
◼
►
by default, which it does now.
00:04:55
◼
►
And we're not going to allow these apps that are just
00:04:57
◼
►
kind of trying to present them as though if you get this app,
00:05:01
◼
►
then suddenly you get emoji when in reality you've
00:05:04
◼
►
had an emoji keyboard all along.
00:05:06
◼
►
And so that as a developer, especially
00:05:08
◼
►
as an independent developer, when
00:05:09
◼
►
I see those types of tensions, like I have this idea.
00:05:12
◼
►
I have this thing that I think would be cool and fun to build.
00:05:15
◼
►
But at the same time, I know that there's
00:05:18
◼
►
a reasonable chance that this may not get through App Review,
00:05:21
◼
►
that Apple has in the past said this type of app is not OK.
00:05:26
◼
►
And obviously, this is a new context.
00:05:27
◼
►
This is completely, in some ways,
00:05:32
◼
►
It's a completely unplowed field about what
00:05:36
◼
►
Apple is going to allow, how you're
00:05:39
◼
►
going to have to structure an app so that it would be approved.
00:05:42
◼
►
And so whenever I'm in this situation--
00:05:44
◼
►
it's happened many times before--
00:05:46
◼
►
I always have to think about how can I kind of speculatively
00:05:49
◼
►
build this app?
00:05:50
◼
►
How can I build this feature or build this thing in such a way
00:05:55
◼
►
that I'm not going to spend way too much time working on it,
00:05:58
◼
►
ultimately to find that it ultimately gets rejected,
00:06:02
◼
►
which has happened to me before, that I've had an idea,
00:06:04
◼
►
I've put it out there, and it gets rejected.
00:06:06
◼
►
And it's tragic when you hear these stories happen.
00:06:08
◼
►
It's like there was a guy recently
00:06:10
◼
►
who built a launcher app as a today widget,
00:06:13
◼
►
and he was just rejected and pulled from the store.
00:06:16
◼
►
And that stuff happens.
00:06:17
◼
►
And it's just part of the deal of being in the app store
00:06:20
◼
►
is that Apple makes the rules, and they enforce the rules,
00:06:23
◼
►
and they're their rules, and that's fair enough.
00:06:26
◼
►
So anyway, this is what I run into.
00:06:30
◼
►
And so what I decided to do with Emoji++ is I was like, OK,
00:06:34
◼
►
this is a simple enough app.
00:06:35
◼
►
I'm just going to kind of build it.
00:06:36
◼
►
Build a basic-- I hate the term minimal viable product,
00:06:39
◼
►
because I think it has a lot of connotation on it
00:06:42
◼
►
that I don't think is necessarily helpful.
00:06:44
◼
►
But I try and build something that
00:06:46
◼
►
is useful and straightforward, which I think
00:06:50
◼
►
is a much more constructive way to say that.
00:06:52
◼
►
If I build something that's useful and straightforward that
00:06:54
◼
►
addresses this need and problem, and I'll put that in the store,
00:06:57
◼
►
and I'll see what Apple does.
00:06:59
◼
►
And so I did that.
00:07:00
◼
►
And my concept, if you don't have the app,
00:07:02
◼
►
it's pretty straightforward.
00:07:03
◼
►
But rather than having this weird paging interface,
00:07:06
◼
►
I have all the emoji in one big list.
00:07:07
◼
►
And then I have a jump bar on the side
00:07:09
◼
►
to quickly navigate around the categories, which
00:07:11
◼
►
in my experience is so much faster and so much simpler
00:07:14
◼
►
because I can swipe up and down a scroll view in iOS
00:07:20
◼
►
like the Dickens.
00:07:21
◼
►
I mean, I'm very good at that.
00:07:22
◼
►
I've been doing it now for six years.
00:07:24
◼
►
I have incredible speed and control
00:07:26
◼
►
as flipping things around.
00:07:27
◼
►
And my eyes are very good at scanning through and seeing
00:07:30
◼
►
you, oh, there's the eggplant.
00:07:32
◼
►
Oh, there's the cactus.
00:07:33
◼
►
Oh, here's the smiley face with the one eye closed.
00:07:37
◼
►
Like, whatever it is that I'm looking for,
00:07:39
◼
►
I can very quickly find it.
00:07:41
◼
►
And so I went and I built that.
00:07:42
◼
►
And that process was interesting.
00:07:45
◼
►
Any time you use a new API, you always
00:07:47
◼
►
run into odd issues, things that you wouldn't have expected.
00:07:51
◼
►
Early on in iOS 8's betas, the simulator and debugging
00:07:56
◼
►
interactions were kind of broken.
00:07:58
◼
►
But they actually work really well now.
00:08:00
◼
►
So that's thumbs up for tools there.
00:08:03
◼
►
But the process of getting to that point,
00:08:07
◼
►
it took a little while, but it got there.
00:08:10
◼
►
And the app works now.
00:08:12
◼
►
And so I got it ready roughly for iOS 8.
00:08:15
◼
►
When they announced the actual gold master of that,
00:08:21
◼
►
and iPhone 6 and 6 Plus, I did another round of testing,
00:08:24
◼
►
made sure it worked reasonably well on the bigger screens.
00:08:27
◼
►
Which actually, in this case, actually works kind of nicely
00:08:29
◼
►
because it's a universal app.
00:08:31
◼
►
It works on the iPad as well.
00:08:32
◼
►
So most of that was for free.
00:08:34
◼
►
It was just testing.
00:08:35
◼
►
And I submitted it.
00:08:37
◼
►
At this point, I probably only spent a few-- honestly,
00:08:40
◼
►
a few days of work to get it to this point.
00:08:43
◼
►
Because like I said, I'm being a little bit cautious.
00:08:45
◼
►
I'm being a little bit speculative
00:08:47
◼
►
about my investment into this.
00:08:49
◼
►
Because if I'd gone and spent weeks or months
00:08:51
◼
►
on polishing and doing everything
00:08:53
◼
►
you could imagine with this app, one thing, hey,
00:08:56
◼
►
the app might have actually ended up being worse,
00:08:58
◼
►
because it would have had too many features, which
00:09:00
◼
►
kind of eliminates the whole purpose in the first place.
00:09:02
◼
►
And two, I could have spent a lot of time
00:09:04
◼
►
that ultimately I may not have any return for,
00:09:07
◼
►
if it just ends up being rejected or stuck in App Review
00:09:09
◼
►
or something like that.
00:09:11
◼
►
So the app goes into App Review.
00:09:13
◼
►
And it's sat there for about a week and a half
00:09:17
◼
►
or something, like most people have been seeing recently
00:09:19
◼
►
with App Review, which is kind of just part
00:09:21
◼
►
for the course this time of year.
00:09:22
◼
►
But it's a little frustrating sometimes.
00:09:25
◼
►
But then it got its first rejection.
00:09:27
◼
►
And well, it got its only rejection, thankfully.
00:09:29
◼
►
But it got rejected.
00:09:30
◼
►
And there's a line in the App Store policy
00:09:35
◼
►
that in the current review guidelines
00:09:37
◼
►
that keyboards have to include numerical keys, which
00:09:42
◼
►
is just in the guidelines.
00:09:43
◼
►
And I thought I'd address that in some ways,
00:09:47
◼
►
maybe perhaps kind of tongue in cheek,
00:09:49
◼
►
because the emoji keyboard does include the emoji numbers, which
00:09:53
◼
►
which are the numbers inside of blue boxes.
00:09:56
◼
►
But I don't think that was actually
00:09:57
◼
►
really what they meant.
00:09:58
◼
►
And so fair enough, they said, that's in the guidelines.
00:10:01
◼
►
You don't seem to do that.
00:10:03
◼
►
So fair enough.
00:10:04
◼
►
Actually, when I saw a couple of people that had that type
00:10:10
◼
►
of rejection, I went in and added that,
00:10:13
◼
►
had my build already.
00:10:14
◼
►
As soon as I got my rejection, I resubmitted
00:10:16
◼
►
with a build that includes the actual number characters,
00:10:19
◼
►
just so that they're there.
00:10:20
◼
►
And then I waited another week.
00:10:22
◼
►
And then yesterday happened, and the app got approved.
00:10:27
◼
►
It went out into the world.
00:10:28
◼
►
And the response has been kind of remarkable.
00:10:30
◼
►
It's for something that I honestly
00:10:32
◼
►
wasn't sure there'd be a market for, because it's
00:10:35
◼
►
kind of whimsical, and it's kind of silly.
00:10:38
◼
►
And it's something that's tied into the way that I use my phone,
00:10:42
◼
►
and I didn't really know if anyone would actually
00:10:44
◼
►
find that nice.
00:10:45
◼
►
But so far, the response has been kind of remarkable
00:10:48
◼
►
and really cool.
00:10:48
◼
►
It's been linked up to in a lot of places,
00:10:50
◼
►
a lot of places that make me really proud to hear people saying that they like it.
00:10:56
◼
►
And that's genuinely cool.
00:10:59
◼
►
I've been doing this long enough that at some point you can kind of get numb to the reception,
00:11:04
◼
►
and that's kind of a defense mechanism that you kind of have to build because inevitably
00:11:09
◼
►
with the good come the bad, and the bad can be really biting and really affect you.
00:11:15
◼
►
And so it's definitely something that you build a thick skin
00:11:19
◼
►
about, but when things like this happen
00:11:21
◼
►
and people really seem to genuinely find it useful
00:11:24
◼
►
and really enjoy it, it's very rewarding.
00:11:26
◼
►
And it's kind of a reminder of why
00:11:28
◼
►
I do this in the first place.
00:11:30
◼
►
That feeling and that experience is far more important and part
00:11:35
◼
►
of what motivates me to do what I do
00:11:37
◼
►
than any of the other aspects, the business aspects
00:11:40
◼
►
or the lifestyle aspects of being an independent developer.
00:11:43
◼
►
It's things like this in emoji where people are just like,
00:11:46
◼
►
this is great.
00:11:46
◼
►
Now I can communicate better with my significant other.
00:11:51
◼
►
Or I just have fun.
00:11:52
◼
►
I could put a smile on someone's face.
00:11:54
◼
►
That's far more important and far more ultimately rewarding.
00:11:58
◼
►
But then the downside, of course,
00:11:59
◼
►
of speculative development is that it has a couple of issues.
00:12:02
◼
►
Like there weren't so many bugs.
00:12:04
◼
►
There were a couple of things that I wasn't expecting.
00:12:06
◼
►
There's a weird issue that if you have guided access,
00:12:09
◼
►
the accessibility feature turned on,
00:12:11
◼
►
and your keyboard doesn't request full access,
00:12:13
◼
►
which I don't because I don't want to send your keystrokes
00:12:16
◼
►
to the internet.
00:12:17
◼
►
There's apparently a weird interaction
00:12:19
◼
►
where it won't load, which I will be filing a radar about.
00:12:22
◼
►
And hopefully Apple will resolve in a way that makes sense.
00:12:25
◼
►
Because I really would prefer to not have to request full access
00:12:27
◼
►
because I like knowing that there's nothing I can do that
00:12:30
◼
►
is accidentally leaking someone's private information
00:12:33
◼
►
out into the world.
00:12:34
◼
►
That's the whole point of not having
00:12:37
◼
►
to request guided access.
00:12:38
◼
►
So I'll be submitting a radar about that.
00:12:41
◼
►
And there was an issue with managing your favorites
00:12:43
◼
►
and a few other bugs.
00:12:44
◼
►
But now that I have the base and I put it out into the store,
00:12:47
◼
►
I know it's approvable.
00:12:49
◼
►
Apple has already demonstrated that to me.
00:12:51
◼
►
I know there's a market for it.
00:12:53
◼
►
And so now I can iterate very quickly.
00:12:54
◼
►
And within the first 12, 18 hours,
00:12:57
◼
►
I just plowed through on getting the update out
00:13:00
◼
►
that addresses the 99% issues that people are having.
00:13:03
◼
►
It makes the UI a little tighter.
00:13:05
◼
►
It's one thing I love is when you put an app out
00:13:08
◼
►
and you have a couple of designers.
00:13:09
◼
►
Like obviously this can get a little tricky.
00:13:11
◼
►
But having designers who are then
00:13:13
◼
►
going to be able to be like, you know,
00:13:14
◼
►
if you did this one little thing in this one little place,
00:13:17
◼
►
your app would look a lot better.
00:13:18
◼
►
And that kind of feedback is really helpful for someone
00:13:20
◼
►
like me who isn't really a designer.
00:13:23
◼
►
And so that's what I did.
00:13:24
◼
►
And the next bug fix update is up and waiting for Apple.
00:13:27
◼
►
Unfortunately, it might be about a week until it comes out.
00:13:30
◼
►
But that's the process I went through.
00:13:33
◼
►
And I would encourage you, if you're
00:13:35
◼
►
listening to this as your developer,
00:13:37
◼
►
And you're struggling with what you-- like getting started.
00:13:41
◼
►
And you're something I hear talked to a lot of people
00:13:43
◼
►
that are struggling with this first thing.
00:13:47
◼
►
This approach of more speculative development
00:13:49
◼
►
is something that you can be more thoughtful about.
00:13:55
◼
►
And just try.
00:13:56
◼
►
Just build something and see if it works.
00:14:00
◼
►
And who knows?
00:14:01
◼
►
Maybe it'll get linked up on Daring Fireball
00:14:03
◼
►
and be up in the top charts in the store.
00:14:07
◼
►
I don't know.
00:14:08
◼
►
Sorry, that sounds a little bit glib.
00:14:11
◼
►
But you never know where it's going to go.
00:14:14
◼
►
But you know it definitely won't go anywhere if you don't try.
00:14:18
◼
►
And so be thoughtful about the amount of energy and effort
00:14:20
◼
►
that you put into it.
00:14:22
◼
►
But if you are thoughtful in that way,
00:14:26
◼
►
ultimately I think you'll find that it can be kind of fun.
00:14:30
◼
►
And you never know where that's going to go.
00:14:33
◼
►
That's it for today's show.
00:14:34
◼
►
As always, if you have questions, comments, concerns,
00:14:36
◼
►
or complaints. I'm @_davidsmith on Twitter, or you can email me, david@developingperspective.com.
00:14:41
◼
►
Hope you have a great week, happy coding, and I hope you enjoy your emoji. Bye.