{"id":3723,"date":"2012-07-05T13:45:00","date_gmt":"2012-07-05T13:45:00","guid":{"rendered":"https:\/\/test.simple-talk.com\/uncategorized\/when-done-is-not-done\/"},"modified":"2017-08-10T12:52:06","modified_gmt":"2017-08-10T12:52:06","slug":"when-done-is-not-done","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/blogs\/when-done-is-not-done\/","title":{"rendered":"When done is not done"},"content":{"rendered":"<p>Most developers and DBAs will know what it&#8217;s like to be asked to do &#8220;a quick tidy up&#8221; on a project that, on closer inspection, turns out to be a barely working prototype: as the cynical programmer says, &#8220;when you&#8217;re told that a project is 90% done, prepare for the next 90%&#8221;.<\/p>\n<p>It is easy to convince a layperson that an application is complete just by using test data, and sticking to the workflow that the development team has implemented and tested. The application is &#8216;done&#8217; only in the sense that the <i>anticipated<\/i> paths through the software features, using known data, are fully supported. <\/p>\n<p>Reality often strikes only when testers reveal its strange and erratic behavior in response to behavior from the end user that strays from the &#8220;ideal&#8221;. The problem is this: how do we measure progress, accurately and objectively? Development methods such as Scrum or Kanban, when implemented rigorously, can mitigate these problems for developers, to some extent. They force a team to progress one small, but complete feature at a time, to find out how long it really takes for this feature to be &#8220;<i>done done<\/i>&#8220;; in other words done to the point where its performance and scalability is understood, it is tested for all conceivable edge cases and doesn&#8217;t break&#8230;it is ready for prime time. At that point, the team has a much more realistic idea of how long it will take them to <i>really<\/i> complete all the remaining features, and so how far away the end is.<\/p>\n<p>However, it is when software crosses team boundaries that we feel the limitations of such techniques. No matter how well drilled the development team is, problems will still arise if they don&#8217;t deploy frequently to a production environment. If they work feverishly for months on end before finally tossing the finished piece of software over the fence for the DBA to deploy to the &#8220;real world&#8221; then once again will dawn the realization that &#8220;done done&#8221; is still out of reach, as the DBA uncovers poorly code transactions, un-scalable queries, inefficient caching, and so on. By deploying regularly, end users will also have a much earlier opportunity to tell you how far what you implemented strayed from what they wanted.<\/p>\n<p>If you have a tale to tell, anonymized of course, of a &#8220;quick polish&#8221; project that turned out to be anything but, and what the major problems were, please do share it.<\/p>\n<p>Cheers,<\/p>\n<p>Tony.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most developers and DBAs will know what it&#8217;s like to be asked to do &#8220;a quick tidy up&#8221; on a project that, on closer inspection, turns out to be a barely working prototype: as the cynical programmer says, &#8220;when you&#8217;re told that a project is 90% done, prepare for the next 90%&#8221;. It is easy&#8230;&hellip;<\/p>\n","protected":false},"author":200703,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,47125],"tags":[],"coauthors":[],"class_list":["post-3723","post","type-post","status-publish","format-standard","hentry","category-blogs","category-editorials"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/3723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/200703"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=3723"}],"version-history":[{"count":3,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/3723\/revisions"}],"predecessor-version":[{"id":25550,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/3723\/revisions\/25550"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=3723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=3723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=3723"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=3723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}