<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
  <channel>
    <title>
      James Shore
      
    </title>
    <link>http://jamesshore.com</link>
    <description>The Art of Agile</description>
    <language>en</language>
    <copyright>Copyright 2000-2006, James Shore</copyright>
    <generator>Blosxom v2.0</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    
<item>
  <title>Aug 24th at Agile 2009: What Makes Agile Ours? (Panel)</title>
  <link>http://jamesshore.com/Calendar/2009-08-24.html</link>
  <category>/Calendar</category>
  <pubDate>Tue, 02 Jun 2009 00:04:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Calendar/2009-08-24.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;02 Jun 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Calendar/"&gt;James Shore/Calendar&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    &lt;p&gt;&lt;p&gt;&lt;a href="http://aaron.sanders.name/"&gt;Aaron Sanders&lt;/a&gt; is moderating the panel discussion "What Makes This Agile Ours? A Talk with Previous Gordon Pask Award Winners" at 11:00am on the Leadership &amp;amp; Teams stage of &lt;a href="http://agile2009.agilealliance.org/"&gt;Agile 2009&lt;/a&gt;. I'll be there, as will Bob Payne, Arlo Belshee, Steve Freeman, Kenji Hiranabe, Laurent Bossavit, J. B. Rainsberger, and Jeff Patton. The panel has a neat iterative structure and should be a lot of fun.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;a href='http://jamesshore.com/Calendar/2009-08-24.html'&gt;Read More...&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Calendar/2009-08-24.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Aug 27th at Agile 2009: Replacing End-to-End Testing (Workshop)</title>
  <link>http://jamesshore.com/Calendar/2009-08-27c.html</link>
  <category>/Calendar</category>
  <pubDate>Tue, 02 Jun 2009 00:03:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Calendar/2009-08-27c.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;02 Jun 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Calendar/"&gt;James Shore/Calendar&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    &lt;p&gt;&lt;p&gt;Arlo Belshee and I are delivering "Slow and Brittle: Replacing End-to-End Testing" at 4:00pm Thursday on the Testing stage of &lt;a href="http://agile2009.agilealliance.org/"&gt;Agile 2009&lt;/a&gt;. This should be a fun session: we're asking gurus to join us in a workshop format to figure out alternatives to end-to-end tests.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;a href='http://jamesshore.com/Calendar/2009-08-27c.html'&gt;Read More...&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Calendar/2009-08-27c.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Aug 27th at Agile 2009: Agile Metrics (Presentation)</title>
  <link>http://jamesshore.com/Calendar/2009-08-27b.html</link>
  <category>/Calendar</category>
  <pubDate>Tue, 02 Jun 2009 00:02:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Calendar/2009-08-27b.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;02 Jun 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Calendar/"&gt;James Shore/Calendar&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    &lt;p&gt;&lt;p&gt;I've teamed up with my buddy &lt;a href="http://agileinstitute.com/agile-institute/bio-rob-myers/"&gt;Rob Myers&lt;/a&gt; to deliver "Metrics in an Agile World" at 11:00am Thursday on the Leadership &amp;amp; Teams stage of &lt;a href="http://agile2009.agilealliance.org/"&gt;Agile 2009&lt;/a&gt;. We're going to be looking at how metrics work with Agile, which ones are appropriate, and pitfalls to avoid.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;a href='http://jamesshore.com/Calendar/2009-08-27b.html'&gt;Read More...&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Calendar/2009-08-27b.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Aug 27th at Agile 2009: The Agile CTO (Workshop)</title>
  <link>http://jamesshore.com/Calendar/2009-08-27a.html</link>
  <category>/Calendar</category>
  <pubDate>Tue, 02 Jun 2009 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Calendar/2009-08-27a.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;02 Jun 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Calendar/"&gt;James Shore/Calendar&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    &lt;p&gt;&lt;p&gt;&lt;a href="http://www.futureworksconsulting.com/"&gt;Diana Larsen&lt;/a&gt; and I are building on our CTO research to present "The Agile CTO" at &lt;a href="http://agile2009.agilealliance.org/"&gt;Agile 2009&lt;/a&gt;. In this session, we'll be working with executives with Agile experience to discover and document patterns for Agile executives to use.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;a href='http://jamesshore.com/Calendar/2009-08-27a.html'&gt;Read More...&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Calendar/2009-08-27a.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Art of Agile Planning and Delivery Next Week</title>
  <link>http://jamesshore.com/Blog/Art-of-Agile-Planning-and-Delivery-Next-Week.html</link>
  <category>/Blog</category>
  <pubDate>Mon, 01 Jun 2009 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Art-of-Agile-Planning-and-Delivery-Next-Week.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;01 Jun 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;Quick reminder: My training courses with Diana Larsen, &quot;The Art of Agile Planning&quot; and &quot;The Art of Agile Delivery,&quot; are coming up next week in Portland, Oregon.&lt;/p&gt;

