Developing Perspective

#121: Dealing with Rejection.


00:00:00   Hello and welcome to Developing Perspective.

00:00:02   Developing Perspective is a podcast discussing news of note in iOS development, Apple, and

00:00:06   the like.

00:00:07   I'm your host, David Smith.

00:00:08   I'm an independent iOS and Mac developer based in Herndon, Virginia.

00:00:10   This is show number 121, and today is Tuesday, April 23rd.

00:00:16   Developing Perspective is never longer than 15 minutes, so let's get started.

00:00:19   All right.

00:00:20   So today, I'm going to be talking about app store rejection.

00:00:24   And this is sort of the topic of my,

00:00:27   kind of in the front of my mind,

00:00:28   because the first version, or first submission

00:00:31   of Feeder Angular to the store was rejected.

00:00:34   And that's totally unexpected,

00:00:35   and I'll get into that later.

00:00:36   But certainly I always just sort of,

00:00:38   it's an interesting part of the app process,

00:00:41   being in the app store, doing app review.

00:00:43   And so I figured that would be an interesting thing

00:00:45   to kind of walk through what that's like,

00:00:46   and how I look at it, the experience I've had, and so on.

00:00:50   So broadly, I'm gonna take a step back

00:00:51   and make sure everyone kind of knows what I'm talking about.

00:00:53   So if you were going to make an app and put it in either the iOS or Mac App Store, this

00:00:57   applies to a couple of other different stores, notably not the Google Play Store, but most

00:01:01   stores seem to have some kind of review process.

00:01:03   But I'm going to talk about the iTunes and App Store process.

00:01:06   And so basically you submit your application and it sits around for a little while.

00:01:09   And in Apple's case, it says, "Waiting for review is the app status that it will have."

00:01:14   And it sits there for a little while.

00:01:17   And then at some point, it changes from "Waiting for review" to "In review."

00:01:21   And exactly what that means is entirely ambiguous,

00:01:23   other than the fact that you imagine that somehow more

00:01:26   things are happening.

00:01:28   But in review can take any amount of time.

00:01:30   I've had it take minutes.

00:01:31   I've had it take hours.

00:01:32   I've had it take days.

00:01:34   And so while it's in that process, the people at Apple

00:01:38   are going through the application

00:01:40   and doing some thing to it.

00:01:42   That process is somewhat opaque in terms of you

00:01:44   don't know exactly what's going on.

00:01:46   But generally speaking, you expect

00:01:48   that they're looking for things like,

00:01:51   Does it crash?

00:01:52   Does it do something that's not allowed?

00:01:54   Is it implemented in a way that is consistent with the human interface guidelines?

00:01:59   Those types of questions.

00:02:00   And they're kind of reviewing your application to make sure it's something that they want

00:02:02   to put on the store.

00:02:04   And if they do, you'll get an email or an update saying, "Ready for sale?"

00:02:09   or something like that, or "Processing for App Store.

00:02:11   Your app is approved."

00:02:12   Great.

00:02:13   And then that process begins, it goes into the store, or if it's an update, it gets pushed

00:02:17   out through the update system.

00:02:18   However, if something is not good,

00:02:21   then you will, instead of getting an email

00:02:25   that's saying, you know, ready for sale

00:02:27   or processing for App Store, you'll get something

00:02:28   that says application submission feedback,

00:02:31   which is their kind of very passive, soft,

00:02:33   gentle way of saying your app was rejected.

00:02:36   You actually, you know, you don't actually get anything

00:02:38   that says rejection until you go into iTunes Connect.

00:02:40   You just get the application feedback submission,

00:02:42   or submission feedback.

00:02:44   And it's not something to be sort of ashamed of

00:02:47   or feel too bad about if you get.

00:02:49   I've been doing this a while, and I've probably

00:02:52   dealt with probably, I guess, 30 or 40 rejections

00:02:55   over the course of all the apps I've submitted

