A place to cache linked articles (think custom and personal wayback machine)
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.html 35KB

před 5 roky
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  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>Replacing The User Story With The Job Story (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://jtbd.info/replacing-the-user-story-with-the-job-story-af7cdee10c27">
  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. Replacing The User Story With The Job Story (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://jtbd.info/replacing-the-user-story-with-the-job-story-af7cdee10c27">Source originale du contenu</a></h3>
  445. <p name="7e8d" id="7e8d" class="graf graf--p graf--leading">I’ve written about <a href="http://alanklement.blogspot.com/2013/03/the-problem-with-user-stories-and-whats.html" data-href="http://alanklement.blogspot.com/2013/03/the-problem-with-user-stories-and-whats.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">the problem with user stories before</a>. At the time, I found it better to just have the team talk over proposed changes to the product. This worked great when the team had gelled and the product is very mature; however, now I’m working with a new team and building a product from scratch. In this case, because our canvas is blank, we are having trouble getting on the same page when it comes to customer motivations, events and expectations. <strong class="markup--strong markup--p-strong">But today, things have turned around. </strong>I’ve come across a great way to use the jobs to be done philosophy to help define features.<br>I call them <em class="markup--em markup--p-em">Job Stories.</em></p>
  446. <h4 name="5bb2" id="5bb2" class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">Where It Comes From</strong></h4>
  447. <p name="66a7" id="66a7" class="graf graf--p graf-after--h4">The idea comes from the <a href="http://insideintercom.io/the-dribbblisation-of-design/" data-href="http://insideintercom.io/the-dribbblisation-of-design/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">really smart people at intercom</a>. Here is what is they say:</p>
  448. <blockquote name="2e55" id="2e55" class="graf graf--blockquote graf-after--p"><em class="markup--em markup--blockquote-em">We frame every design problem in a Job, focusing on the triggering event or situation, the motivation and goal, and the intended outcome:</em></blockquote>
  449. <blockquote name="56ff" id="56ff" class="graf graf--blockquote graf-after--blockquote"><em class="markup--em markup--blockquote-em">When _____ , I want to _____ , so I can _____ .</em></blockquote>
  450. <blockquote name="edc9" id="edc9" class="graf graf--blockquote graf-after--blockquote"><em class="markup--em markup--blockquote-em">For example: When an important new customer signs up, I want to be notified, so I can start a conversation with them.</em></blockquote>
  451. <p name="a1a8" id="a1a8" class="graf graf--p graf-after--blockquote">It’s not referred to as a <em class="markup--em markup--p-em">Job Story </em>in the article, but I’ll call it that so I can easily reference it in the future.<br>The article doesn’t spend a whole lot of time with the concept, so I’ll talk about why I like it and why it’s better than <em class="markup--em markup--p-em">User Stories.</em></p>
  452. <h4 name="7324" id="7324" class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">The Problem (Again) With User Stories</strong></h4>
  453. <p name="cb1d" id="cb1d" class="graf graf--p graf-after--h4">Summed up, the problem with user stories is that it’s too many assumptions and doesn’t acknowledge causality. When a task is put in the format of a user story ( <strong class="markup--strong markup--p-strong">As a [type of user], I want [some action], so that [outcome] </strong>) there’s no room to ask ‘why’ — you’re essentially locked into a particular sequence with no context.</p>
  454. <p name="47e7" id="47e7" class="graf graf--p graf-after--p">Here’s how I see the format:</p>
  455. <figure name="c745" id="c745" class="graf graf--figure graf-after--p"><div class="aspectRatioPlaceholder is-locked" style="max-width: 700px; max-height: 470px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 67.10000000000001%;"></div><div class="progressiveMedia js-progressiveMedia graf-image" data-image-id="1*lwr2g0HvLOVr5IPVNoYxLg.png" data-width="1024" data-height="687" data-action="zoom" data-action-value="1*lwr2g0HvLOVr5IPVNoYxLg.png"><img src="https://cdn-images-1.medium.com/freeze/max/60/1*lwr2g0HvLOVr5IPVNoYxLg.png?q=20" crossorigin="anonymous" class="progressiveMedia-thumbnail js-progressiveMedia-thumbnail"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" data-src="https://cdn-images-1.medium.com/max/1600/1*lwr2g0HvLOVr5IPVNoYxLg.png"><noscript class="js-progressiveMedia-inner"><img class="progressiveMedia-noscript js-progressiveMedia-inner" src="https://cdn-images-1.medium.com/max/1600/1*lwr2g0HvLOVr5IPVNoYxLg.png"></noscript></div></div><figcaption class="imageCaption">Assumptions and disconnect between their persona and action</figcaption></figure>
  456. <p name="6641" id="6641" class="graf graf--p graf-after--figure">The first problem is that we start with a <em class="markup--em markup--p-em">Persona, </em>which is a <a href="http://alanklement.blogspot.com/2013/03/focus-on-relationships-skip-personas.html" data-href="http://alanklement.blogspot.com/2013/03/focus-on-relationships-skip-personas.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">very bad idea</a>, and then plop in an action which we <strong class="markup--strong markup--p-strong">think </strong>should be taken in order to achieve the expected outcome. As I’ve marked in the above image, there’s really a disconnect between the action and persona.<br>Here, let’s look at some existing User Stories:</p>
  457. <figure name="3b60" id="3b60" class="graf graf--figure graf-after--p"><div class="aspectRatioPlaceholder is-locked" style="max-width: 461px; max-height: 358px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 77.7%;"></div><div class="progressiveMedia js-progressiveMedia graf-image" data-image-id="1*AKw3nKW5wo3j1WvepFgOLg.jpeg" data-width="461" data-height="358"><img src="https://cdn-images-1.medium.com/freeze/max/60/1*AKw3nKW5wo3j1WvepFgOLg.jpeg?q=20" crossorigin="anonymous" class="progressiveMedia-thumbnail js-progressiveMedia-thumbnail"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" data-src="https://cdn-images-1.medium.com/max/1600/1*AKw3nKW5wo3j1WvepFgOLg.jpeg"><noscript class="js-progressiveMedia-inner"><img class="progressiveMedia-noscript js-progressiveMedia-inner" src="https://cdn-images-1.medium.com/max/1600/1*AKw3nKW5wo3j1WvepFgOLg.jpeg"></noscript></div></div><figcaption class="imageCaption">An example of how to write User Stories</figcaption></figure>
  458. <p name="eacd" id="eacd" class="graf graf--p graf-after--figure">In the above chart, when someone reads <em class="markup--em markup--p-em">moderator </em>or <em class="markup--em markup--p-em">estimator </em>is that really adding anything? If anything it’s adding ambiguity to the flow. You and I are going to attach our own interpretation of what a moderator is or why they are in these particular contexts.</p>
  459. <p name="6698" id="6698" class="graf graf--p graf-after--p">Here, try this. Chop off the whole <em class="markup--em markup--p-em">As a / an </em>segment and see if you’re really losing anything. Compare these two:</p>
  460. <p name="ffcc" id="ffcc" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">As a moderator I want to create a new game by entering a name and an optional description</em></p>
  461. <p name="f6ec" id="f6ec" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">VS.</em></p>
  462. <p name="da14" id="da14" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">I want to create a new game by entering a name and an optional description</em></p>
  463. <p name="024f" id="024f" class="graf graf--p graf-after--p">Did the sky fall?</p>
  464. <h4 name="e620" id="e620" class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">The Job Story : All About Context and Causality</strong></h4>
  465. <figure name="9053" id="9053" class="graf graf--figure graf-after--h4"><div class="aspectRatioPlaceholder is-locked" style="max-width: 700px; max-height: 280px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 40%;"></div><div class="progressiveMedia js-progressiveMedia graf-image" data-image-id="1*ua_egpJ6K1fCAQ_hY5UHAA.png" data-width="1024" data-height="410" data-action="zoom" data-action-value="1*ua_egpJ6K1fCAQ_hY5UHAA.png"><img src="https://cdn-images-1.medium.com/freeze/max/60/1*ua_egpJ6K1fCAQ_hY5UHAA.png?q=20" crossorigin="anonymous" class="progressiveMedia-thumbnail js-progressiveMedia-thumbnail"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" data-src="https://cdn-images-1.medium.com/max/1600/1*ua_egpJ6K1fCAQ_hY5UHAA.png"><noscript class="js-progressiveMedia-inner"><img class="progressiveMedia-noscript js-progressiveMedia-inner" src="https://cdn-images-1.medium.com/max/1600/1*ua_egpJ6K1fCAQ_hY5UHAA.png"></noscript></div></div><figcaption class="imageCaption">A Job Story format</figcaption></figure>
  466. <p name="f996" id="f996" class="graf graf--p graf-after--figure"><em class="markup--em markup--p-em">Update: 2015–03–03: Based on even more usage &amp; feedback, I use a slightly different explanation now. </em><a href="https://twitter.com/danbar87/status/572751567285293056" data-href="https://twitter.com/danbar87/status/572751567285293056" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><em class="markup--em markup--p-em">See these tweets of how I suggest framing it now</em></a><em class="markup--em markup--p-em">. An update of this article will come in the future…</em></p>
  467. <p name="3c14" id="3c14" class="graf graf--p graf-after--p">Check out the image above. <strong class="markup--strong markup--p-strong">Now we’re cookin’!</strong></p>
  468. <p name="2a62" id="2a62" class="graf graf--p graf-after--p">All of the information above is critical and very informative because we’re focusing on causality. Each job story should provide as much context as possible and <strong class="markup--strong markup--p-strong">focus on motivation… </strong>instead of just implementation.</p>
  469. <p name="92e4" id="92e4" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">[update June 4th 2014] After working with Job Stories for a while now, I’ve changed ‘Motivations’ to ‘Motivations and Forces’. Look to </em><a href="https://medium.com/the-job-to-be-done/5-tips-for-writing-a-job-story-7c9092911fc9" data-href="https://medium.com/the-job-to-be-done/5-tips-for-writing-a-job-story-7c9092911fc9" class="markup--anchor markup--p-anchor" target="_blank"><em class="markup--em markup--p-em">5 Tips For Writing A Job Story</em></a><em class="markup--em markup--p-em"> which touches on this. Also learn more about the forces via this </em><a href="http://jobstobedone.org/radio/unpacking-the-progress-making-forces-diagram/" data-href="http://jobstobedone.org/radio/unpacking-the-progress-making-forces-diagram/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><em class="markup--em markup--p-em">podcast</em></a><em class="markup--em markup--p-em"> and this </em><a href="http://www.elezea.com/2013/11/progress-making-forces/" data-href="http://www.elezea.com/2013/11/progress-making-forces/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank"><em class="markup--em markup--p-em">short article</em></a><em class="markup--em markup--p-em">.</em></p>
  470. <p name="c717" id="c717" class="graf graf--p graf-after--p graf--trailing">Let’s rewrite some examples from the user story chart above as a <em class="markup--em markup--p-em">Job Story </em>and add motivation and context to each one.</p>
  471. <p></div></div></section><section name="a1c2" class="section section--body"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><p name="cb26" id="cb26" class="graf graf--p graf--leading"><strong class="markup--strong markup--p-strong">User Story:</strong></p><p name="06c2" id="06c2" class="graf graf--p graf-after--p">As a moderator, I want to create a new game by entering a name and an optional description, so that I can start inviting estimators.</p><p name="82de" id="82de" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Job Story:</strong></p><p name="53e2" id="53e2" class="graf graf--p graf-after--p graf--trailing">When I’m ready to have estimators bid on my game, I want to create a game in a format estimators can understand, so that the estimators can find my game and know what they are about to bid on.</p></div></div></section><section name="0633" class="section section--body"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><p name="c2bc" id="c2bc" class="graf graf--p graf--leading"><strong class="markup--strong markup--p-strong">User Story:</strong></p><p name="46f2" id="46f2" class="graf graf--p graf-after--p">As an estimator, I want to see the item we’re estimating, so that I know what I’m giving an estimate for.</p><p name="2819" id="2819" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Job Story:</strong></p><p name="d0fe" id="d0fe" class="graf graf--p graf-after--p graf--trailing">When I find an item I want to set an estimate for, I want to be able to see it, so that I can confirm that the item I’m estimating is actually the correct one.</p></div></div></section><section name="4c3c" class="section section--body section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><p name="4c1f" id="4c1f" class="graf graf--p graf--leading"><strong class="markup--strong markup--p-strong">User Story:</strong></p><p name="094e" id="094e" class="graf graf--p graf-after--p">As a moderator, I want to select an item to be estimated or re-estimated, the team sees the item and can estimate it.</p><p name="c387" id="c387" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Job Story:</strong></p><p name="6061" id="6061" class="graf graf--p graf-after--p">When an item does not have an estimate or has an estimate I’m not happy with, I want to be able to restart the estimation process and notify everyone, so that the team knows a particular item needs to be estimated upon.</p>
  472. <h4 name="66e1" id="66e1" class="graf graf--h4 graf-after--p">What About Multiple Roles &amp; Events?</h4><p name="815e" id="815e" class="graf graf--p graf-after--h4"><em class="markup--em markup--p-em">*Added July 28th 2014</em></p><p name="cfc6" id="cfc6" class="graf graf--p graf-after--p">As I get great feedback regarding Job Stories and as I continue to work with Job stories, I’ve found that sometimes it’s helpful to include Roles, or <a href="https://medium.com/down-the-rabbit-hole/replacing-personas-with-characters-aa72d3cf6c69" data-href="https://medium.com/down-the-rabbit-hole/replacing-personas-with-characters-aa72d3cf6c69" class="markup--anchor markup--p-anchor" target="_blank">Characters</a>, as part of the <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">When_ </em></strong>clause.</p>
  473. <h4 name="76f7" id="76f7" class="graf graf--h4 graf-after--p">Products With Multiple Roles</h4><p name="2104" id="2104" class="graf graf--p graf-after--h4">Roles / Characters are most helpful when the product has multiple roles, e.g. an IT product ( <em class="markup--em markup--p-em">Admin, Manager, Contributor….) </em>or in a marketplace product product ( <em class="markup--em markup--p-em">Buyer</em>, <em class="markup--em markup--p-em">Seller ). </em>The reason is just to clarify who we’re talking about.</p><p name="91e8" id="91e8" class="graf graf--p graf-after--p">Using eBay as an example:</p><blockquote name="e9d6" id="e9d6" class="graf graf--blockquote graf-after--p">When a Buyer has already made a bid on an item, they are anxious about missing a counter bid and want to immediately receive counter bid notifications, so they can have enough time to evaluate and update their own bid.</blockquote>
  474. <h4 name="d935" id="d935" class="graf graf--h4 graf-after--blockquote">Roles With Cause &amp; Effect</h4><p name="e498" id="e498" class="graf graf--p graf-after--h4">Sometimes, there are situations when a Job Story effects multiple roles at once — setting up a cause and effect scenario.</p><p name="c908" id="c908" class="graf graf--p graf-after--p">Using eBay, again, as an example:</p><blockquote name="d7e4" id="d7e4" class="graf graf--blockquote graf-after--p">When a Seller isn’t happy with the bids they are getting and takes their product off the market, Buyers who have already submitted bids, want to be immediately notified that the product has been pulled, so that Buyers know they no longer need to keep tabs on the product and should look for a different, similar product instead.</blockquote>
  475. <h4 name="d649" id="d649" class="graf graf--h4 graf-after--blockquote">Using Events Instead Of Roles</h4><p name="7161" id="7161" class="graf graf--p graf-after--h4">Sometimes, however, there might be a situation when an event effects all the roles or groups of roles: such as needing to get a password reminder. In this case there’s no reason to have a specific role, rather, try to keep it event based and general by using terms like <em class="markup--em markup--p-em">customer</em> or <em class="markup--em markup--p-em">someone (</em>but not <strong class="markup--strong markup--p-strong">user</strong><em class="markup--em markup--p-em">):</em></p><blockquote name="1918" id="1918" class="graf graf--blockquote graf-after--p">When a customer is on their mobile device and forgets their password, they want to get their password in a way that makes it easy to reclaim it via their mobile device, so they can continue to log in and access their news feed.</blockquote><p name="0254" id="0254" class="graf graf--p graf-after--blockquote">Why not <strong class="markup--strong markup--p-strong">user</strong>? <em class="markup--em markup--p-em">User</em> feels very lifeless and sterile, instead, <em class="markup--em markup--p-em">customer</em> reminds us that we have people who need to be served and respected.</p>
  476. <h4 name="d689" id="d689" class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">Define Motivations, Don’t Define Implementation</strong></h4><p name="bb30" id="bb30" class="graf graf--p graf-after--h4"><em class="markup--em markup--p-em">Job Stories </em>are great because it makes you think about motivation and context and de-emphasizes adding any particular implementation. Often, because people are so focused on the <strong class="markup--strong markup--p-strong">who </strong>and <strong class="markup--strong markup--p-strong">how</strong>, they totally miss the <strong class="markup--strong markup--p-strong">why. </strong>When you start to understand the why, your mind is then open to think of creative and original ways to solve the problem.</p></p>
  477. </article>
  478. </section>
  479. <nav id="jumpto">
  480. <p>
  481. <a href="/david/blog/">Accueil du blog</a> |
  482. <a href="https://jtbd.info/replacing-the-user-story-with-the-job-story-af7cdee10c27">Source originale</a> |
  483. <a href="/david/stream/2019/">Accueil du flux</a>
  484. </p>
  485. </nav>
  486. <footer>
  487. <div>
  488. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  489. <p>
  490. Bonjour/Hi!
  491. 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>
  492. 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>).
  493. </p>
  494. <p>
  495. 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>.
  496. </p>
  497. <p>
  498. Voici quelques articles choisis :
  499. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  500. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  501. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  502. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  503. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  504. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  505. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  506. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  507. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  508. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  509. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  510. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  511. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  512. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  513. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  514. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  515. </p>
  516. <p>
  517. 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>.
  518. </p>
  519. <p>
  520. Je ne traque pas ta navigation mais mon
  521. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  522. conserve des logs d’accès.
  523. </p>
  524. </div>
  525. </footer>
  526. <script type="text/javascript">
  527. ;(_ => {
  528. const jumper = document.getElementById('jumper')
  529. jumper.addEventListener('click', e => {
  530. e.preventDefault()
  531. const anchor = e.target.getAttribute('href')
  532. const targetEl = document.getElementById(anchor.substring(1))
  533. targetEl.scrollIntoView({behavior: 'smooth'})
  534. })
  535. })()
  536. </script>