For large groups of users, mobile devices have replaced the desktop as their primary computing platform. As an application developer, you have to think mobile-first to make your customers happy. Mobile apps require a different approach to UI design, and usability matters if you want your apps stand out from the competition! An amazing mobile UX can be the difference between users flocking to your app or causing them to delete it entirely. Fortunately, building great user interfaces is a skill you can learn, even if you're a heads-down desktop or web coder.
Usability Matters: Mobile-first UX for developers and other accidental designers gives you practical advice and guidance creating attractive, elegant, and useful user interfaces for native and web-based mobile apps. You'll start by learning six dimensions of a great app experience. Then you'll be guided through practical concepts for creating those great experiences for your users. Following expertly-presented patterns, examples, and checklists, you'll learn how to recognize good (and not-so-good) UX in your own designs and master the techniques that separate the best apps from the rest of the pack.
"This manuscript is a real treasure."
~ Clive Harber
"There is a strong feeling that the author really knows what he is talking about and shares a lot of his experience in the field."
~ Dmytro Lypai
"Should be required reading for any aspiring developer / designer. "
~ Desmond Horsley
"There were many gems in the book that really brought out an "Oh yeah, that makes sense!" kind of response."
~ Amit Lamba
1.1. What is usability and why does it matter?
1.1.1. Usability matters to everyone
1.1.2. Usability, UX, and design
1.1.3. The formula for app store success
1.1.4. Great usability experiences are intuitive
1.2. The six components of great app experiences
1.3. How considering all six components can make apps better
1.3.1. Example 1. An email client
1.3.2. Example 2. A news app
1.3.3. Example 3. A tower defense game
1.4. Why you need to consider the six components in your apps
1.4.3. Planning for success
Part 1: Context
2. Who is using the app?
2.1. You are not your users
2.1.1. You’re not an average user
2.1.2. Be aware of the effects on your thinking
2.2. Who is the app for?
2.2.1. Who will get value from your app?
2.2.2. Understanding the potential user base
2.2.3. Are there enough people who want the app?
2.2.4. Targeting groups of individuals
2.2.5. Putting on a persona, or several
2.2.6. Enterprise app usage
2.3. People aren’t all the same
2.3.1. Differing abilities
2.3.2. Differing expectations
2.3.3. Differing goals
2.4. What are people actually doing?
2.4.1. What are people doing with the app?
2.4.2. What else are people doing?
2.5. Putting it into practice
3. Where and when is the app used?
3.1. Where is the app used?
3.1.1. App usage considerations at a macro-geographic level
3.1.2. App usage considerations at a micro-geographic level
3.2. The regional impact on an app
3.2.1. Considering multiple language support
3.2.2. How culture and locale can impact an app
3.3. When is the app used?
3.3.1. Considering the time of day
3.3.2. The impact of the time of year
3.3.3. For how long is the app used?
3.4. What activities are being undertaken while using the app?
3.4.1. Moving vs stationary?
3.4.2. Dedicated or distracted?
3.4.3. Isolated or in companion?
3.4.4. Standing, sitting, or lying?
3.5. Putting it into practice
4. What device is the app running on?
4.1. Write Once, Run Everywhere?
4.2. Supporting multiple operating systems
4.2.1. OS imposed restrictions
4.2.2. Looking like you belong on the OS
4.2.3. Belonging on a version of the OS
4.2.4. Belonging in the enterprise
4.3. Maintaining brand identity and differentiation
4.3.1. Branding vs visual identity
4.3.2. Separating your brand from the OS
4.3.3. Maintaining OS conventions while still reflecting a brand
4.4. Supporting different device capabilities
4.4.1. Handling multiple physical device sizes
4.4.2. Other hardware capability variations
4.4.3. Software variations
4.5. Putting it into practice
Part 2: Input
5. How do people interact with the app?
5.1. Pointing devices
5.1.1. Providing input with a finger
5.1.2. Providing input with a stylus
5.1.3. Providing input with a mouse
5.2. Using a pointing device to provide input
5.2.1. The variety of gestures input
5.2.2. Supporting multi-touch input
5.3. When pointing and touch input gets hard
5.3.1. Touch events don’t always do what the user wants
5.3.2. Handling raw input events
5.4. Putting it into practice
6. How is data entered into the app?
6.1. The goals of the person using the app
6.1.1. Improve tasks by minimizing input
6.1.2. Improve tasks by avoiding input through defaults and suggestions
6.1.3. Improve tasks with alternative inputs
6.2. How to ask for data to be entered in forms
6.2.1. Optimizing how the form is arranged
6.2.2. Simplify how text is entered
6.2.3. Password entry requires special consideration
6.2.4. Simplifying entry from a fixed set of options
6.2.5. Validation and required fields
6.3. Putting it into practice
7. What about data that doesn't come directly from the user?
7.1. Data from web-based resources
7.1.1. Dealing with data you directly request
7.1.2. Dealing with data pushed to the app
7.2. Getting data from the device
7.2.1. Input from the Operating System
7.2.2. Data from the file system
7.2.3. Data from other apps
7.3. Getting data from sensors
7.3.1. Use sensors to improve the experience with the app
7.3.2. Allow for variations in sensor input
7.4. Using heuristics and inferring input
7.4.1. Enhancing the app experience based on an individual's usage
7.4.2. Enhancing the app experience based on the usage of all people
7.5. Putting it into practice
Part 3: Output
8. How are items displayed in the app?
8.1. The fundamentals of good visual output
8.1.1. Focus on the person using the app and their goals
8.1.2. Meet the expectations of the people using the app
8.1.3. Account for the specific device being used
8.1.4. Respect standards and conventions
8.2. Laying out controls on a screen
8.2.1. Implying meaning and relationships through alignment and hierarchy
8.2.2. Implying meaning and relationships through consistency
8.2.3. Implying meaning and relationships through proximity
8.3. Navigating within the app
8.3.1. Common navigation patterns
8.3.2. Special navigation considerations
8.4. Avoid discrimination with what you display
8.4.1. Ensure your UI works for everybody
8.4.2. Saying the same thing to everybody who uses the app
8.5. Many factors affect the display of images
8.5.1. One size doesn’t fit all
8.5.2. Physical size isn’t everything
8.5.3. Customizing image placeholders
8.6. Use clear icons with specific meanings
8.7. Allow for extremes of connectivity and content
8.7.1. Content that’s slow to load or doesn’t load at all
8.7.2. When content isn’t available
8.7.3. Avoiding empty states
8.8. Putting it into practice
9. What about output that isn’t shown on the screen?
9.1. Physical and audio output support changes on screen
9.1.1. Don’t leave your app silent. Give it a voice.
9.1.2. Haptic feedback starts with vibration
9.2. Output to other apps and devices
9.3. Communicating from your back end
9.3.1. Allowing for multi-channel communication
9.3.2. Sending effective push notifications
9.3.3. Using badges with push notifications
9.4. Communication via channels beyond the app
9.4.1. Using email to communicate with your users
9.4.2. Using SMS to communicate with your users
9.4.3. Using third-party messaging services to communicate with your users
9.5. Putting it into practice
Part 4: Responsiveness
10. How is time perceived when using the app?
10.1. How people perceive "mobile time"
10.1.1. Context influences the perception of responsiveness
10.1.2. Perception is about feelings, opinions, and comparisons
10.1.3. Being responsive with notifications
10.1.4. Meet expectations, don,t just be as fast as possible
10.2. Influencing the perception of your app,s responsiveness.
10.2.1. Answer questions about what the app is doing
10.2.2. Show progress when something,s happening
10.2.3. Animation can hide delays
10.2.4. Usable isn,t the same as finished
10.3. Perceptions associated with the age of your app
10.4. Putting it into practice
11. Make the app start fast
11.1. Do the minimum to start the app
11.1.1. Deciding what to do on startup
11.1.2. Displaying a splash screen when launching the app
11.2. Pre-load content to make the app faster
11.2.1. Pre-loading content to distribute with the app
11.2.2. Pre-loading content for the app’s next use
11.3. Pre-format content retrieved by the app
11.4. Cache content to save time and money
11.4.1. Using in memory and disk based caches
11.4.2. Checking for new versions of cached items
11.4.3. When to invalidate and delete cached items
11.6. Exercise answers
11.6.1. Pre-loading and pre-formatting content
11.6.2. Where to cache?
11.6.3. Caching, true or false?
12. Make the app run fast
12.1. Eager loading
12.1.1. Eager loading complements pre-loading content
12.1.2. Being too eager
12.1.3. Knowing what to load eagerly
12.2. Parallel operations
12.2.1. Synchronous and asynchronous operations
12.2.2. Advice when working in parallel
12.3. Combining requests
12.3.1. Control the server your app connects to
12.3.2. Get faster responses by combining requests
12.3.3. Simplify the client by combining requests
12.3.4. Combining requests and local files
12.5. Exercise answers
12.5.1. When to load data eagerly
12.5.2. Acting asynchronously
12.5.3. Combining requests, true or false?
Part 5: Connectivity
13. Coping with varying network conditions
13.1. Not all connections are the same
13.1.1. Securing your connection
13.1.2. Connection speed can vary
13.1.3. Connection cost can vary
13.2. Occasionally connected is the norm
13.2.1. Connection may not be possible
13.2.2. Connections may be lost
13.2.3. Connections may change
13.3. Optimizing for subprime conditions
13.3.1. Caching improves the experience in subprime conditions
13.3.2. Compression improves the experience in subprime conditions
13.3.3. Deferring actions increases what’s possible in subprime conditions
13.3.4. Batching operations can simplify the code in subprime conditions
13.3.5. Automatic retries improve the experience in subprime conditions
13.4. Balancing usability and a poor connection
13.4.1. Prioritize important activities in poor conditions
13.4.2. Adjust network usage based on network conditions
13.5. Keep the user in control when conditions are poor
13.7. Exercise answers
13.7.1. Occasional and varied connections
13.7.2. Coping with sub-prime network conditions
13.7.3. Communicating app activity
Part 6: Resources
14. Managing power and resources
Appendix A: Exercise answers
- Understanding your users
- Optimizing user input and output
- Creating fast and responsive experiences
- Coping with poor network conditions
- Managing power and resources
About the author
Matt Lacey has been creating apps for mobile devices since 2001. He is currently working as an independent mobile development consultant, helping companies of all sizes with strategy, planning and implementation of mobile development solutions. Matt is a community leader and Microsoft MVP who organizes user group meetings to help people learn to create better apps.