00:02:57   and all the different places and all the different problems.

00:03:00   So it's just part of the process.

00:03:01   And you can be rejected for all kinds of things.

00:03:04   The most obvious and simple ones are things like,

00:03:07   if your app crashes ever during the review process,

00:03:10   it's an automatic rejection, for example.

00:03:12   It's one of those things that you'll get a crash log

00:03:14   and they'll send it to you.

00:03:16   Basically, those types of things are just immediate.

00:03:19   Then there's a sort of the second category of things where our topics can be rejected

00:03:23   because they, for a variety of reasons that, for which they would violate the app review

00:03:29   guidelines.

00:03:30   And so these can be things like content things, they include content that's objectionable

00:03:34   or they're not ranked, they're not rated accordingly because of their content.

00:03:38   It's doing something that they don't that they don't allow or don't want to allow.

00:03:42   all kinds of things that you can kind of do

00:03:44   or it could be not useful enough

00:03:46   is often a complicated one.

00:03:48   I know of a lot of friends who have written an app

00:03:50   with a very narrow focus purpose

00:03:52   and they can be rejected for saying

00:03:54   it's not useful enough, which is complicated to define.

00:03:57   But generally speaking, they'll go through the review

00:03:59   guidelines and say, whenever you get a rejection,

00:04:01   you'll get a reason why.

00:04:03   That reason may not be something that you agree with,

00:04:05   it may not be something that you like,

00:04:07   but it'll be a reason that you can kind of start from.

00:04:09   And to Apple's credit, what they used to do

00:04:11   to do is that would just be all you'd get.

00:04:13   And you could kind of, all you could really do

00:04:16   was resubmit and make any changes,

00:04:18   add something in the review commentary.

00:04:20   But basically that was it.

00:04:22   Now what they've done now, which is a little bit better,

00:04:24   is they've added something called the resolution center.

00:04:26   So when an app is rejected, or an in-app purchase

00:04:29   is rejected or anything like that,

00:04:30   you will get a, rather than just getting a message

00:04:34   with, you know, saying generally what it is,

00:04:36   you'll get a slightly longer form thing

00:04:38   in what's called the resolution center.

00:04:39   And this is kind of like, how do you feel,

00:04:41   a chat or a forum, not real time, but it's a way to have a back and forth conversation

00:04:46   with App Review.

00:04:47   And so this, for example, with Feed Wrangler, I was rejected twice, essentially, in the

00:04:52   same submission.

00:04:53   The first one was what they called a metadata rejection.

00:04:55   And a metadata rejection is where the app isn't rejected outright, but there's something

00:04:59   about it that they are not really sure about, or this thing in your description or your

00:05:03   icons or something that they want changed or they have questions about, and they can

00:05:08   ask you questions.

00:05:09   And sometimes it's just, in my case,

00:05:10   it was just they had a question about how something worked

00:05:13   or how I expected something to work,

00:05:14   and they wanted to have clarification.

00:05:16   So you go in and write a response

00:05:17   and send them something, something.

00:05:19   And then you kind of have a little back and forth.

00:05:21   And it's very helpful to think of this process

00:05:24   as all the communications that you have

00:05:27   in the resolution center,

00:05:28   you want to be as nice as you can in that sense.

00:05:32   I've definitely, I've experienced myself

00:05:35   sort of when you can get frustrated,

00:05:36   it can feel like you're kind of talking

00:05:37   to something a bit that's so opaque or intractable,

00:05:41   like what do you do when you get really frustrated.

00:05:43   But this isn't the kind of thing that you want to get to.

00:05:45   You want to keep your cool, handle yourself

00:05:48   in a way that is responsible and kind

00:05:51   and just appropriate for who you're interacting with.

00:05:53   Obviously, it's not like the other--

00:05:55   you're talking to a person probably

00:05:57   in Cupertino or somewhere.

00:05:58   And so you want to be kind.

