After an initial romance with use cases, the agile community embraced user stories as its de facto standard for documenting requirements. You have probably seen them a lot by now and maybe even wrote a few:
As a <user type>
I want <action>
So that <benefit>
To make them more versatile, Mike Cohn introduced two additional terms: epics and themes. Epics refer to big user stories, that would probably take a long time (weeks or months) to develop. Themes designate related user stories, for example you could have a “reports” theme.
Sometimes this format is not enough, so the teams I work with often come up with creative additions. Here are my top five:
1. Use personas
A lot of people went bankrupt during the dot com bubble because they believed the mantra build it and they will come. Our industry has learned a lot since then and we have started shifting our focus from “the system” to “the user”.
What I see quite often with user stories is that they start with As a user... This is often a sign that the team did not think about the target user for that particular story. What often helps are personas.
Personas are a technique originating in the User-Centered Design community. It tries to identify a few distinct groups within the user base. Team start by defining the 4-6 most representative types of users and then keep them in mind when creating the user stories. This increases the chances that the user stories will satisfy actual user needs.
Below you can see an example persona from the I TAKE Unconference, one of our projects. For each of the target attendees, we came up with a name, a job title and why they would come to the conference.
Paul(Programmer): Seeing how other programmers work, experimenting new
techniques in a learning environment, learning new techniques, being
more productive.
So instead of As a user..., we can now say As Paul... when we think about new features.
2. Don’t be a slave to the format
Sure, the original template is As a... I want... So that..., but that does not mean we should turn it into a rule cast in stone. When you start seeing stories like As a developer I want to install Jenkins So that I can run automated tests you know you have a problem. Experiment with the format, keeping in mind its three components:
What are we building? (I want…)
Who are we building it for? (As a…)
Why are we building it? (So that…)
Let’s take the following example:
As a conference junkie
I want to see what is different about I TAKE
So that I can decide which conference to attend at the end of May
I’m pretty sure Mike Cohn won’t have any objections if he saw it written this way:
Highlight what is different about I TAKEPersona: Frank (conference "junkie")Why: To decide which conference to attend at the end of May
3. Limit their size
When doing Scrum, one of the reasons teams don’t finish what they committed to for the current Sprint is the fact that the stories were too big and in the last day of the Sprint each one is 99.999% done. Actually, there is no such thing as x% done. A story is either NOT STARTED, IN PROGRESS or DONE.
By limiting the size of each story that you select for the next period, you increase the odds of finishing it in time. My default rule of thumb is to cap story size at five ideal days.
4. Correlate with business goal
The Product Owner, Product Manager or Council of the Elders which decide the next important features, ideally do so starting from the business goals.
I was working recently with a team of senior managers trying to decide the development priorities for the following period. One hour passed and the efforts were fruitless, with everyone advocating their particular preference. So I asked: “What is the business goal for the next 3 months?”. Once we started discussing that, the priorities became much clearer for everyone involved and we finished selecting the next user stories quite rapidly.
Needless to say, in an open and collaborative culture, these goals then get shared with the team.
5. Add other information you need
The back of the sticky note/index card or the description field in your project tracking tool is the ideal candidate to store additional information about the user story. Some likely candidates:
The personas we discussed above
Acceptance criteria (small business focused test cases) or scenarios if you are doing BDD/ATDD
Non functional requirements like Search must support 1.000 simultaneous users or Total time to find an element with the wizard must be < 1.2 seconds
Mockups or wireframes produced by the UI/UX designer. My personal favorite is Balsamiq.
These are my five top tips for writing user stories. What about you? How do you write user stories? What other tips or techniques do you use?
I haven’t applied user stories in software development, but I did once use them as an example in a blog post about the importance of anecdotes. Apparently I didn’t do it right, but maybe you’ll find my format instructive. In any event, I agree that personas are fundamental to user stories — it would make no sense to have the latter without the former.
Flavius Ștef
Hi Felix, thanks for joining the conversation. I too am a big fan of thinking in terms of the user and not in terms of the system.
Comments are closed.
Manage Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
var astra = {"break_point":"921","isRtl":"","is_scroll_to_id":"1","is_scroll_to_top":"1","is_header_footer_builder_active":"1","responsive_cart_click":"flyout","is_dark_palette":"","revealEffectEnable":"","ajax_url":"https://mozaicworks.com/wp-admin/admin-ajax.php","infinite_count":"2","infinite_total":"0","pagination":"infinite","infinite_scroll_event":"scroll","no_more_post_message":"No more posts to show.","grid_layout":{"desktop":"3","tablet":1,"mobile":1},"site_url":"https://mozaicworks.com","blogArchiveTitleLayout":"","blogArchiveTitleOn":"","show_comments":"Show Comments","enableHistoryPushState":"1","masonryEnabled":"","blogMasonryBreakPoint":"0","shop_infinite_count":"2","shop_infinite_total":"0","shop_total_products":"1","shop_pagination":"number","shop_infinite_scroll_event":"scroll","shop_no_more_post_message":"No more products to show.","shop_result_count_format":"Showing 1\u2013{count} of {total} results","checkout_prev_text":"Back to my details","checkout_next_text":"Proceed to payment","shop_quick_view_enable":"disabled","shop_quick_view_stick_cart":"","shop_quick_view_auto_height":"1","woo_cart_empty_featured_product":"","single_product_qty_ajax_nonce":"abe02f2308","quick_view_nonce":"5931df7ab1","single_product_ajax_add_to_cart":"1","is_cart":"","is_single_product":"","view_cart":"View cart","cart_url":"https://mozaicworks.com/cart","checkout_url":"https://mozaicworks.com/checkout","add_to_cart_options_single":"rt_add_to_cart","is_astra_pro":"1","shopRevealEffectEnable":""};
//# sourceURL=astra-theme-js-js-extra
document.addEventListener( 'wpcf7submit', e => turnstile.reset() );
//# sourceURL=cloudflare-turnstile-js-after
var astraAddon = {"is_elementor_active":"","sticky_active":"1","svgIconClose":"\u003Cspan class=\"ast-icon icon-close\"\u003E\u003C/span\u003E","hf_account_show_menu_on":"hover","hf_account_action_type":"link","hf_account_logout_action":"link","header_main_stick":"1","header_above_stick":"","header_below_stick":"","stick_header_meta":"","header_main_stick_meta":"","header_above_stick_meta":"","header_below_stick_meta":"","sticky_header_on_devices":"both","sticky_header_style":"none","sticky_hide_on_scroll":"1","break_point":"921","tablet_break_point":"768","mobile_break_point":"544","header_main_shrink":"1","header_animation_effect":"none","header_logo_width":"","responsive_header_logo_width":{"desktop":200,"tablet":"","mobile":150},"stick_origin_position":"","site_layout":"ast-full-width-layout","site_content_width":"1070","site_layout_padded_width":"1200","site_layout_box_width":"1024","header_builder_active":"1","component_limit":"10","single_product_sticky_product_image":"","single_product_sticky_product_image_top_offset":"0","cart_sticky_cart_totals":"","order_review_toggle_texts":{"toggle_show_text":"Show Order Summary","toggle_hide_text":"Hide Order Summary"},"check_user_exist_nonce":"2b0b1eeb23","woocommerce_login_nonce":"45996a8d17","is_logged_in":"","user_validation_msgs":{"error_msg":"Entered user detail is not a valid.","success_msg":"This user is already registered. Please enter the password to continue."},"checkout_order_review_sticky":"","cartflows_version":"","is_registration_required":"1","is_complete_package":"1","is_header_builder_active":"1"};
//# sourceURL=astra-addon-js-js-extra
var xoo_wsc_params = {"adminurl":"https://mozaicworks.com/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","qtyUpdateDelay":"500","notificationTime":"5000","html":{"successNotice":"\u003Cul class=\"xoo-wsc-notices\"\u003E\u003Cli class=\"xoo-wsc-notice-success\"\u003E\u003Cspan class=\"xoo-wsc-icon-check_circle\"\u003E\u003C/span\u003E%s%\u003C/li\u003E\u003C/ul\u003E","errorNotice":"\u003Cul class=\"xoo-wsc-notices\"\u003E\u003Cli class=\"xoo-wsc-notice-error\"\u003E\u003Cspan class=\"xoo-wsc-icon-cross\"\u003E\u003C/span\u003E%s%\u003C/li\u003E\u003C/ul\u003E"},"strings":{"maxQtyError":"Only %s% in stock","stepQtyError":"Quantity can only be purchased in multiple of %s%","calculateCheckout":"Please use checkout form to calculate shipping","couponEmpty":"Please enter promo code"},"nonces":{"update_shipping_method_nonce":"2ffd9ebd6b"},"isCheckout":"","isCart":"","sliderAutoClose":"1","shippingEnabled":"","couponsEnabled":"1","autoOpenCart":"yes","addedToCart":"","ajaxAddToCart":"yes","showBasket":"always_show","flyToCart":"yes","flyToCartTime":"1500","productFlyClass":"","refreshCart":"no","fetchDelay":"200"};
//# sourceURL=xoo-wsc-main-js-js-extra
var complianz = {"prefix":"cmplz_","debug":"","user_banner_id":"1","set_cookies":[],"block_ajax_content":"0","banner_version":"22","version":"7.5.4","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https://mozaicworks.com/wp-json/complianz/v1/","locale":"lang=en&locale=en_US","set_cookies_on_root":"0","cookie_domain":"","current_policy_id":"26","cookie_path":"/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https://mozaicworks.com/wp-content/uploads/complianz/css/banner-{banner_id}-{type}.css?v=22","page_links":{"eu":{"cookie-statement":{"title":"Cookie Policy ","url":"https://mozaicworks.com/cookie-policy-eu"},"privacy-statement":{"title":"Terms And Conditions","url":"https://mozaicworks.com/terms-and-conditions"},"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"us":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"uk":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"ca":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"au":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"za":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"br":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content","iapi_nav":"fallback"};
//# sourceURL=cmplz-cookiebanner-js-extra
I haven’t applied user stories in software development, but I did once use them as an example in a blog post about the importance of anecdotes. Apparently I didn’t do it right, but maybe you’ll find my format instructive. In any event, I agree that personas are fundamental to user stories — it would make no sense to have the latter without the former.
Hi Felix, thanks for joining the conversation. I too am a big fan of thinking in terms of the user and not in terms of the system.