Honest & Calm. Software people are glad they used.

Every product makes choices about your user's money, attention, data and time. This guide teaches you to see the manipulative versions of those choices, to name them, and to design the honest, calm versions instead. For a solo creator this is not a luxury: trust is the one asset a one-person product can build faster than any big company, and lose faster too.

Reading timeAbout 4 hours, in 5 sittings
Practice time2 weeks
Before thisThe Human Mind, Words
TeachersRams, Weiser & Brown, Amber Case, Kenya Hara, Harry Brignull, Tristan Harris, Ink & Switch, Mike Monteiro

By the end you will be able to

  • Explain how deceptive patterns work, using the cognitive biases they exploit (understand)
  • Name and spot the common deceptive patterns in any checkout, sign-up, consent banner or cancellation flow (analyze)
  • Apply the principles of calm technology to decide what belongs in the center and what in the periphery of attention (apply)
  • Judge whether a habit loop or streak serves the user, using the "glad they did it" test (evaluate)
  • Write a notification policy, a privacy posture and a sunset plan for your own product (create)
  • Design for longevity: open formats, exports, older devices, light pages (create)
  • Write your own design oath and an ethics and trust pre-ship checklist, and use them (create)

Warm-up: what do you already notice?

Before we name anything, test your instincts. You have spent years on the receiving end of these designs: the subscription that would not die, the cookie banner with one big green button, the app that pings you at 9:47 pm with "You have new activity!". You already know a lot. The goal of this guide is to turn that vague irritation into precise vocabulary and, more importantly, into design decisions you make on purpose in your own product.

How to study this guide: read one Part per sitting. Do the quizzes before reading the explanation. Do at least the exercises marked "on your own product", because ethics you have not applied to your own work is just opinion. The four Parts build on each other: honesty (not tricking people), calm (not exhausting them), trust (not exploiting their data or their future), and responsibility (not harming them or others).

What your product can take from a person 1 Honesty Protects their money & choices Part 1: deceptive patterns, the law 2 Calm Protects their attention Part 2: periphery, habits, notifications 3 Trust Protects their data & future Part 3: privacy, pricing, longevity 4 Duty Protects their safety Part 4: harm, your own oath
The map of this guide. Each Part protects a different thing a product can quietly take from a person. You will meet all four in your own product, usually in the boring flows (checkout, sign-up, settings, cancel), not in the hero screen.
Diagnostic 1

Your reading app's paid plan converts poorly. A friend suggests making the "Start free trial" button big and green and changing the dismiss link to "No thanks, I don't care about reading more". What is the real problem with this suggestion?

Diagnostic 2

Which of these is the best sign that a notification is "calm" in the sense this guide means?

Reflection prompt

Write down three moments in the last month when an app made you feel tricked, guilty, or drained. Keep the list. You will classify each one with the vocabulary in Part 1 and Part 2, and you will probably find one of them in your own product.

Part one

Honesty: don't trick people

We start with the clearest line in product ethics: do not deceive. Dieter Rams made honesty one of his ten principles in the 1970s; Harry Brignull gave the violations names in 2010; regulators on three continents have since turned many of those names into law. This Part teaches you the mechanism behind deception (it rides on predictable human biases), the main families of deceptive patterns, an honest redesign for each, and what the law now says. You will finish by playing a spotter game on a mock checkout.

1

Good design is honest

Taught by Dieter Rams, with Kenya Hara and Don Norman

An honest product shows what it is, does what it says, and costs what it claims. Every gap between what the interface implies and what is true is a lie, even if no sentence in it is false.

Rams wrote his ten principles of good design while he was head of design at Braun. Two of them frame this whole guide. The sixth: good design is honest. In the version Vitsœ publishes, it does not make a product appear more innovative, powerful or valuable than it really is, and it does not try to manipulate the consumer with promises that cannot be kept. The seventh: good design is long-lasting. It avoids being fashionable, and therefore never appears antiquated. We come back to longevity in Part 3. Here, honesty.

For a physical object, honesty is mostly about form. A radio should not pretend to be a piece of furniture; a plastic part should not be painted to look like metal. Software has no material, so its honesty lives somewhere else: in the relationship between what the interface signals and what the system actually does. Norman would call this the gap between the conceptual model the user forms and the real model underneath. Normally we try to close that gap so people are not confused. A deceptive pattern opens the gap on purpose, so that people act on a false model in a way that benefits the business.

Four places software can lie

When you audit your product for honesty, you are looking in four places. Each has its own common lies.

  1. Signals. What visual weight, color and position imply. A green, huge "Accept" next to a gray, tiny "Settings" says "this is the normal choice" even if nobody wrote that.
  2. Words. What labels, headlines and microcopy state or imply. "Free" that turns into a charge, "Only 2 left" that is always 2, "Continue" that actually means "subscribe".
  3. Defaults. What happens if the person does nothing. Pre-ticked boxes, opt-outs buried in settings, auto-renewal with no reminder.
  4. Effort. How hard each path is. Sign-up in one tap, cancel by phone during office hours. The asymmetry is itself a message: we will make leaving painful.
Honesty is the size of the gap Honest User believes: "₹299 once" System does: charges ₹299 once Gap ≈ 0. Surprise ≈ 0. Trust grows. Deceptive User believes: "₹299 once" System does: ₹299 every month the gap = the lie Surprise later = refund, chargeback, review.
Measure the gap, not the sentences. You can deceive with every sentence technically true. The test is what a reasonable, busy person would believe after a glance, compared with what will actually happen.

Why honesty is also the better business for you

Deception works in a narrow, measurable way: it raises a short-term number (sign-ups, add-ons, retention this month). It costs in ways that are slower and harder to measure: refunds, chargebacks (payment processors penalize merchants with high chargeback rates), support load, angry reviews, app store rejection, legal risk, and, worst for a small product, the death of word of mouth. A large company can absorb that. A one-person product lives on recommendations from people who trust it. Your honesty is your marketing budget.

There is also a quieter argument. Kenya Hara writes about design as a way of making people perceive things clearly, of "awakening" them to what is already there. Deception is the precise opposite: it designs for a person's inattention. If you want to be the kind of designer who makes things people see clearly, you cannot also be the kind who relies on them not seeing.

Don't
Pro, just ₹99! Unlock everything today Get Pro for ₹99 ₹99 first month, then ₹499/mo, auto-renews. Cancel 48h before renewal. Terms apply.
Every word is true, the page is a lie. The real price (₹499 a month, forever) sits in small, faint fine print styled to be skipped. The gap between belief and reality is the whole strategy.
Do
Pro · ₹499 a month First month ₹99. Cancel any time in Settings, two taps. Start Pro, ₹99 today We'll email you 3 days before ₹499 renews.
The real price is the headline. The offer is still attractive. The reminder promise turns the scariest part of a subscription into a reason to trust you.
Key idea

Ask "what will a busy person believe after two seconds?" and design so that belief is true.

Do

  • Put the real cost, duration and renewal terms at the same visual level as the offer.
  • Make the honest path the easy path: equal effort to say yes and no.
  • Describe features as they are today, not as the roadmap hopes.
  • Let defaults favor the user when in doubt (off for marketing, off for sharing).

Don't

  • Rely on "it's technically in the terms".
  • Use visual weight to hide the option you would rather people did not pick.
  • Claim "AI-powered", "secure", "private" or "unlimited" without being precise about what that means.
  • Test deceptive variants "just to see"; the variant that wins is often the one that tricks best.

In the wild

  • Braun product lineDieter Rams era, 1960s–90s
    Controls look like what they do; materials are not disguised. Rams formulated "honest" as a principle partly against products dressed up to seem more than they were. Software equivalent: a button looks like what it does and does what it says.
  • Basecamp pricing37signals
    Basecamp has long published simple, flat pricing on a single page and made a point of explaining it plainly rather than through tiers designed to confuse. Simple pricing is itself an honesty signal.
  • Apple subscriptionsApp Store, since 2010s
    Subscriptions bought through the App Store can all be seen and cancelled in one system place (Settings, your name, Subscriptions), and the store requires free-trial terms to be disclosed before purchase. Platforms are pushing a baseline of honesty; meet it on the web too.
For the solo creator

You are designer, engineer and the person who reads the refund emails. That is your advantage: you feel the cost of a dishonest pattern directly. Keep a "surprise log": every support email that starts with "I didn't realize…" goes into one note. Each entry marks a gap between what your interface implied and what happened. Fix the top one every month.

Common mistakes

Confusing "persuasive" with "honest"

Good copy persuades by showing real value. Founders slide from "show value clearly" to "make the alternative look bad" without noticing.

Persuasion is fine when it would survive the user knowing exactly what you are doing. If the technique only works when hidden, it is manipulation.

Treating legal text as disclosure

Terms of service feel like they protect you, so it seems fine to put important facts there.

Anything that changes what a person pays, shares, or can undo belongs in the interface at the moment of decision, in plain words.

Copying a competitor's flow wholesale

Large products have spent years on growth experiments, so their flows look "proven".

Proven for which metric? Copy their structure only after auditing it with the four places to lie: signals, words, defaults, effort.

Check yourself

Your note-taking app's sync is "end-to-end encrypted" for note bodies, but titles and tags are stored in plain text on your server so search works. The marketing page says "Your notes are end-to-end encrypted." Which fix is most honest?

Exercise 1.1 40 minutes · on your own product

The four-places honesty audit

  1. Pick the three flows where money, data or commitment changes hands (for example: upgrade, sign-up, delete account).
  2. Screenshot every screen. For each, write one line per lens: Signals (what does visual weight imply?), Words, Defaults, Effort (count taps for yes vs no).
  3. For each screen, write "a busy person believes: …" and "what actually happens: …". Mark every gap.
  4. Fix the largest gap in code today.
You're done when: you have a one-page table of gaps for three flows, and one gap is closed in your shipped build.
BeginnerCompetentStrong
Lists screens and notes vague "feels pushy" issues.Uses the four lenses on each screen and counts taps for yes vs no.States belief vs reality for every screen, ranks gaps by harm, and ships a fix with a before/after screenshot.
2

How deceptive patterns work

Taught by Harry Brignull, with Daniel Kahneman and Arunesh Mathur

A deceptive pattern is an interface that exploits a predictable shortcut in human thinking to make people do something they did not intend. Learn the shortcuts and you can recognize any pattern, including new ones nobody has named yet.

Harry Brignull, a UX designer with a PhD in cognitive science, coined the term "dark patterns" in 2010 and started a website cataloguing them. He later renamed the site deceptive.design and, in 2023, published the book Deceptive Patterns. The names changed over the years (for example "roach motel" became "hard to cancel", "sneak into basket" became part of "sneaking", "privacy zuckering" was retired as a name), so you will see both old and new labels. This guide uses whichever name is clearest and mentions the other.

In 2019 a Princeton team led by Arunesh Mathur crawled around 11,000 shopping websites and found dark patterns on roughly one in ten of them, including fake countdown timers and fake "someone just bought this" messages, some generated by third-party plug-ins sold for that purpose. The point for you: these patterns are not rare and not only in big companies. They often arrive in your product through a template, a plug-in or a growth tutorial.

The engine underneath: shortcuts in thinking

Kahneman's distinction between fast, automatic thinking (System 1) and slow, deliberate thinking (System 2) explains why these patterns work. People using an app are almost always in System 1: skimming, tapping the obvious button, trusting defaults. Deceptive patterns are built to be correct for System 2 and misleading for System 1. The full information is there for a careful reader. Almost nobody is a careful reader at a checkout. (See The Human Mind for the full treatment of attention and bias.)

Shortcut exploited → pattern family Default effect Preselection, sneak into basket,forced continuity Scarcity & loss aversion Fake scarcity, fake urgency,"you'll lose everything" when cancelling Social proof Fake activity, fake reviews,"2,000 people bought this today" Shame & reciprocity Confirmshaming, guilt incancellation and unsubscribe flows Skimming & salience Trick questions, disguised ads,interface interference, hidden costs Effort & fatigue Roach motel, obstruction, nagging
Six shortcuts, many patterns. When you meet a new trick, ask which shortcut it leans on. That tells you how to neutralize it: make the default neutral, make scarcity real, make proof true, remove the shame, equalize salience, equalize effort.

Three families you will meet

To keep the catalogue usable, this guide groups the common patterns into three families, each with its own chapter. The grouping is ours, made for designers; it is not an official taxonomy.

FamilyWhat it doesPatternsChapter
PressurePushes a decision with emotion or false time limitsConfirmshaming, fake scarcity, fake urgency, fake social proof, nagging3
SneakingChanges the deal without the person noticingSneak into basket, hidden costs (drip pricing), disguised ads, trick questions, preselection4
ObstructionMakes the choice you dislike harder than the one you likeRoach motel (hard to cancel), forced continuity, obstruction, interface interference, privacy zuckering5

A test you can run on any design: the four questions

When a pattern does not have a name, run these four questions. If any answer is "yes", you are probably looking at a deceptive pattern.

  1. Would it stop working if users understood it? Honest persuasion survives being explained. "Annual plan saves 30%" still works when you know why it is there. A fake countdown does not.
  2. Is the effort asymmetric? Count the taps and the reading needed for each option. Yes in one tap and no in six is a tell.
  3. Would you be embarrassed to show it on stage? Imagine a slide at a design conference titled "How we got 12% more add-ons". Would you show the screenshot?
  4. Would the user be glad, a week later? This is the test we will reuse for habits and notifications in Part 2.
Deceptive patterns are not a design problem a designer can always fix alone; they are usually a business decision expressed in pixels.Paraphrasing a theme of Harry Brignull, Deceptive Patterns, 2023

Do

  • Learn the six shortcuts; they generalize to patterns that have no name yet.
  • Audit third-party plug-ins, checkout templates and "conversion" widgets before you install them.
  • Use the four questions as a review step for every flow involving money, data or commitment.

Don't

  • Assume a pattern is fine because a famous product uses it.
  • Argue about labels; argue about the gap and the effort.
  • Treat "users can read the details" as a defense; design for how people actually read.

In the wild

  • deceptive.designHarry Brignull, since 2010
    The reference site: a type list with definitions, a "hall of shame" of real examples, and a summary of relevant laws and cases. Bookmark it and read the hall of shame once a quarter; it trains your eye.
  • Princeton shopping-site studyMathur et al., 2019
    Automated crawl of about 11K shopping sites; found 1,818 dark pattern instances on 1,254 sites, and third-party services openly selling fake urgency and fake activity widgets. Patterns arrive through tools, not only through intent.
For the solo creator

