<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hey, it&#039;s OPOWER! &#187; Tom Vaughan</title>
	<atom:link href="http://www.heyitsopower.com/author/tom-vaughan/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.heyitsopower.com</link>
	<description>Energy Efficiency Starts at /usr/home</description>
	<lastBuildDate>Tue, 27 Jul 2010 20:14:37 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maven-izing Google&#8217;s Data Client Java Library</title>
		<link>http://www.heyitsopower.com/development/maven-izing-googles-data-client-java-library/</link>
		<comments>http://www.heyitsopower.com/development/maven-izing-googles-data-client-java-library/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 20:09:14 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=238</guid>
		<description><![CDATA[Quick and dirty perl script for mvn deploy:deploy-file for the 40+ JARs google ships in it java client bundle.]]></description>
			<content:encoded><![CDATA[<p>OPOWER&#8217;s first Innovation Day was a lot of fun.  I was waiting about 30 minutes for my primary project (building an AWS machine image for our hudson slave) to complete and I got sucked in to a different project involving automatically downloading google analytics for all the traffic on all the websites we host for our clients.</p>
<p>Clicking around google&#8217;s well-documented &#8220;get started&#8221; guides, it looked like they haven&#8217;t made their client JARs available in any MVN repos anywhere.  There is a (not-google-sponsored) source forge project that points to a sonatype repo, but instead of adding another 3rd party repo to our small but growing list, I figured it&#8217;d be easier for small proof of concept purposes to just manually install the google JARs in OPOWER&#8217;s repo (thereby making them accessible to all our developer&#8217;s boxes).</p>
<p>It quickly became clear that the number of JARs google ships with makes it faster and less error prone to script the mvn repo installation than doing manual command line copy &amp; pasting.  Lo, my gift to the world:</p>
<ul>
<li>Grab latest JARs from the &#8220;gdata-java&#8221; link here: <a href="http://code.google.com/p/gdata-java-client/downloads/list">http://code.google.com/p/gdata-java-client/downloads/list</a></li>
<li>Unzip on the server hosting your company&#8217;s mvn repo</li>
<li>cd down in to ./gdata/java/lib</li>
<li>Make a file &#8216;installall.pl&#8217; in that lib directory:</li>
<pre class="java">#!/usr/bin/perl -w

my @jars = `ls *.jar`;
chomp(@jars);
foreach my $jar (@jars) {
  if($jar =~ /(.*)-(\d\.\d)\.jar/) {
    my $cmd = "./install.pl --artifactId $1 --version $2 --jar $jar";
    open(CMD, "$cmd|") or die "Could not execute $cmd $!";
    while(&lt;CMD&gt;) {
       print $_;
    }
   close(CMD);
  }
}</pre>
<li>Still in that directory, make another file &#8216;install.pl&#8217;:</li>
<pre class="java">#!/usr/bin/perl -w

use strict;
use warnings;
use Getopt::Long;

sub usage();

my $artifactId;
my $version;
my $jar;
GetOptions('artifactId=s' =&gt; \$artifactId ,
           'version=s' =&gt; \$version,
           'jar' =&gt; \$jar);
die usage() unless ($artifactId &amp;&amp; $version &amp;&amp; $jar);

my $cmd = "mvn deploy:deploy-file " .
      "-DgroupId=com.google.gdata " .
      "-DartifactId=$artifactId " .
      "-Dversion=$version " .
      "-Dfile=$jar " .
      "-Dpackaging=jar " .
      "-DgeneratePom=true " .
      "-Durl=file:///opt/mvn_repo " .  &lt;---  change this for your env
      "-Drepository=opower_local";  &lt;--- change this for your env
print "executing command = $cmd\n";
$cmd = "date";
open(CMD, "$cmd|") or die "Could not exec $cmd $!";
while(&lt;CMD&gt;) {
    print $_;
}
close(CMD);

sub usage() {
    print "Usage: ./install.pl [--artifactId artifactId] [--version version] [--jar jarfile]\n";
    print "Example: ./install.pl --artifactId gdata-webmastertools --version 1.0 --jar gdata-webmastertools-1.0.jar\n";
    exit 1;
}</pre>
<li>Don&#8217;t forget to chmod 755 *.pl</li>
<li>Then just run ./installall.pl and all those google JARs should get installed in your repo</li>
</ul>
<p>That assumes the &#8220;mvn&#8221; executable was in your path and that you run the scripts from within the same directory as all the JARs, but it&#8217;s easily modified for whatever your situation may be.</p>
<p>Note that relative to ./lib there are 2 jars in ../deps/ that you should also install in your repo because the google JARs to avoid ClassNotFoundExceptions in some runtime code paths.</p>
<p>Once in, you should be able to boot strap a mvn client project against a Google Data source with a pom not too dissimilar from:</p>
<pre class="java">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;artifactId&gt;foo&lt;/artifactId&gt;
  &lt;packaging&gt;jar&lt;/packaging&gt;
  &lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;Google Client Example&lt;/name&gt;

  &lt;scm&gt;
    &lt;developerConnection&gt;foo&lt;/developerConnection&gt;
  &lt;/scm&gt;

  &lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.google.gdata&lt;/groupId&gt;
        &lt;artifactId&gt;gdata-core&lt;/artifactId&gt;
        &lt;version&gt;1.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.google.gdata&lt;/groupId&gt;
        &lt;artifactId&gt;gdata-analytics&lt;/artifactId&gt;
        &lt;version&gt;2.1&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.google.gdata&lt;/groupId&gt;
        &lt;artifactId&gt;gdata-client&lt;/artifactId&gt;
        &lt;version&gt;1.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.google&lt;/groupId&gt;
        &lt;artifactId&gt;google-collect&lt;/artifactId&gt;
        &lt;version&gt;1.0-rc1&lt;/version&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/project&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/maven-izing-googles-data-client-java-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heisenberg&#8217;s Key Performance Indicators</title>
		<link>http://www.heyitsopower.com/development/heisenbergs-key-performance-indicators/</link>
		<comments>http://www.heyitsopower.com/development/heisenbergs-key-performance-indicators/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 20:13:49 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Product]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=228</guid>
		<description><![CDATA[How do you objectively measure the progress of a software engineering team from iteration to iteration when they are so many variables (human and otherwise)?]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/07/Heisenberg.jpg"><img class="alignright size-medium wp-image-229" title="Heisenberg, when younger." src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/07/Heisenberg-209x300.jpg" alt="A picture of Heisenberg." width="209" height="300" /></a>I was <span style="text-decoration: line-through;">trolling</span> trawling through reddit waiting for a JAR to compile and <a href="http://nerds-central.blogspot.com/2010/07/development-management-act-of.html">found this blog post</a>.  That blog made a couple claims that had crossed my mind a couple months ago when our engineering director solicited  feedback about using Key Performance Indicators for the dev team.  The blog post&#8217;s point wasn&#8217;t so much that the <em>act </em>of measuring a team changes its performance but rather that when the team is aware of what&#8217;s being measured, it naturally &#8220;cheats&#8221; in ways to maximize the measured value.  The first comment on the blog post alerted me to a law I hadn&#8217;t known about, but which sounds pretty intuitively correct:</p>
<p><a href="http://en.wikipedia.org/wiki/Goodhart%27s_law">Goodhart&#8217;s Law</a>: <em>Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes</em></p>
<p>Here at OPOWER, developers and product managers don&#8217;t deal with KPIs on a day-to-day basis&#8230;.I think it&#8217;s mostly a management-level &#8220;let&#8217;s starting capturing some numbers over several months and see if there&#8217;s anything out-of-whack&#8221; kind of thing.</p>
<p>In terms of development KPIs, some of the things we thought it might be interesting to collect included:</p>
<ul>
<li>story points delivered per iteration</li>
<li>% of story points (aggregate) done in an iteration that were planned at the beginning</li>
<li>% QA coverage of production (automated)</li>
<li>etc.</li>
</ul>
<p>The &#8220;story points delivered per iteration&#8221; is, I think, precisely the kind of thing Goodhart was talking about when he made up his law.  <em>That said</em>, we are a business and we are expected to work and be productive, so it isn&#8217;t exactly a satisfying for a VP or CEO to hear from their dev team &#8220;sorry, you can&#8217;t measure us because we&#8217;ll just skew the measurement number to please you.&#8221;  So what&#8217;s management to do with their IT cabal?</p>
<p><em>Assuming</em> you could normalize what story points mean across different teams, and <em>assuming</em> you can account for &#8220;point inflation&#8221; and <em>assuming</em> you accurately tracked vacations and network outages and late requirements and all the other stuff that goes along with uncertainty in exactly how much gets delivered in an iteration, must you also assume that the team gradually skews the number to meet the goal?  What if the goal was kept secret?  What if the team didn&#8217;t know they were being measured?  That&#8217;s hardly a way to foster a healthy relationship between management and product development.<a href="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/07/heisenberg_bb.jpg"><img class="alignright size-full wp-image-230" title="Heisenberg, slightly older ;-)" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/07/heisenberg_bb.jpg" alt="A picture of Walt from Breaking Bad" width="160" height="247" /></a></p>
<p>One way around this dilemma is to find some totally objective metric in the software engineering process.  In other words, if you could apply KPIs to &#8220;number of sprockets coming off the assembly line such that each sprocket is within .1% tolerance,&#8221; what is a similar kind of thing in our iteration process we could measure?  I.e., one that doesn&#8217;t easily fall prey to inflation or manipulation?  If you can find something like that, lemme know.  Until then, I won&#8217;t be holding my breath.</p>
<p>Another possible option would be to go ahead and publicly measure highly subjective KPIs anyway and ask the measurees (us) to be as objective as possible when measuring.  I.e., fly in the face of Goodhart&#8217;s Law.  After all, it&#8217;s just a Law.  Like De Morgan&#8217;s Law, except maybe with a bit more wiggle room.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/heisenbergs-key-performance-indicators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Standing Desk</title>
		<link>http://www.heyitsopower.com/development/the-standing-desk/</link>
		<comments>http://www.heyitsopower.com/development/the-standing-desk/#comments</comments>
		<pubDate>Mon, 24 May 2010 15:25:31 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[ergonomics]]></category>
		<category><![CDATA[standing desk]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=204</guid>
		<description><![CDATA[Dave, My OPOWER colleague switched from a normal office desk &#38; chair situation to a standing desk more than a year ago and ever since, I&#8217;d been considering doing the same.  For my entire programming career, I&#8217;ve had terrible posture in my chair and tended to do &#8220;the maxell pose&#8221; where my wrists are resting [...]]]></description>
			<content:encoded><![CDATA[<p>Dave, My OPOWER colleague switched from a normal office desk &amp; chair situation to a standing desk more than a year ago and ever since, I&#8217;d been considering doing the sa<a href="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/maxell_blown_away.jpg"><img class="alignright size-medium wp-image-207" title="maxell_blown_away" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/maxell_blown_away-300x199.jpg" alt="" width="300" height="199" /></a>me.  For my entire programming career, I&#8217;ve had terrible posture in my chair and tended to do &#8220;the maxell pose&#8221; where my wrists are resting at a severe angle on the lip of my desk.</p>
<p>There have been a couple articles recently about the effects of sitting in a chair all day that pushed me to action.  This <a href="http://www.businessweek.com/magazine/content/10_19/b4177071221162.htm" target="_blank">article from business week</a> was particularly eye opening.</p>
<p>OPOWER is super cool about empowering developers to be more productive/comfortable/happy/etc so getting approval for expensing some generic Ikea furniture was as easy as a head nod.  A couple weekends ago, I drove down to Ikea and picked up an <a href="http://www.ikea.com/us/en/catalog/products/S49843462">Utby desk</a> for about $100 and an <a href="http://www.ikea.com/us/en/catalog/products/90167477">Ekby Viktor</a> shelf with <a href="http://www.ikea.com/us/en/catalog/products/00054564">Capita</a> legs for another $20 or so.  I didn&#8217;t think the desk by itself was going to be quite at the recommended elbow height, so I swung by Home Depot and got 4 cinder blocks too.</p>
<p>I ended up putting a stack of paper between my monitor and the shelf to really get it up at eye level and I&#8217;m pretty happy with the way it turned out:</p>
<p><a href="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/standing_desk_tom.jpg"><img class="aligncenter size-medium wp-image-205" title="standing_desk_tom" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/standing_desk_tom-225x300.jpg" alt="Me enjoying my new standing desk." width="225" height="300" /></a></p>
<p>Dave&#8217;s setup is very similar, but he seems to like focusing <em>down</em> on his single screen whereas I like having a couple monitors at different focus points where I can physically distinguish tasks (documentation, music, images on my laptop off to the side and development tasks on the main monitor straight ahead).</p>
<div id="attachment_206" class="wp-caption aligncenter" style="width: 235px"><a href="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/standing_desk_dave.jpg"><img class="size-medium wp-image-206" title="standing_desk_dave" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2010/05/standing_desk_dave-225x300.jpg" alt="Dave at his standing desk" width="225" height="300" /></a><p class="wp-caption-text">Dave at his standing desk</p></div>
<p>It&#8217;s been a couple weeks since I switched and I can draw the following conclusions so far:</p>
<ul>
<li>Your feet hurt like a sonofabitch at the end of 8, 9, 10 hours if you&#8217;re not used to standing that whole time</li>
<li>A little bar stool or some off-the-floor step helps a lot in shifting your weight around so you&#8217;re not always bearing down on both heels</li>
<li>My back feels a ton better</li>
<li>I <em>feel</em> more productive (though I don&#8217;t know empirically if I actually am) because (a) I feel really focused on the monitor right in front of me &#8212; more so than when sitting down and (b) I&#8217;m a little more self-conscious of my screen being visible to everyone walking by, so I suspect I&#8217;ve got a higher percentage of work-related stuff on my screen at all times than I did before.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/the-standing-desk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cinco de Failure</title>
		<link>http://www.heyitsopower.com/culture/cinco-de-failure/</link>
		<comments>http://www.heyitsopower.com/culture/cinco-de-failure/#comments</comments>
		<pubDate>Wed, 05 May 2010 16:40:33 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Culture]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=196</guid>
		<description><![CDATA[If you&#8217;ve ever seen Yoni or Jeff K, you would know that I have absolutely no chance of competing in a facial-hair competition with them on raw natural talent.  Thus, for the 2010 Cinco de Mustache event, I felt compelled to compete on ingenuity and engineering.
To the disgust of myself and my wife, I collected [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever seen Yoni or Jeff K, you would know that I have absolutely no chance of competing in a facial-hair competition with them on raw natural talent.  Thus, for the 2010 Cinco de Mustache event, I felt compelled to compete on ingenuity and engineering.</p>
<p>To the disgust of myself and my wife, I collected shavings for approximately 4 months in a plastic cream cheese jar labeled &#8220;Not Cream Cheese.&#8221;</p>
<p>This last weekend, I took a trip to AC Moore Arts &amp; Crafts and bought some clay.  I fashioned a mold into that clay of a mustache that would dominate all other mustaches.</p>
<p>Into that mold, I poured elmer&#8217;s glue, hair shavings, 14 gauge electrical copper wiring, more hair, more glue, more hair.</p>
<p><a title="cinco_assembly by Tom_Vaughan, on Flickr" href="http://www.flickr.com/photos/tom_vaughan/4581864452/"><img src="http://farm5.static.flickr.com/4035/4581864452_ba14d1b7ab.jpg" alt="cinco_assembly" width="375" height="500" /></a></p>
<p>This morning, the <em>plan </em>was to simply glue the assembled mustache on to my real mustache.  Unfortunately, the plan involved entirely too much super glue and the assembled mustache pieces proved to be entirely too heavy.  My previous experience with krazy-glue-on-skin is probably like most people&#8217;s&#8230;stick your thumb and index finger together.  Thanks to callouses, a lack of hair on your fingertips and the relative strength of your digits, it&#8217;s not that big of a deal.  I also don&#8217;t remember the glue <em>burning like lava on contact.</em></p>
<p>A split second before squirting a liberal does of krazy glue on the mustache I wondered: &#8220;is this really a good idea?&#8221;  But not wanting to pysch myself out, I quickly brought the assembled mustache up to my lip and pressed down hard.</p>
<p>The first thing I remember thinking is that this was going to look <em>really</em> good.  Like, maybe champion-quality entry.</p>
<p>That thought was quickly replaced with a rising alarm about the rapidly increasing burning sensation I was experiencing between the mustache and my lip.  That alarm was then replaced with the growing realization that I was inhaling quite a bit of vapor and that my throat was starting to burn.</p>
<p>Not-quite-panicked, but not totally calm either, I gently tried to remove the mustache and got as far as pulling my lip about an inch off my face before giving up.  Over the next 10 minutes I was able to saw, snip and shave the &#8217;stache down with a combination of electric shaver, electrical pliers, scissors and razor blade.  By that time, of course, the fumes had dissipated and the burning was just a low heat and my grand mustache plans were wrecked.</p>
<p><a title="cinco_fail_2 by Tom_Vaughan, on Flickr" href="http://www.flickr.com/photos/tom_vaughan/4581214623/"><img src="http://farm5.static.flickr.com/4021/4581214623_05e508de62.jpg" alt="cinco_fail_2" width="375" height="500" /></a></p>
<p><em>The redness of my eyes is due to the fumes and pain.</em></p>
<p>There&#8217;s always 2011&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/culture/cinco-de-failure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alfresco 3.3 Lunch &amp; Learn</title>
		<link>http://www.heyitsopower.com/code/alfresco-3-3-lunch-learn/</link>
		<comments>http://www.heyitsopower.com/code/alfresco-3-3-lunch-learn/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 21:57:25 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Content Management]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=201</guid>
		<description><![CDATA[OPOWER attended the Reston, VA "Alfresco 3.3 lunch &#038; learn" seminar this week, hosted by the generous folks over at SiteWorx.  Alfresco 3.3 looks support the CMIS 1.0 spec and head further into the ECM space.]]></description>
			<content:encoded><![CDATA[<p>I attended the Reston, VA &#8220;Alfresco 3.3 lunch &amp; learn&#8221; seminar this week, hosted by the generous folks over at <a title="SiteWorx" href="http://www.siteworx.com/" target="_blank">SiteWorx</a>.  I have a couple years as &#8220;CMS guru&#8221; at some previous jobs so in addition to being interested in the field, I&#8217;m also the support guy in-house for our CMS needs.</p>
<p>We here at OPOWER use Alfresco Community 3.2 as a glorified &#8220;XML editing tool&#8221; that was easy to setup, configure and hand over to the business to allow them to contribute XML-based content that our applications can consume.  As a F/LOSS solution, it&#8217;s fit our needs pretty well and is generally a low-maintenance piece of our infrastructure.</p>
<p>I attribute my &#8220;low maintenance&#8221; characterization of an Alfresco installation mostly to the patience of my small user base, who are very accommodating to the quirks and limitations of the installed (and neglected) instance.</p>
<p>The 3.3 lunch and learn was intro&#8217;d by Chris from SiteWorx who surveyed the CMS landscape and equated the emerging CMIS spec as &#8220;content&#8217;s ODBC&#8221; which I thought to be a quite fitting analogy.</p>
<p>Richard Im from Alfresco then spoke for about 45 minutes about the new features Alfresco 3.3 contained:</p>
<p><strong>WCM Improvements</strong></p>
<ul>
<li>new web-based editor, reminiscent of Interwoven&#8217;s in-context editor from the 6.5/7.0 era</li>
<li>new bi-directional deployment capabilities (including addition of &#8220;delivery server&#8221; infrastructure possibilities like several other CMS offerings)</li>
<li>&#8220;Straight through&#8221; publishing without workflows</li>
<li>google-like search on metadata attributes</li>
</ul>
<p><strong>Share</strong></p>
<ul>
<li>Evolving share into more of a bit-for-bit replacement of the &#8220;traditional&#8221; UI (which Richard referred to as &#8220;DM&#8221;&#8230; &#8220;document manager?&#8221;)</li>
<li>Permission control a la DM</li>
<li>Rules and Actions just like in DM</li>
<li>Data Lists (like Share Point&#8217;s project lists)</li>
</ul>
<p>I asked the question: &#8220;what&#8217;s the medium-term road map for DM, if Alfresco seems intent on mirroring all(?) functionality in the traditional UI via the /share context?&#8221;  Richard wouldn&#8217;t definitively say that the traditional app is going to be deprecated any time soon, but it certainly appears that way&#8230;</p>
<p><strong>&#8220;Integration&#8221; improvements</strong></p>
<p>I think this suite of improvements is geared towards the enterprise crowd:</p>
<ul>
<li>Full CMIS 1.0 spec implemented as of 3.3 (the only open source implementation known to do so)</li>
<li>ACLs</li>
<li>Change Logs</li>
<li>Additional SOA/REST services and support</li>
<li>Ability to save off google docs in alfresco for management (!)</li>
</ul>
<p>My big take-aways from the lunch and Q&amp;A session was that Alfresco&#8217;s 3.3 feature list and 3.4 direction seem to put them on more of a competitive footing with monster ECM vendors like Interwoven.  It&#8217;s maybe an odd direction for an open source project to steer because while Alfresco certainly employs their own development team, I&#8217;m not sure how much community interest there is in contributing to some of the more mundane enterprise ECM concerns that need to be built or integrated.  On the other hand, Alfresco, Inc. does survive with enterprise support contracts that smaller shops like mine are unlikely to ever pay top-dollar for, so maybe it&#8217;s a long term survival strategy.</p>
<p>Long term, I&#8217;m interested in exploring architectures available to us with a SOA-enabled CMIS layer and eventually ditch the custom-DAO layer we&#8217;re running right now against Alfresco-exported XML flat files.  Even if that never happens, it&#8217;s exciting to see the kinds of complexity that open source projects are able to attack.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/code/alfresco-3-3-lunch-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Day</title>
		<link>http://www.heyitsopower.com/null/moving-day/</link>
		<comments>http://www.heyitsopower.com/null/moving-day/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 14:56:32 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Null]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=119</guid>
		<description><![CDATA[We officially out-grew our Rosslyn space today and moved in to a new space right next to the Court House metro stop.]]></description>
			<content:encoded><![CDATA[<p>We officially out-grew our Rosslyn space today and moved in to a new space right next to the Court House metro stop.</p>
<p><img class="alignright size-medium wp-image-122" title="movingday_kitchen" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/movingday_kitchen1-300x226.png" alt="movingday_kitchen" width="300" height="226" /> We&#8217;ve got a new kitchen area that&#8217;s big enough to hold the company for a stand-up meeting&#8230;we haven&#8217;t had that capability for what seems like forever.   There&#8217;s a pantry off to the left of the image (not shown) stocked with drinks, chips, pens and pads.</p>
<p><img class="alignright size-medium wp-image-123" title="movingday_lobby" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/movingday_lobby-300x235.png" alt="movingday_lobby" width="300" height="235" />We&#8217;ve got a nice lobby area too&#8230;through the windows in the background one can see the National Cathedral, Georgetown and most of Northwest DC. One of the things we&#8217;re all looking forward to most about the new space is the number of break away areas and conference rooms.</p>
<p><img class="alignleft size-medium wp-image-126" title="movingday_sasquatch" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/movingday_sasquatch-225x300.png" alt="movingday_sasquatch" width="225" height="300" />Our working space is, as you can see, very open.  In the old office, that was occasionally annoying because sound echoed off the relatively confined space and amplified the drone of office sounds.  This space is well carpeted and more &#8220;open&#8221; so it seems quite a bit quieter.<br />
The guy in the middle of this picture actually does the &#8220;Messin&#8217; with Sasquatch&#8221; series of commercials for Jack Links Beef Jerkey.  He got the part because he needed less time in costume than the other actors.</p>
<p>The new location means a whole new suite of lunch places to try out.  That&#8217;s a relief because the Chop&#8217;t -&gt; Chipotle -&gt; Chop&#8217;t cycle was wearing pretty thin back in Rosslyn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/null/moving-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweaking the Agile Calendar</title>
		<link>http://www.heyitsopower.com/development/tweaking-the-agile-calendar/</link>
		<comments>http://www.heyitsopower.com/development/tweaking-the-agile-calendar/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 16:24:57 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=100</guid>
		<description><![CDATA[For the first five iterations, the dev team had been following this schedule:
<ul>
	<li>Iteration N, Week 1 = Design for iteration N and 2nd week of QA for iteration N-1</li>
	<li>Iteration N, Week 2 = Development</li>
	<li>Iteration N, Week 3 = Development</li>
	<li>Iteration N, Week 4 = 1st week of QA for iteration N</li>
	<li>Iteration N, Week 5 / Iteration N +1, Week 1 = 2nd week of QA for iteration N, design for iteration N + 1</li>
</ul>
We started to notice a couple things that have caused us to try out a new schedule in our upcoming 6th iteration.]]></description>
			<content:encoded><![CDATA[<p>For the first five iterations, the dev team had been following this schedule:</p>
<ul>
<li>Iteration N, Week 1 = Design for iteration N and 2nd week of QA for iteration N-1</li>
<li>Iteration N, Week 2 = Development</li>
<li>Iteration N, Week 3 = Development</li>
<li>Iteration N, Week 4 = 1st week of QA for iteration N</li>
<li>Iteration N, Week 5 / Iteration N +1, Week 1 = 2nd week of QA for iteration N, design for iteration N + 1</li>
</ul>
<p>We started to notice a couple things that have caused us to try out a new schedule in our upcoming 6th iteration.</p>
<p>First, we realized that we left very little time for fit to hit the shan.  If we had a tough QA cycle, we didn&#8217;t design enough.  If we didn&#8217;t design enough, we underestimated how much development would be needed (i.e. too many story points).  If we had too many story points, we&#8217;d go in to QA late.  And the cycle repeats.</p>
<p>Note that many of you Agile purists out there will cringe at the above description, especially this sentence: &#8220;If we had too many story points, we&#8217;d go in to QA late.&#8221;</p>
<p>I know.  We cringed too.</p>
<p>We&#8217;re committing to a couple new explicit practices going in to our next iterations:</p>
<ol>
<li>More formal velocity check-ins.  If less than 50% of our story points are closed by COB of the first Friday, we should have a come-to-jeebus meeting on Monday morning.</li>
<li>We absolutely need to respect the impact that dedicated design time has on the effectiveness of everything down-stream.  It&#8217;s too easy to say &#8220;Agile&#8221; as a synonym for &#8220;code by the seat of your pants,&#8221; but that&#8217;s not what it&#8217;s about and we know that.  We just need to get better at dedicating time to it.</li>
</ol>
<p>So with those ideas in mind, we&#8217;re moving to something like the following:</p>
<p><img class="aligncenter size-full wp-image-107" title="iteration_detail_screenprint_cropped" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/iteration_detail_screenprint_cropped.PNG" alt="iteration_detail_screenprint_cropped" width="1050" height="246" /></p>
<p>It&#8217;s a five-week iteration, with 2 solid weeks built in for QA and 1 dedicated week of design.</p>
<p>I think if we can get to a point where our regression and automation testing is good enough (and we develop enough confidence our automated tests), that we may be able to get back to a 4 week cycle.  In the mean time, we&#8217;re going to see if we can actually go faster by slowing down.</p>
<p>Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/tweaking-the-agile-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile impressions, 5 iterations in&#8230;</title>
		<link>http://www.heyitsopower.com/development/agile-impressions-5-iterations-in/</link>
		<comments>http://www.heyitsopower.com/development/agile-impressions-5-iterations-in/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 15:45:38 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=92</guid>
		<description><![CDATA[I'm assuming from the amount of hype out there that if a development team isn't using "Agile" right now, they probably feel like the one kid on the block who didn't have a Nintendo (with the Duck Hunt option, of course).

<img class="alignright size-medium wp-image-93" title="duckhunt" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/duckhunt-300x165.png" alt="duckhunt" width="300" height="165" />Well, we here at OPOWER loved our Duck Hunt, so we've been attempting to use "Agile" for the last 5 months or so.  Agile means a lot of things to a lot of people, so I'll spell out what it means for us and then reflect on some of the pros, cons, and room-for-improvement in our practice.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m assuming from the amount of hype out there that if a development team isn&#8217;t using &#8220;Agile&#8221; right now, they probably feel like the one kid on the block who didn&#8217;t have a Nintendo (with the Duck Hunt option, of course).</p>
<p><img class="alignright size-medium wp-image-93" title="duckhunt" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/duckhunt-300x165.png" alt="duckhunt" width="300" height="165" />Well, we here at OPOWER loved our Duck Hunt, so we&#8217;ve been attempting to use &#8220;Agile&#8221; for the last 5 months or so.  Agile means a lot of things to a lot of people, so I&#8217;ll spell out what it means for us and then reflect on some of the pros, cons, and room-for-improvement in our practice.</p>
<ul>
<li>&lt;cringe&gt;Embrace change&lt;/cringe&gt; (duh)&#8230;but especially in this startup environment, we need to remember to do no more than is necessary, because any &#8220;extra mile&#8221; functionality is likely to be totally unused as priorities and direction changes.</li>
<li>Be scientific about development&#8230;<a href="/development/measuring-our-awesomeness-iteration-by-iteration/">measure, measure measure</a>.  We track velocities, average-open-days-per-bug-by-severity, etc.</li>
<li>&#8220;Individuals and interactions over processes and tools&#8221;&#8230;we self-organize, aren&#8217;t afraid to try new combinations of responsibilities and assignments, provide regular feedback to each other and we don&#8217;t dictate a development environment or technology stack.</li>
</ul>
<p>The best thing about the technical side of this company is that the entire development team and project management team is on-board with the idea of rapid iterations, continuous improvement and a focus on technical excellent and &#8220;maximizing the amount of work not done.&#8221;</p>
<p>This manifests itself in several practices that I&#8217;d chalk up in the &#8220;pro&#8221; column:</p>
<ul>
<li>Light weight documentation&#8230;use wikis and person-to-person contact (recorded on bug tickets for posterity) to flush out designs and requirement.</li>
<li>Continuous integration and continuous improvement (we just installed Sonar last week&#8230;we&#8217;ll blog about its effectiveness later)</li>
<li>Regular code reviews, 360 reviews, and &#8220;how did we collectively perform this iteration&#8221; meetings</li>
<li>Few formal meetings, many informal, impromptu &#8220;drive bys&#8221;</li>
</ul>
<p><strong>But the best thing about our Agile environment</strong> right now is that it is a work-in-progress &#8220;process framework&#8221; that repeats quickly enough for us to remember what to improve.</p>
<p>What do I mean by that?</p>
<p>It&#8217;s my impression that on the longer, more drawn-out software engagements (say&#8230;6 or 12 months), you can make a series of mistakes in the design phase, the build phase, the qa phase, etc. and then by the time you&#8217;re on the next project you repeat all those mistakes again because it&#8217;s been 6 or 12 months since you last learned your lesson.  Instead of concrete lessons, you develop a career full of &#8220;gut instincts.&#8221;</p>
<p>We&#8217;re still honing in on the right amount of measurement and process for OPOWER, but because we&#8217;re all on board with the idea of quick-hit iterations with a continuous focus on improvement, I have high hopes for our ability to become (stay?) a top-notch software engineering organization.</p>
<p><img class="alignleft size-medium wp-image-95" title="duckhunt_many" src="http://www.heyitsopower.com/wordpress/home/35481/domains/heyitsopower.com/html/wordpress/wp-content/uploads/2009/10/duckhunt_many-300x213.png" alt="duckhunt_many" width="300" height="213" />There&#8217;s lots of room for improvement, that I think I&#8217;ll save for another post on another day.  We could definitely stand to &#8220;communicate out&#8221; more&#8211; with the product team and with our operations team.  We need to do a better job of making sure our iterations are lining up with the corporate strategy.  We could improve on the whole &#8220;customer collaboration over contract negotiation&#8221; part of the manifesto.  But you can only squeeze that trigger so fast, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/agile-impressions-5-iterations-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When is a null not a null?</title>
		<link>http://www.heyitsopower.com/code/when-is-a-null-not-a-null/</link>
		<comments>http://www.heyitsopower.com/code/when-is-a-null-not-a-null/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:48:15 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=74</guid>
		<description><![CDATA[tl/dr: <em>Don't have a non-null object's .toString() display "null". It's confusing and not helpful when looking at object states in IDE debuggers.</em>

I recently converted the attribute of our Person POJO that stored a user's email address from a java.lang.String to a javax.mail.InternetAddress.  Call it not enough testing or lack of imagination, but I introduced a Null Pointer Exception in a back-office web flow where a new user is created for our customer service application.  When a new CSR account is created and the email address is left blank, an NPE gets thrown up.  Embarrassing, but easy to fix, right?]]></description>
			<content:encoded><![CDATA[<p>tl/dr: <em>Don&#8217;t have a non-null object&#8217;s .toString() display &#8220;null&#8221;. It&#8217;s confusing and not helpful when looking at object states in IDE debuggers.</em></p>
<p>I recently converted the attribute of our Person POJO that stored a user&#8217;s email address from a java.lang.String to a javax.mail.InternetAddress.  Call it not enough testing or lack of imagination, but I introduced a Null Pointer Exception in a back-office web flow where a new user is created for our customer service application.  When a new CSR account is created and the email address is left blank, an NPE gets thrown up.  Embarrassing, but easy to fix, right?</p>
<p>Just looking at the stack trace narrows it down immediately:</p>
<pre class="java">2009-09-09 16:56:53,636 WARN  [btpool0-1] [REPORT] [WARN] Handler execution resulted in exception
java.lang.NullPointerException
	at javax.mail.internet.InternetAddress.parse(InternetAddress.java:609)
	at javax.mail.internet.InternetAddress.parse(InternetAddress.java:569)
	at javax.mail.internet.InternetAddress.(InternetAddress.java:105)
	at poscore.db.InternetAddressUserType.deepCopy(InternetAddressUserType.java:93)
	at org.hibernate.type.CustomType.deepCopy(CustomType.java:179)
	at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:374)</pre>
<p>Ahh&#8230;yeah&#8230;that custom hibernate type I wrote to translate VARCHARs to InternetAddresses and vice versa.  Ok, what does that deep copy method look like?</p>
<pre class="java">    public Object deepCopy(Object value) throws HibernateException {
        if(value == null) {
            return null;
        }
        InternetAddress original = (InternetAddress)value;
        InternetAddress copy = null;
        try {
            copy = new InternetAddress(original.getAddress());
        }
        catch (AddressException ex) {
            throw new HibernateException("Unable to deep copy email address '" + original.getAddress() + "'");
        }
        return copy;
    }</pre>
<p>It turns out, the error is right here:</p>
<pre class="java">            copy = new InternetAddress(original.getAddress());</pre>
<p>You can&#8217;t pass a null to the InternetAddress constructor.  It was late in the day and I must not have internalized that there&#8217;s no way <em>value </em>or <em>original</em> could be null, because my first instinct was that the NPE was actually the result of calling &#8220;.getAddress()&#8221; on a null <em>original</em> object&#8230;.not that the constructor can&#8217;t take a null.</p>
<p>While I was on that assumption (that it was the <em>original</em> object that was null), I fired up my debugger and got confused by what appeared to be null-checks failing to check nulls. Check out this screen shot of the NPE about to be thrown after what appears to be 2 null checks failing to prevent the NPE:<br />
<img class="aligncenter size-full wp-image-77" title="null_internet_address" src="http://www.heyitsopower.com/wordpress/wp-content/uploads/2009/09/null_internet_address.png" alt="null_internet_address" width="705" height="606" /></p>
<p>The arrows marked (A) and (B) shows what appear to be null objects passing null checks (in the top pane) even though they&#8217;re being reported as null (in the bottom pane).  The green line (C) shows the code falling through to that line just before it throws up the NPE.</p>
<p>Of course, <em>value</em> and <em>original</em> aren&#8217;t null at all&#8230;it&#8217;s just that their .toString() methods report them to be null.  Here&#8217;s the InternetAddress.toString method:</p>
<pre class="java">  276       public String toString() {
  277   	if (encodedPersonal == null &amp;&amp; personal != null)
  278   	    try {
  279   		encodedPersonal = MimeUtility.encodeWord(personal);
  280   	    } catch (UnsupportedEncodingException ex) { }
  281
  282   	if (encodedPersonal != null)
  283   	    return quotePhrase(encodedPersonal) + " &lt;" + address + "&gt;";
  284   	else if (isGroup() || isSimple())
  285   	    return address;
  286   	else
  287   	    return "&lt;" + address + "&gt;";
  288       }</pre>
<p>In my situation, I fell in to the &#8220;else if(isGroup() || isSimple())&#8221; case, which returns <em>address</em>, which is null, so the .toString() for the whole InternetAddress object is &#8220;null.&#8221;</p>
<p>I think the toString() method could benefit from another null-check right at line 284, which would mean an InternetAddress object with a null internal <em>address</em> String would display as &#8220;&lt;null&gt;&#8221;&#8230;that&#8217;s a more immediate clue that the object itself isn&#8217;t null.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/code/when-is-a-null-not-a-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Move meetings to move developers</title>
		<link>http://www.heyitsopower.com/development/move-meetings-to-move-developers/</link>
		<comments>http://www.heyitsopower.com/development/move-meetings-to-move-developers/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 15:08:35 +0000</pubDate>
		<dc:creator>Tom Vaughan</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[concentration]]></category>
		<category><![CDATA[meetings]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.heyitsopower.com/?p=55</guid>
		<description><![CDATA[Here's the scenario:

You cruise in to the office at 8:45, get your coffee, check the reddits, and ignore that email from your parents asking if their computer picked up a virus because McAfee won't stop popping up a tooltray icon helpfully informing them that they're totally vulnerable.  Right around 9:15, you get motivated to tackle that 2 point user story for the current iteration.

You head over to the wiki, check out the specs for the requirement, find out what the Trac ticket number is and see if there are any comments with last minute advice or dependencies.  None?  Good. . . let's get started!]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the scenario:</p>
<p>You cruise in to the office at 8:45, get your coffee, check the reddits, and ignore that email from your parents asking if their computer picked up a virus because McAfee won&#8217;t stop popping up a tooltray icon helpfully informing them that they&#8217;re totally vulnerable.  Right around 9:15, you get motivated to tackle that 2 point user story for the current iteration.</p>
<p>You head over to the wiki, check out the specs for the requirement, find out what the Trac ticket number is and see if there are any comments with last minute advice or dependencies.  None?  Good. . . let&#8217;s get started!</p>
<p>Oh, huh. . . it&#8217;s 9:40.  There&#8217;s that all-hands meeting at 10 o&#8217;clock.  I <em>could</em> get started, but I&#8217;m not really going to get anything done in 20 minutes really&#8230;.and that link to the <a href="http://www.buzzfeed.com/akdobbins/three-keyboard-cat-moon-shirt">keyboard-cat-three-wolf-t-shirt</a> <em>did</em> look interesting.</p>
<p>The 10 o&#8217;clock meeting runs a little long, and then there&#8217;s the lunch train, and suddenly it&#8217;s the afternoon and you haven&#8217;t been in The Zone once.</p>
<p><strong>The Zone</strong></p>
<p>We&#8217;ve all been in The Zone &#8211; that magical place where time appears to stop and you rock out an insane amount of code in what seems like 10 minutes, but when you look up from your keyboard the sun is down and the cleaning crew is giving you a weird look because you didn&#8217;t realize you were trying to sing along to Sigur Ros.</p>
<p>Trying to force yourself into The Zone is like trying to force yourself to see through those <a href="http://cdn-write.demandstudios.com/upload//0000/000/90/4/94.gif">stereograms</a> (hint: it&#8217;s always a Schooner).  And as hard as it is to get <em>in</em> The Zone, it&#8217;s annoying easily to get <em>out</em> of The Zone.</p>
<p>There are a lot of recommendations out there to help create &#8220;zone-friendly&#8221; work places including:</p>
<ul>
<li>separate offices</li>
<li>ambient music</li>
<li>leaving something intentionally broken the night before to give you that excuse to dive in the next morning</li>
<li><a href="http://cdn-write.demandstudios.com/upload//0000/000/90/4/94.gif">shift your tasks to the upper right</a></li>
<li><a href="http://www.paulgraham.com/makersschedule.html">Paul Graham&#8217;s thoughts</a> on the matter</li>
<li>etc. etc.</li>
</ul>
<p>We were wrapping up our all-hands meeting yesterday when the ever-perceptive Dave noted that our weekly meeting schedules were really not all that Zone-Friendly.  With a couple of exceptions, we had standing meetings along the following schedule:<br />
<img src="http://www.heyitsopower.com/wordpress/wp-content/uploads/2009/08/zone_unfriendly.png" alt="Standing Meetings" /></p>
<p>And keep in mind, that&#8217;s just the standing meetings, so it&#8217;s the bare-minimum one would expect.  Now let&#8217;s add some &#8220;procrastination shading&#8221; to that calendar to demonstrate the actual standing meeting impact:<br />
<img src="http://www.heyitsopower.com/wordpress/wp-content/uploads/2009/08/zone_unfriendly_shaded.png" alt="Standing Meetings" /></p>
<p>If we shuffled some meetings around (especially around the meat of the middle of the week), I think we could end up &#8220;finding&#8221; 2 or 3 hours a week more conducive to The Zone:<br />
<img src="http://www.heyitsopower.com/wordpress/wp-content/uploads/2009/08/zone_friendly_shaded.png" alt="Friendly Standing Meetings" /></p>
<p>Of course, this is an idealized example, but it&#8217;s something we&#8217;re thinking about and playing with.</p>
<p>What do you guys out there in development land do?  Any recommendations of particular effectiveness?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heyitsopower.com/development/move-meetings-to-move-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
