Structure & Interaction. How a product is arranged, and how it answers back.

Before anything is beautiful, it has to be findable, understandable and safe to use. This guide covers the skeleton and the nervous system of software: the objects it is made of, how people move between them, what each screen shows in every state, which control to use, how forms behave, how mistakes get forgiven, and how keyboard, touch and tiny interactions make the whole thing feel solid.

Reading timeAbout 4 hours, in 5 sittings
Practice time2 weeks
Before thisThe Human Mind, Problems Worth Solving
TeachersPrater, Rosenfeld & Morville, Krug, Hurff, Wroblewski, Raskin, Tesler, Shneiderman, Saffer, Hoober

By the end you will be able to

  • Map your product's objects, their relationships and actions before drawing a single screen (understand).
  • Choose a navigation pattern and justify it by the number and type of destinations (evaluate).
  • Draw a task flow with its happy path and edge cases, and list every screen state it implies (create).
  • Pick the right control, button hierarchy and validation timing for any input (apply).
  • Replace confirmations with undo, and decide between a dialog, sheet, popover, toast, banner or inline message (evaluate).
  • Design for keyboard, pointer and thumb, including shortcuts, command palettes, drag and drop and touch targets (create).
  • Dissect any microinteraction into trigger, rules, feedback and loops, and improve it (analyse).
  • Decide what deserves a setting and what deserves a better default (evaluate).

Warm-up: what you already know

You have used thousands of apps. You already have strong instincts about structure and interaction; you just may not have names for them. Answer these four questions quickly, without scrolling ahead. Getting them wrong is fine and useful: it tells you which chapters to read slowly.

Hold one idea from The Human Mind in your head while you read: people act on a mental model, a small private story about how the thing works. Every chapter in this guide is a way of making the product's real structure match that story, and of making the product answer clearly when the story is wrong.

Diagnostic 1 of 4

You are adding a "Delete project" action that removes a project and its 200 tasks. Which pattern is best by default?

Diagnostic 2 of 4

A sign-up form shows "Invalid email" in red the moment you type the first letter. What is wrong?

Diagnostic 3 of 4

Your phone app has four main sections used daily. Which navigation is the best starting point?

Diagnostic 4 of 4

A settings toggle reads "Dark mode". When should the change happen?

How to study this guide

Read one part per sitting. Keep your own product open beside the page; every exercise asks you to apply the idea to it. The demos are meant to be played with, not admired: break them on purpose, and notice the exact moment the bad version annoys you. That moment of annoyance is the lesson.

Part one

Structure: what things are and where they live

Interaction design starts long before buttons. It starts with deciding what your product is made of, what those things are called, how they are grouped, and how a person moves among them. Get this skeleton right and many screens almost design themselves. Get it wrong and no amount of polish will save the product from feeling confusing.

1

Objects before actions

Taught by Sophia Prater (object-oriented UX), with Alan Cooper and the original Xerox Star team

People think in things before they think in actions. Design the nouns of your product first, then attach the verbs to them, and the interface becomes a set of places people recognise instead of a list of functions they must remember.

Ask someone what a calendar app is for and they will talk about events, people and days. Ask what a notes app is for and they say notes, folders, tags. Those nouns are the person's mental model. The actions (create, share, move, archive) only make sense attached to one of them. When a product is organised around actions instead, you get screens like "Manage", "Tools" and "Actions", and people have to translate their goal ("I want to change Tuesday's meeting") into the product's vocabulary ("Event management, then Edit"). Every translation is a small tax on attention.

This idea is old. The Xerox Star (1981) let you select an object on screen, a document or a folder, and then apply a generic command to it: Move, Copy, Delete, Show Properties. Noun, then verb. Today the approach has a name and a method: object-oriented UX (OOUX), developed and taught by Sophia Prater. Her process, called ORCA, walks through four layers in order: Objects, Relationships, Calls to action, Attributes.

The ORCA pass, step by step

  1. Objects. Read your notes, support emails and your own product description, and underline every noun people care about. Keep the ones that have their own identity, that a person would want to see, find or talk about. "Book", "highlight", "collection" pass. "Settings" and "dashboard" are not objects; they are containers.
  2. Relationships. For each pair, ask how they connect and how many: a book has many highlights; a highlight belongs to one book; a collection contains many books, and a book can be in many collections. These lines become your navigation and your links.
  3. Calls to action. List what people do to each object: create, edit, share, archive, export. Verbs live on objects, which tells you where every button goes.
  4. Attributes. List what each object is made of: title, author, date added, progress. These become the fields in your forms, the columns in your lists and the options for sort and filter.
Object map: a reading app Boxes are objects. Lines are relationships, labelled with how many. Grey lines inside each box are its actions. many 1 1 many many 1 many many Book open · add to collection mark finished · archive Highlight create · copy · share add note · delete Author view books · follow (no create: derived) Note write · edit · link export · delete Collection create · rename reorder · share
Every line is a future link; every grey verb is a future button. Notice Author has no "create": it exists only because books name it. Spotting derived objects early saves you from building screens nobody needs.

Nouns become screens, verbs become controls

Once the map exists, a predictable shape appears. Each important object usually gets two views: a collection view (a list or grid of many) and a detail view (one of them, with its attributes and actions). Relationships become links between detail views: a book's page lists its highlights, a highlight links back to its book. Actions appear where the object is, as buttons on the detail view or items in a context menu on the list row. This is why well-structured products feel "obvious": every screen answers "which thing am I looking at, and what can I do to it?"

Don't
Create Import Export Manage Tools Actions Create Type: Book / Note / Highlight ▾ Parent object ID… Submit
Organised by function. To add a note to a book you must go to Create, pick a type, and type the parent's ID. The person has to hold the relationship in their head.
Do
Library Highlights Notes Collections Thinking in Systems Donella Meadows · 64% "A system is more than…" "Stocks change slowly…" + Add note Share
Organised by object. You open the book, and its highlights and the "Add note" action are right there. The relationship is shown, not remembered.

Naming objects: one word, used everywhere

The object map also fixes your vocabulary. If the object is a "collection", it is a collection in the sidebar, the button ("New collection"), the empty state, the URL (/collections/42), the API and the support docs. Products drift when the code says "list", the UI says "shelf" and the help page says "folder". People assume different words mean different things. Keep a one-page glossary of your objects and treat it as part of the design (more on words in Words).

Key idea

Find the nouns, connect them, hang the verbs on them. Screens come last.

Do

  • Write an object map before wireframes, even on paper.
  • Give each core object a list view and a detail view.
  • Put actions on the object they change (row menu, detail toolbar).
  • Use the same object name in UI, URL, code and docs.
  • Show relationships as links in both directions.

Don't

  • Name sections after functions ("Manage", "Tools", "Actions").
  • Invent a cute synonym for a common object ("Spaces" for folders) without a real difference.
  • Make people type IDs or pick parents from a dropdown when they could start from the parent.
  • Create objects that nobody wants to find or talk about.

In the wild

  • Xerox StarXerox, 1981
    Select an icon (document, folder, printer), then press a generic key such as Move, Copy or Delete. A handful of verbs worked on every noun. Few universal verbs plus many objects is easier to learn than many special commands.
  • LinearLinear, 2019 onward
    The core objects are issues, projects, cycles and teams, and they show up consistently in the sidebar, the URL and the command menu. Actions such as assign or change status work on whichever issue is selected. A small, stable object model lets power features (shortcuts, bulk edits) stay simple.
  • Things 3Cultured Code, 2017
    Areas contain projects, projects contain to-dos, to-dos contain checklists. That containment hierarchy is visible in the sidebar and in each project's page. When the relationships are simple and visible, people rarely need a manual.
  • Apple PhotosApple, 2015 onward
    Photos, albums, people and places are all objects; a photo can be in many albums and contain many people. You can arrive at the same photo from any of these directions. Many-to-many relationships become multiple paths to the same thing.
For the solo creator

You already have an object model: it is your database schema. The trap is letting tables leak into the UI unedited, such as a "user_settings_override" screen. Do the ORCA pass from the person's side, then compare it with your schema. Where they differ, the UI should follow the person, and the code can map between them. A twenty-minute object map also makes your API, URLs and docs consistent for free.

Common mistakes

Designing the home screen first

The home screen feels like the product, so it is tempting to start there.

Start with the most important object's detail view. The home screen is a summary of objects; you cannot summarise what you have not defined.

Too many objects

Every database table feels like it deserves a page.

Promote only what people seek out by name. Fold the rest in as attributes ("tag" may be an attribute of a note, not its own object, until people want to browse by tag).

Orphan verbs

Features get added as top-level buttons ("Export", "Sync") because there was no obvious home.

Ask which object the verb changes. Export a collection lives on the collection. If the answer is "everything", it may belong in a command palette or settings.

Check yourself

You are building a small invoicing tool. Users keep asking "how do I see all invoices for one client?" Your nav has: Dashboard, New invoice, Reports, Settings. What does the object view suggest?

Exercise 1.1 45 minutes · on your own product

Draw your object map

  1. Write a one-paragraph description of your product as a user would say it. Underline every noun.
  2. Keep 3 to 7 core objects. For each, list attributes (what it is made of) and actions (what people do to it).
  3. Draw lines between objects with cardinality (1, many).
  4. Compare the map with your current navigation. Circle any nav item that is a verb or a container with no object behind it.
You're done when: you have one page with 3 to 7 objects, their relationships, attributes and actions, plus a list of nav items to rename or move.
BeginnerCompetentStrong
Lists objects, but includes containers like "Dashboard" as objects.Objects, relationships and actions are clear; nav mismatches spotted.Also identifies derived objects, attributes that should be promoted, and one rename that would simplify the whole product.
2

Organizing: groups, labels and hierarchy

Taught by Louis Rosenfeld & Peter Morville, with Abby Covert and Donna Spencer

Information architecture is deciding how things are grouped, what the groups are called, and how deep they go. Good IA matches the groupings already in your users' heads, so they guess right the first time.

Rosenfeld and Morville's book Information Architecture for the World Wide Web (first edition 1998, nicknamed "the polar bear book") split the field into a few systems: organisation (how you group), labelling (what you call groups), navigation (how people move), and search (how people look things up). Abby Covert's How to Make Sense of Any Mess (2014) made the same ideas approachable: every mess is made of information, and the work is to agree on what things mean before arranging them.

The mechanism behind all of it is information scent, a term from Peter Pirolli and Stuart Card's information foraging theory at Xerox PARC in the 1990s. People choose links the way animals follow a scent trail: they pick the label that seems most likely to lead to their goal. If the scent is strong at every step, they move fast and confidently. If it is weak (vague labels, unexpected groups), they hesitate, guess, backtrack, and eventually leave.

Ways to organise

There are only a few basic schemes, and mixing them in one list is the most common source of confusion.

SchemeWorks whenExample
AlphabeticalPeople know the exact name they wantContacts, a country picker
ChronologicalRecency matters more than kindInbox, activity feed, journal
GeographicalLocation drives the decisionStore finder, weather cities
Topic / categoryPeople browse by subjectSettings sections, a help centre
TaskPeople arrive with a job to do"Send money", "Pay a bill" in a bank app
AudienceDifferent groups need different things"For individuals / For teams" on a pricing page

Alphabetical, chronological and geographical are exact schemes: there is one right answer for where something goes. Topic, task and audience are ambiguous: reasonable people disagree. Ambiguous schemes are more useful for browsing but need testing, which is what card sorting and tree testing are for.

Depth versus breadth

Every hierarchy trades depth (how many levels) against breadth (how many items per level). Deep and narrow means few choices per screen but many clicks, and each click is another chance to take a wrong turn. Broad and shallow means more scanning per screen but fewer decisions. Studies of menu structures from the 1980s and 1990s (Kiger in 1984, Larson and Czerwinski in 1998) generally found that broader, shallower structures beat deep ones, as long as the broad lists are well grouped and labelled. The reason is compounding: if people choose correctly 90% of the time at each level, three levels give 0.9 × 0.9 × 0.9 ≈ 73% success, and five levels give about 59%.

Deep: 3 × 3 × 3 Broad: 27 items, visually grouped (each grey dot holds 3 more leaves) 3 decisions to reach any leaf. At 90% per decision: 73% reach it. 1 decision, more scanning, helped by groups. Scanning a labelled group is fast and forgiving.
Same 27 items, different shape. A wrong turn at the top of a deep tree hides the target completely. A broad page shows everything; the visual groups do the work that levels did, without the compounding risk.
Lab: how depth compounds
Levels needed
3
Chance a person reaches the item on the first try
73%
Try 300 items with 3 choices per level, then 20 per level. Then lower label clarity to 75%: watch how unclear labels hurt deep trees far more than broad ones. Breadth costs scanning time, which grouping can reduce; depth costs probability, which nothing recovers.

Card sorting and tree testing, solo

Card sorting asks people to group your content. Write each item on a card (real or virtual), hand them to someone, and ask them to sort into piles that make sense and name each pile. In an open sort they invent groups; in a closed sort they use yours. Donna Spencer's Card Sorting (2009) is the standard short guide. Five to fifteen people usually show the main patterns. Watch for items everyone places the same way (safe) and items that wander between piles (they need a better label, or should live in two places).

