{"id":1701,"date":"2011-10-10T13:13:28","date_gmt":"2011-10-10T12:13:28","guid":{"rendered":"http:\/\/t-machine.org\/?p=1701"},"modified":"2011-10-10T13:13:28","modified_gmt":"2011-10-10T12:13:28","slug":"scrum-i-added-a-feature-to-my-game-but-its-5-broken","status":"publish","type":"post","link":"http:\/\/new.t-machine.org\/index.php\/2011\/10\/10\/scrum-i-added-a-feature-to-my-game-but-its-5-broken\/","title":{"rendered":"Scrum: I added a feature to my game, but it&#8217;s 5% broken"},"content":{"rendered":"<p>With Scrum, you&#8217;re constantly focussing on:<\/p>\n<p>How does the application look \/ work for the user *right now*?<\/p>\n<p>&#8230;to the extent that you care more about &#8220;does this feature work for the user?&#8221; than &#8220;is the code\/art\/architecture for this feature ideal?&#8221;.<\/p>\n<h3>&#8220;It&#8217;s not done&#8221; &#8230; &#8220;but it looks done!&#8221;<\/h3>\n<p>We regularly get situations where a feature *appears* to work, to a casual observer &#8211; but on deeper inspection, it&#8217;s clearly broken in one or more significant ways. Sometimes, the &#8220;broken&#8221; parts are so obscure that you&#8217;d need help to even find them. Other times, they&#8217;re obvious if you try to to use the feature more than just once or twice.<\/p>\n<p>In Scrum terms, it&#8217;s pretty clear what&#8217;s gone wrong: the Product Owner didn&#8217;t describe the feature clearly enough (they implicitly included functionality they didn&#8217;t really care about, &#8230; or they described it too vaguely to be implemented well).<\/p>\n<p>Scrum&#8217;s in-built check\/balance against that is the Team. The developer who adopted the task should have rejected it during the Planning meeting, should have insisted on a clearer User Story (or a more explicit feature description).<\/p>\n<p>But in the real world, this stuff happens. Leaving the issue: What do you do next?<\/p>\n<h3>One technique: Divide and Conquer<\/h3>\n<p>Here&#8217;s an approach I&#8217;ve been experimenting with recently.<\/p>\n<p>When it happens, you split the feature description in half, re-defining one half as the part which is done + working, and the other half as the part which isn&#8217;t working. Or into 3, 4, etc &#8211; if there&#8217;s multiple &#8220;player visible&#8221; ways in which it&#8217;s not working.<\/p>\n<p>This seems to work pretty well &#8211; it lets us independently prioritise &#8220;the bit we&#8217;ve already got (hence: zero extra dev cost)&#8221; and &#8220;the hard stuff that&#8217;s not working&#8221;. And quite often, we end up redesigning some other part in a way that makes the broken edge-cases no longer exist &#8211; so we never need to fix them.<\/p>\n<p>&#8230;but I&#8217;m still experimenting with it. I&#8217;m sure we could do our Planning meetings better &#8211; both from the PO side (more detailed descriptions, more PO planning) and\/or from the developer side (more questioning, demands for more detail).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With Scrum, you&#8217;re constantly focussing on: How does the application look \/ work for the user *right now*? &#8230;to the extent that you care more about &#8220;does this feature work for the user?&#8221; than &#8220;is the code\/art\/architecture for this feature ideal?&#8221;. &#8220;It&#8217;s not done&#8221; &#8230; &#8220;but it looks done!&#8221; We regularly get situations where a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,20,62],"tags":[],"_links":{"self":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/1701"}],"collection":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/comments?post=1701"}],"version-history":[{"count":0,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/1701\/revisions"}],"wp:attachment":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/media?parent=1701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/categories?post=1701"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/tags?post=1701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}