&lt;p&gt;I've &lt;a href=&quot;http://jamesshore.com/Blog/Come-Drink-from-the-Firehose.html&quot;&gt;talked about these courses before&lt;/a&gt;, so I won't do so again, although I do want to share a nice testimonial that came in a few weeks ago:&lt;/p&gt;

&lt;blockquote&gt;
	&lt;p&gt;We sent developers to [The Art of Agile Delivery] last year and it was outstanding. We also sent several people including myself to [The Art of] Agile Planning, and we loved it. Both classes had a huge impact to how we work, even for those we weren?t able to send.&lt;/p&gt;
	&lt;p class=&quot;sig&quot;&gt;Don Dornblaser, Director, WebMD&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hearing that your course made a lasting impact, particularly to people who didn't even attend, is just about the highest praise I can get from training. Thanks, Don.&lt;/p&gt;

&lt;p&gt;The courses are next week, so if you're planning to attend, now is your last chance &lt;a href=&quot;http://www.regonline.com/art-of-agile&quot;&gt;to register&lt;/a&gt;. The courses are $1,395 for &quot;The Art of Agile Planning&quot; on June 8th and 9th, and $1,795 for &quot;The Art of Agile Delivery&quot; on June 10th, 11th, and 12th. There's a nice discounted rate of $2,495 if you attend both.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.regonline.com/art-of-agile&quot;&gt;Register here.&lt;/a&gt;&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Art-of-Agile-Planning-and-Delivery-Next-Week.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>How TDD and Pairing Increase Production</title>
  <link>http://jamesshore.com/Blog/How-TDD-and-Pairing-Increase-Production.html</link>
  <category>/Blog</category>
  <pubDate>Tue, 26 May 2009 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/How-TDD-and-Pairing-Increase-Production.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;26 May 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;Mike Hill has a lovely little essay titled &quot;&lt;a href=&quot;http://anarchycreek.com/2009/05/26/how-tdd-and-pairing-increase-production/&quot;&gt;How TDD and Pairing Increase Production&lt;/a&gt;.&quot;&lt;/p&gt;