Tree testing is the reverse check. Give people only the text hierarchy, no visual design, and a task ("Where would you change your billing email?"). Record the path they click. The classic tool is Optimal Workshop's Treejack, but a spreadsheet and a video call work. It isolates the IA from the visuals: if people fail on a plain text tree, colour and icons will not save it.

Tree test: "Change the email your invoices go to" Settings Profile Account Email Billing 58% went here (wrong) 34% correct Line thickness = share of people who took that path. Diagnosis: people think "email" belongs with Profile. Fix options: 1. Show billing email inside Profile › Email too (cross-link). 2. Rename "Billing" to "Billing & invoices" so the scent is stronger.
A tree test shows where people expect things, not where you put them. The numbers here are illustrative. The fix is rarely "teach users"; it is to put the item where they look, or to link it from there.

Labels carry the scent

Labels should be specific, familiar and parallel. Specific: "Invoices" beats "Documents". Familiar: use the words your users use in support emails, not your internal jargon. Parallel: items in one list should be the same kind of word (all nouns, or all verbs), so people can compare them. Clever labels ("The Vault", "Magic Box") feel like personality but have zero scent: nobody can predict what is inside.

Don't
Discover›
The Vault›
Manage stuff›
Resources›
Misc.›
No scent. Vague, clever, mixed types (verb, metaphor, phrase). "Misc." is a confession that the grouping failed.
Do
Books142
Highlights1,208
Notes87
Collections9
Trash3
Strong scent. Plain nouns from the object map, parallel, with counts that hint at what is inside.

Taxonomies: folders, tags and both

A folder (hierarchy) says "this thing is in exactly one place". A tag (facet) says "this thing has these properties". Folders are easy to understand and match physical habits; tags are flexible but need discipline and good tools. Most mature products offer one primary hierarchy plus a few facets: Gmail moved from folders to labels in 2004, which let one email live in many places. Things uses areas and projects as hierarchy, and tags as optional facets. For your own product, pick one primary structure and make the second optional; asking people to maintain both from day one is asking them to be librarians.

Do

  • Use one organisation scheme per list.
  • Prefer broad, shallow trees with visual grouping.
  • Borrow labels from your users' own words.
  • Test the tree as plain text before designing visuals.
  • Put an item in two places when people genuinely look in both.

Don't

  • Mirror your company's or your code's structure.
  • Create "Misc.", "Other" or "More" buckets as a first resort.
  • Nest more than three levels without a strong reason.
  • Make people tag and file everything to get started.

In the wild

  • Gmail labelsGoogle, 2004
    Replaced the single-folder model with labels, so one conversation could be in "Travel" and "Receipts" at once, with search as the main way back. When items belong to several groups, facets beat folders.
  • macOS System SettingsApple, 2022 (Ventura)
    Moved from a grid of icons to an iOS-style sidebar list. Many long-time Mac users reported trouble finding familiar panes in the new grouping. Reorganising changes what people already know; even a "better" structure has a relearning cost.
  • GOV.UKGovernment Digital Service, 2012
    Merged hundreds of department websites into one site organised around what citizens need to do, not which department does it. Organise by the user's task, not by your org chart.
For the solo creator

You do not need a research budget. Write your 20 to 40 key items on index cards and ask three friends to sort them over coffee or a video call (a shared whiteboard works). Then run a tree test with five tasks in a plain bulleted list. Two hours total. The most valuable output is the list of items that "wander": those are your naming and placement problems.

Common mistakes

Organising by your code

The structure you know best is your module structure.

Run an open card sort with people who do not know your code, and compare.

Mixing schemes in one menu

Items accumulate over time: "Recent" (time), "Projects" (object), "Import" (task), "For teams" (audience).

Split into separate groups with headings, or move task items into a create menu or command palette.

Deep settings trees

Each new option gets its own sub-page.

Flatten to one scrollable page with section headings plus search (see chapter 17).

Check yourself

Your app has 40 help articles in 4 levels of categories. Tree-test success is 45%. What is the best first move?

Exercise 2.1 2 hours · with 3 to 5 people

A one-afternoon card sort and tree test

  1. List 20 to 40 items people look for in your product (screens, settings, objects).
  2. Run an open card sort with three people. Photograph each result.
  3. Draft a tree from the patterns. Keep it to two levels if you can.
  4. Write five realistic tasks and run a tree test with three other people. Record the first click and the final answer.
  5. Mark items with under 70% success and propose a rename or a second location.
You're done when: you have a revised text tree, a table of task success rates, and three concrete label or placement changes.
BeginnerCompetentStrong
Ran a sort but kept the original tree.Revised the tree from evidence; tested it.Identified wandering items, explained why from the participants' words, and verified the fix in a second round.
4

Wayfinding: where am I, where can I go, how do I get back

Taught by Steve Krug, with Kevin Lynch and Tim Berners-Lee

At every moment a person should be able to answer three questions without thinking: where am I, where can I go from here, and how do I get back. Navigation is the system; wayfinding is the experience of never feeling lost in it.

The urban planner Kevin Lynch's The Image of the City (1960) described how people find their way through cities using paths, edges, districts, nodes and landmarks. Software has the same needs. The page title is your street sign. The highlighted nav item is the district. Breadcrumbs are the path you could retrace. A consistent header is the landmark you can always see.

Steve Krug's Don't Make Me Think (2000) turned this into a quick test he called the trunk test: imagine you were blindfolded, driven around, and dropped on a random page of the site. Can you immediately say what site this is, what page you are on, what the major sections are, what your options at this level are, where you are in the scheme of things, and how you can search? Try it on your own product with a screenshot of a deep page.

Margin Library Collections Highlights Notes Collections › Philosophy › Meditations Highlights Notes Details 1 2 3 4 5 1 Which product: name and mark, always in the same place. 2 Which section: the active item is visibly different. 3 Where in the tree: breadcrumb, each step a link. 4 Which page: a title matching the link you clicked. 5 Options here: local tabs, current one marked.
Five cues, one glance. None is decorative. Remove any one and a person arriving from a shared link has to work out where they are.

Breadcrumbs

Breadcrumbs show the location of the current page in a hierarchy, with every ancestor as a link. They are cheap and help most when people land deep in a site from search or a shared link. Show the hierarchy, not the browsing history (that is what the back button is for). Keep them small and above the title. On phones, show only the parent as a single "‹ Philosophy" link, because a full trail wraps and crowds the screen.

Back must mean back

The back button is the most used navigation control on the web, and people build a strong expectation around it: back returns me to exactly where I was, scroll position included. Single-page web apps often break this by changing the content without changing the URL, so back leaves the app entirely; or by pushing every filter tweak into history, so back has to be pressed ten times. On iOS, the back button in a navigation stack names the previous screen, and the edge swipe pops the stack. On Android, the system back gesture is global. Your job is to make your app's internal history match what people expect from those gestures.

A stack: push forward, pop back Library (scrolled 60%) Book: Meditations Highlight #12 Back: returns to Book, same tab, same scroll. Share sheet (modal) sits above the stack; Close or swipe down dismisses it, then back continues as before Rule: navigation changes the place (push/pop). Modals interrupt the place (present/dismiss). Don't mix them.
Two kinds of "going back". Popping a screen and dismissing a modal feel different and should look different. Mixing them is how apps end up with "close" buttons that navigate and "back" buttons that cancel.

URLs are part of the interface

Tim Berners-Lee's 1998 note "Cool URIs don't change" argued that addresses should be stable for years. A good URL is readable, hackable (you can delete the end and land somewhere sensible), shareable and permanent. It is also your deep-link system: if every meaningful state of the app has a URL, people can bookmark it, share it, open it in a new tab, and come back to it from a notification. Apps without addresses for their states force people to describe how to get somewhere ("click Projects, then the second one, then the Files tab").

A URL that works as UI margin.app/books/812-meditations/highlights?sort=page product object type stable id readable slug tab (place) view state The id keeps the link working if the title changes; the slug makes it readable; deleting "/highlights" lands on the book. Sorting is a query, so back skips it.
Every part is meaningful and hackable. The same shape works as a deep link from a push notification or an email.

Do

  • Run the trunk test on your deepest page.
  • Mark the active nav item clearly, not just with a slight tint.
  • Give every meaningful state a URL or deep link, including tabs and selected items.
  • Restore scroll position and selection on back.
  • Use replace (not push) for filter and sort changes so back stays useful.

Don't

  • Break the browser back button in a web app.
  • Open internal links in new tabs by default.
  • Change URL structures without redirects.
  • Use page titles that differ from the link that led there.

In the wild

  • GitHubGitHub
    URLs read like sentences: owner, repository, then "pull" or "issues" and a number. People type and edit them by hand. Predictable URLs become a power-user navigation system for free.
  • iOS navigation barApple, 2007 onward
    The back button shows the title of the previous screen, and the large title shrinks as you scroll so the place name stays visible. "Back" is vague; "‹ Library" is wayfinding.
  • FigmaFigma
    Copying a link to a selected frame produces a URL that opens the file zoomed to that frame. Deep links to the exact state make collaboration and support much easier.
For the solo creator

Routing is design. When you set up routes in your framework, write the URL list first as if it were a sitemap, using object names from your map. It costs nothing on day one and is very expensive to retrofit. Deep links also make your own support easier: a user can send you the exact page that is broken.

Common mistakes

Modals that hold whole flows

A modal seemed quick for "new item" and then grew tabs and steps.

If it has its own navigation, it is a page. Give it a URL.

Losing place on return

Lists re-fetch and render from the top.

Cache the list and its scroll offset; restore both on back.

The invisible active state

A subtle background tint that disappears in dark mode or on cheap screens.

Combine at least two signals: weight plus background, or a bar plus colour.

Check yourself

In your web app, changing the sort order of a list pushes a new history entry. What will people experience?

Exercise 4.1 30 minutes · on your own product

Trunk test and URL map

  1. Take screenshots of your three deepest screens. Cover the browser bar.
  2. For each, write the answers to: which product, which section, which page, what options here, how to go up a level. Mark any you could not answer in two seconds.
  3. Write the URL (or deep link) for every meaningful state. Note any state with no address.
  4. Test back from each deep screen and note whether scroll and tabs are restored.
You're done when: you have a trunk-test table, a URL map, and a list of fixes ranked by how often the screen is used.
BeginnerCompetentStrong
Runs the test, notes failures.Fixes active state and titles; every state has an address.Also fixes back behaviour (replace vs push), scroll restoration, and adds redirects for any URL changes.
5

User flows, edge cases and the golden path

Taught by Dan Brown (Communicating Design), with Alan Cooper and Kathy Sierra

A screen is a frame; a flow is the film. Draw the path a person takes to finish a task, decision by decision, and you will find the missing screens, the dead ends and the edge cases before you write code.

Designers often start with the beautiful screen in the middle of a task. People do not experience screens; they experience sequences: they arrive from somewhere, with some expectation, make a few decisions, hit a snag, and either finish or give up. A user flow (sometimes called a task flow) is a diagram of that sequence. It is the cheapest design artefact there is, and it catches more problems per minute than any mockup.

A tiny notation

You do not need a formal standard. Four shapes are enough, and keeping them consistent makes flows readable months later.

Start / end Screen Choice? System step action Label arrows with what the person does ("taps Scan"). Label diamonds as a question with labelled exits.
Four shapes cover nearly every flow. The dashed box marks things the system does without a screen (fetching, saving, sending email), which is where many edge cases hide.
Flow: add a book by scanning its barcode Thick yellow line = golden path. Thin lines = edge cases. Each red-bordered box is a screen state you must design. Library Camera Match? Confirm Save Added taps + scans yes taps Add Camera denied: explain + type ISBN no Not found: manual form, prefilled ISBN Already in library: open it instead Offline: save locally, sync later, show badge Golden path: 4 steps, about 5 seconds. Edge cases: 4 extra states, each a screen or message to design. Without the flow, most of these appear first as bug reports.
The happy path is one line; the product is all the lines. Drawing the edge cases turned one "Scan" screen into five designed states, each with a way forward instead of a dead end.

Happy path, then edge cases

Draw the happy path first: the shortest route when everything goes right. Then walk it again and at every step ask a fixed set of questions. This list catches most edge cases:

  • Nothing: what if there is no data yet, or the search returns nothing?
  • Too much: what if there are 10,000 items, or the name is 200 characters long?
  • Wrong: what if the input is invalid, or the file is the wrong type?
  • Slow or gone: what if the network is slow, offline, or the server errors?
  • Denied: what if a permission is refused or the plan does not include this?
  • Interrupted: what if they leave halfway, get a call, or close the tab?
  • Duplicate or conflict: what if it already exists, or changed on another device?

Each answer is either a screen state (chapter 6), a message (see Words), or a design decision to remove the edge case entirely. The best edge-case handling is the edge case that cannot happen: if duplicates are a problem, detect them and offer to open the existing one rather than showing an error.

The golden path