00:05:59   You want to be nice.

00:06:00   You want to be reasonable about--

00:06:01   if they're asking a question, you want to answer it.

00:06:03   And don't be like--

00:06:06   even if it's something you think is obvious

00:06:07   or something that's clear, it's like be patient

00:06:09   and understanding and kind of work through

00:06:11   and create screenshots that lets you make attachments

00:06:14   to your posts to the resolution center, so great.

00:06:17   If they have a question about how to do something,

00:06:19   it's like take the time to,

00:06:21   take a series of screenshots, map them out.

00:06:24   I use Napkin for this, which is an agent distilled

00:06:28   Guy English and Chris Ferris's app

00:06:30   for doing that kind of image annotation.

00:06:32   And it works great for that.

00:06:33   You kind of lay it out, and your goal

00:06:36   is to get them on your side rather than being sort of,

00:06:41   I guess, argumentative or confrontational.

00:06:43   Your goal is to be like, hey, I'm sorry you had that problem.

00:06:46   I'm sorry you had that question.

00:06:48   Let me try and kind of flesh out what I was thinking about that

00:06:51   or why that's a problem.

00:06:52   This isn't the time to be sending them a Google search

00:06:54   result explaining something to them.

00:06:56   It's something you want to take the advantage of opportunity.

00:06:58   It's a rare thing that you have an opportunity

00:07:00   to talk to out-per-view.

00:07:01   So you want to take full advantage of that to talk to them.

00:07:05   And basically, in my case, they had a question.

00:07:07   I responded.

00:07:08   And ultimately, the app was rejected.

00:07:10   It was rejected for something that I kind of--

00:07:12   I wouldn't say I expected, but I kind of knew it might be happening.

00:07:15   And it was the in-app purchase type that I had chosen.

00:07:17   I had chosen an auto-renewing one, which is something like, in theory,

00:07:20   you can use for something like what I was doing with an ongoing subscription

00:07:24   cloud service.

00:07:26   But in this particular case, they said it wasn't eligible.

00:07:29   And I'm not exactly sure what--

00:07:31   it's just I don't know if it's just slightly ambiguous

00:07:33   guidelines.

00:07:33   I'm like, all right, that's fine.

00:07:34   If they don't want to do it that way,

00:07:35   I'll do a non-recurring subscription model,

00:07:37   change up E&I purchase, change up my purchasing system

00:07:40   a little bit, and resubmit it.

00:07:42   And that's where I am now.

00:07:43   It's back in waiting for review, I think.

00:07:47   And that's kind of the process you go through.

00:07:49   I'm not going to get too--

00:07:51   it's like, it's one of those things that after it's rejected,

00:07:53   you can certainly start kind of attacking it still

00:07:56   in terms of going to the resolution center

00:07:57   and be like, hey, I think it really should be allowed

00:08:00   to do this, I think for this, this, and that reason.

00:08:02   I need to be able to do this or whatever it is.

00:08:05   And there's probably something to that.

00:08:08   If that's a crux of really important to your business

00:08:12   or absolutely vital, that you really think

00:08:13   you should be able to do something and you can't,

00:08:16   maybe it's worth pursuing.

00:08:18   In general, I think if you've listened to the show

00:08:20   for a while, you know that I'm a fairly pragmatic person.

00:08:21   And instead, I'm like, okay, well, that didn't work.

00:08:25   I'm doing some things with subscriptions

00:08:27   I think are intentionally to make this easier. For example, all of my subscriptions are

00:08:31   yearly, or my only subscription. My subscription is based on a yearly model. And so that in

00:08:37   general, I don't have to worry too much about a lot of this back and forth that can happen

00:08:42   if I had set up, you know, it's a monthly or a weekly or something like that type of

00:08:45   a subscription, it would be really annoying if I couldn't use a non-recurring style. So