&lt;blockquote&gt;
	&lt;p&gt;&lt;strong&gt;If you want more production, look first to raising your internal quality.&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;...&lt;/p&gt;
	&lt;p&gt;Do I really still need to rehearse this?  All day long, every time you make a move, you will be depending on the code that?s already there.  Every line of it you have to study will slow you down.  Every extra open dependency will slow you down.  Every bad variable name will slow you down. &lt;strong&gt;Every flawed design decision, be it big or small, will slow you down.&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;If you want to work as fast as you can, you want to work with clean code.  Period.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's a lot of truth in that essay. &lt;a href=&quot;http://anarchycreek.com/2009/05/26/how-tdd-and-pairing-increase-production/&quot;&gt;Go read it.&lt;/a&gt;&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/How-TDD-and-Pairing-Increase-Production.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Agile Planning &amp;amp; Delivery: Last Chance for Early-Bird Registration</title>
  <link>http://jamesshore.com/Blog/Agile-Planning-and-Delivery-Last-Chance.html</link>
  <category>/Blog</category>
  <pubDate>Wed, 29 Apr 2009 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Agile-Planning-and-Delivery-Last-Chance.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;29 Apr 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;Quick training course reminder: Tomorrow is the early-bird registration deadline for &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Planning.html&quot;&gt;The Art of Agile Planning&lt;/a&gt; (held June 8th &amp;amp; 9th in Portland, Oregon) and &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Delivery.html&quot;&gt;The Art of Agile Delivery&lt;/a&gt; (June 10-12). With the discount, the courses are $995 and $1,395 respectively, or $1,995 for both. Starting in May, the price will be $1,395 and $1,795, or $2,995 for both.&lt;/p&gt;

&lt;p&gt;To get the best price, &lt;a href=&quot;http://www.regonline.com/art-of-agile&quot;&gt;sign up now&lt;/a&gt;.