Among all flows, one matters most: the sequence from first launch to the first moment the product delivers its core value. Call it the golden path. Kathy Sierra, in Badass: Making Users Awesome (2015), argued that people stay with products that make them feel capable quickly. For a note app, the golden path ends at the first note saved. For a reading app, at the first highlight. Count the steps and seconds on that path, and treat every step as a cost to justify. Sign-up, onboarding tours and permission requests that sit in front of value are the usual offenders. Can someone try the core action before creating an account?

Don't
Sign up Verify email Profile 5-screen tour Allow alerts? Empty home First value 7 steps, minutes, many exits
Value at step seven. Every step before value is a place to quit, and each one asks for trust the product has not earned yet.
Do
Open app Try it now First value Save: sign up 2 steps to value; account after
Value first, commitment later. Ask for an account when there is something worth saving; ask for notification permission when there is something worth notifying about.

Screen inventory

Once flows exist, list every screen they touch in a table, with a column per state (chapter 6). This screen inventory is your real scope. It turns "build sign-up" into "build 4 screens × 5 states, 14 of which are not designed yet". For a solo creator, it is the most honest estimate you will ever make.

ScreenIdealEmptyLoadingPartialErrorOffline
LibraryDoneDoneSkeletonn/aTo doTo do
Camera / scanDonen/aTo don/aDenied: to doQueue: to do
Manual addDonen/an/aPrefilledValidationLocal save
Book detailDoneNo highlights yetSkeletonCover missingTo doCached

Do

  • Draw flows before screens; use paper or a plain diagram tool.
  • Label arrows with the person's action.
  • Walk each step with the seven edge-case questions.
  • Measure the golden path in steps and seconds.
  • Keep a screen-by-state inventory as your task list.

Don't

  • Design only the happy path and leave errors to code.
  • Put sign-up, tours and permissions before first value.
  • Leave dead ends: every error state needs a way forward.
  • Draw flows so detailed they become a second codebase.

In the wild

  • DuolingoDuolingo
    New users can start a first lesson before creating an account; sign-up is offered after some progress exists. Let people feel the value, then ask them to save it.
  • ExcalidrawExcalidraw, 2020
    Opening the site drops you straight onto a canvas; there is nothing to set up before drawing. The shortest golden path is zero steps.
  • Stripe CheckoutStripe
    The payment flow handles many edge cases (card declined, 3-D Secure verification, wallets) inside one consistent flow, so the merchant's happy path stays simple. Edge cases are where trust is won, especially around money.
For the solo creator

Flows are your spec, your test plan and your estimate in one. Before you build a feature, spend 15 minutes on its flow with the seven questions. Then write one test per edge case. You will ship fewer "it works on my machine" features, and your support inbox will shrink.

Common mistakes

Flows as screen thumbnails

It feels more "designed" to chain mockups with arrows.

Use boxes and words first. Mockups make it expensive to change the order, which is what flows are for.

Edge cases with no exit

The error is handled in code, so it feels done.

Each error state needs a recovery action: retry, edit, go somewhere useful.

Optimising a flow nobody takes

Settings flows are fun to perfect.

Rank flows by frequency × importance. The golden path and the daily loop come first.

Check yourself

Your habit app's flow: open app, sign up, verify email, pick a goal, see the dashboard, create first habit. Where would you cut first?

Exercise 5.1 60 minutes · on your own product

Map your golden path and one core flow

  1. Install your product fresh (or use a private window). Time and count every step from launch to first value. Note every screen.
  2. Draw the flow with the four shapes, highlighting the golden path.
  3. Walk it with the seven edge-case questions. Add each edge case as a branch.
  4. Propose one change that removes at least one step before first value.
  5. Build the screen-by-state inventory for this flow.
You're done when: you have a flow diagram, the golden path in steps and seconds (before and after your proposed change), and a screen inventory.
BeginnerCompetentStrong
Draws the happy path only.Includes edge cases with exits; golden path measured.Removes at least one edge case by design, cuts a step, and turns the inventory into a prioritised task list.

Recap and connect: Part one

Structure flows from objects (chapter 1) to groups and labels (2), to navigation patterns (3), to the experience of moving through them (4), to the paths people take for a task (5). Each layer constrains the next. Before moving on, connect these ideas with earlier guides.

Connect the ideas

In The Human Mind you met the limits of working memory. Which structural choice from Part one most directly reduces working-memory load?

Connect the ideas

In Problems Worth Solving you defined the core job of your product. How should that job shape the golden path?

Part two

States and inputs: what the screen shows, and what people tell it

A screen is not one picture; it is a set of pictures, one for each state of its data. And most screens ask something of the person: a choice, a value, a confirmation. This part covers how screens behave across states, which controls to use, how forms should validate, how to forgive mistakes, and when to interrupt with an overlay.

6

Screen states: the UI stack

Taught by Scott Hurff, with Luke Wroblewski and Jakob Nielsen

Every screen that shows data has at least five states: blank, loading, partial, error and ideal. Most products design only the ideal one, so people meet the other four as raw, confusing defaults.

In a 2015 essay, designer Scott Hurff named this the UI stack: for any screen, stack up its blank state (nothing here yet), loading state (waiting for data), partial state (some data, not enough to feel complete), error state (something went wrong), and ideal state (the screenshot on your marketing page). The insight is that people spend a surprising share of their time in the non-ideal states, especially new users (blank and partial) and mobile users (loading and offline). Those states are where trust is built or lost.

Blank Loading Add 2 more books to see trends Partial Couldn't sync. Your notes are safe. Retry Error Ideal
The stack, left to right in the order a new user meets it. Blank and partial are a new user's whole first impression. Loading and error are every user's experience on a bad connection.
Lab: cycle the states
Cycle through every state in both versions. For each naive state, ask: what does the person know, and what can they do next?

Blank states are onboarding

An empty screen is the most valuable real estate a new user sees, because it is the first place they will act. A good blank state does three things: says what this place is for, shows what it will look like when full (a faint preview or sample), and offers the one action that fills it. Distinguish three kinds of empty: first use (nothing created yet: invite and teach), user cleared (inbox zero: reward, do not nag), and no results (search or filter found nothing: show what was searched and how to widen it).

Don't
No data.
A dead end. Says nothing about purpose or next step.
Do: first use
Your highlights live here

Select text in any book and tap Highlight. It will show up here, grouped by book.

Purpose, preview, action. One button, not five.
Do: no results
No highlights match "stoic" in Philosophy

Try searching all collections.

Echo the query, offer the widening move. The person sees why it is empty.

Loading: show shape, not just motion

Robert Miller's 1968 research, later popularised by Jakob Nielsen, gave three useful limits: about 0.1 second feels instant, about 1 second keeps the flow of thought, and about 10 seconds is the limit of attention. Under roughly a second, show nothing (a flashing spinner is worse than a short pause). Between one and ten seconds, show a skeleton: grey blocks in the shape of the coming content, an approach Luke Wroblewski wrote about in 2013 under the advice "avoid the spinner". Skeletons tell people what is coming and make the page feel as if it is arriving piece by piece. Beyond ten seconds, show real progress (a determinate bar, steps, a count) and let people do something else.

0 s~1 s~10 s show nothing skeleton or inline indicator real progress + escape Below 0.1 s feels instant. Optimistic UI (show the result, sync in background) lives here.
Match the feedback to the wait. A spinner that flashes for 200 ms makes a fast app feel slow.

Errors: say what happened, what is safe, what to do

A useful error state answers three questions in plain words: what happened, is my work safe, and what can I do now. "Something went wrong" answers none. "Couldn't sync. Your notes are saved on this device. Retry" answers all three. Keep the rest of the screen usable: show cached content with a small banner instead of replacing the whole screen with an error. For writing the words, see Words.

Offline is a state, not a crash

Phones lose signal in lifts, trains and basements every day. Decide for each screen what works offline: read cached data, create items that sync later, or nothing. Show a quiet, persistent indicator ("Offline. Changes will sync."), keep the UI usable, and mark unsynced items subtly. Apps built "local-first" store data on the device and treat the server as a sync partner, which makes offline the normal case instead of an error.

Do

  • Design all five states for every data screen, plus offline.
  • Make first-use blank states teach and offer one action.
  • Use skeletons for 1 to 10 second waits; nothing for under 1 second.
  • Keep cached content visible during errors and offline.
  • Use optimistic UI for actions that almost always succeed.

Don't

  • Ship "No data", "Error 500" or an infinite spinner.
  • Replace the whole screen with an error when one part failed.
  • Show sample data that looks like real data (people try to delete it).
  • Animate a spinner for sub-second operations.

In the wild

  • Things 3Cultured Code, 2017
    Empty lists show a quiet illustration and short text rather than a blank page; completing everything in Today feels like a small reward. "User cleared" empty is a moment to celebrate quietly, not to upsell.
  • Facebook and LinkedIn feeds2010s onward
    Grey placeholder blocks in the shape of posts appear while content loads, a technique widely copied. Skeletons set expectations about layout before data arrives.
  • Figma, Linear, Notion2020s
    Edits appear instantly and sync in the background, with an indicator only when something fails. Optimistic UI makes networked software feel local, as long as failure is handled clearly.
For the solo creator

Make states a component, not an afterthought. Build one <StateView> that takes a status (blank, loading, partial, error, ideal, offline) and renders the right thing, and every screen gets all six states nearly for free. Then add a hidden debug menu that forces each state, so you can review them all in two minutes before each release.

Common mistakes

Designing with perfect data

Mockups use ideal names, ideal photos and exactly six items.

Design with real, messy data: one item, 500 items, missing images, 80-character names.

Spinners everywhere

The framework's default loading state is a spinner.

Delay any indicator by about 300 to 500 ms; use skeletons for content; use inline indicators on the specific button or row.

Errors without a way forward

The developer caught the exception and printed it.

Every error state gets a recovery action and reassurance about data.

Check yourself

Your stats screen needs at least 7 days of data to draw a chart. A user on day 2 opens it. What should they see?

Exercise 6.1 60 minutes · on your own product

Stack your three most important screens

  1. Pick your three most-used data screens.
  2. Force each into blank, loading, partial, error, ideal and offline (use dev tools: throttle network, go offline, delete data).
  3. Screenshot all 18 states into one grid.
  4. Rewrite the three worst states: purpose, reassurance, next action.
You're done when: you have an 18-cell state grid with the three worst states redesigned and shipped or ticketed.
BeginnerCompetentStrong
Captures states; finds problems.Every state has purpose and an action; spinners replaced where apt.Builds a shared state component and a debug switch so new screens get all states by default.
7

Choosing controls and buttons

Taught by the Apple Human Interface Guidelines and Material Design, with Jakob Nielsen and the GOV.UK Design System

Each control is a promise about how a choice works: how many options, how many can be picked, and when the choice takes effect. Choose the control whose promise matches the choice, and people will use it correctly without reading anything.

Controls are a vocabulary that everyone already learned from thousands of other apps. A round radio button says "pick exactly one of these". A square checkbox says "pick any". A switch says "this takes effect now, like a light". A dropdown says "there are more options than I want to show". Using the wrong one is like using the wrong word in a sentence: people understand the literal meaning and make the wrong move.

Radio buttons Monthly Yearly Lifetime One of 2–6, all visible. Checkboxes Books Articles Podcasts Any number, each independent. Switch Sync Sounds On/off, effect is immediate. Segmented control Day Week Month One of 2–5, switches a view now. Dropdown (select) India (+91)▾ One of many (7+), default is likely. Combobox / autocomplete Ban| Bangalore (Bengaluru) One of hundreds; type to filter. Stepper and slider −2+ Stepper: small exact counts. Slider: approximate value in a range, with live preview.
Each shape is a contract. Round means one, square means any, a pill-shaped switch means now. Breaking a contract (a switch that needs Save, checkboxes that behave like radios) makes people doubt every control.
Lab: control chooser
What kind of choice is it?
How many options?
When does it take effect?
What kind of number?
Describe a real choice from your product and see which control fits. The recommendation is a strong default, not a law; the reason line tells you what would change it.

Toggles mean now

A switch borrows from physical light switches: flip it and the light changes. Nielsen Norman Group's guidance on toggle switches makes the same point: use them for settings that take effect immediately. If the setting only applies after a Save button, use a checkbox, because a switch that does nothing until Save makes people wonder whether it worked. Label switches with the thing being controlled ("Sync over cellular"), not a question, and never with a label that changes when flipped ("Turn on" / "Turn off"), which makes the state ambiguous.

Button hierarchy

Most screens have one action that matters most. Give it the strongest visual weight (the primary button: filled, high contrast). Give alternatives a quieter style (secondary: outlined or tinted). Give low-stakes or escape actions the quietest (tertiary: text only). One primary per view is a good rule; two primaries mean you have not decided what the screen is for. Destructive actions get a warning colour (red), but not the primary weight, unless the whole purpose of the dialog is to destroy (then the red button is the primary).

Don't
Edit collection Philosophy Save Delete Cancel
Everything shouts, so nothing guides. Delete sits next to Save with equal weight, one slip from disaster.
Do
Edit collection Philosophy Delete collection Cancel Save
One primary, a quiet escape, destruction set apart. Distance and colour both protect the dangerous action.

Placement conventions per platform

Where the primary button goes is a convention, and conventions differ. Follow the platform, because people's hands move before their eyes read.