00:08:49   instead, I was like, you know what, I'm just going to adjust my pricing, I'm going to simplify

00:08:52   things a little bit for myself and for my customers. It's just one flat yearly price.

00:08:57   And so in some ways, I don't even have to really worry

00:08:59   about dealing with the way in which I reach out to customers

00:09:03   for that renewal for 365 days after the app launches.

00:09:08   Obviously, the app is set up to work that way already,

00:09:12   but I can really polish and refine and work on the messaging

00:09:14   and exactly how I reach out to people later.

00:09:16   So it's like, OK, that's fine.

00:09:18   I'm not going to get into a big fuss about it.

00:09:20   There may come a point down the road where I revisit this.

00:09:23   And one approach that I have definitely done before myself

00:09:26   is when I'm trying to launch something,

00:09:28   I just want to get it out there.

00:09:29   And so I'll put this-- whatever I'll go for--

00:09:32   do exactly what Apple says for version 1.0.

00:09:35   And for version 1.1 or whatever it is,

00:09:37   like a little bit farther down, I

00:09:39   can submit something that's a bit closer to the thing that

00:09:42   was rejected before.

00:09:44   And to see if that gets rejected,

00:09:46   then I can maybe go have a bit more of a back and forth

00:09:48   in the resolution center and really talk to them

00:09:50   and explore it and see how far I can go with that.

00:09:53   But I'm doing it at a time when that's not holding up

00:09:56   launch, it's not holding up my customers, it's just kind of something that I'm doing.

00:10:00   And I think probably something more generally that you can do is you can go through a process

00:10:04   of what I would call a test submission process.

00:10:07   This is something where, you know, it's like, I think actually panic did this for status

00:10:10   board, which makes a lot of sense, because some of what they do is very close to the

00:10:14   edge of an app review guideline about multi, like multi widget, alternative desks, desktop

00:10:20   stuff.

00:10:21   But so what they did is I think they took a proof of concept and it was working and

00:10:25   obviously it's like met the general review guidelines and they submitted that early.

00:10:28   So that if Apple was going to come back and say, No, you can't do that at all. They could

00:10:33   have explored that as early as you can. And it's just something you want to take advantage

00:10:37   of. I mean, understanding that it's not like it's for better or worse, the app review process

00:10:41   does not have limits on it in terms of number of submissions, number of reviews, those types

00:10:45   of things. And obviously, you don't go nuts with that, you know, constantly be submitting

00:10:48   like, you know, half baked ideas, but which if it's it's a valuable thing to understand

00:10:53   that app review is a very, very high risk,

00:10:57   I guess you could call it, activity in making an app,

00:11:00   in that it is a very binary thing.

00:11:02   If your app is rejected, it is rejected.

00:11:04   That's it, and especially on iOS,

00:11:06   there's not an alternative, a good alternative for that.

00:11:09   You could say, oh, I can put it on like the jailbreak stores

00:11:11   or things, but the reality is you want to be

00:11:13   on the app store if you're trying to make your living

00:11:15   from selling apps, and so it's very, very important

00:11:18   that you respect this process and understand it

00:11:21   and make sure that you are planning for it.

00:11:23   And by that I mean, so like I'm hoping right now

00:11:26   to launch Feed Wrangler next Tuesday, in seven days.

00:11:30   So Tuesday, April 30th.

00:11:32   That's my goal right now.

00:11:33   But obviously, the Feed Wrangler app is currently still waiting

00:11:38   for review for the second round.

00:11:40   And so it's entirely possible that could change.

00:11:45   And so you just have to be careful and plan for that

00:11:47   and expect that it's very unlikely,

00:11:49   Even if you look at the iOS review times recently,

00:11:52   I think are about seven or eight days.

00:11:54   But you can't really plan on a seven or eight day from when you

00:11:56   submit to when you launch, probably.

00:11:58   Typically what I do is I take that number and I double it,

00:12:01   and that's what I plan for.