&lt;p class=&quot;aside&quot;&gt;(Read about our approach to training in my essay, &quot;&lt;a href=&quot;http://jamesshore.com/Blog/Come-Drink-from-the-Firehose.html&quot;&gt;Come Drink from the Firehose&lt;/a&gt;.&quot;)&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Agile-Planning-and-Delivery-Last-Chance.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Come Drink from the Firehose</title>
  <link>http://jamesshore.com/Blog/Come-Drink-from-the-Firehose.html</link>
  <category>/Blog</category>
  <pubDate>Thu, 23 Apr 2009 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Come-Drink-from-the-Firehose.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;23 Apr 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;I've previously mentioned that Diana Larsen and I are teaching two courses in June: &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Planning.html&quot;&gt;The Art of Agile Planning&lt;/a&gt; and &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Delivery.html&quot;&gt;The Art of Agile Delivery&lt;/a&gt;. But I don't think I've mentioned what makes these courses unique. Diana and I share two core beliefs about training: we want to our students to have &lt;em&gt;experiences&lt;/em&gt;, not lectures; and whenever possible, we want those to be &lt;em&gt;real-world&lt;/em&gt; experiences rather than metaphors or simulations.&lt;/p&gt;


&lt;h3&gt;Experiences over Lectures&lt;/h3&gt;

&lt;p&gt;In &lt;cite&gt;The Art of Agile Planning&lt;/cite&gt;, we're helping you understand how to plan Agile projects, both from an iteration/Sprint perspective, and from the larger release/organizational perspective. There are a lot of skills to learn, and one thing we know is that you can't build skills passively. You have to experience the thing being taught--&lt;em&gt;do&lt;/em&gt; it--before it really sinks in.&lt;/p&gt;

&lt;p&gt;Part of the reason is that &quot;textbook&quot; answers tend to strip out the messy complexity that occurs when you put work into practice. In real-world planning, there's tension and pressure. Different people want different things. There's a fear about what will happen if you don't get everything done by a certain time. Existing interpersonal friction is magnified.&lt;/p&gt;

&lt;p&gt;You'll never learn this stuff by hearing a lecture. Most instructors don't even mention it. (Sadly, some teach from books, not experience, and don't know that they don't know it.)&lt;/p&gt;

&lt;p&gt;So we do it. We have people practice planning, many times, and we intentionally put real tension and pressure into the mix by making sure the planning outcomes actually matter. Suddenly the stuff that seemed so easy when it was up on the board isn't as easy any more. Mistakes are made. And real learning happens.&lt;/p&gt;


&lt;h3&gt;Reality over Simulations&lt;/h3&gt;

&lt;p&gt;Hidden complications explain why we prefer real-world experiences over metaphorical simulations, too. Sure, you can experience aspects of Agile delivery by sketching a mousetrap on a flip chart. You'll learn about cross-functional teamwork, communication challenges, all kinds of good stuff.&lt;/p&gt;

&lt;p&gt;But it's nothing compared to the experience of actually &lt;em&gt;delivering&lt;/em&gt; working software in a time-boxed iteration. Version control. Flaky computers. Cross-platform compatibility. Strict deadlines. These are all part of reality, and they make the cross-functional teamwork, communication challenges, and so forth even more challenging.&lt;/p&gt;

&lt;p&gt;In &lt;cite&gt;The Art of Agile Delivery&lt;/cite&gt;, we do something that I'm exceedingly proud of: we have students define, develop, and deliver a complete software product in several 90-minute iterations. We make it as close to the real world as we possibly can, with things like on-site customers, version control, automated builds, and a third-party deployment environment.&lt;/p&gt;

&lt;p&gt;As you can probably guess, it's hard. Everything I see on real software teams is repeated in miniature in that classroom. The last time we taught this course, some teams struggled with getting their computers working. Some tossed out the rigorous practices they had learned and started hacking. And some refused to acknowledge the deadline and scale down their ambitious plans. Nobody delivered software at the end of the first iteration. Nobody.&lt;/p&gt;

&lt;p&gt;Sound like chaos? Sound painful? Yes. It was. &lt;em&gt;That's what software development is like.&lt;/em&gt; And yet we have to deliver anyway.&lt;/p&gt;

&lt;p&gt;And at the end of the second iteration, some teams did. By the fourth iteration, everyone did. Learning happened.&lt;/p&gt;


&lt;h3&gt;The Firehose&lt;/h3&gt;

&lt;p&gt;These core beliefs--experiences over lectures and reality over simulations--does mean that we expect a lot from our students. You'll be drinking from the firehose. You have to be willing to make mistakes, and learn from them. It's not for everybody.

&lt;p&gt;We're okay with that. We figure the challenge will attract the kinds of students we want to teach. If that's you, come join us.&lt;/p&gt;


&lt;h3&gt;Early Bird Discount Expires Soon&lt;/h3&gt;

&lt;p&gt;We have a nice early-bird discount that expires in seven days, on April 30th, so you should register soon in order to get the best price. &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Planning.html&quot;&gt;The Art of Agile Planning&lt;/a&gt; is on June 8th &amp;amp; 9th; with the discount, it's $995. &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Delivery.html&quot;&gt;The Art of Agile Delivery&lt;/a&gt; is on June 10th through 12th; it's $1,395. They go well together; the combined early bird rate is $1,995, a great deal.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.regonline.com/art-of-agile&quot;&gt;Register here.&lt;/a&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Come-Drink-from-the-Firehose.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Monthly in Portland, Oregon: Come Hang With the Agilists (Lunch)</title>
  <link>http://jamesshore.com/Calendar/Agile-Lunch.html</link>
  <category>/Calendar</category>
  <pubDate>Fri, 17 Apr 2009 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Calendar/Agile-Lunch.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;17 Apr 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Calendar/"&gt;James Shore/Calendar&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The local Portland Agile community gets together every first Friday to eat, drink, and make merry.  Oh, and sometimes we talk about agile stuff, too.  Come join us!  I don't always attend, but I come to as many sessions as my schedule permits.  You can find us at the Broadway McMenamins (on the corner of NE Broadway and 15th) on the first Friday of every month at 1:00pm.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Calendar/Agile-Lunch.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>The Agile Startup: Build and Deploy</title>
  <link>http://jamesshore.com/Blog/Agile-Startup-Build-and-Deploy.html</link>
  <category>/Blog</category>
  <pubDate>Tue, 07 Apr 2009 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Agile-Startup-Build-and-Deploy.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;07 Apr 2009&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;blockquote&gt;
	&lt;p&gt;Q: What's the difference between an unemployed programmer and an entrepreneur?&lt;/p&gt;
	&lt;p&gt;A: You don't know either?&lt;/p&gt;
	&lt;p class=&quot;sig&quot;&gt;&lt;a href=&quot;http://www.threeriversinstitute.org/&quot;&gt;Kent Beck&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The economy's down, and that sucks, but it's good news for innovation. People everywhere are creating startups. A lot of you will fail--some due to endless procrastination, some due to poor marketing, and some due to old fashioned bad luck. But a few of you will succeed. That's what makes it worthwhile.&lt;/p&gt;

&lt;p&gt;I've worked with startups from all ends of the spectrum. Some had successfully cashed out; some with several rounds of funding, and some that were struggling to survive. Just recently, I've been working with Arlo Belshee and Kim Wallmark on our own startup. More about that in a later post.&lt;/p&gt;

&lt;p&gt;From these experiences, I've learned a thing or two about software development in an entrepreneurial environment. This essay is the first of a series to help your startup succeed--or at least, not fail for software development reasons. Turning off World of Warcraft and getting down to work? That's your job.&lt;/p&gt;

&lt;h3&gt;Why Process Matters&lt;/h3&gt;

&lt;p&gt;My field is software process--specifically, Agile methods. One founder I talked to pooh-pooh'd the idea of process. &quot;We don't have time for process,&quot; he said. &quot;We need to focus on satisfying our customers.&quot;&lt;/p&gt;

&lt;p&gt;That's a great attitude, really. And this founder was fortunate to &lt;em&gt;have&lt;/em&gt; paying customers and actual profit. But the part about process? Totally wrong.&lt;/p&gt;

&lt;p&gt;&quot;Process&quot; is nothing more than &lt;em&gt;the way you do your work&lt;/em&gt;. Process improvement: &lt;em&gt;improving&lt;/em&gt; the way you do your work. Agile processes are ways of working better. It's that simple. Don't be fooled by the suckers who buy into CMM Maturity Models (or, heaven forfend, &quot;Agile&quot; maturity models)--process improvement does &lt;em&gt;not&lt;/em&gt; mean lots of bureaucracy, overhead, or expensive Certified anythings. It means &lt;strong&gt;doing your job better&lt;/strong&gt;. That's what this series is about: doing your job better.&lt;/p&gt;

&lt;p&gt;Enough talk. In this essay, we'll look at one way to make your work habits a little bit better.&lt;/p&gt;


&lt;h3&gt;Automate Your Release&lt;/h3&gt;

&lt;p&gt;Part of the secret to high performance software development is staying in the zone. Some people call it &lt;a href=&quot;http://c2.com/cgi/wiki?MentalStateCalledFlow&quot;&gt;flow&lt;/a&gt;. It's that state of mind when you have everything clear in your head, know exactly what you're doing, and you've tuned out the rest of the world.&lt;/p&gt;

&lt;p&gt;Flow is difficult to achieve and easy to lose. Any significant interruption pulls you out of the zone and all of those delicate mental structures come crashing down. Your productivity comes to a screeching halt as you deal with the interruption. When you're ready to get back to work, it takes a long time--fifteen minutes, &lt;a href=&quot;http://www.dorsethouse.com/books/pw.html&quot;&gt;according to Tom DeMarco and Timothy Lister&lt;/a&gt;--to get back in the zone.&lt;/p&gt;

&lt;p class=&quot;aside&quot;&gt;(&lt;a href=&quot;http://jamesshore.com/Agile-Book/pair_programming.html&quot;&gt;Pair programming&lt;/a&gt; is one way to reduce the cost of interruptions, but that's an essay for another day.)&lt;/p&gt;

&lt;p&gt;One of the ways to kill flow is to have a clunky build and deployment process. Builds sort of grow organically, like fungus. An IDE build here, an FTP there, an &lt;code&gt;ssh&lt;/code&gt; session there. Before you know it, building and deploying your app is a major hassle that takes half an hour on a good day, and you're lucky if only one thing breaks.&lt;/p&gt;

&lt;p&gt;Prevent this disruption by creating an automated build and deployment script. It doesn't have to be perfect, but make a point of making tiny improvements as you identify pain points. One of the keys to process improvement is to realize that &lt;em&gt;imperfect&lt;/em&gt; improvement is better than &lt;em&gt;no&lt;/em&gt; improvement. Six months of imperfect improvements in a row leads to some pretty awesome results.&lt;/p&gt;


&lt;h3&gt;A Real-World Example&lt;/h3&gt;

&lt;p&gt;As I mentioned, I'm currently working on a startup with Arlo Belshee and Kim Wallmark. Here's the build and deploy script we wrote for our startup's first product. The version I'm about to show you is from about 12 days into development. The script isn't perfect--far from it--but it does allow us to release our software painlessly.  We've improved it over time and we'll continue to do so.&lt;/p&gt;

&lt;p&gt;First, here's our rakefile. (&lt;a href=&quot;http://rake.rubyforge.org/&quot;&gt;Rake&lt;/a&gt; is a Ruby-based build system that I like.) The rakefile is the master build for the system. To build and test, we type &lt;code&gt;rake&lt;/code&gt;; to build, test, and deploy, we type &lt;code&gt;rake ship&lt;/code&gt;. I've added a few comments to help you understand what's going on. The highlighted targets are the ones we run from the command-line.&lt;/p&gt;

&lt;div class=&quot;code&quot;&gt;
	require 'qunit_runner.rb' &lt;span class=&quot;comment&quot;&gt;# A runner we wrote for unit testing Javascript&lt;/span&gt;
&lt;br /&gt;	
&lt;br /&gt;	task :default =&gt; :test &lt;span class=&quot;comment&quot;&gt;# Run the 'test' target if no target provided&lt;/span&gt;
&lt;br /&gt;	
&lt;br /&gt;	task :python do &lt;span class=&quot;comment&quot;&gt;# Builds the python (server-side) code&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    sh &quot;cd app &amp;amp;&amp;amp; python setup.py develop&quot;
&lt;br /&gt;	end
&lt;br /&gt;	
&lt;br /&gt;	task :database_schema =&gt; :python do &lt;span class=&quot;comment&quot;&gt;# Rebuilds the database schema&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    touch &quot;app/devdata.sqlite&quot;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    rm &quot;app/devdata.sqlite&quot;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    sh &quot;cd app &amp;amp;&amp;amp; tg-admin sql create&quot;
&lt;br /&gt;	end
&lt;br /&gt;	
&lt;br /&gt;	task :server_test do &lt;span class=&quot;comment&quot;&gt;# Tests the server-side Python code&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    sh &quot;testserver&quot;
&lt;br /&gt;	end
&lt;br /&gt;	
&lt;br /&gt;	task :client_test do &lt;span class=&quot;comment&quot;&gt;# Tests the client-side Javascript code using our custom qunit_runner.rb&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    run_qunit
&lt;br /&gt;	end
&lt;br /&gt;	
&lt;br /&gt;	&lt;em&gt;desc &quot;Run tests&quot;&lt;/em&gt; &lt;span class=&quot;comment&quot;&gt;# Used from command-line&lt;/span&gt;
&lt;br /&gt;	task :test =&gt; [:server_test, :client_test]
&lt;br /&gt;	
&lt;br /&gt;	&lt;em&gt;desc &quot;Start local server&quot;&lt;/em&gt; &lt;span class=&quot;comment&quot;&gt;# Used from command-line&lt;/span&gt;
&lt;br /&gt;	task :serve =&gt; [:python, :database_schema] do
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    sh &quot;cd app &amp;amp;&amp;amp; python start-product.py&quot;
&lt;br /&gt;	end
&lt;br /&gt;	
&lt;br /&gt;	&lt;em&gt;desc &quot;Deploy to production server&quot;&lt;/em&gt; &lt;span class=&quot;comment&quot;&gt;# Used from command-line&lt;/span&gt;
&lt;br /&gt;	task :ship =&gt; :test do
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	    sh &quot;ship.bat&quot;
&lt;br /&gt;	end
&lt;/div&gt;

&lt;p&gt;There's a few things of note in this build. First, there's not much to it. A lot of the heavy lifting is done by batch files. That's an example of its imperfection. The automation was put together piecemeal over time, and there hasn't yet been a good enough reason to merge the files into the master build. As the build gets bigger, we'll have to improve the way we handle modularity, because the scripts will get unwieldy if we don't.&lt;/p&gt;

&lt;p&gt;On the positive side, one of the best things we've done is to take the time and pain to get a &lt;code&gt;localhost&lt;/code&gt; server working and automated. We type &lt;code&gt;rake serve&lt;/code&gt; and we can run everything disconnected from the network. This allows us to build and test changes without breaking others' work. I &lt;em&gt;highly&lt;/em&gt; recommend that you do this if you aren't already.&lt;/p&gt;

&lt;p class=&quot;aside&quot;&gt;(Do localhost servers seem like a no-brainer to you? Good. You'd be surprised how many people don't do it.)&lt;/p&gt;

&lt;p&gt;The Python build is a standard TurboGears build file, and I'm going to cover the automated tests in a later essay, so let's skip ahead to the automated deployment. When we type &lt;code&gt;rake ship&lt;/code&gt;, the rakefile builds and tests, then calls &lt;code&gt;ship.bat&lt;/code&gt;, a Windows batch file.&lt;/p&gt;

&lt;div class=&quot;code&quot;&gt;
&lt;span class=&quot;comment&quot;&gt;# Change backwards slashes into forward slashes so rsync works&lt;/span&gt;
&lt;br /&gt;set PRODUCT=%CD:~2,255%\app\
&lt;br /&gt;set PRODUCT=%PRODUCT:\=/%
&lt;br /&gt;
&lt;br /&gt;set BIN_DIR=&quot;%CWRSYNC_LOCATION%\bin\&quot;
&lt;br /&gt;if DEFINED CWRSYNC_LOCATION (
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	pushd %BIN_DIR%
&lt;br /&gt;&amp;nbsp;&amp;nbsp;   &lt;span class=&quot;comment&quot;&gt;# Copy the deployment tree to the server&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	rsync.exe --recursive --perms --times --delete --force --delete-excluded --progress --exclude=.svn --exclude=.DS_Store --exclude=*.pyc --exclude=test --include=.* %PRODUCT% user@example.com:/home/example/app
&lt;br /&gt;&amp;nbsp;&amp;nbsp;   &lt;span class=&quot;comment&quot;&gt;# Bounce the server so it sees the new code&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	ssh user@example.com ~/bounce-webserver.sh
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	popd
&lt;br /&gt;) else (
&lt;br /&gt;&amp;nbsp;&amp;nbsp;   &lt;span class=&quot;comment&quot;&gt;# Tell us what environment variables we need to set&lt;/span&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;	echo Set the variable CWRSYNC_LOCATION TO THE directory cwRsync was installed in.  &lt;br /&gt;(Example: C:\Program Files\cwrsync)
&lt;br /&gt;)
&lt;/div&gt;

&lt;p&gt;In the very beginning, we deployed by running Putty and manually telling it to copy files. That was good enough for about a day, and then we beat our heads against Windows for a while and figured out how to use &lt;code&gt;rsync&lt;/code&gt; to copy our code to the server. Later, we added ssh public key authentication so we didn't have to type in our passwords, and then a little script to bounce the server for us.&lt;/p&gt;

&lt;p&gt;There's still a lot to improve. A lot of the server configuration is still done manually on the server. That will hurt if something catastrophic happens to the server. We could also do a better job of building out our directory structure.&lt;/p&gt;

&lt;p&gt;But overall, deploying is pretty painless. We've directed our attentions elsewhere for now. Our deployment isn't perfect, but it's good enough that it no longer interrupts flow.&lt;/p&gt;


&lt;h3&gt;The Relentless March of Imperfect Improvements&lt;/h3&gt;

&lt;p&gt;In a startup, you constantly have to balance delivering software with improving your capacity to deliver. The pressure of the situation tends to emphasize &quot;deliver&quot; over &quot;improve.&quot; That's okay, as long as you don't go backwards. Many of the startups that purchase my consulting services have accumulated years of shortcuts, and it's left them with an inability to innovate. Changes to their code are so costly and bug-prone, they decide to throw it all away and start over. By this point, there's severe frustration with the dev team and discussions about outsourcing development entirely. Yikes. Don't do that.&lt;/p&gt;

&lt;p&gt;Greatness emerges from a relentless march of imperfect improvements. A tiny improvement today enables a better improvement tomorrow, which enables even more improvement the next day and the day after that. Before you know it, you have more fun working in your &quot;legacy&quot; codebase than on brand-new code. It's possible! I've seen it.&lt;/p&gt;

&lt;p&gt;As for us, it took about a half a day to figure out how to get &lt;code&gt;rsync&lt;/code&gt; to play nice with Windows. Creating the rest of the build script wasn't free, either. Given that we have less than a month of development under our belts, I don't think we've recouped the cost yet. (It's hard to see all of the pain we've prevented, though.) Despite that cost, I think it was worth it. The real benefit is that we've offloaded all the thought and work around deployment. We don't have to interrupt flow to carefully consider all the issues. We just type &lt;code&gt;rake ship&lt;/code&gt; and we're done.&lt;/p&gt;

&lt;p&gt;If building and deploying your code is a distraction (or worse, if you've yet to do it), invest a bit of time in a good automated build. It doesn't have to be perfect. Just make it good enough so that you can stop worrying about shipping and get back to focusing on code.&lt;/p&gt;

&lt;h3&gt;Further Reading&lt;/h3&gt;

&lt;p&gt;Chromatic has a nice series of essays over at Modern Perl Books about how to release software:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.modernperlbooks.com/mt/2009/03/shooting-yourself-in-the-foot-with-customer-branches.html&quot;&gt;Shooting Yourself in the Foot with Customer Branches&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.modernperlbooks.com/mt/2009/04/how-to-ruin-your-ability-to-release-software.html&quot;&gt;How to Ruin Your Ability to Release Software&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.modernperlbooks.com/mt/index.html&quot;&gt;The Rapid Release Tautology&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Shane Warden and I write about automated builds in &lt;a href=&quot;http://jamesshore.com/Agile-Book/&quot;&gt;&lt;cite&gt;The Art of Agile Development&lt;/cite&gt;&lt;/a&gt;. There's a summary at &lt;a href=&quot;http://jamesshore.com/Agile-Book/ten_minute_build.html&quot;&gt;Ten Minute Build&lt;/a&gt; and additional commentary at &lt;a href=&quot;http://jamesshore.com/Blog/Living-in-the-Punch-Card-Era.html&quot;&gt;Living in the Punch-Card Era&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Diana Larsen and I teach a hands-on Agile delivery course called &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Delivery.html&quot;&gt;The Art of Agile Delivery&lt;/a&gt;. In that course, you'll form a team to build a full software product from scratch, and you'll use build automation and other techniques to ship that product in 90-minute increments. It's pretty cool. Once you've successfully built and released software in a 90 minute cycle, shipping once a week is a doddle.&lt;/p&gt;

&lt;p&gt;At the time of this writing, &lt;a href=&quot;http://jamesshore.com/Training/Art-of-Agile-Delivery.html&quot;&gt;the next course&lt;/a&gt; is June 10-12, 2009. There's a nice early-bird discount if you register prior to April 30th.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Agile-Startup-Build-and-Deploy.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
  </channel>
</rss>