In macOS alerts the default button sits at the bottom right with Cancel to its left; destructive buttons are red, and the default button responds to Return. iOS alerts with two buttons place them side by side; action sheets put Cancel at the bottom, separated. Sheets on iOS use navigation-bar buttons: Cancel top left, Done or Save top right.

Links versus buttons

A link goes somewhere; a button does something. Links change the URL, can open in a new tab and are announced as links by screen readers. Buttons submit, toggle, open menus or change data. Styling a link to look like a button is fine for a navigation call to action ("Start free trial" going to a sign-up page); making a <div> behave like either is not, because it loses keyboard and assistive-technology behaviour (see Accessible & Inclusive).

Pickers and dates

Match the date control to how people think about the date. For a known date far away (a birth date, a passport expiry), let people type it: the GOV.UK Design System uses three separate text boxes for day, month and year, because scrolling a calendar back 35 years is tedious. For a near date relative to today (a booking, a due date), a calendar helps because people think in weekdays ("next Friday"). For natural language, apps such as Fantastical and Things parse "tomorrow 3pm" or "next week". For sliders, add a number field next to them when exact values matter, because sliders are imprecise for fingers.

Do

  • Show options as radios or a segmented control when there are 5 or fewer.
  • Use switches only for immediate effect.
  • Keep one primary button per view.
  • Follow platform button order.
  • Let people type dates they already know.

Don't

  • Hide 2 or 3 options inside a dropdown.
  • Use a dropdown for country lists without type-to-filter.
  • Make destructive actions primary-styled by default.
  • Use a slider for an exact value like a price.
  • Use a div as a button.

In the wild

  • iOS SettingsApple
    Switches change things immediately (Wi-Fi, Bluetooth), with no Save button anywhere in Settings. A whole app can use the immediate-effect model consistently.
  • GOV.UK Design SystemGovernment Digital Service
    Publishes researched patterns for date input, radios, checkboxes and more, with notes on when not to use each. A free, evidence-based reference for form controls.
  • FantasticalFlexibits, 2011 onward
    Creating an event by typing a sentence such as "Lunch with Asha Friday 1pm" fills in all the fields. The best picker can be no picker, when language is faster.
For the solo creator

Use native controls first: <select>, <input type="date">, system switches. They are accessible, localised and familiar. Write a custom control only when the native one clearly fails your users, and then copy the native keyboard behaviour exactly.

Common mistakes

Switches that need Save

The switch looks nicer than a checkbox.

Either apply immediately or use a checkbox in the form.

Two primaries

Both actions feel important to you.

Decide which one most people want right now; demote the other.

Dropdown for yes/no

Form builders default to selects.

Two visible radios (or one checkbox) are faster and show both options at once.

Check yourself

In a reading app, people choose between "Light", "Sepia" and "Dark" themes and expect to see the change right away. Which control?

Exercise 7.1 45 minutes · on your own product

Control audit

  1. List every control in your product's settings and main forms.
  2. For each, note kind (on/off, one, several, number), option count and timing.
  3. Run each through the chooser above. Mark mismatches.
  4. Check button hierarchy on your five busiest screens: count primaries per view.
You're done when: you have a table of controls with current versus recommended, and a list of screens with more than one primary.
BeginnerCompetentStrong
Finds a few mismatches.All controls audited; fixes listed with reasons.Also checks keyboard behaviour and platform button order, and replaces at least one control with a smarter default or natural-language input.
8

Forms that people finish

Taught by Luke Wroblewski (Web Form Design), with Caroline Jarrett and the GOV.UK Design System

A form is a conversation in which you ask for something. Ask for less, ask clearly, accept answers in the form people give them, and tell them about problems at the right moment and in the right place.

Forms are where products make money and lose people: sign-up, checkout, onboarding, settings. Luke Wroblewski's Web Form Design: Filling in the Blanks (2008) and Caroline Jarrett and Gerry Gaffney's Forms that Work (2008) are still the best short books on the subject. Their shared message: most form problems are not visual. They come from asking unnecessary questions, in an order that makes no sense, with rules the person cannot see until they break them.

Layout: one column, labels on top

A single column gives the eye one straight path: top to bottom, no zig-zag, no wondering whether the field on the right comes before or after the one below. Multi-column forms cause people to skip fields. Labels above fields are fastest to scan, work at any screen width, and handle long translations. Matteo Penzo's 2006 eye-tracking study, reported on UXmatters, found top-aligned labels needed the fewest fixations. Placeholder text as the only label is the worst option: it disappears as soon as someone types, so they cannot check what the field was for, and its pale grey usually fails contrast.

Don't: placeholder only
rohit@exa Password Phone What was the first field?
Labels vanish on typing and pale hints fail contrast.
OK: left labels
Email Password Phone
Zig-zag path. Fine on wide screens for short, familiar data; breaks on phones.
Do: top labels
Email Password Phone (optional)
One straight path, label always visible, works at any width.

Validation timing: the most common form bug

When should a form tell someone they made a mistake? Too late (only after Submit, with all errors at the top) and people must hunt for the problem. Too early (on every keystroke from the first letter) and the form scolds people for being in the middle of typing: "Invalid email" appears while they are still typing "rohit@". The pattern that works best for most fields:

  1. Stay quiet while the person types a field for the first time.
  2. Validate when they leave the field (on blur). Show the message right under the field.
  3. Once an error is showing, re-check on every keystroke, so the error disappears the instant it is fixed. Reward is fast; punishment is patient.
  4. On submit, validate everything, move focus to the first error, and (for long forms) show a summary at the top that links to each error.

A 2009 study by Luke Wroblewski with the usability firm Etre compared inline validation to submit-only validation and found higher success rates and much faster completion with inline validation, especially when messages appeared after people finished a field rather than while they were typing. Exceptions where live feedback while typing is right: password strength meters, character counters and username availability, because there the feedback helps people compose the answer.

Demo: validation, bad versus good. Type in both.
Without: placeholder labels, asterisks on everything, errors from the first keystroke, hidden password rules revealed only after you fail, and phone formats rejected.

Where error messages go

Put the message directly below the field it is about, start it with what to do ("Enter an email like name@example.com"), and mark the field with more than colour (an icon or thicker border) so it is visible to colour-blind people. Keep the person's input; never clear a field because it was wrong. For a form longer than one screen, add an error summary at the top after submit, with links that jump to each field: that is the GOV.UK pattern and it works well with screen readers.

There is a problem Enter a card expiry date in the future Expiry date ! Enter a date in the future, like 08/29 03/24 1. Summary links jump to the field. 2. Message sits between label and input, read before the field. 3. Says what to do, with an example. 4. Border + icon, not colour alone. 5. The wrong value stays, to edit.
The GOV.UK error pattern. Summary for orientation, inline message for repair. Both use the same words.

Required, optional, and asking less

If most fields are required, mark the few optional ones with "(optional)" in the label, as GOV.UK recommends; a sea of red asterisks is noise. Better still, question every optional field: why ask at all? Each field has a cost in time and in trust. A phone number "for account security" on a reading app makes people wonder what you will do with it.

Accept input the way people give it

Input masks that force a format while typing (brackets and dashes appearing in a phone field) often fight paste, autofill and international numbers. A gentler approach: let people type freely, strip spaces and punctuation, and display a tidy format after they leave the field. Exception: card numbers, where grouping digits in fours while typing helps people check them. Smart defaults remove work: preselect the country from the device locale, the currency from the country, today for a date. Autofill is the cheapest speed-up there is: use the correct autocomplete values (email, name, street-address, one-time-code) and the right input types, so phones show the right keyboard and offer saved details.

Passwords

The US National Institute of Standards and Technology's digital identity guidelines (SP 800-63B, 2017) recommend against composition rules (one uppercase, one symbol) and forced periodic changes, and in favour of a minimum length, checking against lists of breached passwords, allowing paste (so password managers work), and offering a way to show the password. Those recommendations are good design too: show the length rule before people type, let them see what they typed, and never block paste. Better still, consider passkeys or email sign-in links.

Multi-step and long forms

Split a long form into steps when the steps match a natural grouping (shipping, then payment, then review) or when later questions depend on earlier answers. Show progress honestly ("Step 2 of 3", not a bar that jumps), let people go back without losing data, save progress automatically, and end with a review step for anything costly. GOV.UK's "one thing per page" pattern goes further: each page asks one question, which works very well on phones and for complex, branching forms.

2 3 Shipping edit Payment step 2 of 3 Review
Honest progress with named steps. Completed steps stay clickable for edits; the review step is where costly mistakes are caught.

Do

  • One column, labels above fields.
  • Validate on blur; re-check live after an error shows.
  • Show rules before people type.
  • Use correct input types and autocomplete values.
  • Mark optional fields; remove the ones you can.
  • Keep data when going back or on error.

Don't

  • Use placeholder text as the only label.
  • Show errors on the first keystroke.
  • Clear the password or the whole form on error.
  • Block paste in password or code fields.
  • Force rigid formats for phone numbers or names.

In the wild

  • Stripe ElementsStripe
    The card field detects the card brand from the first digits, groups numbers, and moves to the expiry field automatically when the number is complete. Small anticipations add up to a form that feels like it is helping.
  • iOS one-time codesApple, iOS 12 (2018)
    Fields marked as one-time-code offer the code from an incoming SMS above the keyboard. One attribute in your markup can remove a whole app switch.
  • GOV.UKGovernment Digital Service
    "One thing per page" forms and the error summary pattern, both documented with research notes. Simple, plain forms serve everyone, including people under stress.
For the solo creator

Write one form field component with label, hint, error, and the validation timing built in, and use it everywhere. Ten lines of state (touched, dirty, error) give you blur-then-live validation on every form for free. And before adding any field, write down what you will do with the answer. If you cannot, delete the field.

Common mistakes

Validating like a compiler

Validation libraries run on every change by default.

Track a "touched" flag per field; show errors only after blur or submit.

Hidden rules

Rules live in backend code and surface as errors.

Show every rule as hint text before input.

Splitting names

The database has first and last name columns.

Many cultures do not fit "first/last". Ask for "Full name" and, if needed, "What should we call you?"

Check yourself

A user types "rohit" in the email field and moves on. Then they come back and type "@gmail.com". When should the error appear and disappear?

Exercise 8.1 60 minutes · on your own product

Rebuild your most important form

  1. Pick the form that matters most (sign-up, checkout, first setup).
  2. For every field, write why you need it. Delete or defer any field without a clear reason.
  3. Rebuild with top labels, hints for rules, blur-then-live validation, correct input types and autocomplete values.
  4. Test it on a phone with autofill, a password manager and a deliberately wrong entry in each field.
You're done when: the form has fewer fields, every rule is visible up front, and you have a short screen recording of the error and recovery behaviour on a phone.
BeginnerCompetentStrong
Fixes labels and messages.Fewer fields; correct validation timing; autofill works.Also adds smart defaults, a reusable field component, and measures completion time before and after.
9

Errors, forgiveness and safety

Taught by Don Norman, with Aza Raskin, Ben Shneiderman and Shigeo Shingo

People will make mistakes; that is not a user problem but a design input. Prevent the errors you can, make the rest cheap to reverse, and save warnings for the few actions that truly cannot be undone.

Don Norman distinguishes slips (you meant to do the right thing but your hand did something else: clicked the wrong row) from mistakes (you formed the wrong goal: you thought "Archive" meant delete). Slips happen most to experts working fast; mistakes happen to people whose mental model is wrong (see The Human Mind). The defences differ. Slips are stopped by constraints, spacing and undo. Mistakes are stopped by clear labels, previews and visible consequences.

The error-defence ladder (use the highest rung that fits) 1 Make it impossible: constraints, disabled-with-reason, pickers instead of free text 2 Make it hard by accident: spacing, distinct shapes, type-to-confirm 3 Make it reversible: undo, trash, versions, autosave 4 Warn: confirmation, only for the irreversible 5 Explain after: a clear error message (the last resort)
Climb the ladder before writing an error message. Most products start at rung 5 and 4. The calm ones live on rungs 1 to 3.

Prevention: constraints and poka-yoke

The Japanese engineer Shigeo Shingo popularised poka-yoke ("mistake-proofing") at Toyota: design the part so it can only fit one way. In software: a date picker cannot produce February 30; a "Send" button is disabled until there is a recipient (with a hint that says why); a file type filter only shows files you can open; dangerous actions are placed away from frequent ones. When you disable something, explain why near it, otherwise people think the product is broken.

Undo beats "Are you sure?"

Confirmation dialogs fail for a simple reason: habituation. After the third "Are you sure?" that did not matter, people click "Yes" before reading, so the dialog protects nothing on the one day it matters. Aza Raskin made this case in his 2007 A List Apart essay "Never Use a Warning When You Mean Undo". Undo works with habits instead of against them: people act at full speed, and the rare slip costs one click. Gmail's "Undo send" (a short delay before the message really goes) is the famous example. Feel the difference yourself below.

Demo: confirm versus undo. Delete three notes, quickly.
Confirm: every delete costs two clicks and a decision. By the third one you stop reading the dialog, which is exactly when it fails to protect you.

Layers of reversibility

