Songpocket design: waiting to ask for permission

(I recommend reading Introducing Songpocket first.)


One of my favorite features of Songpocket is something it doesn’t do: immediately demand access to your Music library the first time you open it.

Instead, it only asks you for permission after you tap “Allow Access to Music”.

Don’t you hate when the very first thing an app does is throw a permission alert in your face? Before you even get to see what the app looks lik—

Hey! That’s just a rude first impression. And why would I let you send me notifications when I don’t even know what those notifications will be for yet?

Whenever an app asks me for permission for something and it hasn’t showed me why, I always say no. I’ve seen other people do that, too.

Apple recommends in their iOS Human Interface Guidelines, “[r]equest personal data only when your app clearly needs it.” I’d extend that advice to all permission requests.

When an app asks you for permission to do something, it should be immediately obvious why. Not only is that less annoying, it also makes users more likely to say yes.

For example, only ask for permission to send notifications after the user enables a feature in your app that sends notifications. That way, they’re totally expecting to deal with the permission alert, because they just asked for it.

Likewise, Songpocket waits until you’re ready before it asks for access to your Music library. It knows you’re ready because you tapped “Allow Access to Music” yourself.

The key advantage of this is that you get to see and play with the rest of the UI before dealing with permissions.

Now, in Songpocket, that “rest” isn’t much: all you can do before it has access to your Music library is open Options and change the accent color.

But still, the first thing you get to do is see the UI and play with it. And that’s why you installed the app in the first place.

[T]he best first-run experience is to get people into the app as quickly as possible, because that’s where they want to be.

—Brent Simmons

The worst apps are the ones that don’t even let you see the UI unless you give them a certain permission. That feels adversarial and petty. It feels bad, like they’ve banned you from a theme park. I do have a specific app in mind here, but I’ll let it go mercifully unnamed.

Apps that wait to ask you for permission feel respectful, trustworthy, and even patient. It feels like they’re saying, have a look around. Take your time. I’ll be right here when you’re ready.

Isn’t that a great user experience?


Now that I’ve made my own app, I do understand why a lot of apps fail this part of the user experience, although I still hate it.

It’s because getting this behavior right is harder than it seems. You have to understand the structure of your code really clearly, and put checks in a lot of places to make sure you don’t fire the permission alert when you don’t mean to.

You also have to accommodate an entire extra state in your app, which is when you haven’t asked the user for permission yet. For Songpocket, that means the the collections view doesn’t just show your collections; it shows your collections, or the “Allow Access to Music” button.

But on the other hand, you have to accommodate an extra state anyway, which is when you’ve already asked the user for permission, and they said no. In that case, you need to tell the user that they need to open Settings to flip the switch.

Have you ever used an app that just pretends it has no data if you deny it permission? That was the developer being lazy, because apps do know from Apple’s frameworks whether they’ve been denied permission. They just didn’t want to accommodate that extra state—but then, users don’t know how to fix the issue.

So if you can accommodate that extra state, then you can accommodate the state when you haven’t asked for permission yet. Just do the work.


I love the mindset that leads you to make your app wait to ask for permission. I call that being “aggressively respectful” to the user.

Believe it or not, users can sense respect. They can tell when apps are careless and dismissive to them, and they can also tell when apps care about their experience.

So be aggressively respectful to the user. They can tell, and they’ll appreciate you for it.


(I recommend reading The app icon and name next.)