{"id":248,"date":"2016-07-08T07:14:07","date_gmt":"2016-07-08T05:14:07","guid":{"rendered":"http:\/\/qed.dk\/rasmus-kaae\/?p=248"},"modified":"2016-12-19T07:06:04","modified_gmt":"2016-12-19T07:06:04","slug":"hands-on-user-story","status":"publish","type":"post","link":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/","title":{"rendered":"Hands-on: User Story"},"content":{"rendered":"<p>User stories er et koncept der p\u00e5 papiret lyder godt, men kan v\u00e6re rigtig sv\u00e6rt at arbejde med i dagligdagen. Der er ikke noget odi\u00f8st over konceptet, men ved korrekt anvendelse giver det en ramme til at beskrive hvem der er slutmodtager af et \u00f8nske, hvilken handling der \u00f8nskes samt en begrundelse for \u00f8nsket. Tilsammen skaber det en kontekst der g\u00f8r det lettere at forst\u00e5 problemstillingen for development team s\u00e5ledes at de kan arbejde effektivt.<\/p>\n<p>For at skabe lys over situationen vil jeg her pr\u00f8ve at beskrive en situation fra den virkelige verden og formatere \u00f8nsket som user stories.<\/p>\n<h1>Baggrund<\/h1>\n<div style=\"width: 100%;clear: both;margin: 0 0 20px 0;text-align:center;overflow:auto\"><a href=\"https:\/\/i2.wp.com\/qed.dk\/rasmus-kaae\/wp-content\/uploads\/sites\/10\/arkitektur.png\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-250\" src=\"https:\/\/i2.wp.com\/qed.dk\/rasmus-kaae\/wp-content\/uploads\/sites\/10\/arkitektur-1024x747.png?resize=860%2C627\" alt=\"arkitektur\" width=\"860\" height=\"627\" data-recalc-dims=\"1\" \/><\/a><\/div>\n<p>Dette virkelige eksempel tager afs\u00e6t i et community site der dagligt bliver anvendt af tusindvis af brugere i prim\u00e6rt Danmark og Norge. Sitet har en lang r\u00e6kke features her i blandt nyheder, medlemsarkiv, m\u00f8deh\u00e5ndtering (inkl. tilmelding og referater) og login. Organisatorisk er sitet bygget op omkring lokale klubber som har et regionalt og nationalt tilh\u00f8rsforhold.<\/p>\n<p>Sitets arkitektur er forholdsvis klassisk og bygger p\u00e5 en modular konstruktion med front-end, logik og infrastruktur.<\/p>\n<h1>Den gode ide<\/h1>\n<p>Via sitets ideforum er f\u00f8lgende input modtaget og prioriteret til implementering:<br \/>\n&#8220;Referater fra m\u00f8der skal udelukkende distribueres i PDF format.&#8221;<\/p>\n<p>En ganske fornuftigt ide, som ogs\u00e5 er overkommelig at l\u00f8se. I dag er det muligt at uploade referater i HTML, PDF, Word, Powerpoint og mange andre formater. Systemet udsender referater til m\u00f8dedeltagere via et link til community-sitet.<\/p>\n<h1>Straight-to-code nedbrydning<\/h1>\n<p>\u00c9n af udviklerne fra development-teamet er bedt om at give et estimat og en mulig l\u00f8sning p\u00e5 opgaven. For at konkretisere estimatet er f\u00f8lgende nedbrydning foretaget:<\/p>\n<ul>\n<li>Referater fra m\u00f8der skal udelukkende distribueres i PDF format<\/li>\n<li>Opdater mail funktion til at distribuere PDF<\/li>\n<li>Opdater front-end til kun at tillade PDF referater<\/li>\n<\/ul>\n<p>Umiddelbart en ganske fornuftig nedbrydning &#8211; dog udelukkende med fokus p\u00e5 &#8220;hvad&#8221; der skal laves. Det kan v\u00e6re rigtig godt at arbejde p\u00e5 denne m\u00e5de hvis man arbejdet i et lille team hvor alle har dyb kendskab til dom\u00e6ne og brugere. Udfordringen med nedbrydningen er dog at der er mange l\u00f8se ender som b\u00f8r afklares inden der sprintes.<\/p>\n<h1>Hvem, hvorfor og hvad<\/h1>\n<p>Arbejder man i et st\u00f8rre team &#8211; eller m\u00e5ske endda med offshoring\/outsourcing &#8211; kan det bidrage gevaldigt til forst\u00e5else af problemet hvis man sp\u00f8rger &#8211; og svarer &#8211; p\u00e5 sp\u00f8rgsm\u00e5l om hvem der er modtager af \u00e6ndringen, hvorfor de \u00f8nsker det og hvad der forventes at kunne opn\u00e5es.<\/p>\n<p>Det giver anledning til f\u00f8lgende overordnede user stories:<\/p>\n<ul>\n<li>Som sekret\u00e6r for min lokale klub vil jeg gerne uploade PDF referater s\u00e5ledes at referater altid l\u00e6ses i mit t\u00e6nkte layout og design<\/li>\n<li>Som l\u00e6ser af referater \u00f8nsker jeg kun at modtager referater som PDF s\u00e5ledes at jeg har en ensformet m\u00e5de at l\u00e6se referater p\u00e5<\/li>\n<\/ul>\n<h1>Opsummering<\/h1>\n<p>Der er mange fordele ved ovenst\u00e5ende notation, som n\u00e6vnt tidligere, i till\u00e6g til kontekst omkring opgaven, s\u00e5 giver det ogs\u00e5 mulighed for at prioritere opgaverne. Det m\u00e5 eksempelvis forventes at der er flere modtagere af m\u00f8dereferater end der er sekret\u00e6rer der skriver dem. Med afs\u00e6t i denne antagelse vil det v\u00e6re oplagt at l\u00f8se den user story der er m\u00e5lrettet l\u00e6sere f\u00f8r den der m\u00e5lrettet sekret\u00e6rer.<\/p>\n<p>Jeg har ofte set at user stories finder anvendelse i teams der arbejder eksplorativt sammen med brugere. Her kan det lette kommunikationen hvis man fors\u00f8ger at beskrive \u00f8nsker i brugerperspektiv fremfor at fokusere p\u00e5 den tekniske vinkel.<\/p>\n<p>N\u00e5r det er sagt, s\u00e5 er jeg ikke fanatisk tilh\u00e6nger af user stories. For mig er det vigtigste egentlig de tre grundpiller: hvem, hvad og hvorfor. Hvis man er i stand til at fange dem i andre typer krav, s\u00e5 kan det v\u00e6re liges\u00e5 godt.<\/p>\n<p>Se de \u00f8vrige indl\u00e6g i &#8220;hands-on&#8221; serien:<\/p>\n<ul>\n<li><a href=\"http:\/\/qed.dk\/rasmus-kaae\/tag\/hands-on\/\">http:\/\/qed.dk\/rasmus-kaae\/tag\/hands-on\/<\/a><\/li>\n<\/ul>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>User stories er et koncept der p\u00e5 papiret lyder godt, men kan v\u00e6re rigtig sv\u00e6rt at arbejde med i dagligdagen. Der er ikke noget odi\u00f8st over konceptet, men ved korrekt anvendelse giver det en ramme&#8230;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":250,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[2,1],"tags":[64],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hands-on: User Story - @agilerasmus<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hands-on: User Story - @agilerasmus\" \/>\n<meta property=\"og:description\" content=\"User stories er et koncept der p\u00e5 papiret lyder godt, men kan v\u00e6re rigtig sv\u00e6rt at arbejde med i dagligdagen. Der er ikke noget odi\u00f8st over konceptet, men ved korrekt anvendelse giver det en ramme...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/\" \/>\n<meta property=\"og:site_name\" content=\"@agilerasmus\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-08T05:14:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-12-19T07:06:04+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/#website\",\"url\":\"https:\/\/agilerasmus.com\/wordpress\/\",\"name\":\"@agilerasmus\",\"description\":\"agile coach, trainer and scrum master\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/agilerasmus.com\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#primaryimage\",\"inLanguage\":\"en-GB\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#webpage\",\"url\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/\",\"name\":\"Hands-on: User Story - @agilerasmus\",\"isPartOf\":{\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#primaryimage\"},\"datePublished\":\"2016-07-08T05:14:07+00:00\",\"dateModified\":\"2016-12-19T07:06:04+00:00\",\"author\":{\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/#\/schema\/person\/cc0de41731dfcf8697fd64dadadcf096\"},\"breadcrumb\":{\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/agilerasmus.com\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hands-on: User Story\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/#\/schema\/person\/cc0de41731dfcf8697fd64dadadcf096\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/agilerasmus.com\/wordpress\/#personlogo\",\"inLanguage\":\"en-GB\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/024753e28bdb374a97740a4d5572755e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/024753e28bdb374a97740a4d5572755e?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/agilerasmus.com\/wordpress\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hands-on: User Story - @agilerasmus","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/","og_locale":"en_GB","og_type":"article","og_title":"Hands-on: User Story - @agilerasmus","og_description":"User stories er et koncept der p\u00e5 papiret lyder godt, men kan v\u00e6re rigtig sv\u00e6rt at arbejde med i dagligdagen. Der er ikke noget odi\u00f8st over konceptet, men ved korrekt anvendelse giver det en ramme...","og_url":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/","og_site_name":"@agilerasmus","article_published_time":"2016-07-08T05:14:07+00:00","article_modified_time":"2016-12-19T07:06:04+00:00","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/agilerasmus.com\/wordpress\/#website","url":"https:\/\/agilerasmus.com\/wordpress\/","name":"@agilerasmus","description":"agile coach, trainer and scrum master","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/agilerasmus.com\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"ImageObject","@id":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#primaryimage","inLanguage":"en-GB","url":"","contentUrl":""},{"@type":"WebPage","@id":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#webpage","url":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/","name":"Hands-on: User Story - @agilerasmus","isPartOf":{"@id":"https:\/\/agilerasmus.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#primaryimage"},"datePublished":"2016-07-08T05:14:07+00:00","dateModified":"2016-12-19T07:06:04+00:00","author":{"@id":"https:\/\/agilerasmus.com\/wordpress\/#\/schema\/person\/cc0de41731dfcf8697fd64dadadcf096"},"breadcrumb":{"@id":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/agilerasmus.com\/wordpress\/hands-on-user-story\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/agilerasmus.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Hands-on: User Story"}]},{"@type":"Person","@id":"https:\/\/agilerasmus.com\/wordpress\/#\/schema\/person\/cc0de41731dfcf8697fd64dadadcf096","name":"admin","image":{"@type":"ImageObject","@id":"https:\/\/agilerasmus.com\/wordpress\/#personlogo","inLanguage":"en-GB","url":"https:\/\/secure.gravatar.com\/avatar\/024753e28bdb374a97740a4d5572755e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/024753e28bdb374a97740a4d5572755e?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/agilerasmus.com\/wordpress\/author\/admin\/"}]}},"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":false,"jetpack_shortlink":"https:\/\/wp.me\/p8dzln-40","jetpack-related-posts":[{"id":244,"url":"https:\/\/agilerasmus.com\/wordpress\/hvad-laver-din-product-owner\/","url_meta":{"origin":248,"position":0},"title":"Hands-on: Product Owner","date":"July 3, 2016","format":false,"excerpt":"Det er tit sv\u00e6rt at systematisere og forklare konkret hvad en product owner laver. Jeg har fors\u00f8gt at opsummere mine erfaringer fra en bunke coaching seancer med product owners og sammenholde det med hvad teorien foreskriver. I teorien Den officielle definition p\u00e5 en product owner er dejlig l\u00f8s og fri\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":906,"url":"https:\/\/agilerasmus.com\/wordpress\/teams-kan-aldrig-bliver-mere-agile-end-sine-omgivelser\/","url_meta":{"origin":248,"position":1},"title":"Teams kan aldrig bliver mere agile end sine omgivelser","date":"February 6, 2020","format":false,"excerpt":"Til at varme lidt op vil jeg bruge en metafor om en container havn. Forestil dig at du er en fabrik der producerer dimser som skal sendes med container til slutbrugeren. N\u00e5r dimserne er f\u00e6rdige og klar til at blive sendt til brugeren, s\u00e5 pakkes de i en container der\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/agilerasmus.com\/wordpress\/wp-content\/uploads\/2020\/02\/container-scaled.jpg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":848,"url":"https:\/\/agilerasmus.com\/wordpress\/selv-ledelse-versus-medarbejderledelse\/","url_meta":{"origin":248,"position":2},"title":"Selv-ledelse versus medarbejderledelse","date":"May 7, 2019","format":false,"excerpt":"For nyligt afholdte Kristian Haugaard og jeg et indl\u00e6g for en gruppe HR-ledere i Aarhus. Det har efterf\u00f8lgende givet anledning til refleksion hos mig: Hvilke elementer, der traditionelt h\u00f8rer hjemme hos enten en HR afdeling eller h\u00f8rer under personaleledelse, kunne et agilt team liges\u00e5vel selv administrere? For ikke at teoretisere\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"","src":"https:\/\/i1.wp.com\/agilerasmus.com\/wordpress\/wp-content\/uploads\/2019\/05\/boss-454867_960_720.jpg?fit=960%2C638&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":398,"url":"https:\/\/agilerasmus.com\/wordpress\/forecasting-og-planlaegning\/","url_meta":{"origin":248,"position":3},"title":"Forecasting og planl\u00e6gning","date":"February 20, 2017","format":false,"excerpt":"En af de st\u00f8rste myter omkring agile teams er at de ikke er i stand til at lave planl\u00e6gning udover aktive sprints. Agil planl\u00e6gning er et af emnerne der behandles p\u00e5 Scrum, Scrum Master og Product Owner kurserne. Den tilgang der beskrives her - fremskaf velocity\/antal storypoint teamet kan levere\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/agilerasmus.com\/wordpress\/wp-content\/uploads\/2017\/01\/forecasting.jpg?fit=465%2C352&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":825,"url":"https:\/\/agilerasmus.com\/wordpress\/lovkrav-og-scrum-kan-det-lade-sig-gore\/","url_meta":{"origin":248,"position":4},"title":"Lovkrav og Scrum &#8211; kan det lade sig g\u00f8re?","date":"February 21, 2019","format":false,"excerpt":"I en agil organisation hvor Scrum er det b\u00e6rende element for teamene kan det v\u00e6re sv\u00e6rt at h\u00e5ndtere store opgaver som f.eks. lovkrav vedtaget af Folketinget, EU eller andre instanser. En rygmarvsreaktion kan v\u00e6re at s\u00e6tte den iterative og inkrementelle udvikling p\u00e5 pause og begive sig ud i en l\u00e6ngerevarende\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/agilerasmus.com\/wordpress\/wp-content\/uploads\/2019\/02\/european-parliament-1265254_1920.jpg?fit=1200%2C900&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":192,"url":"https:\/\/agilerasmus.com\/wordpress\/du-er-ikke-agil\/","url_meta":{"origin":248,"position":5},"title":"Du er ikke agil","date":"February 13, 2015","format":false,"excerpt":"Er man i stand til at kalde sig agil blot fordi man anvender Kanban eller Scrum? Er man per definition rigid bare fordi ens projekt f\u00f8lger en vandfaldsmodel? Er CMMI overhovedet forligeligt med konceptet agile? Jeg har ikke alle svarene, men jeg har givet det en del tanker: De mest\u2026","rel":"","context":"In &quot;Dansk&quot;","img":{"alt_text":"successfailure","src":"https:\/\/i1.wp.com\/qed.dk\/rasmus-kaae\/wp-content\/uploads\/sites\/10\/successfailure.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/posts\/248"}],"collection":[{"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/comments?post=248"}],"version-history":[{"count":1,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/posts\/248\/revisions"}],"predecessor-version":[{"id":331,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/posts\/248\/revisions\/331"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/media\/250"}],"wp:attachment":[{"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/media?parent=248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/categories?post=248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agilerasmus.com\/wordpress\/wp-json\/wp\/v2\/tags?post=248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}