We call them apps instead of applications because they’re supposed to add small, incremental bits of functionality to your phone. It used to be that you could go to the App store and buy modest but useful apps for a few dollars, and start using them immediately, almost as you would use a web site.
But things went sideways pretty fast. Today, apps try to shove in as many features as possible in an attempt to keep up with their competitors. If you just need something simple, you might have to wade through dozens of screens to find it.
And it gets worse. Every app asks you to create an account. Every app wants you to subscribe. I'm all for paying a fair price for a piece of software, but I'm not going to "subscribe" to a calculator app that doesn't provide any ongoing new material. I don't want to create an account if the only reason for doing so is to give the app developer a way to send me spam.
Here is my manifesto: the principles I'll use whenever I develop my own apps. I encourage all good and noble programmers out there to adopt them for yourselves.
No Servers
Does your app really need a server? It might, if it has to share data with other users, or access information that isn't directly available on the internet. But if it can work without a server, it should. Store data in local databases or local files. Use cloud storage to back it up or make it available to multiple devices.
No Accounts
Does your app require that users have accounts? If you aren't building an app that is part of an existing web service, it probably doesn’t. Even if your app has a server, you can generate a random account and store the credentials in the user's cloud storage or keychain — allowing them to use the app and access their account from multiple devices, without having to surrender their email address or remember a password.
No Internet
If your app does use internet services, it shouldn't be dependent on them to the extent that it becomes useless (or crashes) when they aren’t available. Every app should expect internet outages and plan for them. Use local data stores to download or cache needed data in advance, and stage outgoing data for delivery later. If you are using a remote database, learn how to synchronize it with a local store in your app. Tip: Avoid autogenerated keys. Use UUIDs or natural keys instead.
No Subscriptions
Asking people to subscribe to an app just to keep using it is a shameful money grab. If your app does a fixed thing, charge a fixed price. If you want people to be able to install your app for free and pay later, then offer a genuinely useful tier of free functionality and a one-time purchase price to get the rest. Obviously there are exceptions for apps that provide streaming content or other ongoing services that cost money to produce. But, you are not Adobe. You don’t employ hundreds of developers and release major new versions twice a year.
No Ads
If your app has to stop and show the user a full-screen ad, you've immediately cut its usefulness in half. If they were considering paying for your app before, the ad is more likely going to motivate them to delete it. Ads are obsolete — they don't make any useful amount of money. Find some other way to earn revenue if you need the revenue.
Put the User First
Users want to open your app and start using it. If your app hits them with an immediate solicitation for money or a request for personal information, you aren't serving the user's needs, you're serving your own needs. Build good software that people want, and they'll pay you for it, without your needing to trick them or strong-arm them into doing it.
App stores used to be good at enforcing these kinds of rules, but over time, they've given in to greed. Don't let that deter you. Be a better developer, produce a better app. Rise above the fray. Make apps great again, starting with yours.