{"id":40,"date":"2009-11-22T21:55:43","date_gmt":"2009-11-23T05:55:43","guid":{"rendered":"http:\/\/angryweasel.com\/blog\/?p=40"},"modified":"2009-11-22T21:57:06","modified_gmt":"2009-11-23T05:57:06","slug":"iterate-iterate-and-iterate-again","status":"publish","type":"post","link":"https:\/\/angryweasel.com\/blog\/iterate-iterate-and-iterate-again\/","title":{"rendered":"Iterate, Iterate, and Iterate again"},"content":{"rendered":"<p>I\u2019ve been a big fan of iterating since before I knew I was doing it. When I first read <a href=\"http:\/\/www.pragprog.com\/the-pragmatic-programmer\">The Pragmatic Programmer<\/a> nearly ten years ago, I was delighted to read about the concept of Tracer Bullets applied to programming. The concept of tracer bullets (based on guns firing an occasional phosphorous round in order to aim in the dark) is to start with a skeleton implementation and slowly add functionality rather than try to deliver the whole ball of wax at once. The concepts rang true to me before I really understood what Agile and TDD were all about, and I was happy to see that people who knew what they were talking about confirm that my typical approach to software development had some merit. To this day, that\u2019s generally the way I write code (shoot me \u2013 I don\u2019t always use TDD for the crap utilities I write). When I write code, I start with barely more than an empty function, then I add, test, iterate and refactor until the code does what I wanted it to do. I\u2019m not smart enough of a programmer to do it any other way, and I (usually) get the expected result in the end.<\/p>\n<p>But I iterate everywhere. At work, I put together skeleton project plans. Then I slowly fix them and add deliverables and dates slowly until I have something that works. When I write music, I start with a basic structure \u2013 sometimes a melody, sometimes a rhythm, and sometimes a chord progression. I slowly plug stuff in, add and remove parts, and repeat until I have something I like.<\/p>\n<p>I\u2019ve found iteration most beneficial in writing. When I write seriously (as in <a href=\"http:\/\/www.hwtsam.com\">hwtsam<\/a> or my chapter in beautiful testing, or many of the articles I\u2019ve written rather than this blog), I always iterate. I usually start by creating an outline, and making the outline headings the subheadings in the chapter. I don\u2019t worry about coming up with clever names, I just make sure the order looks right. Then (either immediately, or in another \u201cwriting session\u201d), I\u2019ll start filling in some text below the subheadings. When I get blocked on one section, I stop and move on to the next section. Sometimes I only write something like \u201ctalk about cyz configuration testing here\u201d \u2013 either because I don\u2019t have the data I need yet, or more often, because I don\u2019t <em>feel<\/em> like writing about xyz configuration testing yet. In a later session, I may make another pass, or I may focus on adding specifically to another section or two. I add sections and remove sections as needed. Eventually, I find (or at least try to find) themes I can link together. Finally, once I \u201cthink\u201d it\u2019s done, I close the file and come back to it in a day. Then I read it, ask myself \u201cwhat the f\u2026heck was I thinking\u201d, and make edits and rewrites, save then close. Then I do it again. Then I do it at least one more time. Eventually, it \u201cships\u201d and I\u2019m done (but I seem to always find stuff I want to change).<\/p>\n<p>I can\u2019t imagine <em>not<\/em> iterating on any task with a semblance of complexity \u2013 but not everyone seems to be on board with my approach. I was talking with a colleague some time ago who was putting on a series of collaborative events at MS. I was eager to help, so I asked them for details \u2013 e.g. how long will it be, how will you break it down, what are the outputs and a few other similar questions. He answered, \u201cthe strategy doc is almost done, and when it is, we can start thinking about the execution\u201d. Yuk \u2013 that just seems wrong to me. Perhaps I\u2019m a cowboy, but this is another case where I\u2019d rather settle on the basics, try it out, and adjust. Sure, you need a vision \/ strategy, but I don\u2019t think you don\u2019t need a 10 page doc written before you get some people in a room to work together.<\/p>\n<p>Or perhaps I just need to plan more \u2013 or set up a pre-planning meeting to discuss the preliminary plan \u2013 but not likely.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I\u2019ve been a big fan of iterating since before I knew I was doing it. When I first read The Pragmatic Programmer nearly ten years ago, I was delighted to read about the concept of Tracer Bullets applied to programming. The concept of tracer bullets (based on guns firing an occasional phosphorous round in order&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-40","post","type-post","status-publish","format-standard","hentry","category-allposts"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts\/40","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/comments?post=40"}],"version-history":[{"count":0,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts\/40\/revisions"}],"wp:attachment":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/media?parent=40"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/categories?post=40"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/tags?post=40"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}