Undo is not one feature but a set of safety nets at different time scales. Immediate undo (a toast with Undo, or ⌘ Z) covers seconds. A trash or archive covers days: Google Drive and many other services keep deleted files in trash for 30 days. Version history covers weeks or forever: Google Docs keeps a full revision history, and macOS added Auto Save and Versions in OS X Lion (2011). Autosave removes the oldest disaster in computing, losing work you forgot to save. Together they let people experiment, which Shneiderman lists among his "eight golden rules" as "permit easy reversal of actions".

secondssessiondaysmonths Undo toast Undo stack (⌘Z) Trash / archive (e.g. 30 days) Version history and backups
Nets at every time scale. Each one lets people act faster and worry less. The longer nets also cover the mistakes people notice only later.

When you must warn: make it specific and effortful

Some actions really are irreversible: deleting an account, permanently emptying trash, deleting a repository, sending money. For these, a generic "Are you sure?" is too easy to dismiss. Name the consequence precisely ("This permanently deletes 'Thesis' and its 214 notes. This cannot be undone."), make the button label the action ("Delete 214 notes", not "OK"), and for catastrophic cases ask for deliberate effort. GitHub asks you to type the repository's name before deleting it. The typing is not a password; it is a speed bump that forces you to read.

Don't
Are you sure? This action cannot be undone. Cancel OK
Vague and easy. Sure about what? "OK" invites the reflex click.
Do
Delete "Thesis" forever? 214 notes and 12 files will be erased. Type Thesis to confirm. Thesis Keep it Delete 214 notes
Specific, effortful, labelled with the action. Reserved for the truly irreversible.
ActionReversible?Pattern
Archive or delete one itemYes, via trashAct immediately, toast with Undo
Bulk delete 300 itemsYes, via trashAct, toast "300 items moved to Trash · Undo"
Send a messageBrieflyDelay sending a few seconds with Undo
Empty trash permanentlyNoSpecific confirmation naming the count
Delete account or workspaceNo, catastrophicType-to-confirm plus email notice; consider a grace period
Discard an unsaved draftAvoidableAutosave the draft instead of asking

Do

  • Prefer constraints and undo to warnings.
  • Add a trash with a clear retention period.
  • Autosave everything people type.
  • Name the object and count in irreversible confirmations.
  • Label destructive buttons with the verb and object.

Don't

  • Ask "Are you sure?" for reversible actions.
  • Use OK and Cancel as labels for a destructive choice.
  • Disable a button without saying why.
  • Put destructive and frequent actions side by side.
  • Ask "Save changes?" when you could have saved them.

In the wild

  • Gmail Undo SendGoogle, Labs 2009, standard 2015
    After sending, a toast offers Undo for a few seconds (adjustable in settings) while the message is held back. A small delay turns an irreversible act into a reversible one.
  • GitHub repository deletionGitHub
    Deleting a repository requires typing its name. Effort proportional to consequence.
  • Google DocsGoogle
    No Save button; changes save continuously and Version history lets you restore any earlier state. When everything is saved and versioned, "Save changes?" disappears from the product.
  • macOS TrashApple
    Deleting a file moves it to Trash, and Put Back restores it to its original folder. The best delete is a move.
For the solo creator

Implement delete as a soft delete from day one: a deleted_at column, hidden from queries, purged by a job after 30 days. It costs an hour and makes Undo, Trash and "I deleted it by accident" support emails trivial forever. Undo for edits is harder; start with soft delete and autosave, which cover most of the pain.

Common mistakes

Confirmation everywhere

It feels responsible.

Remove confirmations for reversible actions; add undo. Keep a few specific ones for the irreversible.

Undo that expires too fast

A 2-second toast looks tidy.

Keep undo toasts visible for at least 5 to 8 seconds, pause the timer on hover, and keep the action reachable in trash afterwards.

Blaming the user

Error messages are written from the system's point of view.

Say what happened and how to fix it, not "Invalid input" or "You failed to…" (see Words).

Check yourself

People in your note app keep accidentally archiving notes with a swipe. What is the best fix?

Exercise 9.1 45 minutes · on your own product

Climb the ladder for every destructive action

  1. List every action that removes, overwrites, sends or pays.
  2. For each, write which rung of the ladder it currently uses.
  3. Move each one as high as possible: a constraint, a soft delete with undo, autosave or versions.
  4. Rewrite the remaining irreversible confirmations with object names, counts and action-labelled buttons.
You're done when: you have a table of actions with old and new rungs, and every remaining confirmation is specific.
BeginnerCompetentStrong
Rewrites confirmation text.Replaces most confirmations with undo; soft delete in place.Adds trash with retention, versions or autosave, and type-to-confirm for the one catastrophic action.
10

Modes, modals and overlays

Taught by Larry Tesler and Jef Raskin, with the Apple and Material guidelines

A mode is any state in which the same action does something different. Modes cause errors because people forget which one they are in. Avoid them where you can, make them loud where you cannot, and choose the lightest overlay that does the job.

Larry Tesler spent much of his career at Xerox PARC and Apple campaigning against modes; his car's licence plate famously read NOMODES. In the 1970s he and Tim Mott built Gypsy, an early modeless text editor at PARC, where you could simply click and type rather than first entering an "insert mode". Jef Raskin, who started the Macintosh project, wrote in The Humane Interface (2000) that modes are a major source of errors, because a habit formed in one mode fires in the other. Caps Lock is the everyday example: you type a password with Caps Lock on and it fails, because the keyboard was in a mode you did not notice.

Raskin's alternative is the quasimode: a mode that lasts only while you physically hold it, like the Shift key. Your body keeps track of the mode, so you cannot forget it. Holding Space to pan in Figma or Photoshop is a quasimode; pressing a tool key that stays on until you change it is a full mode.

Mode (Caps Lock) Quasimode (Shift) Caps press once… stays on, invisibly pASSWORD123 → login fails State lives in the machine; you must remember it. Shift active only while held Password123 → as intended State lives in your hand; you cannot forget it.
Where the mode lives decides how often it bites. Make unavoidable modes visible on the screen, or tie them to a held key or gesture.

When modes are worth it

Some modes earn their place: an editor's "focus mode", a drawing app's pen tool, a camera's video mode. Make them safe with three rules. Make the mode visible where the person is looking (a coloured border, a changed cursor, a persistent label). Make it easy to exit with the same control that entered it, plus Esc. Keep it short-lived where possible, or revert automatically when the task ends.

Modals: the interruptions

A modal dialog is a mode: while it is open, the rest of the app does not respond. That is its power (it forces a decision) and its cost (it blocks everything, including copying information from the page behind it). Overlays come in a range from heavy to light. Choose the lightest one that does the job.

Which overlay? Ask from top to bottom; stop at the first yes. Must the person decide before anything else can happen, because it is critical or irreversible? Is it a self-contained task with its own fields and steps (compose, edit, create)? Is it a small set of options or details about one element (a menu, a colour picker, a preview)? Is it feedback about an action the person just took (saved, sent, archived)? Is it an ongoing condition that affects the whole screen (offline, trial ending, read-only)? None of the above? yes Dialog (alert) yes Sheet or full page yes Popover or menu yes Toast (with Undo) yes Banner Inline, in the page
Heavy at the top, light at the bottom. Most messages belong in the bottom three. If you reach for a dialog for something that is not critical, you are spending the person's attention without asking.
Dialog (alert)
Small, centred, blocks everything. For decisions that cannot wait and are costly to get wrong. Two or three buttons with verb labels.
Sheet / modal page
A larger surface for a contained task (compose a message, create an event). Has its own Cancel and Done. Should autosave drafts if dismissed.
Popover / menu
Anchored to the element that opened it. Dismissed by clicking outside or pressing Esc. Does not block the page.
Toast / snackbar
Brief message near the bottom confirming an action, often with Undo. Does not block. Never use for errors that need action, since it disappears.
Banner
A persistent strip at the top of a screen or section for ongoing conditions. Stays until the condition ends or is dismissed.
Inline
The message lives in the content itself: an empty state, a field error, a hint under a setting. The calmest option.
Don't
Saved successfully! OK
A dialog for good news. Blocks the work to announce that nothing went wrong, and demands a click to continue.
Do
Saved
Inline status. The work continues; the confirmation is there if you look for it.

Do

  • Choose the lightest overlay that fits.
  • Make any mode visible and exit it with Esc.
  • Prefer quasimodes (hold to activate) for temporary tools.
  • Return focus to the triggering element when an overlay closes.
  • Autosave sheet contents if dismissed.

Don't

  • Use a modal for success messages.
  • Stack a modal on a modal.
  • Put errors needing action in a toast that vanishes.
  • Open a dialog on page load (newsletter, cookie walls aside, see Honest & Calm).
  • Hide the current mode in a small icon.

In the wild

  • GypsyXerox PARC, mid-1970s
    Larry Tesler and Tim Mott's editor let people select text by dragging and insert by typing, without modes, and introduced cut and paste in a form close to what we use today. Modeless editing became the default because it removed a whole class of errors.
  • vimBram Moolenaar, 1991
    A deliberately modal editor: normal mode for commands, insert mode for typing. Experts love its speed; newcomers famously cannot find how to quit. Modes can pay off for experts who invest in them, and they cost newcomers dearly.
  • FigmaFigma
    Holding Space turns the cursor into a hand for panning; releasing returns to the previous tool. A quasimode gives a temporary tool with no state to forget.
For the solo creator

Make one overlay system: a dialog, a sheet, a popover, a toast and a banner component, with focus trapping, Esc handling and focus return built in. The native <dialog> element and the popover attribute in modern browsers handle much of this for you. Then ban ad-hoc overlays in your own code review.

Common mistakes

The modal as a page

Modals feel quick to build.

If it scrolls, has tabs, or needs a URL, make it a page.

Silent modes

A selection or editing mode is shown only by a small icon change.

Change something large: the toolbar, a border, a label. Offer Esc to exit.

Toasts for errors

One notification component handles everything.

Errors that need action go inline or in a banner that stays until resolved.

Check yourself

Your app loses connection while the person is editing. Which overlay?

Exercise 10.1 40 minutes · on your own product

Overlay and mode inventory

  1. List every dialog, sheet, popover, toast and banner in your product.
  2. Run each through the decision tree. Mark each one that is heavier than needed.
  3. List every mode (editing, selection, tools, focus). Check: visible, exit with Esc, short-lived?
  4. Replace the two worst offenders.
You're done when: you have an inventory table with "current" and "should be" columns and two overlays downgraded in the product.
BeginnerCompetentStrong
Inventory exists.All overlays checked; success dialogs removed.Also fixes focus return, Esc handling and mode visibility across the product.

Recap and connect: Part two

States (6), controls (7), forms (8), forgiveness (9) and overlays (10) share one theme: respect for the person's attention and effort. Every chapter asked you to pick the lightest, most predictable option that still does the job.

Connect the ideas

Chapter 1 said verbs belong on objects. Chapter 9 said deletes should be reversible. Where should "Restore" live?

Connect the ideas

In Foundations you met feedback as a basic principle. Which design gives the best feedback for a "Save" action in an editor that autosaves?

Part three

Hands on: pointer, keyboard, touch and the small moments

People do not use software with their eyes; they use it with hands, through a mouse, a trackpad, a keyboard or a fingertip. This part covers direct manipulation, keyboard-first design, touch and gestures, and the microinteractions where a product's feel lives.

11

Direct manipulation, drag and drop, selection

Taught by Ben Shneiderman, with Bret Victor and the Apple Human Interface Guidelines

When people can see the objects and act on them directly, with immediate, visible and reversible results, they learn by doing instead of by reading. Drag and drop, selection and bulk actions are where this works or fails.

Ben Shneiderman coined "direct manipulation" in a 1983 paper in IEEE Computer. He described three properties: a continuous representation of the objects of interest; physical actions (pointing, dragging) instead of typed commands; and rapid, incremental, reversible operations whose effect is immediately visible. Spreadsheets, the desktop, and today's design tools and kanban boards all follow this model. You met Bret Victor's version of the idea in the starter guide: creators need an immediate connection to what they make. The interaction-design job is to make that connection reliable.

Drag and drop: four moments to design

A drag has a beginning, a middle and an end, and each needs feedback. Most broken drag interactions skip one of them.

1 Affordance2 Lift3 Travel4 Drop Draft chapter 3 Grip appears on hover; cursor becomes a hand. Draft chapter 3 Card lifts (shadow, tilt); a ghost marks where it was. Doing Valid target highlights; a line shows the exact slot. Draft chapter 3 Moved to DoingUndo Card settles with a short animation; Undo offered. Plus a non-drag path for every drag: a "Move to…" menu item and keyboard support.
Every moment answers a question. Can I drag this? Did I pick it up? Where will it land? Did it land where I meant? Skip one and people drop things in the wrong place or never discover the drag at all.
Demo: drag a card to another column
Without: nothing tells you the card is draggable, nothing moves with your pointer, no column lights up. You find out where it went only after letting go.

Selection models