00:12:02   And that's generally what I'm doing with this one.

00:12:04   I kind of was expecting-- I was hoping to launch today,

00:12:07   but it didn't quite work out.

00:12:08   And so I'm going to be launching hopefully next Tuesday.

00:12:12   And so that's kind of the process you go through.

00:12:14   And then hopefully it'll just be approved.

00:12:16   A couple things, also, just random notes

00:12:18   about app rejections and things, things that are never helpful,

00:12:22   really, or useful to talk to you when you're dealing with someone

00:12:26   in with app review and something gets rejected, saying, but this

00:12:29   other app also does this. Not helpful. I don't either say,

00:12:34   well, we should have rejected that too. It's not helpful to

00:12:37   say, you know, oh, it's like, but here's someone else who does

00:12:40   it. It's like, they'll say, well, that's, you know, that

00:12:42   like, that probably should have been rejected to then I'm sorry.

00:12:45   Like that's all there is being I said, I said, don't be argumentative, don't get upset about

00:12:50   it.

00:12:51   Every now and then you actually get a call from Cupertino.

00:12:53   So if you get a if you get a call from them, obviously, you're going to want to answer

00:12:57   it.

00:12:58   And you're going to want to talk to it.

00:12:59   And I think it was at 418, I think is the area code for app review, or for not for app

00:13:04   review, but for Apple.

00:13:06   And so if you ever get a call from 418, let me just let me just double check that 408,

00:13:11   sorry, 408.

00:13:12   408. If you ever get a call from a 408 number that you don't recognize, that is probably

00:13:17   someone from Cupertino calling to talk to you about your app. And so answer the phone,

00:13:22   talk to him, don't let it go to voicemail kind of thing. And again, in that conversation,

00:13:25   it can be very frustrating because often you'll be talking to somebody and they're able, they're

00:13:30   not able to say as much as you would like. You can't be, typically what they're able

00:13:33   to say is here's the line in the app review guidelines that you're violating it. And you

00:13:38   can start getting like, well, what if I did this? What if I did that? And like, typically

00:13:41   they're unable to say, well, I don't give you a clear answer.

00:13:44   They'll say, that's, you know, this is the policy. And this is

00:13:48   what you are doing that's against that policy. And be

00:13:50   like, well, what if I did this? It's like, well, you have to

00:13:52   reset the app. And when we take a look at it, and so just be

00:13:55   patient, be understanding and realize that they're doing their

00:13:57   job, you're doing yours. And the best thing for everybody is for

00:14:00   you to be, you know, kind, respectful and just, you know,

00:14:03   roll with it. So that's, that's our projection. Hopefully, it's

00:14:07   helpful. I said, it's, I've gone through this so many times that

00:14:10   I'm not as upset about it or as disappointed as I used to be.

00:14:13   It's kind of expected in some ways

00:14:14   that app reviewers caught a lot of bugs and problems

00:14:18   in my apps, which I appreciate.

00:14:19   It's also caused some frustration or problems for me.

00:14:22   But it's just part of the process.

00:14:23   You just need to understand it, plan for it,

00:14:25   and expect that this is something that could happen.

00:14:27   All right.

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

00:14:29   As always, if you have questions, comments, concerns,

00:14:31   or complaints, I'm on Twitter @_davidsmith.

00:14:33   I'm on appnet @davidsmith.

00:14:35   And actually, I have one of those bulk app.net invite

00:14:39   linky things, which you'll have in the show notes.

00:14:41   So if you haven't signed up for app.net,

00:14:43   but you want an invite, that's a way to get it.

00:14:45   And otherwise, I hope you have a good week.

00:14:47   Happy coding.

00:14:48   And I'm sure we'll all be going a little bit crazy

00:14:50   in the next few days waiting for WWDC tickets to go on sale.

00:14:53   My current guess is probably tomorrow, Wednesday morning.

00:14:56   But we'll see.