Recently, one of my relatives needed help with his iPhone. On his previous Android phone, he could easily copy his offline music library and play it with any music player he wanted. But it wasn't the same with the iPhone. I've never used an iPhone before, so I had to do a little research.

I realized that the iPhone sandboxes every application so heavily that apps can't simply access a global folder and import music from it. To access your saved library, you have to import it into the application's sandboxed storage. One way to do this is to copy your library to an application folder located under On My iPhone, such as On My iPhone > VLC, or use an import button inside the app itself. Both approaches have to be implemented by the app, and some apps don't support both. You might install an app that doesn't create a visible folder like VLC does and only provides a simple import button with awful UX.

This creates two issues:

  1. The number of applications you can realistically try is significantly reduced. In addition to considering how the app actually behaves, you also have to make sure it provides a decent workflow for importing your files. Not to mention that a large portion of them aren't even free.
  2. Storage usage increases. Both your original library and the application's copy of it exist. Unless the application exposes its folder, you have to either remain dependent on that application or risk deleting your original files. And the app might not allow exporting them either.

You might think: why did Apple make this so complicated? A simple music-playing workflow shouldn't be this hard. Wasn't Apple supposed to be simple to use?

The reason is that Apple doesn't aim for you. You might not consider yourself a "power user," but you're still not the average user. Apple is a very opinionated corporation. It focuses on what most of its target audience needs. It relies heavily on its ecosystem. Apple's target audience is happy to use iTunes forever.

Now, that might sound stupid to some people. Many Android users mock Apple for doing things like this. While some of that criticism is valid, and while I personally hate being an Apple user, I still think it's genius.

The iPhone doesn't aim to be a good mobile OS in every possible way. It aims to provide the easiest-to-understand and simplest workflow for people who just want to do basic things with their apps. Apple is to mobile what Windows is to desktop. Linux is undoubtedly better than Windows in many, if not most, aspects, yet it's much harder to understand and use.

Apple takes you by the hand like a child and leads you wherever you want to go. Android lets you wander more. That's also one of the reasons Apple has been so successful. Its end goal is, or at least was, user experience rather than user potential.

This always comes with trade-offs. The more you try to understand and accommodate the laziest and least technical users, the more opinionated your product becomes. And the more opinionated it becomes, the more other people will judge it for being different and for not supporting every possible use case.

Apple understood this perfectly. That's also why you might have noticed that many of its users are very tech-ignorant and might appear dumb. Now, they might actually be dumb, but they might also simply be different. Apple filled that gap in the market.

This is closely related to the abstraction article I wrote about. When you add abstractions to your project, you're moving toward a kind of dumbification. You're taking away some potential and making certain things harder to do, even when they seem simple. Abstractions make repetitive tasks much simpler and easier to understand, but the further you move outside the comfort zone that those abstractions support, the more you'll face issues that seem much bigger than they would have been if you had worked without those abstractions.

The simplest music-playing process might take twice as long on Android as it does on the iPhone. But if you want to do something beyond the basics, the iPhone might now take five times as long as Android.

This is also related to the dependency article. You're making yourself dependent on the abstracted interface you've created for yourself. If your music application suddenly updates and makes the export button a paid feature, you're now locked in and forced to do what it wants. It's a limitation.

It's like the training wheels you put on a bike when you're a child and learning to ride. At some point, you need to take them off if you want to unlock your full potential. Staying dependent on those wheels will only slow you down and might even affect your learning journey.