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.2.1. Context of use underpins everything in an app
1.2.2. Input includes all ways data and information get into the app
1.2.3. Output includes and goes beyond what is shown on the screen
1.2.4. Responsiveness is how the output is perceived
1.2.5. Connectivity changes while apps are in use and isn’t guaranteed
1.2.6. Resources are finite and must be managed
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.1. Competition between apps can be fierce, and UX is an important differentiator
1.4.2. Meet the expectations of those who will use your app
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. How you’re different from your users
2.1.2. You’re not an average user
2.1.3. 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. Consider people’s differing abilities
2.3.2. Consider people’s differing expectations
2.3.3. Consider people’s 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?
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. Considering the day of the week
3.3.3. The impact of the time of year
3.3.4. For how long is the app used?
3.4. What activities are being undertaken while using the app?
3.4.1. Is the person using the app moving or stationary?
3.4.2. Is the user dedicated or distracted?
3.4.3. Is use isolated or in companion with something else?
3.4.4. Are they standing, sitting, or lying down?
3.6. Exercise answers
3.6.1. Regional and location impact
3.6.2. When the app is used
3.6.3. Activities influencing the app
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. Internal hardware capability variations
4.4.3. Accounting for software variations
Part 2: Input
5. How do people interact with the app?
5.1. Supporting different 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. Supporting gesture based 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
6. User-entered data
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
7. Data not from a 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
Part 3: Output
8. Displaying items 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 loads slowly or doesn’t load at all
8.7.2. When content isn’t available
8.7.3. Avoiding empty states
9. Non-visible output
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
Part 4: Responsiveness
10. Understand the perception of time
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 appropriate 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
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
12. Make the app run fast
12.1. Use eager loading, so people don’t have to wait for the app
12.1.1. Eager loading complements pre-loading content
12.1.2. Beware of being too eager
12.1.3. Knowing what to load eagerly
12.2. Parallel operations take less time
12.2.1. Synchronous and asynchronous operations
12.2.2. Advice when working in parallel
12.3. Combine requests for improved speed and control
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
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. Batch operations 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
Part 6: Resources
14. Managing power and resources
14.1. When it’s gone, it’s gone!
14.2. Do you really need it?
14.2.1. Lazy loading reduces wasted effort
14.2.2. Use alternatives to save resources
14.3. How often are you going to use it?
14.3.1. Managing resources only used once
14.3.2. Managing resources used repeatedly
14.4. Do you still need it?
14.4.1. Turn it off when finished
14.4.2. Responding to changing circumstances
Appendix A: Exercise answers
A.1. Who is using the app?
A.1.1. Know that you’re different
A.1.2. Being aware of people’s differences
A.1.3. Learn about and from the people using the app
A.2. When and where is the app used?
A.2.1. Regional and location impact
A.2.2. When the app is used
A.2.3. Activities influencing the app
A.3. What device is the app running on?
A.3.1. Understanding different operating systems
A.3.2. Brand identity and differentiation
A.3.3. Varying hardware and software capabilities
A.4. How people interact with the app
A.4.1. Appropriate gestures
A.4.2. The truth about challenging touch input
A.5. User entered data
A.5.1. Minimizing input
A.5.2. Evaluate this login form
A.6. Data not from a user
A.6.1. Data from the web
A.6.2. Data from the device
A.6.3. Data from sensors
A.7. Displaying items in the app
A.7.1. Visual Fundamentals
A.7.3. Handling extremes
A.8. Non-visible output
A.8.1. Physical and Audio Output
A.8.2. Back end communication
A.8.3. Communicating beyond the app
A.9. Understand the perception of time
A.9.1. Perceiving time
A.9.2. Influencing perception
A.10. Make the app start fast
A.10.1. Pre-loading and pre-formatting content
A.10.2. Where to cache?
A.10.3. Caching, true or false?
A.11. Make the app run fast
A.11.1. When to load data eagerly
A.11.2. Acting asynchronously
A.11.3. Combining requests, true or false?
A.12. Coping with varying network conditions
A.12.1. Occasional and varied connections
A.12.2. Coping with sub-prime network conditions
A.12.3. Communicating app activity
A.13. Managing power and resources
A.13.1. Doing what’s needed
A.13.2. Frequency of use
A.13.3. Changes and turn offs
Appendix B: Put it into practice
B.1. Part 1: Context
B.1.1. Who is using the app?
B.1.2. Where and when is the app used?
B.1.3. What device is the app running on?
B.2. Part 2: Input
B.2.1. How people interact with the app
B.2.2. User entered data
B.2.3. Data not from a user
B.3. Part 3: Output
B.3.1. Displaying items in the app
B.3.2. Non-visible output
B.4. Part 4: Responsiveness
B.4.1. Understand the perception of time
B.4.2. Make the app start fast
B.4.3. Make the app run fast
B.5. Part 5: Connectivity
B.5.1. Coping with varying network conditions
B.6. Part 6: Resources
B.6.1. Managing power and resources
Appendix C: Recommended Reading
C.1. Badass: Making Users Awesome – Kathy Sierra (O’Reilly)
C.2. Design for Hackers: Reverse Engineering Beauty – David Kadavy (John Wiley & Sons)
C.3. Elements of User Experience: User-centered Design for the Web – Jesse James Garrett (New Riders)
C.4. Mobile Design and Development: Practical concepts and techniques for creating mobile sites and web apps – Brian Fling (O’Reilly)
C.5. Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems – Steve Krug (New Riders)
C.6. The Design of Everyday Things – Donald A. Norman (MIT Press)
Appendix D: Bibliography
- 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.