You and your team are preparing to deploy in production a set of features. Unfortunately, some of these have the status”almost done” and it’s not clear how much longer will take until done. Straight to the point – this shouldn’t happen.
To avoid the failure of the deployment, one way is to reconsider how your team is splitting the user stories. Mastering the art of splitting will help you make a better decision on what’s valuable for the user.
In this article, I’m going to give you a few hints about how to get rid of the “almost done” curse.
Start with the output
Typically, as a software developer, when you begin working on a user story, you might be tempted to start by designing the domain model. You’ll define a few entities and their associated database tables. Then you’re probably going to think about how to query these tables. And how to combine all this data in order to send it to the user interface so that it can be presented to the user in a nicely designed HTML page.
In a matter of minutes, you already clogged your brain with too much information, thinking about too many things all at once, losing your focus on the task at hand.
I’m going to propose an alternate approach: start with the output. What is the first step that the user is going to take when using the new feature? Let’s say she’s going to click a button to load the new page. Scratch that, forget about the button. It’s just a page that loads when accessing a URL. Do that! Design and code the page that the user is going to see. Associate it with its respective URL and ship it.
Deliver small increments
You might argue that it’s not enough, that the feature is not done. The user cannot do much, if anything, on this page. That’s true, but at this point, the focus is not on the user experience. We didn’t implement the button linking to that page yet, so the users can’t even access it if they don’t know the URL.
So what’s the point? Well, the answer is early feedback. By delivering small increments, you can validate the user experience with the rest of the team: the product owner, the Q&A team, the early beta users, etc. While they work on that page, you can move on to the next increment.
Think about the next small thing that you can do. Given our initial page, it might contain a form. If the user clicks the save button without filling any input fields, then some error messages should be displayed. This is your next shippable increment: client side validation. As soon as you’re done implementing these error messages, ship your code.
Rinse and repeat! Always be on the lookout for the next small thing that you can add and ship, without breaking any existing features. At the same time, make sure that whatever you push to production can be verified by another team member, or by a user. Refactoring existing code does not fall into this category.
Zero, one, many
Let’s look at this in another way. Considering a simple CRUD feature, we can split it into separate user stories by each operation: create, read, update and delete. Reading existing records is one story. Creating a new record is another. Updating it – another one. Finally, deleting a record is a standalone story, too.
Taking into account that we’re dealing with a collection of records, we can start thinking about the simplest, smallest thing we can implement. What does the application look like when there are no records available? What does it look like when we add just one record? What happens if we add many, many more records? There are at least three user stories hiding behind these simple questions.
By following the “zero, one, many” approach, you can make sure you take slow steps toward implementing a feature that is much bigger in scope. You don’t have to think about all the edge cases at once, nor should you. Taking one step at a time ensures that you keep your focus on what is important right now.
Conclusion
The above examples are very simplified, and you might argue that the advice does not apply to your complex user stories. However, if you take a good look at your current user stories, you could see how they can be simplified, split and delivered in a more streamlined manner. I go as far as claiming that each acceptance criteria of your big user story can be re-purposed as brand new, simpler user stories.
Delivering small increments that do not make much sense on their own may seem like a radical approach, but you should try it for a change to see what happens. At the very least, being able to show and demo your progress is better than the excuse of “trust me, I’m almost done”.
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":"e93debc8af","quick_view_nonce":"849fc62228","single_product_ajax_add_to_cart":"1","single_product_ajax_url":"/?wc-ajax=astra_add_cart_single_product","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":"cbcdd699d6","woocommerce_login_nonce":"e740847d90","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.","login_failed_msg":"Login failed. Please reload the page and try again."},"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":"d738eabd81"},"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.6","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","is_cookiepolicy_page":""};
//# sourceURL=cmplz-cookiebanner-js-extra
Comments are closed.