I have compiled below list aiming to inspire you and help you to build better apps for everyone.
Build an experience not software only
There are many ways to find how to create value for your target users such as using user research, market research, pilots/trials at targeted groups/persona, etc.
So make sure you are building a product based on the fact that is targeting to create value for users.
I would strongly suggest avoiding making user experience targeting decisions on behalf of your users. There are exceptions to this such as in a case where you are introducing something entirely new and unique where you lead and control the experience of your unique new product.
Always leverage the data you have collected during user researches, pilot groups, prototype sessions and so on. User behavior is not a static element. User behaviours are custom set of responses for the result of user interactions directly or indirectly within your app, so get ready to be able to adapt to user behaviors.
Such isolated approach doesn't mean that you should do a user research before you build only, it means that you should look into user research as a dynamic component/element and combine user research as a part of your product development life cycle. Treat user research as an opportunity to learn more and more from the users to make your product better.
User research is a large and exciting topic, however, another key item is to have a user journey map for user experience improvements. Having a user journey map could also help you to explore complementary products/services and potential partnerships as well as critical user touchpoints.
Build two apps; one for Phone and one for Tablet
Instead of replicating UI for tablets from phone version, build a complete set of different user experience for tablets. If you can also make your app work differently in landscape and portrait mode that would be even better.
It is a too good to be true kind of strategy to release both apps at same time, However more practical one is to release apps not too far apart from each platform release. Another strategy is to release tablet or phone version at later stages, depending on the user experience you want to build and depending on your budget as well.
Use device specific features
This is about extending your app features to leverage the mobile device's hardware specific features such as Accelerometer,Camera,Compass,Geolocation,Media ,Network,Vibration,3D touch etc.
You need to accept the fact that your target users are using a mobile device not traditional desktop devices so get on to the features of being mobile.
Using this adaptive approach will additionally allow your app to become further personalized for each unique device specific function, in other words, become more adaptive and build empathy for device specific features. These efforts will promote your users for using their device specific features.
Make things easier for your new, preferred current and returning users
Make sure you allow users to be able to create accounts or log in using preferred or most used social media channels. Social media login feature increases the usability of your app dramatically also it is a good security practice not to store user data rather just store a link to a social media account.
Make sure you do allow multiple login scenarios such as login using Facebook, Google+, Twitter or just using an email or both. Providing such access flexibility will increase the penetration rate of your app and will also reduce the effort and time required for new and returning users to become a member of your product and services.
Make sure you welcome your new users with a guide on how they will find things at your interface and where the features are.
Always stay connected with Social media channels
It is obvious that you need to get your app connected to social media channels. This connection could be created and maintained in many ways such as enabling OS provided sharing features.
A good practice would be sharing app's content at social media channels such as Facebook, twitter,Instagram, Pinterest etc. Cross-channel posting is even better such as posting an image for Instagram and posting a tweet with text content supported by a link.
Follow the basic rule of showing the right content (highly valued by an end user) at the right time (highly significant at the given point) to right target (interested or potential users).
Follow the design guidelines!
Always follow the design guidelines provided by platform providers such as Google for Android and Apple for iOS. Make sure to apply your brand guidelines on top that will ensure you are providing content to your users which are aligned with your brand.
If you don't follow the design guidelines, then be prepared to encounter issues with OS upgrades, facing minor patches that might break your UI and even UX, limited support on new device face the risk of the need to redesign the UI and UX.
Unless you are building a game interface which is a pretty specific experience and would require your users to learn how to use the game controls and UI elements, I suggest sticking with the standard UI elements.
Remember that this approach will assist new users to be able to understand and use your app easily and with minimum adaptation and minimum confusion of course.
For custom UI you would need some level of training for the end user to find out how to do things in your app with their way which might end up users abandoning your app by uninstalling.
Secure your user data and don't overuse it
Simply do not create custom ways to handle sensitive data and security. Remember that custom algorithms are easier to hack into than standardized encryption methods and algorithms. Try to avoid keeping sensitive data at your app as more as possible.
You can do still do personalizations without storing sensitive data such as storing app preferences which are generic to your app usage.
If you need to store a level of sensitive data, try to store it encrypted and set of minimum data such as if you want to store a history of restaurants visited, store an order without exposing exact date and time unless there is a value to doing so. If there is sensitive data always get into the habit of requesting the password before allowing user access to sensitive data.
Do not cache or pass data that could expose your end user's data as in during transit or rest encrypt sensitive data.
Do not store any credit card, passwords or personal information that could harm your user if it is exposed.
One way I find is to use a method of structuring data for app as in a way that even you share the data there is no security risk or any exposure to your end user.
Always use encryption for sensitive transactions and do not pass any information in clear text format that could be exposed in network through sniffing.
A common mistake is passing parameters with clear text in URLs such as username and passwords or any other sensitive information that could harm the user or expose your system to external attacks.
Personalization, a way of making your app user-friendly
The more personalization the better it is. This sounds so easy to do however it is not. Allow user generated content in your app, that would increase the user value.
Avoid asking user's preferences, again and again, store these type of information and use it with user's consent when required.
Smart and responsive means your app would ask the user what kind of action would be needed to make it work for the particular scenario rather than expecting the user to figure out what to do or get stuck in the middle with an unfriendly error message.
Language is another interesting one; most apps generate messages that users don't understand unless you are building an app for people who are building apps. So try to soften the geek tone or formal tone and make it more friendly! and a casual tone.
Do not just dump an error message (that is great when you are building it not when you are trying to use it), take action to handle the situation for the user. Only, try to create a solution for known problems to assist the user. Since you build the app, you would probably have a solution that you can trigger at background without loading the manual recovery workload to your end user. If your cached content is corrupted, show the user a message as "hold on I am trying a fix." and refresh the data, if failed suggest a user action such as "Sorry can't fix this. Need a reinstall" and guide the user how to do so. This is another way to demonstrate that you care about your users and their experience with your product.
This approach applies how you need to handle notifications for your users as high value/critical information versus low value not critical information aka spam..!
Make sure your app can work in offline mode.
Mobile app not functioning without connection is a common mistake where an app is designed to act like a web app which requires connectivity all the time.
We have high-speed networks however network coverage is not always on, so wouldn't you think of having an app to have limited functionality when there is no connection available.
This approach requires to generate offline content for your user at your app and will allow you to stay connected to your users. This could include some static content that might be updated and synced when there is a connection is available.
A good example would be Spotify offline feature that allows you to download the selected songs and play when there is no connection available.
Collect user inputs/feedback through the App and App store reviews
Always stay connected with the users via App store and also provide an alternative feedback channel in the app.
Staying connected with users mean that you listen and release new versions based on feedback. Keep iterating and making it even better with user feedbacks.
A good example would be facebook's feedback feature on top of existing App Store reviews.
Monitor User Experience and Performance
This is quite critical especially after your first app release, make sure you monitor and analyze user experience using analytics tools, most of these tools provide detailed user flow analytics.
Basically, inspect and adapt the flow and features based on usage data. Most of the time we miss the ideal flows, so better listen to your users' behavior. Understanding what users are doing with your app is critical.
App performance has many aspects and of course it is not just the app itself, make sure to include monitoring at the backend that is fueling your app.
You can find some samples I have created at infogram.
Provide impressive release notes and have a product roadmap!
This is critical to maintaining the interest of your users by showing that you are continuously investing heavily on your product. Patching and fixing your app based on feedback does build confidence at your current and future users. Make sure you provide sufficient information per each release and try to avoid having too frequent releases such as more than once a day unless it is critical.
An ideal app would provide new features and functionality at healthy release cycles such as weeks, months or every quarter (depending on how big impact the feature and function has on users) and also maintain and improve what is being already provided to the users without taking away any experience created.
Don't fall behind and stay in the game! Keep connected with other apps
Follow the latest user trends and maintain an early adopter status to maintain your competitive position. A good example would be having support for wearables once a new wearable is introduced and is already trending at your current and target user base. It is always better to act fast rather than waiting too long and losing your customer base to another app which offers a smooth integration to related or complimentary products and services with more and more features.
Allow multi-way integrations to other apps from and to your app that your users are using as part of their journey.
Balance data and logic processing at client=mobile device and server side=backend
An ideal app would balance the load between the client and server side processing data and logic. This processing usually contains business logic, customer data and transactions. It is easier said than done however to be able to achieve this, make sure you measure the load on both sides (client/server) and balance at your next releases as required.
Prefer to use lightweight services such as JSON services to transfer data to and from your app. Do not pump significant amounts of data that will require massive processing i.e. parsing on the client side and potentially will lead to more errors and make your app unstable.
Avoid over-engineering approach as more as possible hence maintain a simple and high flexible architecture.
You need to be aware of the fact that your app will not be the only app sitting at the user's mobile device and not every user will have the latest high-end mobile devices. Always prefer to use lightweight data to a mobile device and do the heavy lifting on the backend(server side) where you can control the elasticity of the environment, unlike user's mobile devices which will vary from low end to high end.
Optimized usage of local resources
A well-optimized app uses network, CPU, GPU and storage in an effective and efficient way. Doing so will also promote low battery consumption, smaller app size for app store downloads and a positive impact on performance overall.
Remember that you are creating a digital product supported with your services for your users so treat your apps in high priority because they represent your products/services and most importantly your brand.