When you go to an album in Apple Music in iTunes for macOS, there’s a button labeled + ADD. Clicking this button adds the album to your library.

Here’s the thing though: when you click it, there’s zero UI feedback. It’s not just that there’s a delay to the feedback. There’s zero UI feedback. But then when you go to your library and click on Recently Added in the sidebar, it’s there. The action is successful, but you don’t know it as long as you remain on the album’s page.

This is bizarre to me. We’ve had Apple Music for a while now — about two years. One of the most fundamental things you do as an Apple Music customer is add new music to your library. You’d think the developers at Apple would’ve spent time on this button. It’s an important button. This same button on the iOS counterpart works great; the feedback on it is instant. But it’s not in macOS.

User-driven events that cause HTTP requests to occur are extremely common in apps. Here’s the time-tested flow for how the UI responds:

  1. The user performs their action, which triggers an event and generates an HTTP request.
  2. Immediately the UI acknowledges this action and lets you know that an HTTP request has been sent.1 If the user is sending a chat message, for instance, it immediately pushes the message into the chat history as light grey text. If the user has clicked a button, the button takes on a lighter color and is disabled. Perhaps it shows a spinner or progress bar.
  3. Once the HTTP request is successful, the UI changes once more. In the chat example, the grey text turns into standard black. With the case of the button, it disappears altogether if no longer relevant, or its text changes to a success message, and the progress bar or spinner disappears.
  4. If the HTTP request is instead unsuccessful, the UI reverts to how it originally was, with an error message if the situation calls for it.

There’s a thousand ways to make variations on this theme, but this is the theme, and arguably the most important button in Apple Music isn’t following it. I don’t understand why. Will this be fixed when High Sierra debuts this fall?


  1. If developers are feeling really ballsy, at this point they’ll instantly show the UI in its success state, with the assumption that the HTTP request will be successful. In situations where there’s no user data requiring server-side validation, the only way the HTTP request could fail is with a server hiccup or connection problem, so this assumption of success can work well in an application. Whenever I see something built this way though, I’m disappointed if the UI doesn’t have some indication of bona fide success when the request returns 200. I just like having 100% confidence that my action was successful; without a UI change that occurs after the request has resolved, such a level of confidence isn’t attainable. ↩︎