There is no growth team pushing you. That is good and bad. Good: nobody forces you. Bad: the pressure arrives as tutorials, "conversion" plug-ins for your store, or a revenue dip at 2 am. Decide your red lines now, while calm, and write them down (Chapter 18 shows how). Decisions made at 2 am during a bad month are where most solo dark patterns come from.

Common mistakes

Only looking for the famous names

People memorize "confirmshaming" and "roach motel" and miss a new variant.

Use the shortcut map and the four questions instead of matching names.

Installing a "social proof" or "urgency" widget

Store platforms sell them as conversion boosters and the setup takes one click.

Check what data drives the widget. If it is not your real, current data, do not install it.

Check yourself

A habit tracker shows, when you try to delete a habit: "Delete 'Run' and erase your 41-day history forever?" with a red "Delete forever" and a gray "Archive instead". The history really would be erased. Is this a deceptive pattern?

Exercise 2.1 30 minutes · on apps you use daily

Shortcut spotting walk

  1. Open three apps or sites where you spend money (food delivery, travel, a subscription).
  2. Go through a purchase up to the payment screen without paying.
  3. For every element that pushed you, write the shortcut it uses (default, scarcity, social proof, shame, salience, effort).
  4. Mark each one "honest use" or "exploit" with the four questions.
You're done when: you have at least ten elements classified, with at least two you initially thought were honest but changed your mind on (or the reverse).
BeginnerCompetentStrong
Names patterns by gut feel.Maps each element to a shortcut and applies the four questions.Also writes a one-line honest redesign for every exploit found.
3

Patterns of pressure

Taught by Harry Brignull, with Robert Cialdini

Pressure patterns push a decision by manufacturing emotion: shame, fear of missing out, herd instinct, or simple fatigue. The honest version gives the same true information and lets the person decide at their own pace.

Cialdini's Influence (1984) described the levers that make people say yes: reciprocity, commitment, social proof, liking, authority and scarcity. Every one of them is real and every one can be used honestly. A genuinely limited batch is scarce. A genuinely popular plan has social proof. Pressure patterns are what you get when the lever is pulled without the fact behind it, or with the fact exaggerated. Below are the five you will meet most, each with a drawn honest alternative.

Confirmshaming

The decline option is worded to make the person feel stupid, selfish or lazy for declining: "No thanks, I prefer to stay uninformed." It works because agreeing with an insulting sentence about yourself is uncomfortable, so a few people click yes to avoid the discomfort. The honest version names both options neutrally. If your offer only works when "no" is humiliating, the offer is weak.

Deceptive
Get 10% off your first order you@email.com YES, I want to save! No thanks, I'd rather pay full price like a fool
The "no" insults you. It also signals the business thinks little of its customers.
Honest
10% off, plus one email a month you@email.com Subscribe Not now Unsubscribe in one click, any time.
Neutral words, comparable buttons. The value proposition does the persuading, and the cost (an email a month) is stated.

Fake scarcity and fake urgency

Scarcity ("only 2 left") and urgency ("offer ends in 09:59") both trigger loss aversion: we weigh a loss more heavily than an equal gain, so the fear of missing out short-circuits comparison shopping. They are honest when true and specific. They become deceptive when the number is invented, the timer resets on reload, or "only 2 left" means "only 2 left at this price on this site in this minute". In 2019 the UK's Competition and Markets Authority secured commitments from several large hotel booking sites to stop misleading pressure selling such as false claims about how many rooms were left or how many people were looking.

Deceptive
Sale ends in 09:59 (resets on reload) Focus Timer Pro, lifetime Only 3 licenses left! (a software license cannot run out) Buy before it's gone
Invented limits. Digital goods are not scarce, and a timer that restarts is a lie that anyone can discover by reloading.
Honest
Launch price until 15 March, 23:59 IST Focus Timer Pro, lifetime ₹1,499 launch · ₹2,499 after Same date for everyone. No tricks. Buy at launch price
A real deadline with a date. Urgency is honest when it is a fixed, public date that you actually honor (and do not "extend by popular demand").

Fake social proof

"Priya from Pune just bought this", "1,203 people are viewing", "4.9 from 10,000 reviews". Social proof works because, under uncertainty, we copy what others do. Faking it is now explicitly targeted by regulators: the US FTC finalized a rule in 2024 banning fake reviews and testimonials, including reviews by people who do not exist and buying positive reviews. For a small product the temptation is different: you have few users, so the numbers look thin. The honest response is to show the proof you really have (one detailed quote from a named user, with permission) rather than inflate it.

Deceptive
Join 2 million writers ★★★★★ 4.9 (12,408 reviews) Rahul in Delhi just upgraded 2 seconds ago · randomly generated
Activity that never happened. These toasts are often generated by plug-ins from a list of names and cities.
Honest
Used by 840 writers Count updated weekly from real accounts "I finished my thesis in it. The export to .docx saved me twice." Ananya K., PhD student, used with permission
Small and true beats big and fake. A specific quote from a real person is more persuasive than an implausible number.

Nagging

The same request, repeated until the person gives in: "Turn on notifications?" with only "OK" and "Not now", asked every launch. "Not now" is not "no"; it is a promise to ask again. Nagging exploits fatigue: eventually, saying yes costs less than one more dismissal. The honest version accepts a "no" and remembers it, and asks again only when something meaningful changes (the user creates their first reminder, for example), at most once.

Deceptive
Turn on notifications? Don't miss out! OK Not now Launch 1, 2, 3, 4, 5…
No real "no". Asking on every launch turns a choice into a war of attrition.
Honest
Reminder set for 7:00 am. To alert you at 7:00 we need permission to send notifications. Allow No, thanks Asked once, in context. "No" is saved.
Ask when the value is obvious. The request explains itself, and "No, thanks" is final until the user changes it in Settings.
Key idea

Every persuasion lever is honest when the fact behind it is true, specific and the same for everyone.

Do

  • Word "no" options neutrally ("Not now", "No, thanks", "Skip").
  • Use deadlines only with a public date and time you keep.
  • Show real counts with how they are measured, or show none.
  • Ask for a permission once, in context, and remember the answer.

Don't

  • Put fake stock limits on digital goods.
  • Reset or "extend" deadlines you said were final.
  • Install "recent purchase" pop-ups fed by anything other than real, consented data.
  • Offer only "OK" and "Later" for a question you will keep asking.

In the wild

  • Hotel booking sitesUK CMA action, 2019
    After an investigation, several major booking sites committed to stop giving false impressions of room availability and popularity, and to stop hiding fees. Urgency claims are now an enforcement topic, not just a style choice.
  • FTC fake reviews ruleUnited States, 2024
    Bans fake or AI-generated reviews attributed to people who do not exist, buying reviews, and some forms of review suppression. Inflated proof is a legal risk as well as an ethical one.
  • Indie launchesCommon pattern
    Many indie apps run a launch discount with a stated end date and keep it, then mention in the changelog that it ended. Keeping a deadline you set is cheap credibility.
For the solo creator

You will feel tempted by urgency at launch because launches feel like your one shot. Use real urgency instead: a dated launch price, a limited number of founding-member seats you actually cap, or an honest "this price is for the first month after launch". Then write the end date in your calendar and honor it publicly.

Common mistakes

"Cute" confirmshaming

It feels like brand voice ("No thanks, I love missing deadlines").

Personality goes in the offer, never in the decline. Read the decline aloud to a stranger; if it insults them, rewrite it.

Evergreen "limited time"

The discount worked once, so it never ends.

If it never ends, it is your price. Show it as the price.

Rounding up your users

"Thousands of users" feels close enough to 840.

Use the real number or a qualitative proof (a named quote). Precise small numbers read as honest.

Check yourself

You sell a writing course with live cohorts of 20 seats. Which urgency message is honest?

Exercise 3.1 30 minutes · on your own product

Rewrite every "no"

  1. Search your codebase and copy for decline strings: "No thanks", "Not now", "Skip", "Maybe later", "Cancel", and every dismiss link.
  2. Paste them into one list with where each appears.
  3. Rewrite each so it is neutral, specific and final when it should be final. Note whether the prompt will ever reappear and when.
  4. Check that each decline has comparable size and contrast to its accept button.
You're done when: you have a list of every decline in your product, each rewritten, with a rule for when (if ever) the prompt returns.
BeginnerCompetentStrong
Rewrites the obvious shaming lines.Covers every decline and equalizes button weight.Also implements "remember the no" in code with a clear re-ask rule, and documents it.
4

Patterns of sneaking

Taught by Harry Brignull, with Richard Thaler & Cass Sunstein

Sneaking patterns change the deal while the person is not looking: an item appears in the basket, a fee appears at the last step, an ad dresses up as a button, a question is worded to be misread, a box is already ticked. The honest version shows the whole deal, up front, in the words a skimmer will actually read.

Thaler and Sunstein's Nudge (2008) made "choice architecture" famous: the way options are arranged changes what people choose, and there is no neutral arrangement. They argued for nudges that are transparent and easy to opt out of, aimed at choices people would endorse. Sneaking patterns are the inverse, sometimes called "sludge" (a word Thaler later popularized for friction that works against people's interests). They rely on the fact that defaults stick and that skimmers read the first two words of a sentence.

Sneak into basket and preselection

An add-on ("Priority support, ₹199") is added to the cart or ticked by default, so the person has to notice and remove it. The default effect is powerful: most people keep whatever is preselected, partly from inertia and partly because a default looks like a recommendation. The EU's Consumer Rights Directive (2011) already bans pre-ticked boxes for extra payments, and the Court of Justice of the EU ruled in the Planet49 case (2019) that a pre-ticked box is not valid consent for cookies. The honest version: add-ons start unticked, and the total updates visibly when someone ticks one.

Deceptive
Your order Notes app, yearly₹999 Priority support₹199 Cloud backup add-on₹299 Total₹1,497 Two extras the buyer never chose.
The default does the selling. The buyer must notice and untick, in the one moment they are least likely to read.
Honest
Your order Notes app, yearly₹999 Optional Cloud backup add-on, +₹299 Total₹999 Extras are offered, never assumed.
Opt-in, labeled "Optional". If the add-on is good, enough people will tick it. That number is honest data about its value.

Hidden costs (drip pricing)

The advertised price is lower than the price you pay: a "convenience fee", "platform fee", tax or delivery charge appears only at the last step. By then, the person has invested time (sunk cost) and committed mentally to the purchase, so most continue. India's 2023 dark pattern guidelines call this drip pricing. In the US, the FTC finalized a rule in late 2024 requiring all-in prices for live-event tickets and short-term lodging. The honest version shows the total, including mandatory fees, from the first price the person sees.

Deceptive
Step 1₹199 Step 2₹199 Step 3₹287 +fees +tax Platform fee ₹49 · Convenience ₹39 Revealed after 3 screens of effort.
Sunk cost as a weapon. The "real" price is shown only when walking away feels wasteful.
Honest
Step 1₹287 Step 2₹287 Step 3₹287 ₹287 all-in · see breakdown The same number from first look to payment.
The first number is the last number. A breakdown is available on demand; nothing is added later.

Disguised ads

An advertisement styled to look like content or like part of the interface: a big green "Download" button on a file site that is actually an ad, a "recommended article" that is paid placement without a label. It exploits the learned meaning of interface elements. For you, the risk is subtler: cross-promotion of your own other app styled as a native feature, or affiliate links in a "recommendations" list without disclosure. The honest version labels ads and sponsorship clearly, in words ("Ad", "Sponsored", "Affiliate link"), and never styles them as controls.

Deceptive
font-pack-2.zip ⬇ DOWNLOAD NOW ad Real file: font-pack-2.zip (1.2 MB) The control is the ad.
Borrowed meaning. The only disclosure is a tiny, faint "ad" under the button. A button means "this page's action". Using that look for an ad is a lie about function.
Honest
font-pack-2.zip · 1.2 MB Download font-pack-2.zip SPONSORED Design tool X: 30-day trial
Ads look like ads. A label in words, a different container, and never a control's styling.

Trick questions

A question worded so that a skimmer gives the opposite answer to the one they intend: double negatives, a switch between "tick to opt in" and "tick to opt out" in the same form, or a dropdown where the "no" option is hidden among normal ones. Brignull's best-known example is an airline checkout where the way to decline travel insurance was the option "Don't insure me", placed alphabetically inside a list of countries of residence. The honest version: one question, one meaning, phrased positively, with the same polarity for every checkbox.

Deceptive
Communication Tick if you want product news. Untick if you don't not want partner offers. Same look, opposite meanings, and a double negative.
Designed to be misread. The skimmer applies the first rule to both boxes.
Honest
Emails you can choose Product news (monthly) Partner offers Both off. Both "on means yes". Frequency stated.
One polarity, plain words. Toggles default off, labels describe what you get, and the frequency is honest.
Key idea

The whole deal, up front, in words a skimmer reads correctly. Anything added later or worded to be misread is sneaking.

Do

  • Start every optional add-on and marketing choice unticked.
  • Show all-in prices from the first view; offer a breakdown on demand.
  • Label ads, sponsorships and affiliate links in plain words.
  • Phrase every checkbox so that "checked means yes".

Don't

  • Add anything to a cart that the person did not add.
  • Introduce a fee on the last screen.
  • Style promotions as buttons, system alerts or content.
  • Mix opt-in and opt-out wording in one form.

In the wild

  • Planet49 rulingCourt of Justice of the EU, 2019
    A pre-ticked checkbox does not constitute valid consent to store cookies. Preselection is legally not a choice in the EU.
  • "Don't insure me"Airline checkout, catalogued by Brignull
    The opt-out from insurance was hidden inside a country dropdown. The classic trick question: the "no" disguised as an unrelated option.
  • Food delivery feesIndia, 2020s
    Platform, packaging and "small order" fees often appear late in the order flow; drip pricing is one of the 13 patterns named in India's 2023 guidelines. Show the fee before the person invests effort.
For the solo creator

Payment providers and store templates decide many of these for you, so check them. Does your checkout template pre-tick "Subscribe to newsletter"? Does the tax get added at the end because your price is entered ex-tax? In India, showing GST-inclusive prices from the first view is both honest and simple. Set your price display once, correctly, in the config.

Common mistakes

Opt-out marketing "because it's standard"

Every template does it; it feels harmless.

In the EU (GDPR) and in many other places it is not valid consent anyway. Default off; earn the opt-in with a clear benefit.

Prices entered without tax

You enter ₹499 in the dashboard and the payment page adds 18% GST.

Decide whether your displayed price includes tax and show the payable amount everywhere.

Unlabeled affiliate links

They feel like normal recommendations to you.

Add "affiliate link" next to them. Readers trust a disclosed recommendation more, not less.

Check yourself

Your app shows "₹299/year" on the pricing page. At checkout, the payment provider adds "₹54 tax" so the user pays ₹353. A user complains. What is the best fix?