Desktop operating systems settled on a selection grammar decades ago, and people's hands know it: click selects one and deselects others; Shift-click extends a range; Cmd-click (Ctrl on Windows) toggles one item; ⌘ A selects all; Esc clears. On touch, there is no hover or modifier key, so apps add an explicit selection mode ("Select" button, then tap to toggle, with a count in the title) or long-press to start selecting. Follow these conventions exactly; a list where Shift-click does something different is a list people distrust.

Bulk actions

When items are selected, the actions that apply to all of them should appear where the selection is (a toolbar that replaces the normal header, with a count: "12 selected"). Gmail solved a subtle problem well: "select all" selects only the visible page, and a banner then offers "Select all 1,240 conversations that match this search". That keeps the common case safe and the powerful case one click away. After a bulk action, report the result with a count and an Undo.

Don't
Notes Actions ▾ (scroll down to find)
Selection with nowhere to go. No count, actions far away, no hint of what applies to the selection.
Do
3 selected MoveTagDelete✕
The header becomes a selection toolbar. Count, relevant actions and a clear exit, right where the eye already is.

Do

  • Design all four drag moments: affordance, lift, travel, drop.
  • Highlight valid drop targets only, and show the exact insertion point.
  • Offer a non-drag alternative (menu, keyboard) for every drag.
  • Follow platform selection conventions exactly.
  • Show a selection count and put bulk actions where the selection is.

Don't

  • Make drag the only way to reorder or move.
  • Let things drop silently onto invalid targets.
  • Start drags with zero movement threshold (clicks become accidental drags).
  • Apply bulk actions to hidden items without saying so.

In the wild

  • TrelloFog Creek, 2011
    Cards tilt slightly when lifted, the target list shows a gap where the card will land, and every card also has a "Move" action in its menu. The tilt is not decoration; it says "this is in your hand now".
  • Things 3 Magic PlusCultured Code, 2017
    The "+" button can be dragged into a list to insert a new to-do exactly where you drop it, or tapped to add at a default position. Drag as an accelerator layered on a simple tap.
  • Gmail select allGoogle
    Selecting all selects the page, then offers a banner to extend to every match. Safe default, explicit escalation.
For the solo creator

