I Want That!
In my user stories book and in all my training and conference sessions on user stories I advocate writing user stories in the form of:"As a , I want so that ." While I consider the so-that clause optional, I really like this template. At a conference, someone asked me why. Because I get that question fairly often, I want to give three reasons why here:
I want that!
Reason 1Something significant and I'm tempted to say magical happens when requirements are put in the first person. Obviously by saying "As a such-and-such, I want ..." you can see how the person's mind goes instantly to imagining he or she is a such-and-such. As for the magic, Paul McCartney was interviewed and asked about why the Beatles songs were so amazingly popular. One of his responses was that their songs were among the first to use a lot of pronouns. Think about it: She Loves You, I Wanna Hold Your Hand, I Saw Her Standing There, I Am The Walrus, Baby You Can Drive My Car, etc. His point was that these helped people more closely identify with the songs.
Reason 3I've heard an argument that writing stories with this template actually suppresses the information content of the story because there is so much boilerplate in the text. If you find that true, then correct it in how you present the story. I've seen backlogs in Word that present the boilerplate in grayed text with the unique parts in black. I've created product backlogs in Excel that use column headings to filter out the common text.Look here, and you'll see what I mean:
OK, here's how I bet you read the spreadsheet. I bet that as you read most of the rows you added in the "As a ...," "I want ...," and "so that ..." text, possibly even by looking at the heading as you read across each row. I've experimented by asking people, and this is what most people do. If that text is unnecessary, why do we mentally mouth the words to ourselves or even glance at the heading while reading the row? Perhaps it's not so non-essential after all.
Mike Cohn specializes in helping companies adopt and improve their use of agile processes and techniques to build extremely high-performance teams. He is the author of User Stories Applied for Agile Software Development, Agile Estimating and Planning, and Succeeding with Agile as well as the Better User Stories video course. Mike is a founding member of the Agile Alliance and Scrum Alliance and can be reached at hello@mountaingoatsoftware.com. If you want to succeed with agile, you can also have Mike email you a short tip each week.
The song commences with the lyric, "I want to dance with Harry Dean," a reference to the actor Harry Dean Stanton, about whom Currie and Harry "shared a long-standing fascination."[2] Harry and Currie subsequently met Stanton backstage after "both swooning like teenage girls" watching him sit in with Ry Cooder singing "Across the Borderline" and resulting in Harry and Stanton entering into a short-term relationship.[3]
A disco version of the song was used in the Australian film Strange Bedfellows. In late 1999, the song was included on the EMI compilation Most of All: The Best of Deborah Harry and also reissued as a remix single that charted on the Australian Singles Chart at number 86 in February 2000.
After a delay in a birthday present I ordered from somewhere else I needed this pressie for my little girl quickly. I made a call before ordering to see if that would be possible. They were super helpful and really accobdating. Will be back again. Great service. And lovely item!!!
The Nemo Tonie is a delightful Disney addition to the Tonie universe and very much enjoyed by the audience it was purchased for. As for the seller I would not hesitate to buy from them again. A unique situation of a hospital having lost a small childs Tonies collection leaving the family devastated. After hearing about the situation the seller out of their own kindess went out of their way to help. Through their kindess and quick thinking the family regained all the tonies the hospital lost and more. In a world devastated by a pandemic this seller reminds us all that good people are never too far away! Thank you.
When we were unable to find Paris Panther IWTP went out of their way to source one for us eventually tracking down Panther in Ireland. We then were informed that Taylor Tiger and cub would be released and IWTP sent them to us as soon as they became available. I fantastic service and we now have the complete set of 7 plus 7 cubs.
*/#domains table margin: 1.25rem 0;.pricelist li cursor: pointer;.transfer .pricelist li cursor: default;.pricelist-wrapper,.plugin-wrapper width: 100%; float: none;.pricelist-top display: grid; position: relative; grid-template-columns: 1fr 0; grid-template-rows: auto auto; margin: 0 0 1rem; padding: 1rem 5%; width: 110%; background-color: #FFF6E4; left: -5%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box;.pricelist-top h3 color: #ff4536; margin: 0;.pricelist,.pluginlist display: flex; flex-flow: row wrap; -webkit-align-content: center; align-content: center; margin: 0 -.5rem; list-style: none; padding: 0; width: auto; max-width: 1500px; float: none;.pricelist-disclaimer width: 100%; margin-right: -1rem; float: none;#domains .sidebar-nonsense,#plugins .sidebar-nonsense -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; display: grid; grid-template-columns: 1fr 0; grid-template-rows: auto auto auto auto; align-items: start; flex: 1; margin: 0 0 .5rem;#domains .sidebar-nonsense li,#plugins .sidebar-nonsense li margin: 0 .75rem .5rem 0;#domains .sidebar-nonsense .b1,#plugins .sidebar-nonsense .b1 grid-column: 1/2; grid-row: 4/5; justify-self: start; align-self: start; width: 100%;#domains .sidebar-nonsense .b2 display: none;#plugins .sidebar-nonsense .b2 display: block; grid-column: 1/2; grid-row: 1/2; justify-self: start; align-self: start; width: 100%;#domains .sidebar-nonsense .b3 margin-top: 1.25rem;#plugins .sidebar-nonsense .b3 margin-top: 0;#domains .sidebar-nonsense .b3,#plugins .sidebar-nonsense .b3 grid-column: 1/2; grid-row: 2/3; justify-self: start; width: 100%;#plugins .sidebar-nonsense .b4 display: none;#domains .pricelist-top .b1,#domains .pricelist-top .b2 -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box;#domains .pricelist-top .b1 grid-column: 1/2; grid-row: 1/2; justify-self: start;#domains .pricelist-top .b2 h3 display: none;#domains .pricelist-top .b2 grid-column: 1/2; grid-row: 2/3; justify-self: start; width:100%;#domains .fal font-size: 1.25rem; padding-right: .5rem;#domains .sidebar-nonsense .disclaimer,#plugins .sidebar-nonsense .disclaimer font-size: .875rem; font-style: italic; color: #6b6969; margin-top: .15rem; width: calc(100% - 1.75rem); float: right;#domains .sidebar-nonsense h3,#plugins .sidebar-nonsense h3 margin: 1.5rem 0 .5rem;#plugins .sidebar-nonsense h3 font-size: 1rem;/* This is very bad#plugins .sidebar-nonsense height: 20rem;*/.sidebar-nonsense ul display:flex; flex-flow: row wrap; list-style: none; padding: 0;.sidebar-nonsense li margin: 0 .75rem .75rem 0; font-size: 1rem;#plugins .sidebar-nonsense li line-height: 1.25; font-weight: 400;#plugins .sidebar-nonsense .active font-weight: 600 !important;#plugins .sidebar-nonsense form background-color: white; height: 75px; padding: 2rem 1rem 1rem; margin: 1rem 0 0;#plugins .sidebar-nonsense input width: 100%; font-size: 1rem; background-color: white;.ac_results background: white; border-bottom: solid 2px #FF4536; cursor: pointer; margin-top: 9px;.ac_results li padding: 5px;.ac_odd background: rgba(0, 0, 0, 0.1);#domains .active font-weight: bold; color: rgba(10, 96, 195, 1);#plugins .pluginlist a flex: 1; margin: .5rem;#domains .pricelist a,#plugins .pluginlist a color: #7aaf45;.card,.pricelist li display: grid; grid-template-rows: 50% 50%; grid-template-columns: 50% 50%; align-items: start; flex: 1; margin: .5rem; padding: 1rem; overflow: hidden; background-color: #eee; height: 75px; min-width: 175px; transition: all .1s ease; animation: populate .15s ease-out normal backwards; position: relative;#search-results .pricelist li min-width: 400px;.card:active,.pricelist li:active transform: scale(1); z-index: 1; box-shadow: none;.pricelist li a position: absolute; width: 100%; height: 100%; z-index: 10;.pricelist li .percentage a position: relative; width: auto; height: auto; z-index: 11;.pricelist .dot font-size: 1.25rem; color: #ff4536; position: relative; top: .125rem;.pricelist .tld font-size: 1.15rem; font-weight: bold;.pricelist .percentage font-size: .75rem; grid-column: 2/3; grid-row: 2/3; justify-self: end; align-self: end; margin-bottom: .875rem;.pricelist .sale-stripe position: absolute; background-color: #8cc750; width: .25rem; height: 100%; top:0; right:0;.pricelist .sale-price,.pricelist .normal-price font-size: .9rem; color: #615f5f; grid-column: 1/2; grid-row: 2/3; justify-self: start; align-self: end; line-height: 1;.pricelist .usually-price font-size: .75rem; grid-column: 2/3; grid-row: 2/3; justify-self: end; align-self: end; text-align: right; color: #615f5f; width: 100px;@media only screen and (min-width: 600px) .pricelist-top grid-template-columns: 1fr 1fr; grid-template-rows: auto 0; .pricelist-top p margin-bottom: 0; #domains .sidebar-nonsense grid-template-columns: 10rem auto; grid-template-rows: auto auto auto auto; align-items: start; flex: 1; #domains .sidebar-nonsense .b1 grid-column: 1/2; grid-row: 1/2; justify-self: start; align-self: start; #domains .sidebar-nonsense .b2 display: block; grid-column: 2/3; grid-row: 1/2; justify-self: start; align-self: start; #domains .sidebar-nonsense .b3 grid-column: 1/3; grid-row: 2/3; #domains .pricelist-top .b1 padding-right: 1.5rem; #domains .pricelist-top .b2 h3 display: block; #domains .pricelist-top .b2 grid-column: 2/3; grid-row: 1/2; padding-left: .5rem; #plugins .sidebar-nonsense form margin: 0; #plugins .sidebar-nonsense grid-template-columns: 50% 50%; grid-template-rows: auto auto auto 1rem; flex: 1; #plugins .sidebar-nonsense .b1 grid-column: 1/3; grid-row: 1/2; #plugins .sidebar-nonsense .b2 grid-column: 1/2; grid-row: 2/3; #plugins .sidebar-nonsense .b3 grid-column: 1/3; grid-row: 3/4; #plugins .sidebar-nonsense .b4 display: block; grid-column: 2/3; grid-row: 2/3; justify-self: start; width: 100%; @media only screen and (min-width: 768px) #domains .pricelist a:hover#plugins .pluginlist a:hover -webkit-filter: brightness(95%); filter: brightness(95%);.card:hover,.pricelist li:hover transform: scale(1.02); z-index: 1; box-shadow: 0 10px 0 -5px rgba(0, 0, 0, 0.1); filter: brightness(102%);.card:hover,.transfer .pricelist li:hover transform: none; z-index: 1; box-shadow: none; filter: brightness(100%);.card:hover > .pricelist .sale-stripe,.transfer .pricelist li:hover > .pricelist .sale-stripe width: 0; .pricelist-wrapper, .plugin-wrapper width: 75%; float: right; .pricelist-top width: 100%; max-width: 624px; padding: 1rem; position: auto; left: 0; #domains .sidebar-nonsense, #plugins .sidebar-nonsense grid-template-columns: auto 0; grid-template-rows: 1fr auto auto auto; width: 25%; max-width: 235px; float: left; position: relative; padding:.5rem 1rem 0 0; #domains .sidebar-nonsense ul, #plugins .sidebar-nonsense ul display: block; #domains .sidebar-nonsense .b2 grid-column: 1/2; grid-row: 2/3; #domains .sidebar-nonsense .b3 grid-column: 1/2; grid-row: 3/4; #plugins .sidebar-nonsense .b1 grid-column: 1/2; grid-row: 1/2; #plugins .sidebar-nonsense .b2 grid-column: 1/2; grid-row: 2/3; #plugins .sidebar-nonsense .b3 grid-column: 1/2; grid-row: 3/4; #plugins .sidebar-nonsense .b4 grid-column: 1/2; grid-row: 4/5; #support display: grid; grid-template-rows: 1fr auto 0 0; grid-template-columns: 1fr 0;.kb-search-input .inp grid-column: 3/4; grid-row: 1/2; align-self: center; width: 100%; max-width: 100%;.s1 grid-column: 1/2;grid-row: 1/2; margin: 0;.s2 grid-column: 1/2;grid-row: 2/3; margin: 0;.s3 grid-column: 2/3;grid-row: 2/3; margin: 0;.s4 grid-column: 1/2;grid-row: 2/3; margin: 0;@media only screen and (min-width: 1024px) .pricelist-wrapper, .plugin-wrapper width: calc(100% - 235px); float: right; @media only screen and (min-width: 1500px) #search-results margin: 0 auto 0;@media only screen and (min-width: 2560px) /* FOR THE 4K CROWD, BECAUSE APPARENTLY THEY EXIST *//***************** ALERTS ********************/.alert position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem;.alert p margin: 0;.alert-success, .alert-info color: white;background-color: #28a745;.alert-danger, .alert-error color: white;background-color: #ff4536;.alert .close color: white; font-size: 2rem; font-weight: bold; text-align: right; text-shadow: none; position: absolute; text-decoration: none; right: 2px; top: 0; cursor: pointer;.close float: right; position: relative; top: -2px; right: -21px; line-height: 18px;.dropdown .dropdown-menu display: none;.open .dropdown-menu display: block; margin-bottom: 15px; border-bottom: 2px solid #00000020; @media only screen and (min-width: 774px) .open .dropdown-menu position: absolute; right: 0px; border-bottom: none; border-top: 2px solid #dadada; top: 3.5rem; padding: .75rem 0 0; @media only screen and (min-width: 1345px) .open .dropdown-menu display: inline !important; .sign-out-mobile color: #333; text-decoration: none; .sign-out-section-mobile padding-bottom: .85rem; #plugins .right margin: 0 -.5rem;#plugins .cardHolder display: flex; flex-flow: row wrap; list-style: none; -webkit-align-content: center; align-content: center; margin: 0; padding: 0;#plugins .cardHolder a flex: auto;margin: .5rem;cursor: pointer;#plugins .card display: grid; grid-template-rows: 50% 50%; grid-template-columns: 1fr 75px; align-items: start; flex: 1; margin: 0; padding: 1rem; overflow: hidden; background-color: #eee; height: 75px; min-width: 235px; transition: all .1s ease; animation: populate .15s ease-out normal backwards; cursor: pointer;#plugins .card:hover transform: scale(1.02); z-index: 1; box-shadow: 0 10px 0 -5px rgba(0, 0, 0, 0.1); filter: brightness(102%); cursor: pointer;#plugins .card:active transform: scale(1); z-index: 1; box-shadow: none;#plugins .input-medium border: none; border-bottom: 2px solid #e0e0e0; width: 207px; font-family: 'proxima-nova', 'proxima-nova-1', 'promixma-nova-2', helvetica, arial, sans-serif;#plugins p font-size: 1.25rem; font-weight: bold; letter-spacing: -.25px; text-rendering: optimizeLegibility; padding: 0; margin: 0; text-decoration: none !important; color: #333;#plugins a text-decoration: none;#plugins .plugin line-height: 1; word-break: break-all; grid-column: 1 / 2; grid-row: 1; align-self: start; justify-self: start;#plugins .plugin_category list-style: none; margin: 0; padding: 0; grid-column: 1/2; grid-row: 2/3; align-self: end; justify-self: start; font: 500 0.7rem/1rem "Helvetica Neue",Helvetica,Arial,sans-serif; color: #8d8d8d;#plugins .plugin_category li line-height: 1.25;#plugins .plugin_logo position: relative; grid-column: 2 / 3; grid-row: 1 / 3; margin: -1rem; width: 100%; height: 75px; align-self: start; justify-self: end; background-color: #00000008;#plugins .plugin_logo img position: absolute; width: 80%; height: auto; left: 50%; top: 50%; transform: translate(-50%, -50%);.app-landing width: 92%; margin: 0 auto;.app-landing header max-width: 99999999px; position: absolute; margin-left: -13px !important; margin-top: -109px; height: 28rem; padding-top: 109px; padding-left: 12px; background-color: whitesmoke;@media only screen and (min-width: 429px) .app-landing header margin-left: -19px !important; padding-left: 18px; @media only screen and (min-width: 600px) .app-landing header margin-left: -24px !important; padding-left: 23px; @media only screen and (min-width: 730px) .app-landing header margin-left: -30px !important; padding-left: 29px; @media only screen and (min-width: 940px) .app-landing header margin-left: -40px !important; padding-left: 39px; @media only screen and (min-width: 1050px) .app-landing header margin-left: -56px !important; padding-left: 55px; @media only screen and (min-width: 1050px) .app-landing header margin-left: -66px !important; padding-left: 65px; min-width: 100000000000000px; /******* TRYING SOMETHING *******@media only screen and (min-width: 400px) .app-landing .search-widget .inp input width: 260px; @media only screen and (min-width: 478px) .app-landing .search-widget .inp input width: 300px @media only screen and (min-width: 520px) .app-landing .search-widget .inp input width: 352px; @media only screen and (min-width: 636px) .app-landing .search-widget .inp input width: 419px; @media only screen and (min-width: 646px) .app-landing .search-widget .inp input width: 422px; @media only screen and (min-width: 709px) .app-landing .search-widget .inp input width: 454px; @media only screen and (min-width: 758px) .app-landing .search-widget .inp input width: 500px; @media only screen and (min-width: 797px) .app-landing .search-widget .inp input width: 420px; @media only screen and (min-width: 436px) .preorder .search-widget .inp input width: 287px; @media only screen and (min-width: 617px) .preorder .search-widget .inp input width: 401px @media only screen and (min-width: 900px) .preorder .search-widget .inp input width: 589px; */.app-landing .search-widget .form max-width: 95%;.app-landing .search-widget .search margin: 0; position: relative; width: 600px;.app-landing .search-widget .btn-round border-radius: 50%; margin: 0; width: 60px; height: 60px; cursor: pointer; position: absolute; right: 0; top: -2px;.app-landing .search-widget .fa-search font-size: 1.25rem; color: white; padding: 0; width: 1.25rem; float: none;.app-landing .search-widget .floatfield display: flex; position: relative; height: 4rem; background-color: #ffffff; max-width: calc(100% - 4.75rem);.app-landing .search-widget .inp position: relative; margin: 0 0 0; width: 100%; max-width: 100%; height: 3rem;.app-landing .search-widget .inp .label position: absolute; top: 20px; left: 5px; font-size: 1rem; line-height: 1.25; color: #9098a9; font-weight: 500; transform-origin: 0 0; transition: all 0.2s ease;.app-landing .search-widget .inp .label:hover cursor: text;.app-landing .search-widget .inp .border position: absolute; bottom: -10px; left: 0; height: 2px; width: 100%; background: #302EEC; transform: scaleX(0); transform-origin: 0 0; transition: all 0.15s ease;.app-landing .search-widget .inp input -webkit-appearance: none; width: calc(100% - 76px); border: 0; font-family: inherit; padding: .75rem 0 0 10px; margin: 0px 0 0; height: 60px; font-size: 2rem; font-weight: 500; border-bottom: 2px solid transparent; background: #ffffffaa; border-radius: 0; color: #00000040; transition: all 0.15s ease;.app-landing .search-widget .inp input:not(:placeholder-shown) + span transform: translate(-5px, -4.75rem) scale(1).app-landing .search-widget .inp input:focus background: none; outline: none;padding: .75rem 0 0 0;color: black;.app-landing .search-widget .inp input:focus + span color: #302EEC; transform: translate(-5px, -4.75rem) scale(1).app-landing .search-widget .inp input:focus + span + .border transform: scaleX(1);.app-landing .search-widget .inp input::placeholder color: #9098a9; font-size: 16px; text-indent: 5px; opacity: 0; transition: all 0.25s ease;.app-landing .search-widget .inp input:focus::placeholder color: rgba(0,0,0,0.251); opacity: 1; transition-delay: 0.25s;@media only screen and (max-width: 399px).app-landing .search-widget .inp input background: white;.app-landing .search-widge