{"id":75,"date":"2012-06-10T23:06:00","date_gmt":"2012-06-10T23:06:00","guid":{"rendered":"http:\/\/sdi.thoughtstorms.info\/?p=75"},"modified":"2012-06-10T23:06:00","modified_gmt":"2012-06-10T23:06:00","slug":"iterative-test-driven-development","status":"publish","type":"post","link":"https:\/\/blog.thoughtstorms.info\/?p=75","title":{"rendered":"Iterative, Test-Driven Development"},"content":{"rendered":"<div dir=\"ltr\" trbidi=\"on\">My <a href=\"http:\/\/www.quora.com\/Computer-Programming\/What-is-the-smartest-way-to-get-from-an-idea-for-a-computer-program-to-the-first-draft-of-its-code\/answer\/Phil-Jones\">Quora answer<\/a> :<\/p>\n<blockquote><p><span>Iterative, &#8220;test driven&#8221;, development.<\/span><\/p><\/blockquote>\n<blockquote><p><span>Break  your idea down into a number of simple &#8220;stories&#8221;, each of which  describes a single chunk of activity which goes all the way through from  the beginning to the end of a user&#8217;s experience with the software.  Importantly a story is not a traditional &#8220;component&#8221; &#8230; but represents a complete, working but minimal slice through the functionality.<\/span><br \/><span><\/span><br \/><span>For  example, a story could be &#8220;the user goes to our site at a URL and sees a  page describing our idea&#8221; or, for a drawing program, &#8220;the user can  create and save a jpg file&#8221; (even though that jpg file is just a blank  canvas).<\/span><br \/><span><\/span><br \/><span>Once you have some stories, order them by importance. If  you could only get one story working, what would be the most valuable?  If you could only get two stories, which would those be?<\/span><br \/><span><\/span><br \/><span>Start on  the most important story. As any particular story shouldn&#8217;t be too  complicated, you can probably figure out fairly intuitively the  components you need in order to make it happen. (If you can&#8217;t, you&#8217;re  trying to fit too much into a single story.) Those components might be  functions, they might be objects which have several methods (if so, ONLY  worry about the methods of the object which satisfy the current story,  ignore any others), they might be HTML forms or templates. <\/span><br \/><span><\/span><br \/><span>Now  write AUTOMATED TESTS for the components you need for this story. Unit  tests for the functions and objects. Ideally something like Selenium for  the web forms.<\/span><br \/><span><\/span><br \/><span>Write code to pass the tests in a test-driven  style &#8230; ie. write test, write code to pass test, refactor your code to  eliminate redundancy, write next test etc. When one story is finished,  start figuring out how to do the next most important and work on that.<\/span><br \/><span><\/span><br \/><span>Somewhere  down your list of stories you have your minimum viable product: that  is, the minimal thing which is worth releasing to your customers in  order for them to give you feedback on whether this is useful to them.  That is not necessarily just one story, it might be after the first  three. Or the first ten. Whatever it is, once you hit it, release your  product to the customers and start getting their reaction.<\/span><br \/><span><\/span><br \/><span>From  now on you are in maintenance \/ iterative growth mode. You&#8217;ll be taking  the feedback from the customer to rewrite and reorder the stories. While  continuing to implement them according to your best, most up-to-date,  sense of priorities. You&#8217;ll want to release new development to the  customer as fast as reasonably possible so you can collect the feedback  on your improvements too. <\/span><br \/><span><\/span><br \/><span>Don&#8217;t assume that one story has to  equal one release, because you&#8217;ll be tempted to inflate your individual  story to contain more than it should. But try to keep releases down to  as few stories as possible so they can happen frequently : which  maximizes both your information, and the customer&#8217;s sense of progress.<\/span><\/p><\/blockquote>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>My Quora answer : Iterative, &#8220;test driven&#8221;, development. Break your idea down into a number of simple &#8220;stories&#8221;, each of which describes a single chunk of activity which goes all the way through from the beginning to the end of a user&#8217;s experience with the software. Importantly a story is not a traditional &#8220;component&#8221; &#8230; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[244,450,515],"class_list":["post-75","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-lean-startup","tag-test-driven-development","tag-xp"],"_links":{"self":[{"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=75"}],"version-history":[{"count":0,"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}