Drag and drop is expensive to get right, especially with touch, scrolling containers and accessibility. Use a well-tested library (for example dnd-kit on the web, or the platform's drag APIs on iOS and Android), and ship the "Move to…" menu first. Many products never need more.

Common mistakes

Invisible draggability

The designer knows it can be dragged.

Show a grip on hover, change the cursor, and mention it in the empty state once.

No auto-scroll

Tested with a short list.

Scroll the container when the pointer nears its edge during a drag.

Selection that resets

Lists re-render after any action.

Keep selection stable across refreshes and after non-destructive actions.

Check yourself

Your kanban board lets people drag cards between columns. A screen reader user reports they cannot move cards at all. What is the right fix?

Exercise 11.1 40 minutes · on your own product or one you use daily

Dissect a drag and a selection

  1. Record yourself (screen recording) dragging something in your product or a favourite tool.
  2. Step through frame by frame. For each of the four moments, write what feedback appears.
  3. Try multi-select with Shift-click, Cmd-click and keyboard. Note any convention it breaks.
  4. List the non-drag path for every drag. Add any that are missing to your backlog.
You're done when: you have a four-moment table, a selection-convention checklist, and missing non-drag paths listed.
BeginnerCompetentStrong
Describes the drag.Identifies missing moments and broken conventions.Implements a non-drag path and fixes one missing moment in your own product.
12

Keyboard-first design and command palettes

Taught by the makers of Superhuman, Linear, Raycast and VS Code, with Jef Raskin

The keyboard is the fastest input device most people own. Products that respect it let beginners use menus and buttons while showing them, every time, the shortcut that will make them faster.

Mouse and touch are great for discovery and spatial work; the keyboard is great for repetition. A person who archives 100 emails a day saves real time with a single-key shortcut. But shortcuts are invisible, so they must be discoverable: shown next to the menu item or in the tooltip of the button, so people learn them by using the product normally. macOS has done this since 1984: every menu item lists its shortcut on the right. That is the model: the slow path teaches the fast path.

How people learn shortcuts without a manual New note⌘N ArchiveE Move to…V Find⌘F 1. Menus list shortcuts ArchiveE 2. Tooltips name the key Keyboard shortcuts Next / previousJ / K ArchiveE Command palette⌘K Go to inboxG then I 3. "?" opens the full list
Three layers, each one discovered through normal use. Gmail, GitHub and many others open a shortcut overlay with ?. Command palettes add a fourth layer: they show the shortcut next to each command they find.

Command palettes

A command palette is a search box for actions and places. Press a shortcut (often ⌘ K), type a few letters, use arrow keys to pick, press Enter. It turns a product with hundreds of commands into one with a single, learnable entry point. Sublime Text and VS Code (⌘ Shift P) made the pattern familiar to developers; Superhuman and Linear made ⌘ K central to their products; Raycast and Alfred apply it to the whole Mac, following Spotlight (2005). A good palette has: forgiving matching (typing "arc" finds "Archive"), results grouped by type, the shortcut shown next to each command, recent commands first, and context awareness (actions for the selected item appear at the top).

Lab: a mini command palette
    Click the box, then type "arc", "new", "dark" or "go". Use ↑ ↓ and Enter.
    Notice: matching is forgiving (letters in order, not exact words); matched letters are underlined; each result shows its group and shortcut; Enter runs the highlighted item. Every run teaches you the shortcut for next time.

    Designing shortcuts

    • Respect platform standards first. ⌘ Z, ⌘ C, ⌘ F, Esc, Tab, Enter must do what they do everywhere.
    • Single keys for frequent actions in list-based apps (Gmail's E archive, J/K next/previous, inherited from vi). Only when focus is not in a text field.
    • Mnemonics: C for compose, A for assign. Sequences such as G then I ("go to inbox") give a whole namespace of navigation.
    • Never override browser or system shortcuts people rely on, such as ⌘ W or ⌘ L.

    Focus management

    Keyboard use depends on focus: which element receives keys. Focus must always be visible (a clear ring), move in a logical order with Tab, go into a dialog when it opens, stay trapped inside while it is open, and return to the button that opened it when it closes. After deleting an item from a list, move focus to the next item, not to the top of the page. These rules are also accessibility rules (see Accessible & Inclusive), and they make the product faster for everyone who prefers keys.

    Don't
    Margin · Library item 31 (was editing)
    Focus lost. After closing the edit dialog, the keyboard user must tab through 30 items to get back.
    Do
    Margin · Library item 31 (focus returned)
    Focus returns home. The person continues exactly where they were.

    Do

    • Show shortcuts in menus, tooltips and the palette.
    • Offer a ? overlay listing all shortcuts.
    • Keep focus visible and logical; return it after overlays close.
    • Use single-key shortcuts only outside text fields.
    • Make every palette command also reachable by visible UI.

    Don't

    • Override standard system or browser shortcuts.
    • Hide features only in the palette.
    • Remove focus outlines for looks.
    • Require exact text matches in the palette.

    In the wild

    • SuperhumanSuperhuman, 2017 onward
      Built around the keyboard and ⌘ K; the palette shows each command's shortcut so people graduate to it. Teach the fast path through the slow path.
    • VS CodeMicrosoft, 2015
      The Command Palette exposes nearly every command, with fuzzy matching and recently used commands at the top. One entry point can make a huge feature set approachable.
    • RaycastRaycast, 2020
      A launcher where extensions add commands to the same search-and-run interface. A palette scales as a platform when every command shares one grammar.
    • GmailGoogle
      Optional single-key shortcuts (J, K, E, R) and a ? overlay. Power features can sit quietly behind a simple default.
    For the solo creator

    A command palette is a great investment for a small team: it gives every new feature an instant, discoverable home without new navigation. Keep a single registry of commands (id, title, group, shortcut, handler, "is available" check) and render menus, the palette and the ? overlay from it. One source of truth, three surfaces.

    Common mistakes

    Secret shortcuts

    They are documented only in a help page.

    Show them everywhere the command appears.

    Shortcuts firing while typing

    Global key handlers ignore focus.

    Ignore single-key shortcuts when focus is in an input, textarea or contenteditable.

    The palette as the only map

    It feels elegant to have one box for everything.

    Newcomers need visible navigation; the palette accelerates, it does not replace.

    Check yourself

    You add a single-key shortcut D for "Delete note". Users report notes disappearing. What happened, and what is the fix?

    Exercise 12.1 90 minutes · on your own product

    A command registry and a palette

    1. List your 15 most-used actions and places. Give each a group and, for the top 5, a shortcut that respects platform standards.
    2. Create a single command registry in code.
    3. Render a palette with forgiving matching and arrow-key selection (copy the lab's approach).
    4. Show shortcuts in tooltips and menus from the same registry. Add a ? overlay.
    5. Unplug your mouse for 15 minutes and use your product. Note every dead end.
    You're done when: the palette works, shortcuts show up in at least two places, and you have a list of keyboard dead ends with fixes.
    BeginnerCompetentStrong
    Lists shortcuts.Working palette from a registry; focus visible everywhere.Context-aware palette, ? overlay, focus return after overlays, and the no-mouse test passes.
    13

    Touch, thumbs and gestures

    Taught by Steven Hoober, with Paul Fitts, Josh Clark and the Apple and Material guidelines

    A fingertip is large, imprecise and covers what it touches. Make targets big enough, put frequent actions where thumbs reach, and treat gestures as shortcuts layered on visible controls, never as the only way.

    Fitts's law (from The Human Mind) says the time to hit a target depends on its distance and size. On touch screens there is a second problem: the finger pad is roughly a centimetre across, and it hides the target as you press. That is why both major platforms set minimum target sizes: Apple's Human Interface Guidelines recommend at least 44 × 44 points, and Material Design recommends at least 48 × 48 dp (about 9 mm). WCAG 2.2 added a minimum of 24 × 24 CSS pixels (success criterion 2.5.8, level AA), with spacing exceptions, and keeps 44 × 44 as the stricter AAA level (2.5.5). The visible icon can be smaller; the tappable area should not be.

    Lab: target size versus a fingertip
    The dashed circle approximates a fingertip contact area (about 40 CSS px across on a typical phone; real fingers vary). Watch where your target passes each guideline, and how spacing makes small targets safer.

    Thumb zones

    Steven Hoober's observational research (published from 2013 onward) watched how people actually hold phones in the street and found many grips: one-handed with the thumb, cradled in two hands, and two thumbs. He found people shift grip often, and that the centre of the screen is easiest to reach and to tap accurately. On today's tall phones, the top corners are the hardest to reach one-handed. That is why primary actions have migrated to the bottom: tab bars, bottom sheets, floating action buttons and the search bar at the bottom of Safari on iOS 15 (2021).

    hard stretch easy Right thumb, one hand (approximate) Easy: frequent and primary actions, tab bar, compose, the main button. Stretch: content, list rows, secondary actions. Hard: rare or risky actions (settings, delete, sign out) and status info. Mirror for left hands; people switch grips often, so keep critical actions reachable either way (bottom centre).
    Not a precise map, a pressure. Zones vary with phone size and grip. The direction is reliable: frequent toward the bottom, risky toward the top.

    Gestures are accelerators

    Gestures (swipe to archive, pinch to zoom, pull to refresh, long-press for a menu) are fast once known and invisible until then. Josh Clark's writing on touch design (including Designing for Touch, 2015) makes the case for gestures as the "keyboard shortcuts of touch": treat them like shortcuts. Every gesture should have a visible equivalent: a swipe-to-delete row also has Delete in its menu; long-press menus repeat actions available elsewhere. Pinch to zoom, scroll, tap and swipe-between-pages are close to universal; anything else must be taught or discovered, and some people never will.

    Edge swipes and conflicts

    The screen edges belong to the system. iOS uses a swipe from the left edge for back (since iOS 7) and from the bottom for home; Android 10 and later use swipes from either side edge for back. An app that puts its own horizontal swipe gestures near an edge (a drawer, a carousel, a drawing canvas) fights the system, and the system usually wins. Keep custom swipes away from the edges, or respect the platform's gesture exclusion rules where you truly need them, such as in a drawing app.

    carousel Edges are the system's territory Red: back (left, and right on Android) and home (bottom). Green: safe for your own horizontal swipes. A drawer that opens by swiping from the left edge collides with back on both platforms. Give it a visible button instead.
    Gesture conflicts are invisible in mockups and obvious in the hand. Test every gesture on real devices with system navigation gestures turned on.

    Long-press and hover

    Long-press is the touch equivalent of right-click: useful for context menus and previews, but hidden. Keep it for secondary actions. Hover does not exist on touch, so anything shown only on hover (tooltips, row actions, previews) must also be reachable another way. On iPad with a trackpad and on laptops with touch screens, design for both at once: hover reveals, tap and click both work.

    Don't
    12 px icons, 4 px apart, top, delete beside edit
    Small, crowded, far from the thumb, with a destructive action one slip away.
    Do
    ShareNoteMore ≥44 pt,in reach
    Big, spaced, in reach, with delete moved into "More" where it cannot be hit by accident.

    Do

    • Make tappable areas at least 44 pt (iOS) or 48 dp (Android).
    • Put frequent actions in the bottom half.
    • Give every gesture a visible equivalent.
    • Keep custom swipes away from screen edges.
    • Test on a real phone, one-handed, walking.

    Don't

    • Put primary actions only in the top corners.
    • Rely on hover or long-press for essential actions.
    • Place destructive targets next to frequent ones.
    • Invent gestures that need a tutorial to discover.

    In the wild

    • Safari on iOS 15Apple, 2021
      Moved the address bar to the bottom by default, within thumb reach, with swipes on the bar to switch tabs. After feedback, Apple made the top position an option again. Ergonomics can justify breaking a habit, but give people a way back.
    • Apple Mail, Gmail swipes2010s
      Swipe a message to archive or delete, with the same actions available in the message's toolbar. The gesture is a shortcut; the button is the guarantee.
    • Material Floating Action ButtonGoogle, 2014
      A large primary action placed at the bottom right, in thumb reach. The main action belongs where the hand already is.
    For the solo creator

    Add a debug overlay that outlines every tappable area in your app; anything smaller than 44 points shows red. It takes an hour and finds problems faster than any review. Then use your app for a day one-handed, standing on a bus or walking. You will move at least one button.

    Common mistakes

    Icon size equals target size

    The visual is 20 px, so the button is 20 px.

    Pad the hit area to 44 pt while keeping the icon small.

    Desktop layout shrunk to phone

    The responsive layout just reflows the desktop toolbar.

    Redesign for thumbs: bottom bar, fewer actions, overflow menu.

    Gesture-only features

    Gestures feel clean and modern.

    Add the action to a visible menu too.

    Check yourself

    Your reading app opens its table of contents by swiping from the left edge. Android users say it often goes back instead. Best fix?

    Exercise 13.1 45 minutes · on your own product (or a daily app)

    The one-thumb audit

    1. On your phone, use the app one-handed for its three main tasks. Note every stretch, regrip and mis-tap.
    2. Screenshot the main screens and overlay a thumb-zone sketch. Mark primary actions in the hard zone.
    3. Measure the smallest targets (use developer tools or the debug overlay).
    4. List every gesture and its visible equivalent; mark gestures without one.
    You're done when: you have annotated screenshots, a list of targets under 44 pt, and a plan to move at least one primary action into reach.
    BeginnerCompetentStrong
    Finds small targets.Moves primary actions into reach; all gestures have visible equivalents.Also tests with system gestures on, on two phone sizes, and builds the debug overlay.
    14

    Microinteractions

    Taught by Dan Saffer (Microinteractions, 2013), with Loren Brichter

    A microinteraction is a single, contained moment that does one thing: toggling a setting, liking a post, refreshing a list. Products are judged by these moments, because people repeat them thousands of times.

    Dan Saffer's book Microinteractions: Designing with Details (2013) gave a simple structure for dissecting any of them. Four parts: a trigger starts it (a tap, a gesture, or a system condition such as a new message); rules decide what happens; feedback shows what is happening, in light, motion, sound or haptics; and loops and modes govern what happens over time and in special cases (does it repeat, does it change after the tenth use, is there a mode for power users).

    Trigger Rules Feedback Loops & modes user or systemwhat happenswhat you perceiveover time, edge cases Feedback teaches the rules; loops change the trigger or rules over time.
    A lens, not a process. Use it to take a microinteraction apart, then improve one part at a time.

    Three dissected

    TriggerTap the heart, or double-tap the photo (Instagram).
    RulesToggle: liked if not, unliked if liked. Count updates. Saved to server in the background (optimistic).
    FeedbackHeart fills instantly with a short scale bounce; a large heart flashes over the photo on double-tap; count increments.
    Loops & modesIf the server rejects (offline), the heart quietly reverts and retries. No confirmation, because it is trivially reversible.

    Twitter replaced its star "favorite" with a heart "like" in November 2015, with a burst animation. The change of symbol changed what people felt the action meant.

    Feedback: proportional and immediate

    Feedback should arrive within about 100 milliseconds, so the action and the response feel like cause and effect, and it should be proportional to the importance of the action: a toggle deserves a slide, a payment deserves a clear confirmation, a keystroke deserves nothing but the character. Motion details (durations, easing, springs) are covered in Motion & Feel; this chapter is about the structure.

    Don't
    tap 800 ms: did it work? heart fills People tap again, unliking it.
    Waiting for the server. The delay breaks cause and effect and invites double taps.
    Do
    tap fills at ~50 ms server saves quietly Revert only if it fails.
    Optimistic feedback. The response feels like part of the tap; the network becomes invisible.

    Loops: microinteractions that learn

    The most overlooked part is the loop: how the moment changes over time. A first-run hint shows the first time, then never again. A notification groups after the third similar one. Autocomplete puts your most-used choice first. A "Snooze" offers the time you usually pick. These quiet adaptations make a product feel attentive without adding a single setting (see chapter 17).

    Do

    • Dissect key moments into trigger, rules, feedback, loops.
    • Respond within about 100 ms, even if work continues.
    • Make feedback proportional to the action's importance.
    • Handle failure inside the microinteraction (revert, explain).
    • Let moments adapt to repeated use.

    Don't

    • Wait for the server before showing a response to a trivial action.
    • Add celebration animations to routine actions.
    • Make triggers so small or hidden that they are found by accident.
    • Forget the edge cases: offline, double taps, failures.

    In the wild

    • Tweetie 2Loren Brichter, 2009
      Introduced pull-to-refresh: a trigger built from a gesture people already made. The best triggers extend existing habits.
    • Instagram double-tapInstagram
      Double-tapping a photo likes it, with a large heart flash on the photo itself as feedback. Feedback where the eye is, not in a corner.
    • Slack "mark as read"Slack
      Pressing Esc marks the current channel as read. A tiny keyboard trigger for a very frequent moment.
    For the solo creator

    Pick the five actions your users do most often and dissect each with the four parts. Polishing those five moments improves the felt quality of the product more than any new feature. It is also one of the most enjoyable kinds of work you can do in an afternoon.

    Common mistakes

    Delight as decoration

    Animations are added to impress.

    Every piece of feedback should tell the person something: it worked, it is happening, it moved here.

    No failure path

    Optimistic UI is built for the happy path.

    Revert visibly and explain if the background save fails.

    Check yourself

    In your app, people "star" items. Some star an item twice by accident and then it is unstarred. Which part of the microinteraction is failing?

    Exercise 14.1 45 minutes · on your own product

    Dissect and improve five moments

    1. List the five most frequent small actions in your product.
    2. Fill a trigger / rules / feedback / loops table for each, as in the tabs above.
    3. Measure feedback latency for each (screen recording at 60 fps works).
    4. Improve the weakest part of each: faster feedback, a failure path, or a loop that adapts.
    You're done when: you have five dissection tables with latencies, and at least two moments improved and shipped.
    BeginnerCompetentStrong
    Tables filled.All five respond within about 100 ms; failures handled.At least one moment adapts over time (a loop), and you can explain each change in one sentence.

    Recap and connect: Part three

    Direct manipulation (11), keyboard (12), touch (13) and microinteractions (14) are four views of the same principle: input and response should feel like one continuous act, and every fast path should sit on top of a visible, reliable one.

    Connect the ideas

    Which statement connects swipe gestures (13), keyboard shortcuts (12) and drag and drop (11)?

    Part four

    Finding, interrupting and configuring

    Three last structures sit on top of everything else: how people find things in a growing pile (search, filter, sort, paging), how the product reaches out when they are not looking (notifications), and how much of the product people can reshape (settings). Each is a test of restraint.

    15

    Search, filter, sort and paging

    Taught by Marti Hearst (Search User Interfaces), with Peter Morville and Aza Raskin

    Once a collection outgrows a screen, people need three tools: search when they know what they want, filters when they know what kind, and sort when they know what order. Paging decides how the rest arrives.

    Marti Hearst's Search User Interfaces (2009, free online) and Peter Morville and Jeffery Callender's Search Patterns (2010) catalogue the patterns. The key distinction: search narrows by words (best when people can name the thing), filters narrow by attributes (best when people know properties but not names: unread, from this month, tagged "work"), and sort reorders without removing anything. Your object map's attributes (chapter 1) tell you exactly which filters and sorts make sense.

    stoic| in: All books ▾ Highlights This year ✕ + Filter 23 results Sort: Relevance ▾ "The Stoic does not fear what he cannot change…" Meditations · page 41 "…a stoic calm in the face of noise" Digital Minimalism · page 112 1 Scope is visible 2 Filters as removable chips 3 Count and sort 4 Matches highlighted, with context and source Empty results? Echo the query and active filters, and offer the widening move ("Search all collections", "Clear 2 filters"). Typos? Offer "Did you mean…". See chapter 6 for no-results states.
    Every part answers a question. What am I searching? What narrows it? How many? In what order? Why did this match?

    Search that forgives

    People misspell, use synonyms, and type partial words. Good search is forgiving: it matches prefixes and typos, searches the fields people expect (title and body, not just title), ranks recent and frequently opened items higher, and shows results as you type when the data is local and fast. Keep the query visible in the field after searching, so people can refine it. Show recent searches when the field is focused and empty.

    Filters and sort

    Show active filters as visible, removable chips; hidden filters are the main cause of "where did my items go?" support requests. Show the result count, and update it as filters change. For each filter value, consider showing how many items it would leave (faceted search), so people never filter themselves into an empty page. Default sort should match the most common task: newest first for feeds, alphabetical for reference lists, relevance for search. Remember the person's chosen sort per view.

    Pagination, load more, infinite scroll

    ‹123…12› Pagination + position, footer reachable, shareable − a click and reload per page Search results, tables, archives. Show 20 more Load more + continuous, person in control − position lost on reload unless kept Lists, comments, product grids. …loads as you scroll… Infinite scroll + effortless browsing − no end, no footer, compulsive Endless feeds, photo timelines.
    Choose by the task, not the trend. Goal-directed finding wants position and an end; leisurely browsing tolerates no end. "Load more" is a calm middle path for most products.

    Aza Raskin designed an early version of infinite scroll in 2006 and has since said publicly that he regrets how it has been used to keep people scrolling. Google switched its search results to continuous scrolling (mobile in 2021, desktop in 2022) and went back to page-based results in 2024. Infinite scroll also makes footers unreachable and makes it hard to return to a position. For calm products, prefer pagination or "load more", and if you use continuous loading, keep scroll position on back and show where the content ends.

    Do

    • Derive filters and sorts from object attributes.
    • Show active filters as removable chips and a live count.
    • Make search forgiving: prefixes, typos, recent items first.
    • Echo the query in empty results and offer to widen.
    • Keep position when returning to a list.

    Don't

    • Hide active filters inside a closed panel.
    • Clear the search box after searching.
    • Use infinite scroll for goal-directed lists or above a footer.
    • Offer sort options nobody uses ("Sort by ID").

    In the wild

    • Amazon facetsAmazon
      The sidebar filters by brand, price, rating and more, narrowing a huge catalogue without typing. Facets let people find what they cannot name.
    • Linear filtersLinear
      Filters appear as chips in the view header and can be saved as custom views. Visible filters prevent "where did my issues go?"
    • Google SearchGoogle, 2021 to 2024
      Tried continuous scrolling of results, then returned to pages. Even the biggest teams revisit paging; there is no universal answer.
    For the solo creator

    For collections under a few thousand items, load everything and search on the device: it is instant, works offline and needs no search server. A small fuzzy-matching library (or the matching in this guide's palette lab) is enough. Add server search only when you must.

    Common mistakes

    Search as an afterthought

    Collections start small.

    Plan search, filter and sort from the object map's attributes before the collection grows.

    Silent filters

    The filter panel closes after applying.

    Keep a visible summary of active filters with one-tap clear.

    Check yourself

    People use your invoice list to find a specific invoice from last March. It uses infinite scroll. What should change?

    Exercise 15.1 45 minutes · on your own product

    Finding audit

    1. For your largest collection, list the attributes from your object map.
    2. Decide which become filters, which become sorts, and which are searchable text.
    3. Test five realistic "find" tasks. Time each. Note the failure points.
    4. Choose paging per list (pagination, load more, or infinite) and write a one-line reason.
    You're done when: you have an attribute table (filter / sort / search), five timed tasks, and a paging decision per list.
    BeginnerCompetentStrong
    Adds a search box.Visible filters with counts, sensible default sort, empty results handled.Forgiving search with ranking, saved views, and position kept on back.
    16

    Notifications and interruptions

    Taught by Gloria Mark (research on attention), with Amber Case (Calm Technology) and the Apple and Android guidelines

    A notification is the product reaching into someone's life uninvited. Send one only when it is timely, personal and actionable, at the lightest level that works, and give people control before they ask for it.

    Gloria Mark's research at UC Irvine on workplace attention has shown how interruptions fragment work and raise stress, and how long it can take to return to an interrupted task. Amber Case's Calm Technology (2015), building on Mark Weiser and John Seely Brown's 1990s writing, argues that technology should require the smallest possible amount of attention and inform without demanding. For a calm product, notifications are the place where those ideas are tested every day. The ethics of engagement-driven notifications are covered in Honest & Calm; here we focus on the structure.

    Relevance to this person → Time-sensitivity → In-app banner "Service down 2–3 pm" only when they open the app Push notification "Asha replied to you" "Your ride is here" Don't send "We miss you!" "Check out what's new" Inbox, badge or digest "3 new highlights shared" weekly summary email
    Only one quadrant earns a push. Everything else waits for the person to come to the product, or does not exist.

    A ladder of loudness

    Choose the quietest channel that delivers the message in time: inline (visible when they next look), badge or dot (a count, no sound), in-app inbox (collected, read on their schedule), digest email (batched), push notification (interrupts now), and at the top, time-sensitive or critical alerts. iOS 15 (2021) formalised this with interruption levels (passive, active, time-sensitive and critical), a scheduled notification summary, and Focus modes that let people decide who can break through. Android has notification channels (since Android 8, 2017) that let people turn off categories individually. Use these system tools honestly: marking marketing as "time-sensitive" will get your app's notifications turned off.

    Permission in context

    On iOS, an app gets one chance to show the system's notification permission prompt; if people decline, they must go to Settings to change it. Asking on first launch, before people know what the notifications would be, wastes that chance. Ask at the moment the value is obvious: after someone follows a thread ("Get notified when someone replies?"), or sets a reminder. Explain what you will send, and how often.

    Don't
    Welcome! "App" would like to send notifications Don't AllowAllow First screen, no reason
    Asked before trust exists. Most people decline, and the one system prompt is spent.
    Do
    Goal set: 20 min Remind you at 9:30 pm if you haven't read yet? One a day. Change anytime. Remind me Not now
    Asked at the moment of value, with what, when and how often. Only "Remind me" triggers the system prompt.

    Do

    • Send push only when timely, personal and actionable.
    • Ask for permission in context, after explaining.
    • Group and batch similar notifications.
    • Offer per-category controls in your own settings.
    • Deep-link each notification to the exact item (chapter 4).

    Don't

    • Use push for marketing or "we miss you".
    • Ask for permission on first launch.
    • Mark ordinary messages as time-sensitive.
    • Open the home screen from a notification about a specific item.

    In the wild

    • iOS notification summaryApple, iOS 15 (2021)
      People can batch non-urgent notifications into scheduled summaries, and Focus modes filter who can interrupt. The platform is moving toward calm; design with it, not around it.
    • Slack notification settingsSlack
      Per-channel choices (all messages, mentions only, nothing) and scheduled "do not disturb". Granular control is a sign of respect in a product that can be very noisy.
    • Android notification channelsGoogle, Android 8 (2017)
      Apps declare categories that people can mute independently. If you do not split your categories, people will mute all of them.
    For the solo creator

    Start with zero push notifications and add one only when users ask for it. Every notification type you add is a promise to maintain, a setting to build and a reason to be muted. A weekly digest email, sent only if there is something to say, is often all a small product needs.

    Common mistakes

    Engagement-driven pushes

    Metrics reward opens.

    Measure mutes and uninstalls too. A push that annoys costs future attention.

    Notifications that dead-end

    Deep links were not built.

    Every notification opens the exact item, already loaded.

    Check yourself

    Your journaling app wants more daily use. Which notification plan fits a calm product?

    Exercise 16.1 30 minutes · on your own product

    Notification inventory

    1. List every notification, email and badge your product can send.
    2. Place each on the urgency × relevance matrix. Move or delete anything outside the push quadrant.
    3. Check when and how you ask for permission. Rewrite it to happen in context.
    4. Check that each notification deep-links to its item.
    You're done when: you have a matrix with every message placed, a list of deletions, and a new in-context permission moment.
    BeginnerCompetentStrong
    Lists notifications.Deletes or demotes several; permission asked in context.Per-category controls, batching, deep links throughout, and a mute-rate metric.
    17

    Settings: defaults over options

    Taught by Alan Cooper, with Jared Spool, 37signals and Oliver Reichenstein

    Every setting is a decision you handed to the user. Most people never change defaults, so the default is the design. Add a setting only when reasonable people genuinely need different behaviour, and organise the few you keep around the person's goals.

    Jared Spool's 2011 article "Do users change their settings?" reported that the vast majority of people never change the defaults in the software they use. Alan Cooper's About Face (first edition 1995) makes the design consequence clear: the default is not a starting point, it is what most people will experience forever. When a designer cannot decide between two behaviours, adding a setting feels like a kind compromise. It is really a way of postponing the decision and charging every user a small tax to make it themselves. 37signals' Getting Real (2006) put it bluntly as "make opinionated software". iA Writer, from the starter guide, is the extreme example: very few preferences, because the defaults were designed with care.

    Does this deserve a setting? Is one behaviour right for 80%+ of people? Can the app detect the context and adapt? Do people genuinely and stably differ here? Is it used often, by many people? Default, no setting Adapt automatically Main settings Advanced section Don't add it yesyesyesnonoyesnono
    Most candidate settings stop at the first two questions. Dark mode, for example, is now usually "adapt automatically" (follow the system), with an override for those who differ.

    Adapt before you ask

    Many settings exist because the product could not tell what the person needed. Often it can: follow the system's appearance, language, text size and reduced-motion preference; remember the last-used view, sort and export format; infer time zone. A remembered choice is a setting the person made without visiting Settings. That is the "loop" from chapter 14, applied to configuration.

    Organising the settings you keep

    Group settings by the person's goals and the object map, not by your code modules: "Reading", "Highlights and notes", "Sync and backup", "Notifications", "Account". Put the most-changed settings first. Use one scrollable page with section headings for up to roughly 20 to 30 settings; beyond that, split into sections and add search. Settings should take effect immediately with switches and live previews (chapter 7). Every setting needs a short description of its effect in plain words, and destructive account actions (delete account, sign out everywhere) belong at the bottom, separated.

    Don't
    General›
    Advanced›
    Engine›
    Misc.›
    Experimental›
    Delete account›
    Organised by the code. No scent, a drill-down for everything, and a destructive action sitting among the ordinary ones.
    Do
    READING
    Theme
    Follows your device
    Auto
    Text size18
    SYNC
    Sync over cellular
    ACCOUNT
    Delete account…
    Organised by goals. Plain sections, current values visible, descriptions under ambiguous settings, destruction at the bottom.

    Do

    • Treat the default as the design; test it hardest.
    • Follow system preferences automatically.
    • Remember choices instead of asking for them.
    • Group by goal; show current values; describe effects.
    • Apply changes immediately with previews.

    Don't

    • Add a setting to avoid a design decision.
    • Put frequent choices only in Settings (put them where they are used).
    • Create "Misc." or "Advanced" as a dumping ground.
    • Require Save on a settings page.

    In the wild

    • iA WriterInformation Architects, 2010 onward
      Deliberately few preferences; the typography and layout are designed as the default rather than left to the user. Strong defaults are a statement of care, not a lack of features.
    • System appearancemacOS Mojave (2018), iOS 13 (2019)
      Apps that follow the system's light and dark setting need no theme setting of their own for most people. Let the platform hold preferences people set once for everything.
    • VS Code settingsMicrosoft
      Thousands of settings, made usable by search, grouping, descriptions and a "modified" indicator. If a product truly needs many settings, search and descriptions are not optional.
    For the solo creator

    Every setting doubles some part of your test matrix and lives forever, because removing one upsets the people who changed it. Keep a "settings budget" (say, 12) and require that adding one means removing or automating another. When a user asks for a setting, ask them what they are trying to do; the answer is often a better default.

    Common mistakes

    Settings as feature flags

    An experimental feature ships behind a toggle and stays there.

    Decide within a release or two: make it the default, or remove it.

    Frequently used options buried in Settings

    Settings is the easy place to put a new control.

    If people change it weekly, put it in context (a view menu, the toolbar) and remember the choice.

    Check yourself

    Users ask for a setting to choose the default export format (PDF or Markdown). Most use PDF; a minority always use Markdown. What is the best design?

    Exercise 17.1 40 minutes · on your own product

    Settings diet

    1. List every setting. For each, estimate what share of users change it.
    2. Run each through the decision flow. Mark: default, adapt, remember, keep, advanced, delete.
    3. Regroup the keepers by user goal. Write a one-line description for each.
    4. Ship at least two removals or automations.
    You're done when: you have a categorised settings table, a regrouped settings page sketch, and a shorter settings list in the product.
    BeginnerCompetentStrong
    Regroups settings.Removes or automates several; descriptions added.Introduces a settings budget and turns at least one setting into a remembered choice in context.

    Wrap-up

    Structure and interaction are where a product's honesty shows. A calm, minimal product is not one with fewer pixels; it is one where every object has a home, every place says where you are, every state has a purpose, every input is forgiving, and every fast path rests on a visible one.

    Twelve things to remember

    1. Find the nouns, connect them, hang the verbs on them. Screens come last.
    2. Broad and shallow beats deep and narrow; each level compounds the chance of a wrong turn.
    3. Labels carry scent. Use your users' plain words, and test the tree as text.
    4. Choose navigation by counting destinations and frequency; keep daily places visible.
    5. Every meaningful state deserves an address, and back must mean back.
    6. Draw the flow before the screen, and walk every step with the edge-case questions.
    7. Design all states: blank, loading, partial, error, ideal and offline.
    8. Controls are contracts: round is one, square is any, switches mean now.
    9. Validate on blur, re-check live after an error, and show rules up front.
    10. Undo beats "Are you sure?"; reserve specific, effortful confirmations for the irreversible.
    11. Gestures, shortcuts and drag are accelerators layered on visible controls.
    12. The default is the design. Add a setting only when people truly differ.

    Run this on your product

    Checklist: structure and interaction audit

    Structure
    Wayfinding
    Flows and states
    Inputs and safety
    Hands
    Finding, interrupting, configuring

    Self-assessment: I can…

    Practice assignment for the next two weeks

    About 45 minutes a day. Use your own product throughout; if it is early, use the product you plan to build, on paper.

    1. Days 1–2: the skeleton. Object map (Exercise 1.1), then a card sort with three friends (2.1).
    2. Days 3–4: the map. Navigation audit and redraw (3.1); trunk test and URL map (4.1).
    3. Days 5–6: the paths. Golden path and one core flow with edge cases (5.1); state grid for three screens (6.1).
    4. Day 7: rest and review. Re-read your notes. Run the audit checklist above and record your score.
    5. Days 8–9: inputs. Control audit (7.1); rebuild your most important form (8.1).
    6. Day 10: safety. Climb the ladder for every destructive action (9.1); overlay inventory (10.1).
    7. Days 11–12: hands. Command registry and palette (12.1); one-thumb audit (13.1).
    8. Day 13: details. Dissect and improve five microinteractions (14.1).
    9. Day 14: restraint. Notification inventory (16.1) and settings diet (17.1). Run the audit checklist again and compare with day 7.

    Reflection

    At the end of the two weeks, write half a page: which change made your product feel calmest, which one was hardest to build, and which principle you disagreed with and why. Disagreement you can explain is a sign you have understood.

    Reading list

    • Information Architecture: For the Web and Beyond
      Louis Rosenfeld, Peter Morville, Jorge Arango (4th ed., 2015) · the standard reference on organisation, labelling, navigation and search systems.
    • How to Make Sense of Any Mess
      Abby Covert (2014) · a short, friendly guide to IA thinking; read it in an evening.
    • Card Sorting: Designing Usable Categories
      Donna Spencer (2009) · everything you need to run sorts yourself and analyse them.
    • Don't Make Me Think, Revisited
      Steve Krug (2000; 3rd ed., 2014) · the trunk test, navigation and cheap usability testing; the most readable usability book.
    • Object-oriented UX (OOUX) and the ORCA process
      Sophia Prater · articles and talks on mapping objects before screens; search for her "OOUX" writing.
    • Designing Interfaces
      Jenifer Tidwell, Charles Brewer, Aynne Valencia (3rd ed., 2020) · a pattern library for navigation, lists, forms and more.
    • Web Form Design: Filling in the Blanks
      Luke Wroblewski (2008) · labels, validation, layout and the evidence behind them.
    • Forms that Work
      Caroline Jarrett and Gerry Gaffney (2008) · forms as conversations; excellent on question wording.
    • The Humane Interface
      Jef Raskin (2000) · modes, quasimodes, habituation; opinionated and still provocative.
    • Microinteractions: Designing with Details
      Dan Saffer (2013) · the trigger, rules, feedback and loops model, with many examples.
    • About Face
      Alan Cooper and colleagues (4th ed., 2014) · goal-directed design, defaults, and why software should not ask what it can know.
    • Designing for Touch
      Josh Clark (2015) · thumbs, gestures and touch ergonomics in one short book.
    • "Never Use a Warning When You Mean Undo"
      Aza Raskin, A List Apart (2007) · the five-minute case for undo over confirmation.
    • "Cool URIs don't change"
      Tim Berners-Lee, W3C (1998) · why addresses are a promise.
    • Search User Interfaces
      Marti Hearst (2009, free online) · research-based patterns for search, results and facets.

    Next: Visual Design builds on this structure with hierarchy, layout and colour. For the timing and feel of the transitions mentioned here, see Motion & Feel.