Exercise 4.1 25 minutes · on your own product

The first-number-equals-last-number test

  1. Start from your landing or pricing page as a new user with a fresh browser profile.
  2. Record every price you see, every checkbox state, and every item in the cart, screen by screen, until the final payment confirmation.
  3. Highlight any number that changes and any box you did not tick that is ticked.
  4. Fix the first-change point so the first number is the final number.
You're done when: a fresh user sees one price from first view to receipt, and no option is pre-selected that costs money or data.
BeginnerCompetentStrong
Notices the tax jump.Fixes price display and unticks optional boxes.Also audits emails, receipts and renewal reminders so every number matches.
5

Patterns of obstruction

Taught by Harry Brignull, with the US FTC and the Norwegian Consumer Council

Obstruction makes the choice the business dislikes harder than the one it likes: one tap to join, a maze to leave; one tap to share, five screens to keep things private. The honest rule is symmetry: leaving, refusing and deleting should take no more effort than joining, accepting and creating.

Effort is a cost people pay in time and attention. When one option is cheap and the other is expensive, most people take the cheap one, even when they wanted the other. That is not a character flaw; it is how a limited attention budget works. Obstruction patterns turn that fact into revenue. They are also, today, the patterns most likely to get a company sued.

Roach motel (hard to cancel) and forced continuity

The name comes from an old US insect-trap advertising slogan: easy to get in, impossible to get out. Signing up takes a minute online; cancelling requires a phone call, a chat with a "retention specialist", a buried link under Help, a survey, three offers and a final confirmation email. Its partner is forced continuity: a free trial that silently becomes a paid subscription, with no reminder before the first charge.

