A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 49KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang=fr>
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset=utf-8>
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>4 Rules for Intuitive UX (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="https://learnui.design/blog/4-rules-intuitive-ux.html">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. 4 Rules for Intuitive UX (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="https://learnui.design/blog/4-rules-intuitive-ux.html">Source originale du contenu</a></h3>
  445. <p>This is my advice on improving the UX of your designs WITHOUT hours of user research sessions, paper prototyping playtime, or any other trendy UX buzzwords.</p>
  446. <p>(Seriously, search “design thinking”. 0 results. <em>Nailed it</em>!)</p>
  447. <p>Who’s this article for? I’m looking at you:</p>
  448. <ul>
  449. <li><strong>Developers</strong>. You created your own app, but every time someone downloads it, they struggle to use it. And you know if they’re telling you this, then it’s <em>really</em> bad.</li>
  450. <li><strong>Graphic designers</strong>. Looking to make the transition into digital, but trying to learn UX by reading articles online is… a very painful way to die 😬</li>
  451. <li><strong>PMs</strong>. Your job is already like 25% UX designer. Would be nice to level up those skills.</li>
  452. <li><strong>And the hustlers</strong>. Anyone working on digital side projects nights/weekends. This one’s for you too 🍻</li>
  453. </ul>
  454. <p>If you’re already a UX designer, I don’t expect this article to go over super well with you. I’m basically skipping over entire chunks of our field in favor of focusing entirely on <strong>the single most lacking skill in aspiring UX designers</strong> (or UX-adjacent folks who find themselves designing screens).</p>
  455. <p>I call it “<strong>speaking interface</strong>”.</p>
  456. <p>When I started as a professional UX designer, I was <em>shocked</em> how many times my clients would hand me the initial wireframes (or the living, breathing, in-browser MVP) and there’d be <strong><em>completely obvious UX mistakes</em></strong> all over them. I’m not talking about things you need hours of research and A/B testing to discover. I’m talking, like, <em>dead simple</em> mistakes.</p>
  457. <p>For lack of a better example:</p>
  458. <blockquote style="margin: 0 auto;" class="twitter-tweet"><p lang="en" dir="ltr">Somewhere out there, there&#39;s a team that knows HTML, but doesn&#39;t know the difference between a radio button and a checkbox. <a href="https://t.co/VBwk8Jxekd">pic.twitter.com/VBwk8Jxekd</a></p>&mdash; Erik D. Kennedy (@erikdkennedy) <a href="https://twitter.com/erikdkennedy/status/867412999115464705?ref_src=twsrc%5Etfw">May 24, 2017</a></blockquote>
  459. <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
  460. <p>Now my clients weren’t <em>this</em> bad, but <em>look </em>- you don’t need to be Bret Victor to understand that if you can only select ONE thing from a list, you need RADIO BUTTONS, not checkboxes. To understand <em>that</em>, you just need to be able to <em><strong>speak interface</strong></em>. And that’s the craziest thing to me. Interface fluency is something <em>anyone</em> can achieve. You don’t need college, you don’t need Lambda school, yadda yadda.</p>
  461. <p>Frankly, you just need the <strong>presence of mind</strong> to (A) pause every single time you’re confused or frustrated by some app, (B) verbalize <em>what</em> about the interface makes you confused/frustrated/etc., and then (C) figure out how you could avoid that specific snafu that in your own designs.</p>
  462. <p>Rinse and repeat that non-stop and you’ll be a pro in no time.</p>
  463. <p>What I want to talk about today is <strong>four little rules</strong> that will help eliminate these pain points in your own designs. They’re the heuristics that are a level or two deeper than “use radio buttons if the user can only select one thing”. But, if you can remember to obey the things in this checklist, you’ll be that much closer to creating designs that your users can use easily right off the bat, freeing up your time for other, more important things.</p>
  464. <p>(That’s when the other UX designers can lecture you on the newest academic user research methodologies!)</p>
  465. <p>Here’s what we’ll be covering:</p>
  466. <ol>
  467. <li><a href="#1-obey-the-law-of-locality">Obey the Law of Locality</a></li>
  468. <li><a href="#2-abd-anything-but-dropdowns">ABD: Anything But Dropdowns</a></li>
  469. <li><a href="#3-pass-the-squint-test">Pass the Squint Test</a></li>
  470. <li><a href="#4-teach-by-example">Teach by example</a></li>
  471. </ol>
  472. <p>Any questions? Let’s dive right in.</p>
  473. <h2 id="1-obey-the-law-of-locality">1. Obey the Law of Locality</h2>
  474. <p><em>Put interface elements where they affect change.</em></p>
  475. <p>All else being equal, you should put the elements in your interface <em>near where they affect change</em>. This is because, when a user wants to make a change to the system, <strong>they will unwittingly <em>glance at where that change will happen</em></strong>.</p>
  476. <p>So, let’s say you have a list of <em>things</em>. Where do you put the “ADD A NEW THING” button?</p>
  477. <figure class="post__figure">
  478. <img src="https://learnui.design/blog/img/4-rules/lol-where.png" alt="law of locality in playlist illustration" />
  479. </figure>
  480. <p>Q: Well, where does the <em>change</em> happen?</p>
  481. <p>A: At the end of the list.</p>
  482. <p>Great, put the button at the end of the list.</p>
  483. <p>WAIT. You’d think this would be pretty simple. But there’s a <em>temptation</em>.</p>
  484. <p><strong>The temptation is to just put it <em>where we have space for it</em>.</strong></p>
  485. <p>For instance, if you have a menu, maybe you’d think “We have a menu! Why not just put it in the menu!?”</p>
  486. <figure class="post__figure">
  487. <img src="https://learnui.design/blog/img/4-rules/lol-menu-no.png" alt="the law of locality violated in a music UI" />
  488. </figure>
  489. <p>The answer is, of course, because <strong>users won’t look for it there</strong>.</p>
  490. <p>(And the ultimate answer is that having a place where “we just put things” will ultimately render your app an unusable mess that people will abandon the first chance they see a half-viable alternative)</p>
  491. <p>Don’t think I’m joking. Have you ever noted <em>this</em> interface?</p>
  492. <figure class="post__figure">
  493. <img src="https://learnui.design/blog/img/4-rules/lol-evernote.png" alt="the law of locality violated in evernote's interface" />
  494. </figure>
  495. <p>An equally-bad/common alternative is to just take a solution that you’ve seen applied by A Respected Tech Company without any thought as to if it makes sense for <em>you</em>. “We need an ‘Add’ button? I’ve seen one of those. Hold my beer!”</p>
  496. <figure class="post__figure">
  497. <img src="https://learnui.design/blog/img/4-rules/lol-fab-no.png" alt="the law of locality violated with a floating action button" />
  498. </figure>
  499. <p>Look. Another button in a place users <strong><em>will never look for it</em></strong>. To compound things, users will suspect <em>this</em> button actually adds a new whatever-is-currently-displayed-on-the-big-blank-white-space. Because that’s where the control <em>is</em>.</p>
  500. <p>Your users <em>want</em> you to follow the Law of Locality.</p>
  501. <p>So, now that we know it, let’s use it.</p>
  502. <figure class="post__figure">
  503. <img src="https://learnui.design/blog/img/4-rules/lol-bottom-of-list.png" alt="the law of locality in a list of music playlists" />
  504. </figure>
  505. <p>Bam.</p>
  506. <p>But maybe you’re a born UX designer and <strong>you always visualize what happens when there’s 1000 items instead of 5</strong> and you realize: <em>there’s still an issue here</em>. If the user creates a TON of playlists, this button will disappear hundreds of pixels offscreen!</p>
  507. <p>So maybe you could anchor the button <em>near the bottom of the list</em>, but have it <em>always be visible</em>, no matter how many hundreds of playlists the user has created.</p>
  508. <figure class="post__figure">
  509. <img src="https://learnui.design/blog/img/4-rules/lol-spotify-new-bottom.png" alt="the law of locality in Spotify's UI" />
  510. <figcaption class="post__figcaption">For bonus points, (1) use the inline button UNTIL it's about to go offscreen, and at that point switch to the anchored solution and (2) make it more visible than Spotify's button, which took me months to notice while I haplessly right-clicked individual songs to add them to my playlists!</figcaption>
  511. </figure>
  512. <p>Brilliant! And this is what Spotify has done.</p>
  513. <p>Another possibility is to say “Hey, we can’t <em>reliably and consistently</em> show the button at the bottom of the list. Where’s the <em>nearest logical place</em> to put it?”</p>
  514. <p>And the answer is, (I think pretty obviously) <em>the top of the list</em>.</p>
  515. <figure class="post__figure">
  516. <img src="https://learnui.design/blog/img/4-rules/lol-spotify-new-top.png" alt="the law of locality obeyed in Spotify's UI" />
  517. <figcaption class="post__figcaption">I wish.</figcaption>
  518. </figure>
  519. <p>Sacrebleu! This is actually just what Spotify-competitor Rdio did, before they were acqui-shut-down by Pandora.</p>
  520. <figure class="post__figure">
  521. <img src="https://learnui.design/blog/img/4-rules/lol-rdio.png" alt="law of locality obeyed in rdio's UI" />
  522. <figcaption class="post__figcaption">Reconstructed from memory (like all reality, if you think about it)</figcaption>
  523. </figure>
  524. <p>The lesson here is clear. Never sell your company, and always always obey the Law of Locality.</p>
  525. <p>(There are actually 3 laws of locality, and “Put UI elements where they affect change” is only the first. If you’re interested, read more <a href="the-3-laws-of-locality.html">here</a>)</p>
  526. <p>Next!</p>
  527. <h2 id="2-abd-anything-but-dropdowns">2. ABD: Anything but Dropdowns</h2>
  528. <p><em>Any time you feel tempted to use a dropdown, ask yourself if one of these 12 controls is better instead.</em></p>
  529. <p>One <strong>non-obvious lesson of UX design</strong> is that <strong>dropdowns</strong> are pretty much the <strong>worst control</strong>.</p>
  530. <figure class="post__figure">
  531. <img src="https://learnui.design/blog/img/4-rules/dropdown-hell.png" alt="3 dropdowns to specify one simple date" />
  532. <figcaption class="post__figcaption">Welcome to hell!</figcaption>
  533. </figure>
  534. <p>They’re not <em>always</em> bad, but you’re working against the following:</p>
  535. <ul>
  536. <li>Dropdowns take <strong>too many clicks/taps</strong>. One to open, a few more to scroll around to the right option (on mobile), another to select the right option, and (on mobile) another to close. (Compare to the <em>single click use-cases</em> of many of the options listed below)</li>
  537. <li>Dropdowns <strong>don’t show you the options</strong>! You have to click into them to see the possible values, and on mobile, you can often only see a couple at a time.</li>
  538. <li>Long dropdowns are <strong>ridiculous to navigate</strong>. A country dropdown for an app used worldwide could have 195+ countries. At some point, almost <em>any other method</em> of asking a user their country would be quicker than having them scroll through a dropdown (“Smoke signals?” AGCKKHKGH).</li>
  539. </ul>
  540. <p>This is pretty straightforward, so let’s just cover some examples for the various major cases of dropdown replacement.</p>
  541. <h3 id="if-youre-choosing-between-2options">If you’re choosing between 2 options…</h3>
  542. <p>We already have some fantastic options for allowing users to choose 1 of 2 things, all of which (A) show the options right away and (B) require fewer taps/clicks.</p>
  543. <p>For questions to which there is no “default” answer, and either might be picked with roughly equal frequency, try a <strong>segmented button</strong>.</p>
  544. <figure class="post__figure">
  545. <img src="https://learnui.design/blog/img/4-rules/dropdown-two-segment.png" alt="segmented button instead of dropdown control" />
  546. </figure>
  547. <p>If there is a “default state” that corresponds to “Off”, try a <strong>checkbox</strong>. A checkbox is also good for settings that don’t affect change <em>until the user presses Save or Submit</em>.</p>
  548. <figure class="post__figure">
  549. <img src="https://learnui.design/blog/img/4-rules/dropdown-two-checkbox.png" alt="checkbox instead of dropdown control" />
  550. </figure>
  551. <p>Similar to the checkbox is the <strong>switch</strong>, which is good for changes that should apply <em>immediately</em>.</p>
  552. <figure class="post__figure">
  553. <img src="https://learnui.design/blog/img/4-rules/dropdown-two-switch.png" alt="switch instead of dropdown control" />
  554. </figure>
  555. <p>Checkboxes and switches <em>only</em> make sense when there are two options. However, the following controls make sense for 2 to roughly 5 options, so you might try some of the following instead.</p>
  556. <h3 id="if-youre-choosing-between-25options">If you’re choosing between 2–5 options…</h3>
  557. <p>We covered <strong>segmented buttons</strong> above (and they apply here too) but it’s worth mentioning that when there are more options, <strong>vertical segmented buttons</strong> allow even more flexibility of answer length.</p>
  558. <figure class="post__figure">
  559. <img src="https://learnui.design/blog/img/4-rules/dropdown-few-segment.png" alt="vertical segmented button instead of dropdown control" />
  560. </figure>
  561. <p><strong>Radio buttons</strong> are similar, but particularly useful if you need to display a couple sub-elements for each choice.</p>
  562. <figure class="post__figure">
  563. <img src="https://learnui.design/blog/img/4-rules/dropdown-few-radio.png" alt="radio button instead of dropdown control" />
  564. </figure>
  565. <p>For detailed displays of just a few choices, <strong>cards</strong> are where it’s at.</p>
  566. <figure class="post__figure">
  567. <img src="https://learnui.design/blog/img/4-rules/dropdown-few-cards.png" alt="cards instead of dropdown control" />
  568. </figure>
  569. <p>One trick I like is displaying <strong>visual options</strong> literally.</p>
  570. <figure class="post__figure">
  571. <img src="https://learnui.design/blog/img/4-rules/dropdown-tesla-visual.png" alt="visual options instead of dropdown control" />
  572. <figcaption class="post__figcaption">Tesla likes it too, apparently.</figcaption>
  573. </figure>
  574. <h3 id="if-youre-choosing-between-manyoptions">If you’re choosing between many options…</h3>
  575. <p>When there are enough options that scrolling through them is annoying, consider a <strong>typeahead</strong> control. It’s like a search bar that shows top matching results as you type.</p>
  576. <figure class="post__figure">
  577. <img src="https://learnui.design/blog/img/4-rules/dropdown-many-typeahead.png" alt="typeahead control instead of dropdown control" />
  578. </figure>
  579. <h3 id="if-youre-choosing-adate">If you’re choosing a date…</h3>
  580. <p>Picking a date from dropdowns is the <em>worst</em>. If I ever do this, then I’ve <em>really</em> failed as a UX designer.</p>
  581. <figure class="post__figure">
  582. <img src="https://learnui.design/blog/img/4-rules/dropdown-dates-dont.png" alt="don't use dropdown controls for choosing dates" />
  583. </figure>
  584. <p>But what do you use instead? Well, it depends. First question: what <em>type of date are you picking</em>?</p>
  585. <ol>
  586. <li><strong>Poisson dates</strong>. Dates <em>most likely to be in the near future</em>, tapering off as you go farther into the future (or nearer to the present), e.g. date of an appointment you’re scheduling, date of a flight you’re purchasing</li>
  587. <li><strong>High-variability dates</strong>. Dates that have a <em>similar probability of being anywhere in a wide range of time</em>, e.g. date of birth, day-and-month of your birthday</li>
  588. </ol>
  589. <p>(Yes, I named “Poisson dates” after the <a href="https://en.wikipedia.org/wiki/Poisson_distribution" target="_blank">mathematical distribution</a> 🤓)</p>
  590. <p>For different types of date-picking, you should use different controls.</p>
  591. <figure class="post__figure">
  592. <img src="https://learnui.design/blog/img/4-rules/dropdown-dates-chart.png" alt="chart of poisson vs. wide-range dates" />
  593. </figure>
  594. <p>For Poisson dates, you want to make it DEAD SIMPLE to pick dates in the most common range (e.g. for scheduling an appointment, it might be the next, say, 14 days). It’s perfectly OK if picking dates outside of that range is a little tougher.</p>
  595. <p>A <strong>calendar control</strong> fits the bill rather well for Poisson dates. If you know the date to-be-picked is most likely in the next 2–4 weeks, you’re golden.</p>
  596. <figure class="post__figure">
  597. <img src="https://learnui.design/blog/img/4-rules/dropdown-date-calendar.png" alt="calendar control instead of dropdown control" />
  598. </figure>
  599. <p>Rather creatively, <a href="https://www.google.com/flights" target="_blank">Google Flights</a> <em>defaults</em> to you selecting a flight roughly 2 weeks in the future, which is perhaps an opportunity for confusion (“I didn’t choose this!”), but probably a better date to default to, and closer to the hump in the Poisson curve.</p>
  600. <figure class="post__figure">
  601. <img src="https://learnui.design/blog/img/4-rules/dropdown-google-flights.png" alt="Google Flights defaults to hump in Poisson distribution fo flight dates" />
  602. </figure>
  603. <p><strong>Date text inputs</strong> are probably the best option for high-variability dates, where (A) there’s no reason to favor any date over another, meaning (B) all options will be equally difficult to select.</p>
  604. <figure class="post__figure">
  605. <img src="https://learnui.design/blog/img/4-rules/dropdown-date-text.png" alt="date text input instead of dropdown control" />
  606. <figcaption class="post__figcaption">Remember, input[type=date] is your friend… on desktop, at least</figcaption>
  607. </figure>
  608. <h3 id="if-youre-choosing-anumber">If you’re choosing a number…</h3>
  609. <p>Numbers come in all kinds of flavors, but you’re most likely to be tempted to use dropdowns when you’re dealing with <strong><em>counts </em></strong>- e.g. the number of <em>tickets</em>, the number of <em>people</em>, the number of <em>rooms</em>, etc.</p>
  610. <p>How often do you need 1 ticket? <em>Plenty</em>.</p>
  611. <p>How often do you need 10 tickets? <em>Not so much</em>.</p>
  612. <p>How often do you need 10,000 tickets? <em>Is this some kind of cruel joke?</em></p>
  613. <p>For counts of things, you’re also dealing with Poisson distributions, and should use a control that biases towards lower numbers - like a <strong>stepper</strong>.</p>
  614. <figure class="post__figure">
  615. <img src="https://learnui.design/blog/img/4-rules/dropdown-number-stepper.png" alt="stepper control instead of dropdown control" />
  616. </figure>
  617. <p>For wide-range numbers (like, say, SSNs), you weren’t going to use a dropdown anyways… <em>I hope</em>.</p>
  618. <h3 id="so-can-i-ever-use-a-dropdown">So can I ever use a dropdown?</h3>
  619. <p>Sure.</p>
  620. <p>Remember, they work OK when…</p>
  621. <ul>
  622. <li>Users <strong>rarely need to change the default</strong> value</li>
  623. <li>There are <strong>very few options</strong> - e.g. only 3 will be visible on the default iOS control</li>
  624. <li>The user is <strong>not on mobile</strong> (whereby many of these problems are mitigated)</li>
  625. </ul>
  626. <p>The particularly observant among you may have noticed that the Google Flights interface I lauded above actually has <strong>three prominent dropdowns</strong>!</p>
  627. <figure class="post__figure">
  628. <img src="https://learnui.design/blog/img/4-rules/dropdown-google-flights.gif" alt="dropdown controls on google flights" />
  629. <figcaption class="post__figcaption">Brilliant detail: on mobile, the 'Economy' dropdown is removed.</figcaption>
  630. </figure>
  631. <p>They actually do a great job with this. The potential usability issues are swiftly mitigated with:</p>
  632. <ul>
  633. <li><strong>Custom controls</strong> that show all options on tap (including on mobile) – and replace 4 dropdowns (for Adults, Children, and Seated Infants and Lap Infants) with <strong>4 steppers in a single dropdown</strong>.</li>
  634. <li><strong>Removing</strong> the “Economy” dropdown on mobile</li>
  635. <li><strong>Few options</strong> and <strong>smart defaults</strong> for each control</li>
  636. </ul>
  637. <p>If you want to print this section out and stick it on your wall, I’ve created a <a href="../extras/selection-controls-ux-checklist.html" target="_blank">printable cheatsheet</a> of dropdown replacements.</p>
  638. <p>Anyhow. Let’s move on.</p>
  639. <h2 id="3-pass-the-squint-test">3. Pass the Squint Test</h2>
  640. <p><em>If you squint your eyes, the Most Important Thing should catch your eye first - and the least important elements should catch your eye last.</em></p>
  641. <p>Pop quiz: what does a user need to do to <em>use this page</em>?</p>
  642. <p>(NB: I’ve blurred it out so you have to go by gut instinct, but it’s a data entry form, to give you a hint)</p>
  643. <figure class="post__figure">
  644. <img src="https://learnui.design/blog/img/4-rules/squint-ak1-blur.png" alt="blurred out version of a train ticketing ui" />
  645. </figure>
  646. <p>My best guess is <strong>two things</strong>:</p>
  647. <ol>
  648. <li>Check any <strong>applicable checkboxes</strong> (??) in the yellow area</li>
  649. <li>Press the <strong>blue “Submit” button</strong></li>
  650. </ol>
  651. <p>Did you guess the same?</p>
  652. <p>Wrong and wrong.</p>
  653. <figure class="post__figure">
  654. <img src="https://learnui.design/blog/img/4-rules/squint-ak1.png" alt="train ticketing ui violates squint test" />
  655. </figure>
  656. <ol>
  657. <li>The “checkboxes” are actually very small numerical text inputs. (If you already read Anything But Dropdowns, you know Poisson numbers should be steppers)</li>
  658. <li>The <strong>Most Important Thing</strong> (“Find Options” – which is a very confusing way to say “Submit”, by the way) is <strong>gray and unnoticeable</strong>. A much <em>less</em> important thing (“Help”) is immediately next it, but bigger and <em>more</em> visible.</li>
  659. </ol>
  660. <p>The Squint Test says the <em>Most Important Thing</em> must be the <em>most visible thing</em>. What’s the MIT? The ticket textbox (or stepper 😉) controls and “Submit” button.</p>
  661. <p>If you make it past this page, the next page is even worse.</p>
  662. <figure class="post__figure">
  663. <img src="https://learnui.design/blog/img/4-rules/squint-ak2-blur.png" alt="blurred out version of a train ticketing ui" />
  664. </figure>
  665. <p>What will you click: gray button the <em>left</em>, or identical gray button on the <em>right</em>?</p>
  666. <p>Hope you chose left!</p>
  667. <figure class="post__figure">
  668. <img src="https://learnui.design/blog/img/4-rules/squint-ak2.png" alt="train ticketing ui violating the squint test" />
  669. <figcaption class="post__figcaption">In rushing through this form, I actually clicked 'help' first. Oops. My second time on this page, I clicked 'Go Back', having processed there was an 'Add' and 'Go Back' button, and in the other 99.999% of (left-to-right language) websites, 'Go Back' is always on the left.</figcaption>
  670. </figure>
  671. <p>Again, <em>when I squint my eyes and look at the design, I can’t tell what’s important</em>.</p>
  672. <p>Like the Law of Locality and Anything But Dropdowns, the Squint Test is a fairly simple law to enforce. Here’s like a 30-second wireframey redesign.</p>
  673. <figure class="post__figure">
  674. <img src="https://learnui.design/blog/img/4-rules/squint-ak2-redesign.png" alt="wireframe redesign of a train ticketing ui to pass the squint test" />
  675. <figcaption class="post__figcaption">In a real redesign, I'd also want to consider allowing the user to specify number of tickets ON THIS PAGE. But that's another law for another time.</figcaption>
  676. </figure>
  677. <p>Does it work?</p>
  678. <figure class="post__figure">
  679. <img src="https://learnui.design/blog/img/4-rules/squint-ak2-redesign-blur.png" alt="blurred out version of a train ticketing ui wireframe reddesign to pass the squint test" />
  680. </figure>
  681. <p>You tell me. Four radios and a button. And a tiny little link below it.</p>
  682. <p>I’m not trying to pick on AlaskaTrain.com. You see this kind of stuff all over.</p>
  683. <p>Here’s the signup screen for my beloved recommendation-based social network, Foursquare (blurred, of course).</p>
  684. <figure class="post__figure">
  685. <img src="https://learnui.design/blog/img/4-rules/foursquare-blur.png" alt="blurred out foursquare ui" />
  686. </figure>
  687. <p>How do you actually submit the required data? (i.e. the Most Important Thing)</p>
  688. <p>Hint: it’s hidden in plain text in the upper-right corner.</p>
  689. <figure class="post__figure">
  690. <img src="https://learnui.design/blog/img/4-rules/squint-foursquare.png" alt="foursquare ui redesigned to pass squint test" />
  691. </figure>
  692. <p>But Foursquare is just following Apple’s design standards here. Unfortunately, violating the Squint Test is a tradition even among industry leaders.</p>
  693. <figure class="post__figure">
  694. <img src="https://learnui.design/blog/img/4-rules/squint-calendar.png" alt="ios calendar app failing the squint test" />
  695. </figure>
  696. <p>One way to find the Most Important Thing is to consider what percentage of pageviews will involve a certain action. Here’s flashcard/memorization software Anki analyzed in this way.</p>
  697. <figure class="post__figure">
  698. <img src="https://learnui.design/blog/img/4-rules/squint-anki.png" alt="action frequency analysis of Anki UI" />
  699. </figure>
  700. <p>For every 100 flashcards I view, I will <em>then go on to…</em></p>
  701. <ul>
  702. <li>Show the answer (approx. 95 times)</li>
  703. <li>Navigate back to the list of decks (twice)</li>
  704. <li>Start adding cards (twice)</li>
  705. <li>Use some other feature (very rarely)</li>
  706. </ul>
  707. <p>This sort of analysis really hints at what kind of interface would work better here.</p>
  708. <ul>
  709. <li><strong>Emphasize</strong> the most-commonly used functionality (at first approximation, “most used” equals “most important”)</li>
  710. <li><strong>Deemphasize, hide, or remove</strong> the less commonly used functionality</li>
  711. </ul>
  712. <figure class="post__figure">
  713. <img src="https://learnui.design/blog/img/4-rules/squint-anki-redesign.png" alt="wireframe redesign of Anki UI to pass the squint test" />
  714. </figure>
  715. <p>Now this is just a start (I’d want to see if users understood that the unlabelled plus button <em>added cards</em>, for instance). But with just a couple simple heuristics, we’ve reduced a cluttered, confusing interface of 10 UI elements down to just 5. A reduction of… check my math here… 50%.</p>
  716. <p>For more on the Squint Test, check out my YouTube <a href="https://youtu.be/B4XHaboNMOI" target="_blank">video redesign</a> of the Timezon.es web app. Or, if you don’t have 10 minutes, here’s a <a href="squint-test-ui-design-case-study.html">scannable, illustrated blog post</a> with the same step-by-step redesign.</p>
  717. <iframe width="560" height="315" src="https://www.youtube.com/embed/B4XHaboNMOI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
  718. <h2 id="4-teach-by-example">4. Teach by example</h2>
  719. <p><em>If you’re introducing users to new concepts, a few examples can be worth 1000 words - which your users wouldn’t read, anyways.</em></p>
  720. <p>We have a weird tendency to try and explain things <em>in words</em> when <em>examples</em> would be much clearer.</p>
  721. <p>Consider the new startup Teeming.ai, who recently reached out to me to ask about their homepage design. Headlines on the page read:</p>
  722. <ul>
  723. <li>“Teeming takes the <strong>isolation out of remote work</strong>”</li>
  724. <li>“Teeming helps with <strong>remote team building</strong>” as well as “<strong>learning, problem solving, having fun, and motivating each other</strong>”</li>
  725. <li>“Teeming and video for <strong>synchronous [communication]</strong>”</li>
  726. <li>“Works with all your <strong>favorite video platforms</strong>”</li>
  727. </ul>
  728. <p>But here’s my question for you. <strong><em>What does Teeming actually do?</em></strong></p>
  729. <figure class="post__figure">
  730. <img src="https://learnui.design/blog/img/4-rules/tbe-teeming-1.png" alt="teeming.ai UI doesn't teach by example" />
  731. </figure>
  732. <p>It’s tough to tell. I know it has something to do with… <em>good vibes for remote workers</em>? But I have no concrete idea how it would help me, so I wouldn’t otherwise try it, recommend it, etc.</p>
  733. <p>(Sorry Teeming, you know I ❤️ you)</p>
  734. <p>Next, let’s look at <a href="https://ifttt.com/" target="_blank">IFTTT</a>. Maybe you already know what they do - in which case, <em>pretend you don’t</em>, and try to figure it out from these headlines on their homepage:</p>
  735. <ul>
  736. <li>Automatically light the way for the pizza delivery guy (Dominoes+Hue)</li>
  737. <li>Post your photo anywhere and see it everywhere (Instagram+twitter)</li>
  738. <li>Make your voice assistant more personal (Google Assistant+iOS Calendar)</li>
  739. </ul>
  740. <figure class="post__figure">
  741. <img src="https://learnui.design/blog/img/4-rules/tbe-ifttt-1.png" alt="IFTTT UI teaches by example" />
  742. </figure>
  743. <figure class="post__figure">
  744. <img src="https://learnui.design/blog/img/4-rules/tbe-ifttt-2.png" alt="IFTTT UI teaches by example" />
  745. </figure>
  746. <figure class="post__figure">
  747. <img src="https://learnui.design/blog/img/4-rules/tbe-ifttt-3.png" alt="IFTTT UI teaches by example" />
  748. </figure>
  749. <p>You don’t have to list too many examples to paint a decently clear picture: <em>IFTTT hooks apps together to do things they couldn’t do alone</em>.</p>
  750. <p>The crazy part is, if you visit their homepage, they first explain it in text:</p>
  751. <p><em>IFTTT helps your apps and devices work together in new ways. IFTTT is the free way to get all your apps and devices talking to each other. Not everything on the internet plays nice, so we’re on a mission to build a more connected world.</em></p>
  752. <p>YAAAAWN.</p>
  753. <p>My question: <strong>which gives you a better idea of the app?</strong> The examples, or the description? 🤔</p>
  754. <p>I think it’s the <em>examples</em>. The description only resonates once I see a few examples of how it can help me.</p>
  755. <blockquote>
  756. <p>The description of your complex new app/feature only resonates once I see a few examples of how it can help me.</p>
  757. </blockquote>
  758. <p>But examples aren’t just for landing pages. Here’s what you see when you first sign into project management tool <a href="https://basecamp.com/" target="_blank">Basecamp</a>.</p>
  759. <figure class="post__figure">
  760. <img src="https://learnui.design/blog/img/4-rules/tbe-basecamp-1.png" alt="Basecamp UI teaches by example" />
  761. </figure>
  762. <p>Rather than seeing a totally blank page, you see <em>two obviously pre-fabricated example projects</em> that <strong>teach you, by example, how the whole app works</strong> (and also gives you an idea of what the tool will look and feel like when you’ve been using it a while).</p>
  763. <p>Seriously, I can browse through fake <em>chat logs</em> by fake <em>users</em> discussing fake <em>file uploads</em> and fake <em>to-do items</em>.</p>
  764. <figure class="post__figure">
  765. <img src="https://learnui.design/blog/img/4-rules/tbe-basecamp-2.png" alt="Basecamp UI teaches by example" />
  766. </figure>
  767. <p>There’s even a friendly… <em>mountain?</em>… telling me I can watch a 2-minute explanatory video about this sample project.</p>
  768. <p>And thank you, Mr. Mountain, for the lead-in: <em>providing videos showing usage is another way of teaching by example</em>! Not only does the sample project model teach by example what my projects will look/feel like, but the video teaches by example what it looks like to <em>use</em> the software.</p>
  769. <p>Brilliant.</p>
  770. <p>If your app allows users to <em>create</em> something, a <strong>showcase</strong> is a great way to teach by example just what’s possible.</p>
  771. <p>The beloved painting app <a href="https://procreate.art" target="_blank">Procreate</a> won an Apple Design Award, the App Store Editor’s Choice, the App Store Essential awards, and John Gruber called it “groundbreaking”, etc. – and yet none of this is as <em>viscerally</em> exciting as seeing what you can create with it.</p>
  772. <figure class="post__figure">
  773. <img src="https://learnui.design/blog/img/4-rules/tbe-procreate.png" alt="Procreate gallery UI teaches by example" />
  774. <figcaption class="post__figcaption">This ain't no ordinary painting app.</figcaption>
  775. </figure>
  776. <p>Whoa.</p>
  777. <p>That’s no MS Paint.</p>
  778. <p>The showcase is a <strong>powerful tool</strong> for making it clear just what’s possible with your app.</p>
  779. <p>So: if your app does something new and unfamiliar – or relies on new and unfamiliar concepts – you should get acquainted with <strong>the ways of teaching by example</strong>. The <em>moment you realize</em> that you’re introducing users won’t have seen before, you should start thinking: <em>how can I give an example to make this clearer</em>?</p>
  780. <blockquote>
  781. <p>The moment you realize that you’re introducing users won’t have seen before, you should start thinking: how can I give an example to make this clearer?</p>
  782. </blockquote>
  783. <p>In review, my favorite ways of doing this:</p>
  784. <ol>
  785. <li>On any page that tries to get the user to use a feature/app/etc., show examples of what they can do with your tool</li>
  786. <li>Use the “first load” experience to provide sample data, showing by example what the properly-working app will look like</li>
  787. <li>Strategically inject help content (like articles, videos, or tooltips) inline with the feature that show how to use it</li>
  788. <li>Does your app allow users to create something? Include a user-submitted gallery of examples to spur imaginations</li>
  789. </ol>
  790. <p>Make sense? Let’s call it a day.</p>
  791. </article>
  792. </section>
  793. <nav id="jumpto">
  794. <p>
  795. <a href="/david/blog/">Accueil du blog</a> |
  796. <a href="https://learnui.design/blog/4-rules-intuitive-ux.html">Source originale</a> |
  797. <a href="/david/stream/2019/">Accueil du flux</a>
  798. </p>
  799. </nav>
  800. <footer>
  801. <div>
  802. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  803. <p>
  804. Bonjour/Hi!
  805. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  806. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  807. </p>
  808. <p>
  809. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  810. </p>
  811. <p>
  812. Voici quelques articles choisis :
  813. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  814. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  815. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  816. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  817. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  818. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  819. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  820. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  821. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  822. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  823. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  824. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  825. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  826. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  827. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  828. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  829. </p>
  830. <p>
  831. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  832. </p>
  833. <p>
  834. Je ne traque pas ta navigation mais mon
  835. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  836. conserve des logs d’accès.
  837. </p>
  838. </div>
  839. </footer>
  840. <script type="text/javascript">
  841. ;(_ => {
  842. const jumper = document.getElementById('jumper')
  843. jumper.addEventListener('click', e => {
  844. e.preventDefault()
  845. const anchor = e.target.getAttribute('href')
  846. const targetEl = document.getElementById(anchor.substring(1))
  847. targetEl.scrollIntoView({behavior: 'smooth'})
  848. })
  849. })()
  850. </script>