At the heart of the incremental model proposed by Scrum lies the Sprint Review. Every two weeks, teams get to showcase their progress and readjust plans. But what should you do with incomplete stories — work that is “almost done”, “90% done” or even “99% done”? Should you demo it or not?
I strongly believe that all work presented during the demo should be 100%, unequivocally, completely DONE. All items should respect the team’s current Definition of “Done”. Reporting only finished work helps teams assess and report their progress correctly, create realistic plans, work together more closely and develop discipline. I’ve summed up my points in the table below.
Incomplete stories
Only complete stories
Progress
Unclear
Clear
Planning
Harder
Easier
Teamwork
Optional
Required
Discipline
Optional
Required
Table 1: Effects of demoing complete vs. incomplete stories
Get a clear picture of progress
Traditional reports have many shades of gray. A work item can be 0%, 5%, 20% or even 99% done. The status seems clear, but often isn’t. Teams report constant progress right until they are supposed to finish work. Then, the last percent might take as much time as the previous ninety-nine. Problems surface too late.
In agile, we don’t see so many colors. A story’s status can be “not started”, “in progress” or “done”. We only demo and track done stories. This clarifies progress and helps us detect problems earlier.
Make realistic plans
Most agile plans are based on velocity, the average team throughput for the past Sprints. But velocity only makes sense if teams are able to deliver constantly a similar amount of work. Take a look at the charts below (click to enlarge). Both represent the same total amount of work for eight Sprints. In the first case, the team takes credit for unfinished stories. Velocity seems stable, so the team are confident to use it for forecasting. They are wrong.
The chart on the right shows the same work, but this time the team didn’t demonstrate unfinished work. Even if the team produces the same amount of work in the eight sprints, it struggles to do it. The velocity fluctuates a lot. Now tell me, how comfortable would you be making plans based on this team’s velocity?
The first chart hides the team’s big variance in throughput. This is a big problem with accounting for partially done work. The team might hit their release date or it might be two months late. Only one of the above charts lets you know this.
Encourage teamwork
When it only presents done items at the Sprint Review, a team grows stronger. Why? Because it needs to collaborate more in order to finish things on time. The biggest reason for not finishing items in time is that the teams work in a mini-waterfall. The senior developers do some design, then all the developers start coding. The testers start testing items from the current Sprint only in the last day or two, so the features aren’t really verified by the time the Sprint ends.
When presenting partially done work, this isn’t a problem. The team demos the stories and the testers start the next Sprint by testing the current Sprint’s work. The team is completely desynchronized.
If a team agrees to only present finished work, it must increase collaboration between the various roles. There must be continuous feedback between designers, programmers and testers. Work starts in parallel and is chunked in small pieces that get developed and tested every 2-3 days. This way, there is no imbalance between the various roles and “dead” moments. The team is in sync.
Build discipline
The team becomes more disciplined when it presents only complete items at the Sprint Review. Agile reduces waste by eliminating status meetings, weekly reports or useless documents. But for a team to self-organize, it still needs some rules to guide its behavior. Only expert teams can get away with replacing Scrum’s few rules without collapsing into chaos. For the rest of us, maintaining the discipline of delivering only “done” stories increases trust among team members and with external stakeholders.
At first, skipping incomplete stories from the Sprint Review will feel weird and uncomfortable. Your velocity could be zero, which some people will find embarassing. You wouldn’t guess it, but that’s actually good news. The team has identified a big impediment which they need to solve in order to finish the Sprint Backlog in time. The added discipline clarifies progress, increases confidence in plans and strengthens the team.
What about you? How often do you bring incomplete stories to your demo?
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":"1cdfb511b5","quick_view_nonce":"ab3dc1ae09","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":"7bd89c34fc","woocommerce_login_nonce":"e768342842","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":"8266eb37f1"},"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.2","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
Excellent article. I endorse it completely.