In 2018 the Norwegian Consumer Council published "Deceived by Design", analyzing how large platforms steered users through privacy settings. In 2021 it followed with "You can log out, but you can never leave", documenting the many steps needed to cancel Amazon Prime. The US Federal Trade Commission sued Amazon in 2023 over Prime sign-up and cancellation flows; in September 2025 Amazon agreed to a settlement reported at $2.5 billion, including refunds to customers. Separately, the FTC adopted a "click-to-cancel" rule in 2024 requiring cancellation to be as easy as sign-up, but a federal appeals court vacated it in July 2025 on procedural grounds before it took effect, and the FTC has since reopened rulemaking on subscriptions with an advance notice of proposed rulemaking. Check the current status before you rely on it. Existing laws (like the US ROSCA act and several state laws, such as California's automatic renewal law) still require simple cancellation. Treat symmetry as the standard regardless of what any single rule says this year.

Lab: try to cancel a subscription
Taps 0Screens 1Words to read 0
Your results will appear here: try both flows.
Your task: cancel the ₹499 monthly "Premium" membership of a reading app. Start with the roach motel flow, then try the honest one. Watch the taps and the words you had to read. Notice which buttons are traps (they send you back or quietly keep you subscribed).

Obstruction in general

Cancellation is the famous case, but obstruction appears anywhere a business prefers one answer: deleting an account (no button, "email support"), exporting your data (only one export per 30 days, in a proprietary format), turning off personalization (hidden four levels deep), comparing plans (prices only shown after a demo call; this is sometimes called comparison prevention). The tell is always the same asymmetry.

The symmetry test: steps to start vs steps to stop Illustrative counts for a typical subscription. Count your own. Obstructive Join2 Leave13 + email Honest Join2 Leave3 Rule of thumb: leaving may take one extra confirmation step, never a different channel (phone, email, chat).
Count both directions. The honest design allows one extra confirm step for a consequential action. It never requires a different channel or a negotiation.

Interface interference

Visual design used to hide or demote the option the business dislikes: the "Reject" button in light gray on white, the "Decline" link at 11 px under a 48 px green "Accept", the "Delete account" text styled as plain body copy. It works because people navigate by salience (see Visual Design on hierarchy). Hierarchy itself is not wrong: there is usually a recommended action. The line is crossed when the demoted option is a legitimate choice the person came to make, and when it is made hard to see, not just secondary.

Deceptive
Personalize your feed? Uses your activity across apps. Yes, personalize! decline
A real choice made nearly invisible. "Decline" is tiny, faint gray text under a huge green button, and is not even shaped like a control.
Honest
Personalize your feed? Uses what you read here, not other apps. Change any time in Settings. Personalize Keep it simple Both are buttons; both readable.
Recommend, do not hide. One button can be filled, the other outlined; both are clearly buttons with readable labels.

Privacy zuckering

Brignull's old name (now retired on his site) for tricking people into sharing more personal data than they meant to: confusing privacy settings, "find your friends" flows that upload the whole address book and email every contact, defaults that make a profile public. In 2015 LinkedIn agreed to a $13 million settlement in a US class action over its "Add Connections" feature sending repeated invitation emails to users' contacts. The honest version: share nothing by default, ask for the narrowest data needed, and show exactly who will see or receive what before it happens. Part 3 goes deeper into privacy.

Deceptive
Find your friends! We'll check who's here. Continue Continuing uploads all contacts and sends invitations (with reminders) to each.
"Continue" means "spam everyone you know". The consequence is real and hidden in faint text.
Honest
Invite someone Type a name or email They'll get one email from you: "Rohit invited you to Shelf." No reminders. Send invite Your contacts are never uploaded.
Narrow, visible, one-shot. The user picks people, sees the exact message, and knows nothing else happens.
Key idea

Symmetry: no is as easy as yes, leaving as easy as joining, private as easy as public.

Do

  • Put "Cancel subscription" in the same place a person would look to manage it, reachable in two or three taps.
  • Email a reminder before a trial converts or an annual plan renews.
  • Allow one honest save attempt at most (a pause option or a plan change), shown alongside "Cancel", not instead of it.
  • Make delete account and export data self-serve.

Don't

  • Require a phone call, chat or email to cancel something bought online.
  • Put "Cancel" behind a mandatory survey or several offers.
  • Use visual weight to make a legitimate option invisible.
  • Share or upload anything about other people (contacts) without explicit, specific action.

In the wild

  • Amazon Prime cancellationFTC case 2023, settled 2025
    The FTC alleged a multi-step cancellation flow (internally nicknamed "Iliad", according to the complaint) and sign-up flows that enrolled people without clear consent. Even the largest companies are now held to symmetry.
  • App Store subscriptionsApple
    System-level list of all subscriptions with a cancel button for each, independent of the app. The platform's baseline; your web billing should be at least this easy.
  • Stripe customer portalStripe Billing
    A hosted page where customers can update cards, see invoices and cancel, configurable by the merchant. For a solo founder, honest cancellation can be a configuration, not a project.
For the solo creator

Honest cancellation is cheaper for you. Every obstructed cancel becomes a support email, often an angry one, and sometimes a chargeback with a fee. A two-tap cancel page plus a one-question optional "why?" gives you better exit data than any retention maze, because people who are not trapped will tell you the truth.

Common mistakes

"Contact us to cancel"

You have not built the billing UI yet, so email feels like a fine placeholder.

Use your payment provider's hosted portal from day one. It takes an afternoon.

Save offers that replace the exit

A discount on the cancel screen improves retention numbers.

Offer at most one alternative (pause, cheaper plan) next to a clearly labeled "Cancel" that works on first tap.

No renewal reminder

Reminders "cause cancellations".

They cause cancellations by people who would have asked for refunds. Send them; the rest renew happier.

Check yourself

Which cancellation flow meets the symmetry standard for an app where sign-up took two taps?

Exercise 5.1 45 minutes · on your own product

The symmetry table

  1. List five pairs of opposite actions in your product: subscribe/cancel, sign up/delete account, share/unshare, opt in/opt out, import/export.
  2. For each, count taps, screens and words to read in both directions, on a phone.
  3. Mark any pair where the "leaving" direction is more than one step longer or uses a different channel.
  4. Fix the worst pair. If you have no billing UI, set up your provider's customer portal.
You're done when: you have a five-row symmetry table, and every row is within one step, or has a dated fix ticket.
BeginnerCompetentStrong
Measures cancel only.Measures all five pairs and fixes the worst.Also adds pre-renewal reminders and a self-serve export, and documents the policy on your help page.
6

Spot them, then know the law

Taught by Harry Brignull, with the EU, the US FTC and India's Central Consumer Protection Authority

Practice turns a vocabulary into an eye. Then learn the short version of the law: in the EU, the US and India, many deceptive patterns are no longer just bad manners but violations with real penalties.

First, play. The mock checkout below contains several deceptive elements mixed with honest ones. Tap anything that you think is deceptive. Each tap tells you what you found, or why the element is fine. Try to find them all before revealing the answers. Expect to miss one or two: the good ones are designed to be missed.

Lab: dark pattern spotter
Found 0 of 8Honest elements flagged 0

The law, in one page

You are not a lawyer and this is not legal advice. But a designer who ships to the world should know the shape of the rules, because they increasingly name specific interface patterns. The direction of travel is clear and global: regulators now judge the design, not only the terms.

A short timeline of deceptive design rules and cases 2011EU ConsumerRights Directive:no pre-tickedpaid extras 2018GDPR applies:consent freelygiven, easy towithdraw 2019Planet49: pre-ticked box isnot consent 2022CNIL fines Google& Facebook: rejectmust be as easyas accept 2022–23FTC v. Epic:$245M for darkpatterns inFortnite 2023India CCPAguidelines: 13named patterns 2024EU DSA Art. 25applies to allplatforms; FTCfake reviews rule 2025Amazon Primesettlement;click-to-cancelrule vacated Simplified. Dates are when rules applied or cases concluded. Check current status for your market.
The trend is one-directional. Each year more patterns get named in law or case law. Designing honestly now means you never have to redesign under deadline later.

GDPR (applies since 2018) requires consent to be freely given, specific, informed and unambiguous, and says withdrawing consent must be as easy as giving it. Pre-ticked boxes and "by continuing you agree" do not count. Data protection by design and by default (Article 25 GDPR) requires you to build privacy in, not bolt it on. The Digital Services Act (Article 25) prohibits online platforms from designing interfaces that deceive or manipulate users or otherwise materially distort their ability to make free and informed decisions; it applies to online platforms since February 2024 (micro and small enterprises are exempt from this particular article, but general consumer law still applies to them). The Unfair Commercial Practices Directive also covers misleading and aggressive practices like fake urgency. French regulator CNIL fined Google and Facebook in January 2022 (€150M and €60M) because refusing cookies took more clicks than accepting them.

India's 13 (2023)Family in this guideHonest version
False urgencyPressureReal, dated deadlines and true stock
Basket sneakingSneakingOnly what the user added
Confirm shamingPressureNeutral "no"
Forced actionObstructionDo not require unrelated actions (sign-up, sharing) to complete a task
Subscription trapObstructionTwo-tap cancel, renewal reminders
Interface interferenceObstructionVisible, comparable choices
Bait and switchSneakingDeliver the thing advertised
Drip pricingSneakingAll-in price from first view
Disguised advertisementSneakingLabel ads in words
NaggingPressureAsk once, remember "no"
Trick questionSneakingOne polarity, plain words
SaaS billingSneakingNo silent charges or unannounced conversions in software subscriptions
Rogue malwares(Security)No malware, no fake "free" software that holds data hostage
Watch out

Laws change, and this page summarizes them only at a high level. Before launching paid features in a new market, read the regulator's own guidance or ask a lawyer. The good news: if you design to the honest versions in Chapters 3 to 5, you will already comply with most of it.

Do

  • Treat the strictest market you sell in as your global default.
  • Keep a dated record of your consent and cancellation flows (screenshots), in case you ever need to show them.
  • Use the honest-version column above as a design spec.

Don't

  • Assume "small" means "exempt"; consumer law usually applies to any seller.
  • Design to the minimum legal line; laws trail behavior by years.
  • Copy consent banners from big sites; several have been fined.

In the wild

  • CNIL decisionsFrance, January 2022
    Google and Facebook were fined because rejecting cookies required several clicks while accepting took one. Both changed their banners to add a one-click reject in France. Click-count asymmetry is now evidence.
  • FTC v. Epic GamesUS, 2022–2023
    The FTC alleged confusing button layouts led players to make unwanted purchases with a single press. Button placement can be a legal issue.
For the solo creator

You cannot track every law. Use a short rule set instead: all-in prices, opt-in for everything optional, equal-effort reject and cancel, no fake numbers, labeled ads, self-serve delete and export. That set covers the core of the EU, US and Indian rules above.

Common mistakes

Relying on a consent plug-in's defaults

The plug-in says "GDPR compliant", so you ship it unconfigured.

Configure it: a first-layer "Reject all", no pre-ticked categories, and scripts that actually wait for consent.

Thinking "India doesn't enforce this"

Enforcement history feels short.

The guidelines are specific and enforceable, and enforcement attention has grown since 2023. Design for them now.

Check yourself

Your EU-facing app's cookie banner has "Accept all" and "Settings". In Settings, all categories are off and there is a "Save" button. Is this enough?

Exercise 6.1 30 minutes · on your own product

Run the 13 against yourself

  1. Copy the table of India's 13 patterns.
  2. For each, write "absent", "present" or "not applicable" for your product, with the screen name.
  3. For any "present", write the honest version and estimate the effort to fix.
  4. Repeat the spotter game above with a friend and time how fast they find all eight.
You're done when: you have a 13-row self-assessment for your product with evidence, and a fix list for every "present".
BeginnerCompetentStrong
Marks rows from memory.Checks each row against real screens.Also checks emails, receipts and third-party plug-ins, and fixes at least one item.
Part 1 recap: connect the ideas

Which single principle best explains why confirmshaming, roach motels and interface interference are all deceptive (linking back to Norman's conceptual models in The Human Mind)?

Part two

Calm: respect attention

Not tricking people is the floor. The next level is not exhausting them. Attention is the scarcest resource your user has, and almost every product competes for it. This Part goes back to the 1990s, when researchers at Xerox PARC asked what computing would feel like once it was everywhere, and forward to streaks, feeds and push notifications. You will learn to design for the periphery, to leave room, to tell good habits from captured ones, and to write a notification policy for your own app.

7

Calm technology: center and periphery

Taught by Mark Weiser & John Seely Brown, with Natalie Jeremijenko

Good technology lives mostly in the periphery of attention, where you can sense it without thinking about it, and moves to the center only when it matters, then back again. Calm is not the absence of information; it is information that does not demand.

Mark Weiser was chief technologist at Xerox PARC and coined "ubiquitous computing" (his 1991 Scientific American article "The Computer for the 21st Century" opens with the idea that the most profound technologies are those that disappear into everyday life). In 1995 he and John Seely Brown wrote a short paper, "Designing Calm Technology", arguing that if computers were going to be everywhere, they had better not shout. Their central point was a distinction between the center of attention (what you are consciously focused on) and the periphery (what you are aware of without attending to it, like the sound of traffic or the weather out of the corner of your eye).

They argued that calm technology does two things. It uses the periphery, so we can be aware of many things without being overburdened; and it lets things move easily between periphery and center, so we can take control when we need to. They wrote that a calm technology will move easily from the periphery of our attention, to the center, and back. The feeling this creates, they said, is of being "at home": attuned to what is around you, in control.

Attention has a center and a periphery Center the sentence you're writing word count sync dot battery time unread: 3 Sync fails: moves to the center, once Calm design • most information lives in the periphery, glanceable • moves to the center only when action is needed, then returns Fixed: goes back to the periphery
Two zones, one movement. Calm products put most status in the periphery (sync, word count, battery) and promote something to the center only when it needs a decision. The mistake is keeping everything in the center.

The Dangling String

Weiser and Brown's favorite example was an artwork by Natalie Jeremijenko at PARC: a length of plastic spaghetti-like string hanging from a small motor in the ceiling, wired to the office Ethernet. Each packet of network traffic made the motor twitch. A quiet network meant a gentle twitch every few seconds; a busy network made the string whirl and make a soft noise. Nobody needed to look at it. You heard and saw it at the edge of awareness, and you noticed when something was unusual. Information about the network was present, continuous and undemanding. That is the model: ambient, continuous, glanceable, and silent until it matters.

Translating it to screens

On a screen, the periphery is the edges: the status bar, the corner of a window, the color of a small dot, the length of a scroll bar, a gentle change in a title's weight. The center is anything that interrupts: modals, alerts, sounds, toasts that block content, badges demanding to be cleared. Calm software puts status in the edges and keeps the center for the person's own work.

Sync status: center vs periphery

The river was low that summer, and the stones on its bed were warm by noon. She walked

Without: a routine status takes the center, blocks the writing, and demands a tap that changes nothing.
Don't
New features! Tap to see what's new 12 You've read 3 days in a row!Share your streak?
Everything in the center. Banner, badge and toast all compete with the text the person came to read.
Do
44%
The text is the center. Progress lives in a thin line at the edge. News waits on a "What's new" row in Settings.
Key idea

Put status in the periphery, decisions in the center, and make the trip between them easy and rare.

Do

  • Inventory everything your app shows that is not the user's own content. Assign each item to center or periphery.
  • Use position, a small dot, a weight change or a thin bar for status.
  • Escalate in steps: dot, then inline message, then (only for real risk) a modal.

Don't

  • Use modals for information that needs no decision.
  • Use red badges for counts that do not represent obligations.
  • Animate peripheral items; motion pulls them into the center.

In the wild

  • Kindle reading progressAmazon
    Progress is a small line of text or a thin bar at the bottom, and can be hidden while reading. Status at the edge, content in the center.
  • iA WriterInformation Architects, 2010–
    The editor hides almost all chrome while you type; counts and options appear at the edges or on demand. Writing is the center; everything else waits.
  • macOS menu barApple
    Battery, Wi-Fi and time live in a thin strip at the top edge: glanceable and silent until a low-battery warning. The classic peripheral display on a computer.
For the solo creator

Calm is cheaper to build. A status dot is ten lines of code; a modal system with queues and dismiss logic is a project. When you feel the urge to tell the user something, first ask: does this need a decision? If no, it goes in the periphery, and you just saved yourself a feature.

Common mistakes

Confusing calm with hidden

Designers remove status entirely to look minimal.

People then worry ("did it save?"). Calm keeps information present but quiet. Show it at the edge.

Escalating everything equally

One notification system handles everything, so a "saved" message and a "payment failed" message look the same.

Define levels (periphery, inline, interrupt) and map each event to one.

Check yourself

Your markdown editor syncs to a cloud folder. Sync is occasionally delayed for a minute. Which design is calmest while staying honest?

Exercise 7.1 40 minutes · on your own product

Center and periphery map

  1. On your main screen, list every element that is not the user's own content (status, counts, badges, banners, toasts, tips).
  2. Draw two circles. Place each element where it currently sits: center (interrupts or competes) or periphery.
  3. Now place each where it should be. Draw arrows for moves.
  4. Implement the moves for the top three.
You're done when: you have a before/after center-periphery map and three elements moved in the shipped build.
BeginnerCompetentStrong
Lists elements.Maps and moves three of them.Defines an escalation ladder (periphery, inline, interrupt) for every event and documents it in your design notes.
8

Amber Case's eight principles

Taught by Amber Case, with Mark Weiser

Amber Case turned Weiser and Brown's idea into eight working principles. Each one is a question you can ask of any feature: how little attention can this need, and what happens when it fails?

Amber Case is a designer and researcher who wrote Calm Technology: Principles and Patterns for Non-Intrusive Design (O'Reilly, 2015). She frames technology as something that should inform without overburdening, and her principles are deliberately practical. Here they are, each with a software example drawn below. Read the list, then study the drawings: each shows one concrete way to apply the principle in a small app.

  1. Technology should require the smallest possible amount of attention. It should create ambient awareness through different senses and communicate without taking you out of your world.
  2. Technology should inform and create calm. Its job is to give you what you need to know so you can stop worrying, not to give you something new to worry about.
  3. Technology should make use of the periphery. It should move easily from the periphery to the center and back.
  4. Technology should amplify the best of technology and the best of humanity. Machines should not act like humans, and humans should not act like machines; give each the work it is good at.
  5. Technology can communicate, but doesn't need to speak. A tone, a light, a vibration can carry status without words or a voice.
  6. Technology should work even when it fails. A broken escalator becomes stairs. Design a sensible default state for failure.
  7. The right amount of technology is the minimum needed to solve the problem. Every added feature, sensor or connection adds a way to fail and a demand on attention.
  8. Technology should respect social norms. Introduce new behavior gradually, and consider the people around the user, not only the user.
Saved No Save button needed
1 · Smallest attentionAutosave removes a whole category of thought ("did I save?"). The only trace is a quiet word at the edge.
Backed up 8 min ago All 1,204 notes are safe. Next backup: automatic, tonight. Nothing for you to do.
2 · Inform and calmAnswer the worry directly: when, what, and "nothing for you to do". Information that ends a concern.
18:00 your work, undisturbed focus timer, at a glance
3 · Use the peripheryA focus timer as a filling ring in the menu bar. You sense time passing without opening anything.
Their going to the market. They're Ignore Machine finds, human decides.
4 · Amplify bothThe machine is good at spotting; the person is good at judging intent. A suggestion beats a silent autocorrect.
tap pattern = "turn ahead"
5 · Communicate without speakingApple Watch can tap your wrist before a turn in Maps directions. In an app: a soft haptic on completion instead of a dialog.
Offline. Keep writing; we'll sync later.
6 · Work when it failsWhen the network goes, the app degrades to a fully working local editor. The failure state is useful, not a spinner.
25:00 Start AI focus coach Social leaderboard Smart-bulb sync Mood tracking The job is: count down, then chime.
7 · Minimum technologyEach extra feature is another way to fail and another demand on attention. Ship the timer.
camera in use visible to you, always
8 · Respect social normsSince iOS 14, a small green dot shows when the camera is on (orange for the microphone). In your app: clear signs when recording, sharing or broadcasting.

How to use the eight as a review

The principles overlap, which is fine: use them as eight lenses during a review, not as a scoring rubric. In practice, three of them do most of the work for a small software product. Principle 6 (work when it fails) forces you to design offline, error and empty states, which most apps skip. Principle 7 (minimum technology) is your best defense against feature creep. Principle 8 (social norms) is the one most often forgotten: the person next to your user (on a call, on a train, in a shared document) also experiences your product.

PrincipleReview questionTypical fix
1 Smallest attentionWhat could happen without the user thinking about it?Autosave, sensible defaults, remembered settings
2 Inform and calmDoes this message end a worry or start one?State what is safe and whether action is needed
3 PeripheryCould this be a glance instead of a read?Dot, bar, color, position
4 Amplify bothIs the machine doing machine work and the human human work?Suggest, do not silently decide
5 No need to speakDoes it need words or a sound?Haptic, subtle motion, icon state
6 Work when failingWhat does the user see offline, on error, at zero data?Local-first, cached content, useful error
7 MinimumWhich feature could we delete?Cut, merge, or hide behind a setting
8 Social normsWho else is affected, and do they know?Indicators, consent, quiet defaults in shared spaces

Do

  • Run the eight questions on every new feature spec, in a five-minute pass.
  • Design the failure state first for anything that depends on the network.
  • Prefer non-verbal feedback (state change, haptic) for routine success.

Don't

  • Add "smart" features because they are possible.
  • Make the machine pretend to be a person (fake typing indicators, invented names for bots) when it adds nothing.
  • Forget the people near your user: sounds, cameras, auto-shared status.

In the wild

  • iOS camera and mic indicatorsApple, iOS 14, 2020
    A colored dot in the status bar whenever an app uses the camera or microphone. Principle 8 as a system feature; tiny, peripheral, always there.
  • Things 3Cultured Code
    Completing a to-do is a small checkbox animation and the item quietly moves away; there are no congratulation dialogs. Principle 5: routine success without words.
  • Google Docs offlineGoogle
    Docs can be enabled for offline editing and sync later. Principle 6: a failure that still lets you work.
For the solo creator

Principle 7 is your superpower and your survival strategy. Every feature you do not build is one you never have to maintain, document or support. When you are unsure whether to add something, add nothing for a month and see if anyone asks.

Common mistakes

Reading "calm" as "quiet visual style"

A muted palette looks calm in a screenshot.

Calm is behavior: interruptions, demands, failure handling. A gray app that pings ten times a day is not calm.

Skipping the failure state

You develop on fast Wi-Fi.

Test daily in airplane mode for one week. Every screen that becomes a spinner is a principle 6 failure.

Humanizing for its own sake

Chat-style copy and fake typing dots feel friendly.

If a machine did it, show it as a machine result, fast and clear (see Designing with AI).

Check yourself

Your meditation app plays an end-of-session gong. Users report the sound startles people around them on trains. Which principle applies most directly, and what is the fix?

Exercise 8.1 50 minutes · on your own product

The eight-lens review

  1. Pick your app's most-used flow.
  2. For each of the eight principles, write one observation and one proposed change (it is fine to write "already good" with a reason).
  3. Turn on airplane mode and walk through the flow again. Note every place that breaks.
  4. Ship the two highest-value changes.
You're done when: you have an eight-row review table, an airplane-mode failure list, and two shipped changes.
BeginnerCompetentStrong
Fills in the table with general remarks.Proposes specific UI changes and tests offline.Ships changes, including a designed offline state, and deletes at least one feature or setting under principle 7.
9

Emptiness: leaving room

Taught by Kenya Hara, with Naoto Fukasawa and Oliver Reichenstein

Emptiness is not a lack. An empty vessel is useful because it can receive anything. A calm product leaves room for the person's own content, intention and pace, instead of filling every gap with suggestions, prompts and promotion.

Kenya Hara, art director of MUJI since 2002, writes about emptiness as a design idea in Designing Design (2007) and White (2010). He distinguishes simplicity in the Western modernist sense (reducing to essentials for efficiency) from emptiness in a Japanese sense: a space that invites the viewer to bring their own meaning. His image is a vessel: its value comes from the empty space inside. MUJI's posters with a single horizon line and a tiny figure are, in his framing, empty containers that viewers fill with their own feelings.

Hara also describes MUJI's aim with a contrast between two Japanese phrases. "Kore ga ii" means roughly "this is what I want", the feeling of a product that excites a specific desire. "Kore de ii" means roughly "this will do", a quieter satisfaction: the product is good enough that you do not need to think about it further. MUJI aims for a confident version of the second. For software this is a surprisingly radical idea: build a product that people can stop thinking about.

Emptiness in software

The baseline guide covered whitespace as a visual tool (see also Visual Design). Here we care about emptiness as an ethical stance. An attention-maximizing product treats every empty moment as wasted inventory: an empty feed gets "suggested posts", an empty search gets "trending", a finished task gets "what's next?". A calm product treats empty moments as the user's to keep.

What happens in the moment after the job is done? Filled Task done → "Up next:" → 3 suggested items → "Invite a friend, get 1 month" → autoplay next in 5… Exit is always behind one more thing. Empty All done for today. The moment belongs to the person.
The empty moment is a gift, not inventory. A completed state that ends gives people a clean exit and a sense of finishing, which is also what makes them come back willingly.
Don't
Welcome! Get started: Template Template Template Try Pro free for 7 days Tip 1 of 12: Did you know you can… Watch our 4-minute tour ▶
No room left. The person came to write one thought; the screen offers ten other things to do first.
Do
Start writing… Notes save automatically.
A vessel. The emptiness invites the person's own content. One quiet line answers the one question they might have.
The empty vessel is useful precisely because it can hold anything; design that leaves room lets people bring their own meaning.Paraphrasing Kenya Hara, Designing Design, 2007

Four kinds of room to leave

  1. Room in space. Empty canvas, generous margins, no promotional slot "because there was space".
  2. Room in time. No autoplay, no "next" timer, no immediate follow-up prompt after completion.
  3. Room in meaning. Let people name, organize and use things their own way; avoid forcing your categories (Fukasawa calls designs that fit unconscious behavior "without thought").
  4. Room in commitment. Allow light use. Someone who opens your app once a month should not be punished with guilt, lost streaks or "we miss you" emails.

Do

  • Design the "done" state as a real ending.
  • Let empty states be quiet invitations with one hint at most.
  • Support occasional use without penalties.

Don't

  • Fill every empty slot with suggestions or upsells.
  • Treat a user's free moment as an opportunity to increase engagement.
  • Confuse emptiness with missing information; the essential status still shows, quietly.

In the wild

  • MUJIRyohin Keikaku, art direction by Kenya Hara since 2002
    Unbranded-looking goods, plain packaging, and campaign images built around emptiness and horizon lines. A product can be confident by asking for less attention.
  • iA WriterInformation Architects
    Opens to a blank page and a cursor; no templates gallery, no onboarding tour. The empty page is the feature.
  • Things 3 "Today"Cultured Code
    When you clear today's list, the view is simply empty and quiet, not filled with suggestions. Done means done.
For the solo creator

Emptiness saves you work. Templates galleries, tip systems and "what's next" carousels all need content, maintenance and localization. An empty state with one helpful sentence is a decision you can make today and never revisit.

Common mistakes

Fear of the blank screen

Onboarding advice says empty states must "drive activation".

Activation comes from the first real use. Make the first action obvious and the screen calm; skip the tour (see Problems Worth Solving on onboarding).

Punishing absence

Re-engagement emails and streak resets feel like retention tools.

Let people leave and return without penalty. A light user who comes back gladly is worth more than a guilt-driven daily user.

Check yourself

A user finishes reading the last saved article in your read-later app. What should the screen do?

Exercise 9.1 30 minutes · on your own product

Design three endings

  1. Find three moments when a user finishes something in your app (a task, a list, a session).
  2. Screenshot what appears now.
  3. Redesign each as an ending: one clear acknowledgment, no promotion, an optional small path onward.
  4. Sketch them in code or a quick mock and compare side by side.
You're done when: three before/after pairs exist and at least one is shipped.
BeginnerCompetentStrong
Removes clutter from one ending.Designs three real endings.Also reviews re-engagement emails and removes any that punish absence.
10

The attention economy and stopping cues

Taught by Tristan Harris and the Center for Humane Technology, with Adam Alter and Natasha Dow Schüll

When a business earns more the longer people stay, the product slowly learns to remove the moments when people would naturally stop. Calm design puts those stopping points back.

In 2013 Tristan Harris, then a design ethicist at Google, circulated an internal slide deck titled "A Call to Minimize Distraction & Respect Users' Attention". He argued that a handful of designers at a few companies were shaping how billions of people spend their time, mostly by optimizing for time-on-site. The idea grew into the "Time Well Spent" movement and, in 2018, the Center for Humane Technology, which he co-founded with Aza Raskin and Randima Fernando. Its argument is not that technology is bad, but that a business model built on capturing attention creates pressure to exploit human weaknesses.

How products remove stopping cues

Adam Alter, in Irresistible (2017), uses the phrase stopping cues for the natural signals that tell us we are done: the end of a chapter, the last page of a newspaper, the end of an episode. Many attention-optimized designs work by removing them. Natasha Dow Schüll's study of slot machines, Addiction by Design (2012), shows the same thing in gambling: machines are designed to keep players in a continuous "zone" with no natural pause.

MechanismWhich stopping cue it removesCalm alternative
Infinite scrollThe bottom of the pagePagination, "you're all caught up", a visible end
Autoplay nextThe end of an episode or videoAutoplay off by default, or a clear "Play next" button
Variable rewards (pull to refresh, randomized feeds)Predictability: knowing there is nothing newClear timestamps, "nothing new since 9:12", scheduled updates
StreaksThe freedom to skip a dayWeekly goals, rest days, forgiving counters
Notification pingsThe end of a session (pulls you back in)Digests, quiet hours, opt-in only for useful events
Unread badgesThe sense of "finished"No badge for non-obligations; counts only for real tasks

Aza Raskin designed an early version of infinite scroll in 2006 and has since spoken publicly about regretting how it has been used. Loren Brichter, who invented pull-to-refresh for the Tweetie app, has also said in interviews that he has misgivings about it, since it can work like a slot machine lever. Neither invention is evil in itself. Infinite scroll is fine for a search result list you are actively scanning; it becomes a problem when combined with a feed engineered to be endless.

Where does the session end? no bottom,no cue You're all caught up Older posts › a cue
A stopping cue is a design element. It has to be drawn on purpose. Without it, the session ends only when the person's willpower does.
A feed with and without a stopping cue
Post from @studio_k2m
Suggested for youSponsored
Post from @ravi.writes1h
Because you liked a postSuggested
Post from @maya5h
Loading more…●
Without: suggestions are mixed in so the feed never runs out; the spinner promises one more item forever.

Healthy defaults

Defaults are the strongest design decision you make, because most people never change them (Chapter 4). That cuts both ways: a healthy default protects everyone who never opens Settings. Practical healthy defaults: autoplay off; notifications off except ones the user explicitly creates (a reminder they set); feed sorted chronologically or bounded; daily summary rather than real-time pings; no badge on the app icon for non-obligations; session end markers on.

Do

  • Draw an explicit end to every list that represents "new since last time".
  • Make autoplay opt-in, and make "Play next" a deliberate tap.
  • Show timestamps and "nothing new" honestly to remove the slot-machine feel of refresh.
  • Measure success by outcomes ("finished reading", "tasks completed"), not minutes.

Don't

  • Mix suggestions into a feed to hide its end.
  • Randomize content order to make refresh feel rewarding.
  • Optimize for time-in-app unless time is literally the value (a meditation timer).

In the wild

  • Instagram "You're All Caught Up"Meta, 2018
    A marker in the feed after you have seen all new posts from the past two days. Below it, the app later added suggested posts. A stopping cue is easy to add, and easy to undermine with what comes after it.
  • Netflix autoplay settingsNetflix, 2020
    Netflix added settings to turn off autoplay of previews and of the next episode. Even attention businesses have moved toward user control of autoplay.
  • Reeder and RSS readersSilvio Rizzi and others
    Chronological unread lists that end; marking all as read gives a clean empty state. A feed can be bounded by design.
For the solo creator

You probably do not sell ads, so you are free from the main pressure behind attention capture. Do not import its metrics by accident. If your analytics dashboard leads with "session length" and "DAU", replace them with outcome metrics that reflect the job your product does (articles finished, notes created, tasks done). What you measure becomes what you design for (see Testing & Iteration).

Common mistakes

Copying feed patterns into a tool

Feeds feel modern, so a notes or reading tool gets an "activity feed".

Ask whether the user needs a feed at all. Usually a bounded list with filters serves the job better.

Using engagement as a proxy for value

It is easy to measure.

Pick one outcome metric per core job and track it. Time can go down while value goes up.

A caught-up marker followed by more content

"They might keep scrolling anyway."

After the marker, show only a link. Let the person choose to go further.

Check yourself

Your podcast app's data shows that turning on autoplay of the next episode raised listening time 18%. What is the right decision for a calm product?

Exercise 10.1 40 minutes · on your own product

Stopping cue audit

  1. List every list, feed or sequence in your app.
  2. For each, write where it ends and how the person knows.
  3. Add a stopping cue where none exists (end marker, "caught up" state, session summary).
  4. List your defaults for autoplay, notifications, badges and sorting; change any that favor time-in-app over the user's job.
You're done when: every sequence in your app has a designed end, and your default settings table is documented with reasons.
BeginnerCompetentStrong
Adds one end marker.Covers every list and documents defaults.Also replaces time-based metrics in your dashboard with outcome metrics.
11

Habits that serve: the "glad they did it" test

Taught by Nir Eyal and his critics, with BJ Fogg and James Clear

Habit-forming design is a tool, not a sin. The question is whose goal the habit serves. The test: a week later, would the person be glad they did it, and would they still choose it if they saw exactly how you designed it?

Nir Eyal's Hooked (2014) describes a four-step loop that many popular products share: a trigger (external, like a notification, then internal, like boredom or loneliness), an action (the simplest behavior done in anticipation of reward), a variable reward (of the tribe, the hunt, or the self), and an investment (the user puts something in, like data, content or followers, that makes the next loop more likely). The model drew on BJ Fogg's behavior model, which says a behavior happens when motivation, ability and a prompt converge at the same moment.

The book was widely used by startups, and widely criticized. Critics argued that it gave product teams a recipe for compulsion, especially the variable reward step, which borrows from the reinforcement schedules that make slot machines compelling. Eyal himself included an ethics section, the Manipulation Matrix, and later wrote Indistractable (2019), about how individuals can control their attention. That second book drew its own criticism: some argued it shifts responsibility for distraction from companies to users. You do not need to settle the debate to use its best part, which is the matrix.

The hook loop, with an honest question at each step 1 Trigger 2 Action 3 Reward 4 Investment Did they ask for thisprompt? Is it the actionthey wanted? Is the reward realvalue, or a lottery? Can they take theirinvestment and leave?
The loop is neutral; the answers are not. A reminder the user set, an action they intended, a predictable useful result and an investment they can export is a healthy habit. Remove those and the same loop becomes capture.

The Manipulation Matrix

Eyal asks two questions of any habit-forming product: Would I use it myself? and Will it help users materially improve their lives? The four answers give four roles.

Eyal's Manipulation Matrix Does it materially improve users' lives? Yes No Would themaker use it? Yes No Facilitator builds what helps, uses it Entertainer fun, honest about it Peddler well-meant, out of touch Dealer exploits, won't use it
Aim for the top left. As a solo creator who builds for your own needs, you start with an advantage: you are a user. The second question still has to be answered with evidence, not hope.

The streak debate, as a worked example

Duolingo is the best-known example of streaks in a useful product. A streak counts consecutive days of practice; the app reminds you to keep it and lets you buy or earn "streak freezes" to skip a day without losing it. Duolingo has said publicly that streaks are one of its most effective features for retention. For a language learner, daily practice genuinely helps, so the habit serves a real goal. Critics point at the edge cases: people doing a 30-second lesson at 11:58 pm just to save the number, anxiety about losing a 400-day streak, notifications with guilt-laden copy. The number, at some point, becomes the goal instead of the learning.

Work through it with the glad test. Would the person be glad, a week later, that they did today's lesson? Mostly yes. Would they be glad they did a token lesson at midnight purely to save the count? Probably not; that is the streak serving itself. So an ethical streak design would: reward real practice (not the minimum tap), forgive misses (rest days, weekly goals), keep reminder copy factual rather than guilt-based, and let people turn streaks off without losing their learning history.

Captures
11:52 Your 214-day streak dies in 8 min! Don't let all that work go to waste. Do 1 quick lesson now. Loss framing, panic timing, minimum effort rewarded.
The number wins, the learning loses. The reminder exploits loss aversion at the worst moment and counts a token tap as practice.
Serves
This week: 4 of 5 practice days rest 7:00 pm (your chosen time): Ready for today's 10-minute practice? Goal the user set. Rest is allowed.
The habit serves the goal. Weekly targets forgive a missed day, the reminder comes at a time the person chose, and the copy is factual.

Four questions for any habit feature

  1. Whose goal is it? Did the user state this goal, or did you choose it for them?
  2. Is the reward the value itself? Learning, a finished draft, a cleaner inbox, or a random hit of novelty?
  3. Can they skip without punishment? Rest days, pause, forgiveness.
  4. Can they leave with their investment? Export of history, notes, data.
Key idea

A good habit feature helps people do what they already wanted to do, more easily. A bad one makes them want what you wanted them to want.

Do

  • Let users set their own goals, times and frequency.
  • Use weekly or flexible targets instead of unbroken daily chains.
  • Reward meaningful completion, not the minimum tap.
  • Write reminders as facts, not threats.

Don't

  • Use loss framing ("your streak will die") in notifications.
  • Randomize rewards to make checking compulsive.
  • Lock a person's history behind continued use.

In the wild

  • Duolingo streaksDuolingo
    Daily streak with freezes, reminders, and a famously persistent owl mascot. Habit design that supports a real goal, with edges worth debating.
  • Apple Fitness ringsApple Watch, 2015–
    Daily ring goals the user can adjust; in later versions Apple added the ability to pause rings for rest or illness. A forgiving mechanism added after years of rigid streaks.
  • Tiny HabitsBJ Fogg, 2019
    Fogg's method anchors tiny behaviors to existing routines and celebrates them; it is aimed at the person designing their own habits. Habit design can be done with the user, not to them.
For the solo creator

Write your product's "glad sentence": "A week later, my user is glad they ___." Every habit feature (streaks, reminders, badges, daily goals) must make that sentence more true. If a feature raises your retention chart but does not touch the sentence, cut it.

Common mistakes

Adding streaks because they "work"

Retention case studies are everywhere.

Streaks fit products where daily practice is the value (language, exercise). For a notes or reading tool, a streak often adds guilt and nothing else.

No exit from the habit

You never designed "turn this off".

Every habit mechanic needs an off switch that keeps the user's history intact.

Check yourself

You are adding a habit feature to your journaling app. Which design best passes the glad test?

Exercise 11.1 35 minutes · on your own product

Glad-test your habit mechanics

  1. Write your product's glad sentence.
  2. List every mechanic that brings people back: reminders, streaks, badges, emails, counters.
  3. For each, answer the four questions (whose goal, real reward, skip without punishment, leave with investment).
  4. Redesign or delete any mechanic that fails two or more.
You're done when: you have a glad sentence, a scored table of mechanics, and one mechanic redesigned or removed.
BeginnerCompetentStrong
Writes the glad sentence.Scores all mechanics honestly.Ships a redesign and asks three real users whether they are glad they used the app last week.
12

A notification policy for your app

Taught by Amber Case, with Apple's and Google's platform guidelines

A notification spends someone else's attention. Decide in writing which events deserve that spend, at what level, at what time, and how often, before you write a single push. Then let the user tighten it further.

Every notification is an interruption, and interruptions have a cost beyond the seconds it takes to read them: the person loses their place in whatever they were doing and has to rebuild it. A notification that is useful pays that cost back. One that is promotional, vague or badly timed does not, and the person learns a lesson: this app's pings are noise. After enough of those they turn notifications off entirely, and now your genuinely important messages cannot reach them either. Notification abuse destroys the channel.

Step 1: classify every event

Before designing any push, list every event your system could notify about and put each in one of three classes. Be strict.

ClassDefinitionExamplesDelivery
CriticalThe user will be harmed or will miss something they explicitly asked for if they don't know now.Payment failed and access ends tomorrow; a reminder they set; security alert (new login); a message from a person in a 1:1 chat.Immediate. May break through quiet hours only if the user allowed it (for example iOS "Time Sensitive").
UsefulGood to know, not urgent. The user would want it eventually.Export finished; a shared document was edited; weekly summary; new comment on your post.Batched into a digest, or delivered silently to the notification center.
PromotionalBenefits you more than the user right now.New feature; sale; "we miss you"; "complete your profile"; tips.Not a push. Use in-app "What's new", a changelog, or opt-in email.
Every event goes through the policy before it reaches a lock screen All events payments, edits, reminders, features, comments, sales, security, tips… Policy classify Critical → push now rare; a few per month Useful → daily digest one quiet summary Promotional → in-app never a push
The policy is a filter in code. Implement it as a single function every notification passes through, so a hurried feature cannot bypass it.

Step 2: batching, digests and quiet hours

Batching combines several useful events into one ("3 comments on 'Draft 2'") instead of three pings. A digest delivers all useful events at a predictable time the user chooses. Quiet hours hold everything except critical events during the user's night and focus times. Apple built two of these into the system in iOS 15 (2021): the Scheduled Summary, which collects non-urgent notifications into a summary at set times, and Focus modes, which filter notifications by context. Apps can mark notifications with an interruption level (passive, active, time-sensitive, critical), and the system respects the user's settings. Android has had notification channels since Android 8 (2017), so users can turn off one category without silencing the whole app.

One day of notifications from a notes app
21:47
N
You have new activity!Tap to see what's happening.
21:47
N
We miss youIt's been 2 days. Your notes are waiting.
20:00
N
New: Templates!Try our 40 new templates now.
18:12
N
Asha edited "Trip plan"
16:03
N
Asha edited "Trip plan"
16:04
N
Weekend sale: 40% off ProEnds Sunday!
11:30
N
Export readynotes.zip is ready to download.
09:15
Noisy: seven pings, four of them promotional, two duplicates, one vague. The one the user needed (the export) is buried, and the late "new activity" ping arrives during the evening.

Step 3: ask for permission at the right moment

On iOS the system permission prompt can be shown only once per app; if the user says "Don't Allow", only Settings can change it. On Android 13 and later, notifications also need a runtime permission. So when you ask matters enormously. Asking on first launch, before the person has any idea why you need it, wastes your one chance and trains a reflexive "no". Ask when the person does something that needs notifications (sets a reminder, follows a thread), and explain the value in one sentence first. iOS also offers provisional authorization (since iOS 12): your app can deliver notifications quietly to the notification center without asking, and the person can choose to keep or turn them off from the notification itself.

When to ask for notification permission Ask here?First launchno context First note Ask hereSets first remindervalue is obvious Shares a note(if still undecided) Explain first in your own UI ("To remind you at 7:00, allow notifications"), then show the system prompt.
Ask at the moment of need. The person can see the trade they are making, and a "yes" given then is a real yes.
Lab: what your notifications cost your users
0
minutes of attention per user per week
0
pings per user per week that were not useful
0
hours per week across all your users

This is simple arithmetic with your own assumptions, not a research result. Set "seconds lost" to what you believe a ping costs, including getting back to the task. Then drop the useful share to see the waste, or cut pushes to two a day to see what a digest buys back.

Step 4: write it down

Here is a policy template you can adapt. Keep it in your repository next to the notification code.

NOTIFICATION POLICY · Shelf (v1)
Critical  (push now): reminders the user set; payment failed;
          new sign-in from unknown device. Max ~1/day.
Useful    (digest 19:00, user can change): edits to shared notes,
          exports ready, comments. Batched. Silent delivery.
Promo     (never push): features, offers, tips → "What's new".
Quiet hours: 22:00–08:00 local; only reminders the user set.
Permission: ask when first reminder is set. Never on launch.
No: "we miss you", streak threats, vague "new activity".
Every push names the specific thing and opens it directly.
Key idea

A notification should be something the person would have asked for, if they had known it was coming.

Do

  • Classify every event; implement the policy as one function.
  • Name the specific thing ("Asha edited 'Trip plan'"), and deep-link straight to it.
  • Give users per-category controls, and respect the system's Focus and summary settings.
  • Ask for permission in context, after explaining the value.

Don't

  • Send marketing as push.
  • Send vague pings ("You have new activity") designed to make people open the app.
  • Mark ordinary pushes as time-sensitive to break through Focus.
  • Send re-engagement guilt ("We miss you").

In the wild

  • iOS Scheduled Summary and FocusApple, iOS 15, 2021
    System-level digests and context filters; apps declare interruption levels. Apple's guidelines say time-sensitive should be reserved for events that need attention now. The platform is designed for calm; don't fight it.
  • Android notification channelsGoogle, Android 8, 2017
    Each app category becomes a separate switch the user controls. Design your categories so users can silence promotion without losing critical alerts.
  • Slack notification scheduleSlack
    Users can set hours when notifications pause, and the app shows others that you are not being notified. Quiet hours can also be a social signal (principle 8).
For the solo creator

Ship with fewer notification types than you think. Start with only the reminders the user sets plus one critical class (billing or security). Add a digest later if users ask. Every type you add needs copy, settings, testing and support, and it is far easier to add a notification later than to win back someone who turned them all off.

Common mistakes

Asking for permission on first launch

The template or tutorial puts it in the app delegate.

Move the request to the first moment of need, after an explanation in your own UI.

One notification per event

The code fires on each database change.

Debounce and batch: collect events for a window (a few minutes for collaboration, a day for summaries).

Using email as a loophole

Push is restricted, so promotion moves to daily email.

Apply the same policy to email: opt-in, specific, with one-click unsubscribe.

Check yourself

Your habit app's push open rate is falling. A growth tutorial suggests sending a push titled "Something new is waiting for you...". What should you do?

Exercise 12.1 60 minutes · on your own product

Write and implement your notification policy

  1. List every event that currently sends a push or email.
  2. Classify each as critical, useful or promotional. Move every promotional one out of push.
  3. Write a policy in the template format above: classes, digest time, quiet hours, permission moment, banned patterns.
  4. Implement a single shouldNotify(event, user) function that every notification passes through.
You're done when: the policy file is in your repo, every push goes through one function, and you have moved permission prompting to a moment of need.
BeginnerCompetentStrong
Classifies events.Writes the policy and removes promotional pushes.Implements the policy function with quiet hours and batching, and adds per-category user controls.
Part 2 recap: connect the ideas

You want people to read more in your reading app. Which plan combines Part 2's ideas best (calm periphery, emptiness, stopping cues, glad test, notification policy)?

Part three

Trust: data, money and the future

People hand your product three things they cannot easily take back: their data, their money and their time invested in your format. This Part covers privacy by design and local-first software, everyday honesty in progress bars, pricing, social proof and change logs, and the longest-term respect of all: building software and files that last, on pages and devices that do not waste energy or force upgrades.

13

Privacy by design

Taught by Ann Cavoukian, with the GDPR and Apple's and Signal's practice

The most private data is data you never collect. Collect the minimum, keep it for the shortest time, process it on the device when you can, explain it in plain words, and let people take it with them or delete it themselves.

Ann Cavoukian, then Information and Privacy Commissioner of Ontario, developed "Privacy by Design" in the 1990s and published its seven foundational principles in 2009. Among them: be proactive, not reactive; make privacy the default setting; embed it into the design; aim for full functionality (positive-sum, not privacy versus features); protect data through its whole life cycle; be visible and transparent; and keep it user-centric. The EU's GDPR made a version of this law in 2018 as "data protection by design and by default", alongside the principle of data minimization: collect only what is adequate, relevant and limited to what is necessary for the purpose.

Why should a solo creator care beyond compliance? Because every field of personal data you store is a liability: something to secure, back up, disclose in a breach, answer requests about, and explain. Data you never collect cannot leak. Minimization is the rare principle that is both more ethical and less work.

The data ladder

For every piece of data, climb as high as the feature allows 1 Don't collect itbirthday "for personalization"? Skip it. 2 Keep it on the devicenotes, search index, on-device ML 3 Collect anonymous aggregatescookieless page counts 4 Collect identified, with clear consentemail for sync account 5 Share with third partiesad SDKs, data brokers: avoid
Every rung down adds risk and work. Most indie products can live on rungs 1 to 4. If a feature needs rung 5, question the feature.

Clear permissions and honest sign-in

Ask for system permissions (contacts, location, photos, camera) only when a feature needs them, and ask for the narrowest version: "selected photos" rather than the whole library, "while using the app" rather than "always", approximate rather than precise location when that is enough. Both iOS and Android now offer these narrower choices; design your feature so it works with them. For sign-in, offer options that do not force more data than needed: email with a magic link, Sign in with Apple (which lets people hide their real email behind a relay address), or no account at all for a local app. Do not demand a phone number or social login to use a notes app.

Consent banners: the classic battleground

Cookie banners are where privacy and deceptive design meet most visibly. The honest move for most small products is to not need one: use privacy-friendly, cookieless analytics (or none), no ad trackers, and no third-party embeds that set cookies. If you do need consent, make it a real choice. Try both versions below with the same task.

Don't
Create account Phone number * Date of birth * Gender * ☑ Allow access to contacts ☑ Allow location (always) For a notes app.
Collecting "just in case". Every field is a liability and a reason to abandon sign-up.
Do
Start writing No account needed. Notes stay on this device. Open a blank note Want sync later? Email link or Sign in with Apple. We only store your email.
Ask for data when a feature needs it. Value first, account later, and a plain statement of what you keep.

Labels, export and delete

Since December 2020 Apple's App Store requires a "privacy nutrition label" for each app, summarizing what data is collected and whether it is linked to the user or used for tracking. Google Play added a similar Data safety section in 2022. Since iOS 14.5 (2021), App Tracking Transparency requires apps to ask before tracking users across other companies' apps and websites. Since mid-2022, Apple requires apps that let people create an account to also let them delete it from within the app. Treat these as a floor for the web too: publish a short, plain privacy page that matches your label, offer a self-serve export in an open format, and a self-serve delete that really deletes (after a short, stated grace period if you want one).

Do

  • Write a one-screen privacy summary in plain words: what you collect, why, where it lives, for how long.
  • Use cookieless analytics or none; avoid ad SDKs.
  • Ask for the narrowest permission at the moment of need.
  • Offer export (open format) and delete (self-serve) in Settings.

Don't

  • Collect fields "for later" or "for personalization" without a feature that needs them today.
  • Bundle consent for different purposes into one checkbox.
  • Make "Reject" harder than "Accept" on a banner.
  • Keep data after account deletion beyond what law requires.

In the wild

  • SignalSignal Foundation
    Designed to know as little as possible; Signal has published legal responses showing it could provide only very limited account metadata, such as when an account was created and last connected. Minimization as architecture, not policy.
  • Plausible and FathomPrivacy-focused analytics
    Cookieless web analytics that count visits without personal profiles, which typically lets a site avoid a cookie banner for analytics. The best banner is no banner.
  • Sign in with AppleApple, 2019
    Offers "Hide My Email", a relay address unique to each app. Honest sign-in options let people share less.
  • Apple PhotosApple
    Recognizes people and objects in photos on the device itself. On-device processing gives a smart feature without sending private data to a server.
For the solo creator

Your privacy policy should be short enough that you can keep it true. Write it from your actual data model: open your database schema and list every table that holds personal data. If you cannot explain why a column exists, delete the column. You will sleep better, and your privacy label will be honest because it is simple.

Common mistakes

Analytics SDKs that collect more than you know

You added a crash reporter and an analytics SDK with default settings.

Read what each SDK collects, turn off what you do not need, and reflect it in your privacy label.

"Delete" that only deactivates

Soft-delete is easier to implement.

Schedule a real purge after a stated grace period, including backups within your retention window, and say so.

A banner nobody needed

You copied a consent plug-in from a template.

Remove the trackers and you can usually remove the banner.

Check yourself

Your recipe app wants to suggest recipes based on what is in season near the user. What is the most privacy-respecting design?

Exercise 13.1 60 minutes · on your own product

Data inventory and one-screen privacy summary

  1. List every piece of personal data your product touches (database, logs, analytics, crash reports, payment provider, email tool).
  2. For each, write: purpose, rung on the data ladder, where it lives, how long you keep it.
  3. Delete or move up the ladder at least one item.
  4. Write a one-screen privacy summary in plain words and check that your store privacy label matches it.
You're done when: you have the inventory table, one item removed or moved up, and the summary published in your app or site.
BeginnerCompetentStrong
Lists database fields.Includes third-party tools and retention, and publishes the summary.Also ships self-serve export and delete, and removes the cookie banner by removing trackers.
14

Local-first: you own your data

Taught by Ink & Switch (Martin Kleppmann, Adam Wiggins, Peter van Hardenberg, Mark McGranaghan)

In local-first software the primary copy of your data lives on your own device, and the cloud is a helper for sync and backup, not the owner. It is the strongest structural form of respect: the app stays fast, works offline, and keeps working even if the company disappears.

In 2019 the research lab Ink & Switch published an essay, "Local-first software: You own your data, in spite of the cloud". The authors observed that cloud apps (like Google Docs) made collaboration easy but took away ownership: if the service goes down, changes its terms or shuts down, your work goes with it. Old-fashioned desktop apps with files gave you ownership but made collaboration hard. They proposed a goal that combines both, and described it with seven ideals.

#Ideal (Ink & Switch, 2019)What it means for your design
1No spinners: your work at your fingertipsReads and writes hit local storage; the UI never waits on the network to show your own data.
2Your work is not trapped on one deviceSync across devices is a feature, not an afterthought.
3The network is optionalFull editing offline; sync when connected.
4Seamless collaboration with your colleaguesConcurrent edits merge (for example with CRDTs) instead of producing conflicts.
5The Long NowData stays readable for decades, independent of your company.
6Security and privacy by defaultEnd-to-end encryption is natural when servers only relay.
7You retain ultimate ownership and controlUsers can copy, export, modify and delete without asking permission.
Where is the real copy? Cloud-first Server (truth) phone (view) laptop (view) Server down = no work. Local-first Sync relay phone (truth) laptop (truth) Relay down = keep working, sync later.
Move the truth to the person. In local-first, each device holds a full copy; the server's job shrinks to relaying changes and backup, which also makes end-to-end encryption easier.

You don't have to go all the way

Full local-first with real-time collaboration is still hard engineering (libraries such as Automerge, from Ink & Switch, and Yjs help). But you can take most of the benefit with simpler moves: store user documents as plain files the user can see (Markdown, JSON, SQLite); cache everything locally and render from cache; queue writes offline; sync files through a service the user already owns (iCloud Drive, Dropbox); and make export a first-class feature. Each move climbs toward ownership.

Don't
Couldn't load your notes Check your connection and try again. Your own words, held hostage by Wi-Fi.
Cloud as owner. The person's own writing is unavailable because a server is.
Do
Notes Offline · 2 changes queued Trip plantoday Book ideasMon GrocerySun Everything works; sync catches up later.
Device as owner. The network status lives in the periphery and nothing waits on it.

Do

  • Render user data from local storage first, always.
  • Prefer formats users can open without you: Markdown, plain text, CSV, JSON, SQLite, standard image and audio formats.
  • Design an explicit offline experience (Chapter 8, principle 6).
  • Write down what happens to user data if you stop working on the product.

Don't

  • Gate reading your own data behind a network request.
  • Invent a proprietary format when an open one fits.
  • Promise "you own your data" while offering no export.

In the wild

  • ObsidianDynalist Inc., 2020–
    Notes are a folder of Markdown files on your disk; sync is an optional paid service, and you can use your own. The file system as a promise: you can leave any day with everything.
  • iA WriterInformation Architects
    Works on plain text Markdown files in folders you choose, synced through services like iCloud or Dropbox. A writing app that does not own your writing.
  • Actual BudgetOpen source, local-first
    A personal budgeting app built local-first, with optional sync and the option to self-host. Local-first works for serious, everyday tools, not only research demos.
For the solo creator

Local-first is also operationally kind to you. Fewer server round-trips means fewer outages to wake up for, lower hosting bills, and a product that keeps working while you are on holiday. If you are starting a new tool for individuals, start from files or SQLite on the device and add sync later.

Common mistakes

"Offline mode" as a read-only cache

Write sync is harder than read caching.

Queue writes locally with clear status. Even last-writer-wins with conflict copies beats blocking the user.

Open format, closed metadata

Notes are Markdown, but tags, links and attachments live only in your database.

Store metadata in the files (front matter) or include it in export.

Check yourself

You are building a journaling app for individuals. Which architecture best fits the seven ideals with reasonable solo effort?

Exercise 14.1 45 minutes · on your own product

Seven-ideals scorecard

  1. Score your product 0 to 2 on each of the seven ideals.
  2. For each score below 2, write the smallest change that would raise it by one.
  3. Answer in writing: "If I stopped working on this tomorrow, what happens to my users' data?"
  4. Implement the cheapest improvement (often: export to an open format).
You're done when: you have a scored table, a written "if I stop" answer you would be comfortable publishing, and one improvement shipped.
BeginnerCompetentStrong
Scores the ideals.Ships export or offline editing.Publishes the "if I stop" commitment on your site and designs the offline state fully.
15

Honesty in everyday interface

Taught by Dieter Rams, with Brad Myers and indie practice

Trust is built in small, repeated moments: a progress bar that tells the truth, a price that does not change, a change log that admits what broke, a feature retired with notice and an export. None of these are hard. All of them are noticed.

Honest progress

Brad Myers showed in 1985 that people prefer having a progress indicator during long waits. Progress bars are among the most common "small lies" in software: a bar that races to 90% and then sits there, a fake multi-step "Analyzing your profile…" animation for something that took 50 ms, a spinner with no end. Some deliberate slowdowns are defended as making a result feel more valuable ("labor illusion"). The honest line: a waiting indicator should reflect real work. If you know the steps, show them. If you do not know the duration, say what is happening instead of faking a percentage. If the work is instant, show the result instantly.

Exporting 1,204 notes

Exporting…

0%

Fake: the bar jumps to 90% quickly, then stalls with no explanation. People start wondering if it crashed.

Fair pricing and easy cancellation

Chapter 5 covered cancellation. Fair pricing is its twin: prices that are easy to compare, renewal terms visible before purchase, reminders before renewal, no surprise price rises (announce them in advance and honor the old price until renewal at least), and a plain refund policy. Many indie products also offer a lifetime or one-time purchase option, or "pay once for this version" models, which remove subscription anxiety entirely (see Identity & Launch for pricing pages).

Transparent changes: changelogs

A changelog is a trust device. It shows the product is alive, admits fixes ("Fixed a bug where search skipped notes with emoji titles"), and warns of changes before they surprise people. Good changelogs are dated, specific, written for users not developers, and honest about removals and regressions. Bad ones say "Bug fixes and performance improvements" every time, which tells the user nothing and, over the years, reads as concealment.

Don't
What's new · v4.12 Bug fixes and performance improvements. (Also quietly removed the free PDF export.)
Silence is a decision. People discover the removal on the day they need it.
Do
v4.12 · 3 March NewExport a single note as .docx FixedSearch skipped notes with emoji in the title. Sorry! ChangedPDF export moves to Pro on 1 June. Free users keep it until then; existing PDFs are unaffected.
Specific, dated, and honest about the hard part. A paywall change announced months ahead is a business decision; announced never, it is a betrayal.

Sunsetting features (and products) responsibly

Every product eventually removes things. How you do it says everything about you. Google Reader's shutdown in 2013 is the classic case: announced in March, closed on 1 July, with an export through Google Takeout. People were upset, but they could leave with their subscriptions in a standard format (OPML), which is why a new generation of RSS readers could import them. A responsible sunset has five parts.

  1. Notice. Announce early (months, not days), in the app and by email, with a date.
  2. Reason. Say why, briefly and truthfully.
  3. Export. Provide a full export in an open format, and keep it working until after the shutdown date.
  4. Alternatives. Point to replacements, including competitors if needed.
  5. Money. Refund unused prepaid time, pro rata.

Do

  • Drive progress indicators from real work, and name the step.
  • Announce price rises in advance; honor the old price until renewal.
  • Write specific, dated changelogs, including removals and regressions.
  • Plan sunsets with notice, reason, export, alternatives, refunds.

Don't

  • Fake progress or add theatrical delays.
  • Quietly remove or paywall features.
  • Write "bug fixes and improvements" for a release that changes behavior.
  • Shut down without an export.

In the wild

  • Google Reader shutdownGoogle, 2013
    About three and a half months' notice, with export via Takeout in OPML. An open export format turned a shutdown into a migration.
  • Linear changelogLinear
    A frequent, specific, illustrated public changelog. A changelog can be a calm, steady trust signal and a marketing asset.
  • Sketch and other "keep this version" licensesVarious indie and pro apps
    Some apps let you keep using the last version you paid for when a subscription or update license lapses. Fair pricing can leave people with something when they stop paying.
For the solo creator

Write the changelog as you work, not at release. Keep a CHANGELOG.md open; every merged change gets one plain sentence. At release time you edit, not invent. And write your sunset plan now, while the product is healthy: a one-page document that says how you would shut down. It forces export to exist.

Common mistakes

Spinner for everything

It is the default component.

Use determinate progress when you know counts, a named step when you do not, and nothing for anything under about a second (see Motion & Feel on perceived speed).

Grandfathering forgotten

The new price applies to everyone because billing is simpler that way.

Give existing customers at least one renewal at the old price, with notice.

Check yourself

Your AI summary feature returns in 0.4 s. A friend suggests a 3-second "Analyzing… Reading… Thinking…" animation so users value it more. What do you do?

Exercise 15.1 45 minutes · on your own product

Trust details sweep

  1. Find every progress indicator. Mark each as real, estimated or fake. Fix the fakes.
  2. Rewrite your last three release notes to be specific and honest.
  3. Write a one-page sunset plan for your product (notice, reason, export, alternatives, money).
You're done when: no fake progress remains, three changelog entries are rewritten, and the sunset plan exists in your repo.
BeginnerCompetentStrong
Fixes one progress bar.Completes all three tasks.Publishes the changelog and a short "our promise if we shut down" page.
16

Longevity: software that lasts

Taught by Dieter Rams, with Donald Knuth, Low-tech Magazine and the Sustainable Web Design community

Long-lasting design avoids fashion, keeps people's work readable for decades, runs on the devices they already own, and wastes neither energy nor attention. Maintenance is a form of respect: it says "I am still here, and your trust is still safe."

Rams's seventh principle says good design is long-lasting: it avoids being fashionable and therefore never appears antiquated. His ninth says good design is environmentally friendly: it conserves resources and minimizes physical and visual pollution through the product's life. Braun products he designed in the 1960s still look current and many still work. Software decays faster, but not by necessity. Most software rot comes from three choices: trendy styling, closed formats, and growing weight that pushes older devices out.

1 · Files that outlive the app

The single most important longevity decision is the format of the user's work. A plain text file from 1975 opens today on any computer. A document in a proprietary format from a dead app from 2010 may not open anywhere. Open, documented, widely implemented formats outlive companies.

How long will your user's work stay readable? Illustrative ranking, not a measurement. Plain text, Markdown, CSV Open standards (PDF/A, PNG, SQLite) Open but complex (.docx, .epub) Documented proprietary Undocumented, server-only as long as one company lives Store in the top rows. If you must use a complex format, also export to a simple one.
The format is the promise. Users trust tools whose files they could open without the tool.

2 · Style that does not date

Trends in UI come in waves: heavy skeuomorphism, then extreme flat, then neumorphism, glassmorphism, gradient blobs, and whatever is fashionable this year. Each looks fresh for a year or two and then marks the product as "from that year". Timeless interfaces lean on typography, spacing, clear hierarchy and system conventions rather than surface effects. You can still have personality, but put it where it ages well: in words, in a well-chosen typeface, in a single accent color, in thoughtful details.

Dates fast
Your Stats ✦ glass, blobs, glow
A style is a timestamp. Effects chosen for fashion will read as "2021" or "2025" soon; they also often hurt contrast.
Lasts
This month 14 books finished Last month 9 · Year 61
Type, space, hierarchy. This card could have shipped in 2012 or 2032. Its quality is in the clarity, not the surface.

3 · Light pages and the energy of software

Digital products use energy: in data centers, networks and especially in the devices that download and run them. Heavier pages and apps cost energy, data plans (a real expense for many users in India and elsewhere) and battery, and they push older devices out sooner. The HTTP Archive's measurements show the median web page has grown to over 2 MB. A text-centric product rarely needs more than a fraction of that. Practical moves: compress and size images, avoid autoplaying video, use system fonts or a small number of subsetted webfonts, ship less JavaScript, cache well, and lazy-load what is below the fold.

Where the weight goes (illustrative article page) Typical ≈ 2.3 MB Lean ≈ 0.3 MB images JavaScript fonts HTML + CSS Numbers are illustrative. Measure your own pages with your browser's network panel.
Most weight is optional. For reading products, text is tiny; images and scripts are where the weight, energy and slowness come from.
Myth

"Dark mode saves lots of battery." On OLED screens dark pixels do use less power, but a 2021 Purdue University study found the savings at typical indoor brightness were only a few percent, and much larger only at high brightness. Offer dark mode because people like it and it suits low light, not as a big green win. Page weight and CPU work usually matter more.

4 · Support older devices

Every time an app drops support for an older OS or a slower phone, some people are pushed to buy new hardware or lose access. Hardware manufacturing is where much of a device's lifetime carbon footprint comes from, so keeping old devices useful is one of the most effective environmental moves software can make. Check your analytics for the oldest OS versions and slowest devices in real use, test on a cheap or old phone regularly, and drop support only with notice and a reason.

5 · Finished software and maintenance as respect

There is a quiet tradition of software that is allowed to be finished. Donald Knuth froze TeX's features decades ago; new versions only fix bugs, and the version number converges toward π (3.14159265…), a joke that is also a philosophy. Many small Unix tools have done one job unchanged for decades. "Finished" does not mean abandoned: it means feature-complete, with ongoing maintenance (security fixes, OS compatibility, bug fixes). For a solo creator, deciding that your product's core is finished can be the most respectful thing you do: users get stability instead of churn, and you get time to maintain it well.

Key idea

Open formats, timeless style, light weight, old devices welcome, and a product allowed to be finished. That is long-lasting design in software.

Do

  • Store and export user work in open, simple formats.
  • Set a page-weight and bundle-size budget and check it in CI.
  • Test on an old, cheap device every release.
  • Decide what "finished" means for your core and protect it from churn.

Don't

  • Redesign for fashion every year.
  • Ship autoplay video, huge hero images or several webfonts on reading pages.
  • Drop older OS versions just to use a new API you could do without.
  • Rewrite stable features because they are boring to you.

In the wild

  • Low-tech MagazineSolar-powered website, 2018–
    A site served from a small solar-powered server, with dithered images and a static design to keep pages tiny; it can go offline in long cloudy spells. A vivid demonstration of how small a good reading page can be.
  • TeXDonald Knuth, 1978–
    Feature-frozen for decades, still maintained, with documents from the 1980s still compiling. Finished software, maintained, is a gift to users.
  • CraigslistSince 1995
    Barely changed visually in decades and fast on any device. You don't have to copy its look; notice that people never had to relearn it.
For the solo creator

Longevity is the solo creator's natural advantage. You will not out-feature a funded competitor, but you can out-last them: simple files, small codebase, few dependencies, slow and careful change. Every dependency you avoid is one that cannot break your app in five years.

Common mistakes

Redesigning when bored

You look at your app every day; users do not.

Change things when users struggle, not when you are tired of them.

Dependency sprawl

Each library saves an hour today.

Prefer platform features and small, stable libraries; each dependency is a future maintenance task.

Only testing on your new phone

It is the device you own.

Keep an old, cheap device on your desk and use it weekly.

Check yourself

You are choosing how to store documents in a new writing app. Which choice best serves longevity?

Exercise 16.1 60 minutes · on your own product

Longevity audit

  1. Formats: list where user work is stored and in what format. Can a user open it without your app?
  2. Weight: measure your main page or app bundle size and set a budget (for example, 300 KB for a reading page).
  3. Devices: find your oldest supported OS and test there.
  4. Style: list any visual effects you added because they were trendy; decide whether each earns its place.
You're done when: you have a four-part audit, a weight budget written down, and one improvement shipped (an export, a smaller bundle, or an old-device fix).
BeginnerCompetentStrong
Measures page weight.Completes the four-part audit and sets a budget.Adds a size check to your build, and publishes a "how long we support devices" note.
Part 3 recap: connect the ideas

Which single product decision supports privacy (Ch. 13), local-first ownership (Ch. 14), honest sunsetting (Ch. 15) and longevity (Ch. 16) all at once?

Part four

Responsibility: harm, and your own oath

The last Part widens the view from the user in front of you to everyone your product touches: the person who might be tracked through a sharing feature, the child who downloads your app, the stranger who receives a message. Then it narrows to you: one person who is designer, engineer and business at once. You will finish by writing your own design oath and an ethics and trust checklist to run before every release.

17

Safety by design: abuse, moderation and kids

Taught by Eva PenzeyMoog, with Australia's eSafety Commissioner and the UK ICO

Every feature that connects people, shares data or shows location can be used to hurt someone. Design for the abuser as a user persona, make the safe choice the default, and give the person at risk the tools to see and stop what is happening.

Eva PenzeyMoog's Design for Safety (2021) starts from a hard fact: technology is routinely used in domestic abuse, through shared accounts, location sharing, smart home devices, shared calendars, and access to someone's phone. Most product teams design only for well-meaning users and treat abuse as an edge case. PenzeyMoog's method is to add an abuser persona and a survivor persona to your design process and walk every feature through their eyes. Australia's eSafety Commissioner promotes a similar "Safety by Design" approach built on three principles: service provider responsibility, user empowerment and autonomy, and transparency and accountability.

Abuse vectors in ordinary features

FeatureHow it can be abusedSafer design
Location sharingA partner silently tracks someone; sharing turned on once is forgotten.Visible, persistent indicator; periodic reminders that sharing is on; easy one-tap stop; time-limited sharing by default.
Shared accounts and family plansThe account owner sees everything another member does.Separate private spaces; clear statement of what the owner can see; ability to leave a shared plan without the owner's approval.
Read receipts, "last seen", activity statusMonitoring and pressure to respond.Off by default or reciprocal; easy to hide.
Comments, messages, mentionsHarassment, pile-ons, unwanted contact.Block that really blocks, mute, limit who can reply, rate limits for new accounts.
Public profiles and activity mapsRevealing home address or routines.Private by default; strip location metadata from photos; privacy zones around home.
Invites and shared documentsSpam, or regaining access after a breakup.Owner can see and revoke all access; access logs; notify when someone is added.
Walk every connecting feature with three personas Intended user "I want my sister to know I got home safe." Needs: quick to start, quick to stop. Abuser "I'll turn it on from her phone while she sleeps." Exploits: silent setup, no reminders. Person at risk "How would I even know this is on?" Needs: visible indicator, periodic reminder.
The abuser is a user too. If a feature works perfectly for the intended user but silently for the abuser, it is not finished.
Don't
Share location With: Vikram Duration: forever No indicator elsewhere in the app. No reminder. Easy to forget, easy to set up on someone else's phone.
Silent and permanent. Convenient for the intended user, perfect for the abuser.
Do
Sharing location with Vikram · Stop Share location For: 1 hour · Until I arrive · Ongoing Ongoing sharing sends you a reminder every 7 days. Visible everywhere, time-limited by default, stoppable in one tap.
Visible, temporary, revocable. The person always knows, and the default ends by itself.

Moderation for small apps

If your product lets people send anything to other people (comments, messages, shared links, public profiles), you are running a small moderation operation whether you planned to or not. Big platforms have teams; you have yourself. So design to reduce how much moderation you need. Prefer private and invite-only spaces over public ones. Slow down new accounts (rate limits on messages and invites). Make block and report one tap away, and make block mean the blocked person cannot see or contact the blocker. Write short, plain community rules. Keep a simple review queue, and decide in advance how you will handle illegal content (in many countries you must act on reports and, for some content like child sexual abuse material, report it to authorities). Consider not building the social feature at all: a sharing link that the user sends through their own messaging app avoids an entire category of harm.

Children

Children are in your audience if your product is likely to be used by them, even if it is "not for kids". The UK's Age Appropriate Design Code (the "Children's code", in force since 2021) sets 15 standards for online services likely to be accessed by children, including high-privacy defaults, location off by default, no nudge techniques that encourage children to weaken privacy, and minimal data collection. In the US, COPPA requires verifiable parental consent before collecting personal information from children under 13. India's DPDP Act, 2023 treats anyone under 18 as a child and requires verifiable parental consent for processing their data, and bars tracking and targeted advertising directed at children. The design response is the same everywhere: high-privacy defaults for everyone, no dark patterns, no public profiles by default, and no engagement mechanics designed to keep young people hooked.

Do

  • Add abuser and person-at-risk personas to every feature that shares, connects or locates.
  • Make sharing visible, time-limited and revocable.
  • Ship block, mute and report with any feature that lets people reach each other.
  • Default to high privacy for everyone, which also protects children.

Don't

  • Treat abuse as an edge case to handle later.
  • Build public social features you cannot moderate.
  • Let one account holder silently see another member's private data.
  • Use engagement mechanics in products likely to be used by children.

In the wild

  • AirTag unwanted tracking alertsApple, 2021–2024
    After reports of AirTags used for stalking, Apple added alerts for unknown trackers traveling with you and an Android app to scan for them; in 2024 Apple and Google shipped cross-platform alerts based on a shared specification. A safety layer added after harm; you can design it in from the start.
  • Strava heatmap2018
    A public global heatmap of activities revealed the layout of sensitive military sites from soldiers' runs. Strava has offered privacy controls such as hiding the start and end of activities near home. Aggregated "harmless" data can expose people.
  • Signal and WhatsApp group controlsMessaging apps
    Settings that control who can add you to groups, with invitations instead of automatic adds in some configurations. Consent before contact is a safety feature.
For the solo creator

Your best safety tool is scope. Every social, public or location feature you skip is a moderation and safety burden you never carry. When you do add one, add the safety controls in the same release, not "later". And write down, now, what you will do the first time someone reports abuse: who you contact, what you remove, how fast.

Common mistakes

Block that doesn't really block

It hides the blocked person's content from you but still lets them see and contact you.

Make blocking two-way for contact and visibility, and do not notify the blocked person.

Public by default

It helps growth and discovery.

Private by default; let people choose to publish specific things.

Account recovery as an attack

Recovery by "answering a question" or a shared email lets a former partner take over.

Notify on recovery attempts, show active sessions, let people sign out other devices.

Check yourself

You are adding "shared shelves" to your reading app so couples can see each other's books. What is the most important safety addition?

Exercise 17.1 45 minutes · on your own product

Abuser persona walkthrough

  1. List every feature that shares data, connects people, or reveals activity or location.
  2. For each, write how an abusive partner, a harasser and a curious stranger could misuse it.
  3. Write what the person at risk would need to notice and stop it.
  4. Ship one fix (indicator, time limit, block, revoke access, private default).
You're done when: you have a misuse table for every connecting feature and one safety fix shipped; or a written decision not to build a social feature, with the reason.
BeginnerCompetentStrong
Lists features and obvious misuses.Covers three abuser types and ships a fix.Also writes an abuse-report response plan and tests account recovery for takeover risk.
18

Ethics for one: your oath and your checklist

Taught by Mike Monteiro, with Dieter Rams and everything in this guide

When you are the designer, the engineer and the business, nobody else will stand up for the user in the room, because the room is your head. Write your principles down while you are calm, turn them into a checklist, and run it before every release.

Mike Monteiro, a designer and co-founder of the studio Mule Design, has argued for years that designers are responsible for the work they put into the world, and that "I was just doing my job" is not a defense. His 2013 talk "How Designers Destroyed the World" and his 2019 book Ruined by Design make the case that design decisions have consequences at scale, and he published "A Designer's Code of Ethics" in 2017, which begins from the idea that a designer is first a human being, and only then a professional. In a team, the designer often plays the user's advocate against business pressure. Alone, you play both roles. That is harder than it sounds, because the business side of you always has a number to point at and the user side only has a feeling.

Two hats, one head: give the user side written weight Business hat "+12% upgrades" User hat "feels wrong" + written oath A feeling loses to a number at 2 am. A principle you wrote in advance does not.
Pre-commitment is the solo designer's ethics team. Decide your red lines while calm, so you do not have to argue with yourself when revenue is down.

Write your oath

A design oath is a short list of commitments specific enough to decide real cases. "Be ethical" decides nothing. "Cancelling takes no more taps than subscribing" decides a lot. Write seven to ten lines, each a rule you could check. Here is an example drawn from this guide; adapt the wording, keep the specificity.

MY DESIGN OATH (Rohit, v1)
1. The first price a person sees is the price they pay.
2. Saying no, leaving and deleting take no more effort than
   saying yes, joining and creating.
3. Nothing optional is pre-selected.
4. I never show numbers, deadlines or reviews that are not true.
5. Pushes are for things a person asked for. Promotion never is.
6. Every list has an end. Every session can finish.
7. I collect the minimum, keep it short, and let people export
   and delete it themselves.
8. People's work lives in open formats they can open without me.
9. I walk every sharing feature through an abuser's eyes.
10. If I shut down, I give notice, export and refunds.

Saying no to features that harm

Some requests will come from users ("let me see when my partner reads my messages"), some from your own growth instincts ("import contacts to grow"), some from partners ("add our SDK"). For each, look for the legitimate need under the request, and design for that need without the harm. Often there is a version that gets most of the business value honestly.

As requested
Grow via contacts • Upload whole address book • Auto-invite everyone • Reminder invites after 3 days Harms: privacy of non-users, spam, reputation, store rejection risk.
The request as written. Real business goal (growth), harmful mechanism.
Reframed
Grow via sharing • Share a shelf or note as a link • Person sends it themselves • Link page shows what the app is Same goal, no contacts uploaded, no spam, and real recommendations.
The need, without the harm. Word of mouth that the user controls is slower to start but trusted.

Three habits that keep you honest

  1. The pre-ship checklist. Run the checklist below before every release that touches money, data, notifications or sharing. It takes ten minutes.
  2. The decision log. When you choose between business and user interests, write one paragraph: the options, what you chose and why. Re-read it after a month. It is surprisingly good at revealing rationalizations.
  3. The stranger test. Before shipping a persuasive element, show it to someone outside tech and ask "what do you think happens if you tap this?". If their answer differs from reality, you have a gap.

Checklist: ethics & trust pre-ship

Honesty
Calm
Privacy and trust
Longevity and safety

Do

  • Write your oath in checkable rules and keep it in your repo.
  • Look for the legitimate need under harmful requests.
  • Log hard trade-offs and re-read them.
  • Make the checklist part of your release routine.

Don't

  • Write vague values you cannot test.
  • Decide ethics case by case under revenue pressure.
  • Assume that being small makes your choices harmless.

In the wild

  • Ruined by DesignMike Monteiro, 2019
    A blunt argument that designers share responsibility for the harms of the products they build. You are not neutral, even alone.
  • Basecamp and HEY policies37signals
    HEY, its email service, blocks the tracking pixels that many marketing emails use to report when you open them, and the company publishes its policies plainly. Principles can be a product feature and a brand.
  • Indie "values" pagesCommon practice
    Many small app makers publish short pages on privacy, pricing and longevity commitments. Publishing your oath makes it harder to break and easier to trust.
For the solo creator

Publish a short version of your oath on your website. It becomes a promise users can hold you to, a differentiator against bigger competitors, and a guardrail against your own worst month. Keep the full checklist private and use it.

Common mistakes

Values as marketing only

A privacy page is written by copying a template.

Write from what your code actually does. If you cannot keep a promise, do not make it.

Skipping the checklist on "small" releases

The change looks minor.

Run the parts that apply. Most harmful patterns arrive as small changes (a pre-ticked box, a new ping).

Check yourself

Revenue dropped 20% this month. You consider making the yearly plan the preselected default on the upgrade screen, with monthly behind a "see other options" link. What does your oath-and-checklist process tell you?

Exercise 18.1 60 minutes · on your own product

Write your oath and run your first pre-ship check

  1. Draft seven to ten checkable rules, using the example as a starting point and your audits from earlier chapters.
  2. Test each rule against two recent decisions. Rewrite rules that would not have decided them.
  3. Run the pre-ship checklist above on your current build. Note every unchecked item.
  4. Publish a short public version of your oath on your site or in your app's About screen.
You're done when: the oath is in your repo, a public version is live, and you have a list of checklist failures with dates to fix them.
BeginnerCompetentStrong
Writes general values.Writes checkable rules and runs the checklist.Publishes the oath, adds the checklist to the release process, and starts a decision log.

Wrap-up

Ten things to remember

  1. Honesty is the size of the gap between what a busy person believes and what really happens.
  2. Deceptive patterns exploit six shortcuts: defaults, scarcity, social proof, shame, salience and effort. Neutralize the shortcut, not just the name.
  3. Persuasion is honest when the fact behind it is true, specific and the same for everyone.
  4. Symmetry: no as easy as yes, leaving as easy as joining, private as easy as public.
  5. The law in the EU, US and India now names many of these patterns. Design to the honest version and you mostly comply.
  6. Calm technology keeps status in the periphery and brings things to the center only when a decision is needed.
  7. Leave room: empty moments and endings belong to the user. Every list needs a stopping cue.
  8. A habit feature is good when, a week later, the person is glad they did it.
  9. Collect the minimum, keep data on the device and in open formats, and let people export and delete it themselves.
  10. Write your oath while calm, walk features through an abuser's eyes, and run the pre-ship checklist every release.

Self-assessment: I can…

Practice assignment for the next two weeks

  1. Days 1 to 3: Honesty audit. Run Exercises 1.1, 4.1 and 5.1 on your product. Fix the largest gap and the worst asymmetry.
  2. Days 4 to 5: Spot practice. Each day, find and screenshot three deceptive patterns in apps you use. Label each with its shortcut and sketch the honest version. Keep a swipe file.
  3. Days 6 to 8: Calm pass. Exercises 7.1 and 10.1: center/periphery map and stopping cues. Write and implement your notification policy (12.1).
  4. Days 9 to 10: Data and ownership. Data inventory (13.1), seven-ideals scorecard (14.1), and ship one export or delete improvement.
  5. Days 11 to 12: Longevity and safety. Longevity audit (16.1) and abuser walkthrough (17.1).
  6. Days 13 to 14: Oath. Write and publish your oath (18.1), run the pre-ship checklist, and write a one-page reflection: what did you change, what did it cost, what did you learn about yourself as the business and the advocate?

Reflection prompt

Go back to the three moments you wrote down in the warm-up. Name each one precisely now. Then ask: is there a version of any of them in your own product? What would it take to remove it this week?

Reading list

  • Deceptive Patterns (2023) and deceptive.design
    Harry Brignull · The definitive catalogue, with the cognitive science and legal cases behind each pattern.
  • Designing Calm Technology (1995)
    Mark Weiser & John Seely Brown · A short paper; read it in twenty minutes and you will see "periphery" everywhere.
  • Calm Technology (2015)
    Amber Case · The eight principles with practical patterns and examples.
  • Designing Design (2007) and White (2010)
    Kenya Hara · Emptiness, receptivity and MUJI's "this will do" philosophy.
  • Local-first software (2019)
    Ink & Switch (Kleppmann, Wiggins, van Hardenberg, McGranaghan) · The seven ideals and the engineering behind them.
  • Hooked (2014) and Indistractable (2019)
    Nir Eyal · Read Hooked to recognize the loop and use the Manipulation Matrix; read the critics alongside it.
  • Irresistible (2017)
    Adam Alter · The psychology of behavioral addiction and the idea of stopping cues.
  • Addiction by Design (2012)
    Natasha Dow Schüll · An ethnography of slot machine design; uncomfortable parallels with feeds.
  • Center for Humane Technology resources
    Tristan Harris, Aza Raskin and colleagues · Essays, a podcast ("Your Undivided Attention") and design guides on attention.
  • Design for Safety (2021)
    Eva PenzeyMoog · Practical methods for designing against interpersonal abuse.
  • Ruined by Design (2019)
    Mike Monteiro · A call to responsibility; read it before writing your oath.
  • Nudge (2008)
    Richard Thaler & Cass Sunstein · Choice architecture, defaults and the line between nudge and sludge.
  • Bringing Dark Patterns to Light (2022)
    US FTC staff report · How a regulator describes and classifies dark patterns.
  • Guidelines for Prevention and Regulation of Dark Patterns, 2023
    India's Central Consumer Protection Authority · The 13 patterns, with illustrations, in the regulator's own words.

Next: The Solo Practice turns everything in the course into a working routine. For reference versions of this guide's checklists, see the Reference Library.