<?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>Getting Agile &#187; TDD</title>
	<atom:link href="http://www.gettingagile.com/category/tdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gettingagile.com</link>
	<description>with Sterling Barton</description>
	<lastBuildDate>Mon, 14 Jun 2010 18:18:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Extreme Feedback from My Tools &#8211; Part 1: Maven 2 Configuration</title>
		<link>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/</link>
		<comments>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 02:53:34 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=354</guid>
		<description><![CDATA[
For many years now, it has been a goal of mine to get feedback as early as possible when developing software. Past blog entries here and here have discussed how we can approach increased feedback. A tweet from Jason Gorman mentioned his list of tools that provide continuous feedback on his code and design: &#8220;Emma, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span><span><img class="aligncenter size-medium wp-image-358" style="float: left;" title="Feedback" src="http://www.gettingagile.com/wp-content/uploads/2009/12/Feedback-300x300.jpg" alt="Feedback" width="180" height="180" /></span></span></p>
<p>For many years now, it has been a goal of mine to get feedback as early as possible when developing software. Past blog entries <a href="http://www.gettingagile.com/2007/11/13/running-all-unit-tests-when-saving-a-file-in-eclipse/" target="_blank">here</a> and <a href="http://www.gettingagile.com/2008/12/13/executable-design-a-new-name-for-tdd/" target="_blank">here</a> have discussed how we can approach increased feedback. A tweet from <a href="http://twitter.com/jasongorman/" target="_blank">Jason Gorman</a> mentioned his list of tools that provide continuous feedback on his code and design: <span><span>&#8220;Emma, Jester, XDepend, Checkstyle and Simian&#8221;. This inspired me to write a post on how I approach setting up project reporting and my IDE to provide increased feedback. This article will be the first part of a series on &#8220;Extreme Feedback from My Tools&#8221; and will focus on Maven 2 configuration and reporting.<br />
</span></span></p>
<p style="text-align: center;"><span><span><img class="aligncenter" title="Build by Maven" src="http://maven.apache.org/images/logos/maven-feather.png" alt="" width="90" height="30" /><br />
</span></span></p>
<p><span><span>Maven is my tool of choice for managing builds, versioning, deployment, and test execution. Although, it wouldn&#8217;t hurt my feelings if teams I worked on used Ant, make, or other scripting methods to manage these, but it tends to be more difficult overall. For those who are alright with using Maven, here is a look at different aspects of a typical POM file configuration I use:</span></span></p>
<pre class="code">&lt;build&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
      &lt;configuration&gt;
        &lt;source&gt;1.5&lt;/source&gt;
        &lt;target&gt;1.5&lt;/target&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.4.2&lt;/version&gt;
      &lt;configuration&gt;
        &lt;includes&gt;
          &lt;include&gt;**/When*.java&lt;/include&gt;
        &lt;/includes&gt;
        &lt;redirectTestOutputToFile&gt;true&lt;/redirectTestOutputToFile&gt;
        &lt;trimStackTrace&gt;false&lt;/trimStackTrace&gt;
        &lt;useSystemClassLoader&gt;false&lt;/useSystemClassLoader&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;</pre>
<p><span>The above portion of the POM file are configurations for all Maven execution scenarios for this project. The first plugin, &#8220;maven-compiler-plugin&#8221;, sets the expected source code compliance and the JVM version that the compiled binary will target. The &#8220;maven-surefire-plugin&#8221; executes tests such as those developed with JUnit and TestNG. Because my approach is to take a more BDD-like naming convention and style for test cases, this POM is configured to execute unit tests that start with the word &#8220;When&#8221; in the test source code directory, by default this is &#8220;src/test/java&#8221;. Having the full stack trace from test execution issues is essential to effective debugging of the automated build and tests, therefore the configuration makes sure that they are not trimmed in the output file. Finally, some code that I have created in the recent past needed to find classes on the Maven classpath and through much debugging I found out that the system class loader was used by default with surefire so I now make sure to set it up to use the Maven class loader instead.<br />
</span></p>
<pre class="code">&lt;reporting&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-pmd-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.3&lt;/version&gt;
      &lt;configuration&gt;
        &lt;linkXref&gt;true&lt;/linkXref&gt;
        &lt;targetJdk&gt;1.5&lt;/targetJdk&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.4&lt;/version&gt;
      &lt;configuration&gt;
        &lt;formats&gt;
          &lt;format&gt;html&lt;/format&gt;
          &lt;format&gt;xml&lt;/format&gt;
        &lt;/formats&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;jdepend-maven-plugin&lt;/artifactId&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;dashboard-maven-plugin&lt;/artifactId&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.2&lt;/version&gt;
    &lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/reporting&gt;</pre>
<p><span>Reports are effective at giving the team indicators of potential problems in their project artifacts early. Teams tend to find that trends are more valuable then specific targets in the generated reports. If the code coverage is going down we ask ourselves &#8220;why?&#8221;. If more defects are being detected by source code analysis tools then we can look at how we can change our approach to reduce the frequency of these issues. The 5 plugins used in this POM report on different perspectives of the software artifacts and can help to find problematic trends early.</span></p>
<ul>
<li><span><a href="http://pmd.sourceforge.net/" target="_blank">PMD</a> is for source code analysis<br />
</span></li>
<li><span><a href="http://cobertura.sourceforge.net/" target="_blank">Cobertura</a> is for code coverage</span></li>
<li><span><a href="http://clarkware.com/software/JDepend.html" target="_blank">JDepend</a> is a package dependency analyzer<br />
</span></li>
<li><span><a href="http://findbugs.sourceforge.net/" target="_blank">FindBugs</a> detects bugs in code</span></li>
<li><span>The <a href="http://mojo.codehaus.org/dashboard-maven-plugin/" target="_blank">dashboard plugin</a> shows the results of the reports in a single view</span></li>
</ul>
<p>When the continuous integration server successfully executes the build and automated tests, the Maven reporting command is executed to generate these reports. This happens automatically and is shown on our video monitor &#8220;information radiator&#8221; in the team area.</p>
<pre class="code">&lt;dependencies&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;junit&lt;/groupId&gt;
    &lt;artifactId&gt;junit&lt;/artifactId&gt;
    &lt;version&gt;4.7&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.mockito&lt;/groupId&gt;
    &lt;artifactId&gt;mockito-all&lt;/artifactId&gt;
    &lt;version&gt;1.8.0&lt;/version&gt;
  &lt;/dependency&gt;
&lt;/dependencies&gt;</pre>
<p><span>We make sure to update the POM to use <a href="http://www.junit.org/" target="_blank">JUnit 4</a> so that our team can use annotations and better names for the tests. Also, <a href="http://mockito.org/" target="_blank">Mockito</a> has become my favorite mock objects framework since it stays away from the &#8220;replay&#8221; confusion of other mock frameworks (or their old versions at least) and also has a <a href="http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html" target="_blank">BDDMockito</a> class that enables our team to use the given/when/then construction for our tests.</span></p>
<p><span>Once your POM file is configured with these reporting plugins, you can generate the reports by executing the &#8217;site&#8217; life cycle in Maven:</span></p>
<pre class="code">
mvn site
</pre>
<p><span>Part 2 of this series of articles will discuss configuration of an Eclipse IDE environment for Extreme Feedback.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HOWTO: Maven + StoryTestIQ + Selenium RC</title>
		<link>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/</link>
		<comments>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 01:43:57 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=328</guid>
		<description><![CDATA[StoryTestIQ is an automated acceptance testing tool, which was originally a mashup of 2 existing open source projects, Selenium and FitNesse. StoryTestIQ is many times shortened to STIQ (pronounced &#8220;stick&#8221;) so it rolls off the tongue more easily. STIQ takes the idea of testing inside the browser a la Selenium and enables editing, tagging, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://storytestiq.sf.net" target="_blank">StoryTestIQ</a> is an automated acceptance testing tool, which was originally a mashup of 2 existing open source projects, Selenium and FitNesse. StoryTestIQ is many times shortened to STIQ (pronounced &#8220;stick&#8221;) so it rolls off the tongue more easily. STIQ takes the idea of testing inside the browser a la Selenium and enables editing, tagging, and multi-table execution through a modified FitNesse underneath the covers. The version control from FitNesse was removed so that the generated wiki files are able to be checked in, without any binaries, alongside the code those tests are executing against. The multi-table execution allows for test components, written in &#8220;selenese&#8221;, to be refactored out of and included in larger test cases. There are many more modifications that the development team, headed by Paul Dupuy, have done to enhance STIQ&#8217;s capabilities beyond running Fit and Selenium tests but this is enough background for now.</p>
<p>During STIQ&#8217;s development, we created a <a href="http://maven.apache.org" target="_blank">Maven 2</a> plugin, imaginatively named maven-stiq-plugin. This plugin did only 1 thing: start up the STIQ server for your project without having to run Java from the command line. In the past couple of days, I have finally had enough time and desire to develop integration of exporting STIQ tests into Selenium RC compliant &#8220;selenese&#8221; so they can also be executed during your Maven integration-test cycle in the 2.2-SNAPSHOT version. So, lets get down to the &#8220;how&#8221;.</p>
<p>First, add the STIQ Maven 2 repository to your POM (pom.xml file for your project) as shown below: (NOTE: updated with correction on URL from original posting)</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;repositories&gt;
...
  &lt;repository&gt;
     &lt;id&gt;STIQ Sourceforge&lt;/id&gt;
     &lt;url&gt;https://storytestiq.svn.sourceforge.net/svnroot/storytestiq/trunk/www/maven2/&lt;/url&gt;
  &lt;/repository&gt;
&lt;/repositories&gt;</pre>
<p>We, also, must put the STIQ Maven 2 repository into our plugin repositories within the POM because so that we can find the maven-stiq-plugin to execute during the integration-test cycles: (NOTE: updated with correction on URL from original posting)</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;pluginRepositories&gt;
...
  &lt;pluginRepository&gt;
     &lt;id&gt;STIQ Plugins Sourceforge&lt;/id&gt;
     &lt;url&gt;https://storytestiq.svn.sourceforge.net/svnroot/storytestiq/trunk/www/maven2/&lt;/url&gt;
  &lt;/pluginRepository&gt;
&lt;/pluginRepositories&gt;</pre>
<p>Next, we will put in the maven-stiq-plugin configuration.</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;plugin&gt;
 &lt;groupId&gt;net.sourceforge.storytestiq&lt;/groupId&gt;
 &lt;artifactId&gt;maven-stiq-plugin&lt;/artifactId&gt;
 &lt;version&gt;2.2-SNAPSHOT&lt;/version&gt;
 &lt;executions&gt;
   &lt;execution&gt;
   &lt;id&gt;export&lt;/id&gt;
   &lt;phase&gt;pre-integration-test&lt;/phase&gt;
   &lt;goals&gt;
     &lt;goal&gt;export&lt;/goal&gt;
   &lt;/goals&gt;
   &lt;configuration&gt;
     &lt;pageRootPath&gt;repository&lt;/pageRootPath&gt;
     &lt;suiteWikiPagePath&gt;ProjectRoot.StoryTests&lt;/suiteWikiPagePath&gt;
   &lt;/configuration&gt;
 &lt;/execution&gt;
 &lt;execution&gt;
   &lt;id&gt;exec&lt;/id&gt;
   &lt;phase&gt;integration-test&lt;/phase&gt;
   &lt;goals&gt;
     &lt;goal&gt;exec&lt;/goal&gt;
   &lt;/goals&gt;
   &lt;configuration&gt;
     &lt;userExtensions&gt;src/main/resources/user-extensions.js&lt;/userExtensions&gt;
     &lt;browserType&gt;*firefox&lt;/browserType&gt;
     &lt;suiteFile&gt;target/stiq/ProjectRoot.StoryTests.html&lt;/suiteFile&gt;
   &lt;/configuration&gt;
   &lt;/execution&gt;
 &lt;/executions&gt;
&lt;/plugin&gt;</pre>
<p>Now, to tell you a little bit about what is going on in the above configuration. The &lt;groupId&gt; and &lt;artifactId&gt; elements describe what plugin to grab from the plugin repository and use in the project. In the executions section, we define 2 separate execution elements. The first execution is called &#8220;export&#8221;. This execution will occur during the &#8220;pre-integration-test&#8221; cycle within the full <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html" target="_blank">Maven 2 build life cycle</a>. The goal, similar to an Ant target, on our maven-stiq-plugin that you will be &#8220;export&#8221;, which is the goal that exports our StoryTestIQ acceptance tests as &#8220;selenese&#8221; to run within the Selenium RC server. The configurations shown above are &lt;pageRootPath&gt;, which is the directory located below your top-level project directory where the StoryTestIQ tests are located, and &lt;suiteWikiPagePath&gt;, which is a wiki page location for the top-level suite including all of the tests to export. If you don&#8217;t already have STIQ tests, please go to <a href="http://storytestiq.sf.net" target="_blank">http://storytestiq.sf.net</a> to find out how to get started.</p>
<p>The second execution element is called &#8220;exec&#8221;. This execution will run during the &#8220;integration-test&#8221; cycle in the Maven build life cycle and will execute the exported tests using Selenium RC server. The configurations for this goal are &lt;userExtensions&gt;, which is where any new selenese actions are defined specific to your project, &lt;browserType&gt;, which is the web browser to execute the tests within, and &lt;suiteFile&gt;, which is where the exported selenese tests were generated during the &#8220;export&#8221; goal execution. As a convention, the generated selenese file will be located under the &#8220;target/stiq&#8221; directory by default with the name of the file as &lt;suiteWikiPagePath&gt;.html.</p>
<p>Now you can run the usual &#8216;install&#8217; command in your project&#8217;s top-level directory:</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">mvn install</pre>
<p>This should compile and execute all of your unit tests then during the integration-test phase it will run the maven-stiq-plugin goals, &#8220;export&#8221; and &#8220;exec&#8221; in that order. During the maven-stiq-plugin &#8220;exec&#8221; goal execution, the web browser will open up in the background and you will see the STIQ tests run. After the tests have executed, the web browser will close and the Maven build life cycle will complete.</p>
<blockquote><p>NOTE: If you are having trouble with &#8220;*firefox&#8221; as &lt;browserType&gt;, then you might be seeing a current bug with Selenium RC server version 1.1.1. An upcoming release version will include a fix and we will update the dependency once we see the update. For now, the fix is to go back to Firefox version 3.5.3 or switch to using a different browser as listed <a href="http://wiki.openqa.org/display/SRC/Specifications+for+Selenium+Remote+Control+Client+Driver+Protocol#SpecificationsforSeleniumRemoteControlClientDriverProtocol-5.3.3.1SupportedSpecialBrowserStrings%28RECOMMENDED%29" target="_blank">here</a> on the Selenium RC documentation.</p></blockquote>
<p>There is still much more to do with the plugin before getting to a release version of 2.2. Please comment on this blog post with any suggestions or issues that you have with the plugin and it&#8217;s configuration. If you are interested, do a search on StoryTestIQ within this blog to find out more about using StoryTestIQ or visit the main project page <a href="http://storytestiq.sf.net" target="_blank">http://storytestiq.sf.net</a>. Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Slides from Managing Software Debt Talk at PNSQC 2009</title>
		<link>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/</link>
		<comments>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 22:00:28 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=316</guid>
		<description><![CDATA[Tomorrow at 1:30pm I will be discussing my paper published by the Pacific Northwest Software Quality Conference 2009 in Portland, OR on &#8220;Managing Software Debt: Continued Delivery of High Value as Systems Age&#8221;. I have uploaded the slides for this presentation and I hope that some of the new content will help those looking for [...]]]></description>
			<content:encoded><![CDATA[<p>Tomorrow at 1:30pm I will be discussing my paper published by the Pacific Northwest Software Quality Conference 2009 in Portland, OR on &#8220;Managing Software Debt: Continued Delivery of High Value as Systems Age&#8221;. I have uploaded the slides for this presentation and I hope that some of the new content will help those looking for ways to manage their software debt more effectively in 5 key areas:</p>
<ul>
<li>Technical debt: tends to focused on the code and reveals itself in duplication and code smells</li>
<li>Quality debt: focuses on QA aspects of software development and shows up in growing bug databases and longer regression test runs</li>
<li>Configuration Management debt: focuses on integration and release management aspects and becomes apparent with extreme branching and inability to recreate environments from scratch</li>
<li>Design debt: focuses on design constructs of components within an application or enterprise infrastructure and is usually difficult to figure out until you are close to a deadline such handling production load</li>
<li>Platform Experience debt: focuses on the people in the software creation process and usually involves extreme specialization and waiting on people to finish their part</li>
</ul>
<p>Without further ado, here are the slides:</p>
<div id="__ss_2357272" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Managing Software Debt - PNSQC 2009" href="http://www.slideshare.net/csterwa/managing-software-debt-pnsqc-2009">Managing Software Debt &#8211; PNSQC 2009</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=managingsoftwaredebt-pnsqc2009-091027083353-phpapp02&amp;stripped_title=managing-software-debt-pnsqc-2009" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=managingsoftwaredebt-pnsqc2009-091027083353-phpapp02&amp;stripped_title=managing-software-debt-pnsqc-2009" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/csterwa">Chris Sterling</a>.</div>
</div>
<p>Also, here is the picture I use to discuss Managing Software Debt from high level in terms of maintaining and enhancing value of software assets:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/10/effectrefactoringtopreserveswvalue.jpg"><img title="Effect of Managing Software Debt to Preserve Software Value" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/10/effectrefactoringtopreserveswvalue-300x181.jpg" alt="Effect of Managing Software Debt to Preserve Software Value" width="300" height="181" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pacific Northwest Software Quality Conference (PNSQC) Coming Up</title>
		<link>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/</link>
		<comments>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 16:41:27 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=297</guid>
		<description><![CDATA[It has been a while since I have blogged. I apologize and have plenty of good excuses (if there are such things) about why (book, traveling, family time, etc&#8230;). I am now back and will be blogging on a more frequent basis in the next few months.
My first blog entry back is about the upcoming [...]]]></description>
			<content:encoded><![CDATA[<p>It has been a while since I have blogged. I apologize and have plenty of good excuses (if there are such things) about why (book, traveling, family time, etc&#8230;). I am now back and will be blogging on a more frequent basis in the next few months.</p>
<p>My first blog entry back is about the upcoming Pacific Northwest Software Quality Conference (PNSQC) that is happening from October 26-28 in Portland, OR. This conference was highly recommended to me by many people. This year I am fortunate enough to attend, have a paper published for the event, and presenting the paper for 45 minutes during the conference. Here are the details for my paper and presentation:</p>
<blockquote><p><em><a name="30">P-30</a> <strong>Managing Software Debt</strong></em></p>
<p><em><strong>Chris Sterling, SolutionsIQ</strong></em></p>
<p><em>Many software developers will have to deal with legacy code at some point during their careers. Seemingly simple changes are turned into frustrating endeavors with code that is hard to read and unnecessarily complex. Test scripts and requirements are lacking, and at the same time are out of sync with the existing system. The build is cryptic, minimally sufficient, and difficult to successfully configure and execute. It is almost impossible to find the proper place to make a requested change without breaking unexpected portions of the application. The people who originally worked on the application are long gone.</em></p>
<p><em>How did the software get like this? It is almost certain the people who developed this application did not intend to create such a mess. This paper presentation will highlight ways teams can work with stakeholders to manage software debt over the delivery life cycle of the product.</em></p></blockquote>
<p>I hope that I am able to see others at this event. If you are interested in attending and would like to get a $50 off the normal conference attendance fee, enter the promotion code &#8220;FOA &#8211; Chris Sterling&#8221; when registering. You can register at the PNSQC web site (<a href="http://www.pnsqc.org/2009-conference/registration-information" target="_blank">http://www.pnsqc.org/2009-conference/registration-information</a>). See you there!</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Executable Specifications &#8211; Presentation from AgilePalooza</title>
		<link>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/</link>
		<comments>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 13:48:41 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=296</guid>
		<description><![CDATA[Earlier this year I did a presentation on Executable Specficiations for AgilePalooza conference. There is information about working with legacy code, commercial off-the-shelf (COTS) systems, and Acceptance Test-Driven Development (ATDD) using automated acceptance testing tools. Also, the presentation lists types of automated acceptance testing tools out there along with actual names of tools and what [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year I did a presentation on Executable Specficiations for AgilePalooza conference. There is information about working with legacy code, commercial off-the-shelf (COTS) systems, and Acceptance Test-Driven Development (ATDD) using automated acceptance testing tools. Also, the presentation lists types of automated acceptance testing tools out there along with actual names of tools and what they are best used for on projects. Hope it is interesting to you.</p>
<div style="width:425px;text-align:left" id="__ss_1499430"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/csterwa/executable-specifications-agile-palooza" title="Executable Specifications Agile Palooza">Executable Specifications Agile Palooza</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=executablespecifications-agilepalooza-090528014316-phpapp01&#038;stripped_title=executable-specifications-agile-palooza" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=executablespecifications-agilepalooza-090528014316-phpapp01&#038;stripped_title=executable-specifications-agile-palooza" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/csterwa">Chris Sterling</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing Through Programmer Tests (TDD)</title>
		<link>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/</link>
		<comments>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/#comments</comments>
		<pubDate>Wed, 27 May 2009 19:47:53 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=227</guid>
		<description><![CDATA[To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:
What should the software do next for the user?
The following coding session will provide [...]]]></description>
			<content:encoded><![CDATA[<p>To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:</p>
<blockquote><p><em><strong>What should the software do next for the user?</strong></em></p></blockquote>
<p>The following coding session will provide an example of applying this question. The fictitious application is a micro-blogging tool named “Jitter”. This is a Seattle-based fictitious company that focuses on enabling coffee injected folks write short messages and have common online messaging shorthand to be expanded for easy reading. The user story we are working on is:</p>
<blockquote><p><strong>So that it is easier to keep up with my kid’s messages, Mothers want to automatically expand their kid’s shorthand</strong></p></blockquote>
<p>The acceptance criteria for this user story are:</p>
<ul>
<li>LOL, AFAIK, and TTYL are expandable</li>
<li>Able to expand lower and upper case versions of shorthand</li>
</ul>
<p>The existing code already includes a JitterSession class that users obtain when they authenticate into Jitter to see messages from other people they are following. Mothers can follow their children in this application and so will see their messages in the list of new messages. The client application will automatically expand all of the messages written in shorthand.</p>
<p>The following programmer test expects to expand LOL to “laughing out loud” inside the next message in the JitterSession.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public class WhenUsersWantToExpandMessagesThatContainShorthandTest {

    @Test
    public void shouldExpandLOLToLaughingOutLoud() {
        JitterSession session = mock(JitterSession.class);
        when(session.getNextMessage()).thenReturn("Expand LOL please");
        MessageExpander expander = new MessageExpander(session);
        assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
    }

}
</pre>
<p>The MessageExpander class did not exist so along the way I created a skeleton of this class to make the code compile. Once the assertion is failing, I then make the test pass with the following implementation code inside the MessageExpander class:</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return msg.replaceAll("LOL", "laughing out loud");
}
</pre>
<p>This is the most basic message expansion I could do for only one instance of shorthand text. I notice that there are different variations of the message that I want to handle. What if LOL is written in lower case? What if it is written as “Lol”? Should it be expanded? Also, what if some variation of LOL is inside a word? It probably should not expand the shorthand in that case except if the characters surrounding it are symbols, not letters. I write all of this down in the programmer test as comments so I don’t forget about all of these.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
// shouldExpandLOLIfLowerCase
// shouldNotExpandLOLIfMixedCase
// shouldNotExpandLOLIfInsideWord
// shouldExpandIfSurroundingCharactersAreNotLetters
</pre>
<p>I then start working through this list of test cases to enhance the message expansion capabilities in Jitter.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandLOLIfLowerCase() {
    when(session.getNextMessage()).thenReturn("Expand lol please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
}
</pre>
<p>This forced me to use the java.util.regex.Pattern class to handle case insensitivity.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL", Pattern.CASE_INSENSITIVE).matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Now make it so mixed case versions of LOL are not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfMixedCase() {
    String msg = "Do not expand Lol please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>This forced me to stop using the Pattern.CASE_INSENSITIVE flag in the pattern compilation. Instead I tell it to match only “LOL” or “lol” for replacement.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL|lol").matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Next we’ll make sure that if LOL is inside a word it is not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfInsideWord() {
    String msg = "Do not expand PLOL or LOLP or PLOLP please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>The pattern matching is now modified to use spaces around each variation of valid LOL shorthand.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\sLOL\\s|\\slol\\s").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>Finally, it is important that if the characters around LOL are not letters it still expands.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandIfSurroundingCharactersAreNotLetters() {
    when(session.getNextMessage()).thenReturn("Expand .lol! please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand .laughing out loud! please"));
}
</pre>
<p>The final implementation of the pattern matching code looks as follows.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\bLOL\\b|\\blol\\b").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>I will defer refactoring this implementation until I have to expand additional instances of shorthand text. It just so happens that our acceptance criterion for the user story asks that AFAIK and TTYL are expanded, as well. I won’t show the code for the other shorthand variations in the acceptance criteria. However, I do want to discuss how the focus on “what should the software do next” drove the design of this small component.</p>
<p>Driving the software development using TDD focusing on what the software should do next helps guide us to only implement what is needed and with 100% programmer test coverage for all lines of code. For those who have some experience with object-oriented programming will implement the code with high cohesion, modules focused on specific responsibilities, and low coupling, modules that make few assumptions about other module they interact with will do. This is supported by the disciplined application of TDD. The failing programmer test represents something that the software does not do yet. We focus on modifying the software with the simplest implementation that will make the programmer test pass. Then we focus on enhancing the software’s design with the refactoring step. It has been my experience that refactoring refactoring represents most of the effort expended when doing TDD effectively.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AgilePalooza in San Francisco May 29th</title>
		<link>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/</link>
		<comments>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/#comments</comments>
		<pubDate>Tue, 19 May 2009 20:57:15 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=267</guid>
		<description><![CDATA[
AgilePalooza is a one day Agile conference on Friday May 29th at the San Francisco State University downtown campus. There will be two tracks: Learning Agility and Advancing Agility.
&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.
Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="AgilePalooza logo" src="http://www.agilepalooza.com/images/AgilePaloozaHeader.gif" alt="" width="497" height="87" /></p>
<p><span><a href="http://www.AgilePalooza.com" target="_blank">AgilePalooza</a> is a one day Agile conference on Friday May 29th at the <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">San Francisco State University downtown campus</a>. There will be two tracks: Learning Agility and Advancing Agility.</p>
<p>&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.</p>
<p>Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson (VersionOne Services) with special guests Ainsley Nies (open space co-facilitator) and Ian Culling (VersionOne CTO). When not presenting for the &#8220;Learning Agility&#8221; track speakers will participate in the open space.</p>
<p>Space is limited and the cost is low so please register soon if you would like to attend. For more information or to register please visit <a href="http://www.AgilePalooza.com" target="_blank">www.AgilePalooza.com</a>.</p>
<p><strong>Where? </strong></span></p>
<p><span>San Francisco State University Downtown Campus, 835 Market Street, San Francisco. (Powell street BART station in the Westfield Center) &#8211; <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">Map/Directions</a><br />
</span></p>
<p><strong><span>When? </span></strong></p>
<p><span>9am-5pm (check-in and continental breakfast starts at 8am)</span></p>
<p><span><strong>Cost?</strong> </span></p>
<p><span>$69</span></p>
<p><span>Register here: <a href="http://www.AgilePalooza.com">www.AgilePalooza.com</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Talk @ SD West 2009 on &quot;Managing Software Debt&quot;</title>
		<link>http://www.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/</link>
		<comments>http://www.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:55:12 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Distributed Computing]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IASA]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Jini/JavaSpaces]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=237</guid>
		<description><![CDATA[I have uploaded the talk I did at SD West 2009 on Yahoo! Video and here it is:
Managing Software Debt &#8211; Chris Sterling @ SD West 2009 @ Yahoo! Video
]]></description>
			<content:encoded><![CDATA[<p>I have uploaded the talk I did at SD West 2009 on Yahoo! Video and here it is:</p>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=12699073&#038;vid=4754803&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8055/82632771.jpeg&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=12699073&#038;vid=4754803&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/p/i/bcst/videosearch/8055/82632771.jpeg&#038;embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/4754803/12699073">Managing Software Debt &#8211; Chris Sterling @ SD West 2009</a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/03/27/my-talk-sd-west-2009-on-managing-software-debt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#039;s BeyondAgile: people making software that works</title>
		<link>http://www.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/</link>
		<comments>http://www.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 16:38:06 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=234</guid>
		<description><![CDATA[The hopefully-not-anticlimatic second event of the still-pretty-new BeyondAgile is happening on Thursday:
&#8220;Agile Challenges Clinic/Swap Meet&#8221;
Thursday, 26 March 2009
6:30 to 8:30 p.m.
Locations on the Eastside and Seattle!
Read on for agenda and location information, or visit our Google Group at
http://groups.google.com/group/beyondagile
The Blurb
At the first event, everyone (over forty people) created a backlog of ideas, suggestions, and work items. [...]]]></description>
			<content:encoded><![CDATA[<p>The hopefully-not-anticlimatic second event of the still-pretty-new BeyondAgile is happening on Thursday:</p>
<p class="MsoNormal"><strong>&#8220;Agile Challenges Clinic/Swap Meet&#8221;<br />
</strong>Thursday, 26 March 2009<br />
6:30 to 8:30 p.m.<br />
Locations on the Eastside <em>and</em> Seattle!<br />
Read on for agenda and location information, or visit our Google Group at<br />
<a href="https://mail.solutionsiq.com/exchweb/bin/redir.asp?URL=http://groups.google.com/group/beyondagile" target="_blank">http://groups.google.com/group/beyondagile</a></p>
<p class="MsoNormal"><strong>The Blurb<br />
</strong>At the first event, everyone (over forty people) created a <a href="https://mail.solutionsiq.com/exchweb/bin/redir.asp?URL=http://groups.google.com/group/beyondagile/web/backlog?hl=en" target="_blank">backlog</a> of ideas, suggestions, and work items. Among them were two suggestions that gave rise to this event&#8217;s focus: &#8220;a bring-a-problem&#8221; session where everyone helps everyone with their challenges. We&#8217;ve extended the idea of a clinic, where you bring a problem to an expert and get help, to a swap meet (or potluck), were everyone brings something and gets something. So come if you think you&#8217;re brimming over with answers and expertise, and come if you&#8217;re wanting other perspectives or advice on how to tangle with the problems that bedevil your days.</p>
<p class="MsoNormal">We&#8217;ll also form a program team, a group that&#8217;ll work proactively to plan interesting and exciting events in sufficient time for the blurb-writer–that&#8217;s me–to write and distribute the blurb a few weeks before the event. If you&#8217;re wondering who&#8217;d be good at doing that, go look in a mirror—it&#8217;s you we need!</p>
<p class="MsoNormal"><strong>Second Event Agenda</strong></p>
<ul>
<li>Welcome and Announcements (10 min.)</li>
<li>Formation of Program Team (10 min.)</li>
<li>&#8220;Agile Clinic/Swap Meet (85 min.)</li>
<li>Giveaway Drawing (5 min.)</li>
<li>Meeting Retrospective (10 min.)</li>
<li>Socializing and Breakout/Breakup/Beer</li>
</ul>
<p><strong>Event Locations</strong></p>
<p><strong>Eastside: </strong>SolutionsIQ<br />
First Floor Training Center<br />
10785 Willows Road NE, Suite 250<br />
Redmond, WA<br />
NOTE: directions and picture of building at http://www.solutionsiq.com/about-us/contact-us.php?Look for the tent signs and the blue BeyondAgile logo</p>
<p><strong>Seattle: </strong>Amdocs Digital Commerce Division (formerly QPass)<br />
Greece Room<br />
2211 Elliott Ave Suite 400<br />
Seattle, WA</p>
<p><strong>Questions?</strong><br />
Contact us at beyondagile@taoproductions.com, or visit our Google Group, or contribute to the nascent Wiki at beyondagile.org.</p>
<p><strong>Why come?</strong><br />
Here&#8217;s your chance to be in on the beginning of an exciting new collaboration of the Puget-Sound area (and beyond!) agile-interested. And if that&#8217;s not enough, we&#8217;ll hold a drawing to win exciting and valuable prizes!</p>
<p><strong>What&#8217;s BeyondAgile?</strong><br />
It&#8217;s the combination and follow-on to a number of the agile-oriented user and interest groups that have operated in the Puget Sound area. Representatives of the Seattle XP User Group and Seattle Scrum came together in December to try and combine the efforts of all of us who care about and use agile methods.</p>
<p><strong>Why does BeyondAgile exist?</strong><br />
o Find best practices among all agile processes<br />
o Build a bigger agile community<br />
o Take advantage of overlaps between existing groups<br />
o Expand beyond meetings and provide a place to collaborate<br />
o Align software development and business<br />
o Explore cutting-edge ideas and techniques</p>
<p><strong>What is BeyondAgile like?</strong><br />
That, in large part, is up to you. A primary reason for consolidating our efforts is to broaden our base of support, capability, and leadership. We envision a more active, multi-faceted organization that does more than just host talking heads. We&#8217;ll gather at least once a month on the 4th Thursday of the month, and probably more often, once you figure out what other events you&#8217;d like.</p>
<p><strong>Where do BeyondAgile events happen?</strong><br />
Our goal is to have many answers to this. As a result, we&#8217;ve worked to remove the impediment offered by bridges and commuting: for our monthly meetings, we hold our events in both Eastside and Seattle locations, through the semi-magic of videocasting. We&#8217;re experimenting: we&#8217;ve thought of trying to alternate the &#8220;real&#8221; physical meeting between sides of the lake. At this point, we&#8217;re only at the stage of using a semi-okayish video link between the two locations, and try *very* hard to make the meeting balanced between locations. That&#8217;s harder than it seems; come and help us work it out! We&#8217;re still dreaming of enabling people anywhere to attend through streaming video, even after the meeting&#8217;s already happened, but we need more knowledge, resources, and volunteers before that&#8217;s going to happen.</p>
<p><strong>I have question for you.</strong><br />
Great! Visit the Google Group (BeyondAgile) or send a message to beyondagile@taoproductions.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/03/25/its-beyondagile-people-making-software-that-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is Architecture?</title>
		<link>http://www.gettingagile.com/2009/01/19/what-is-architecture/</link>
		<comments>http://www.gettingagile.com/2009/01/19/what-is-architecture/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 18:59:32 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IASA]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/2009/01/19/what-is-architecture/</guid>
		<description><![CDATA[Talk about a loaded term. Even the term itself, &#8220;architecture&#8221;, when used in the Agile community can start a heated discussion. When I was coordinator of the International Association of Software Architects Puget Sound chapter, the discussions about &#8220;what is architecture&#8221; caused passionate debate. I am sure this entry will get some interesting comments, as [...]]]></description>
			<content:encoded><![CDATA[<p>Talk about a loaded term. Even the term itself, &#8220;architecture&#8221;, when used in the Agile community can start a heated discussion. When I was coordinator of the International Association of Software Architects Puget Sound chapter, the discussions about &#8220;what is architecture&#8221; caused passionate debate. I am sure this entry will get some interesting comments, as well.</p>
<p>I don&#8217;t believe that this entry will solve the question but I hope to at least give some focus for teams who are dealing with the structural integrity of their applications. First off, a definition of &#8220;architecture&#8221;:</p>
<p><em><strong>architecture: </strong>noun &#8211; &#8220;the art or practice of designing and constructing&#8230;&#8221; or &#8220;the complex or carefully designed structure of something&#8221; or &#8220;the conceptual structure and logical organization of a computer or computer-based system&#8221;</em></p>
<p><em></em>Each of these definitions interests me but to put them to practice is quite difficult. They are left to interpretation about what is design, construction, structure, conceptual, and logical. Earlier interpretations of this term interpreted these to mean the high-level structure, architectural style, and finally the stuff that is too expensive to get wrong.</p>
<p>It seems to me that my interpretation is a bit different. Working with tools, practices, and processes over the past 15 years has guided me to a different conclusion. I believe that architecture is how it is <strong><em>SAID</em></strong>:</p>
<p><em><strong>Structure</strong> &#8211; how the pieces (components) create a solution (application)<br />
</em><em><strong>Alignment</strong> &#8211; the degree to which the application or enterprise structures align to current business objectives and strategy</em><em><strong><br />
</strong><strong>Integrity</strong> &#8211; the components that provide stability to the structure (application or enterprise) (ie. automated tests and builds, service-level agreements, network infrastructure, etc&#8230;)<br />
</em><em><strong>Design</strong> &#8211; a way to conceptually communicate the planned or implemented structure of a component, application, or enterprise (ie. system of names, XP practice of Metaphor, information radiators, etc&#8230;)</em></p>
<p>Using these as the basic building blocks for teams to focus their efforts can be helpful.</p>
<p>The structure is the reality of the solution&#8217;s construction. If the structure is too brittle or complex to support future needs then the structure is not sound. If you have been in the software development industry for even short period of time you have probably seen applications that are too brittle or complex.</p>
<p>If the application or enterprise structures are not aligned with current business needs then the value of those structures have deteriorated. We sometimes keep a specific architecture and force-fit new business needs into it because it once was the right architecture to have or we paid a bunch of money for it. Continual restructuring of our architecture to meet today&#8217;s business needs is important.</p>
<p>Providing supports to our structure allows for it withstand changes in the environment such as new business needs and updates in technology. Automated tests and builds help us keep the structural integrity of our applications intact while these changes are introduced into our applications and enterprise.</p>
<p>Communicating the conceptual structure of a component, application, or enterprise is important because it is common for new people to work on them and for those structures to interact with other components and applications. Getting someone up to speed on a component or application involves verbal, tactile, written, and visual examples. Much of what is needed can be kept in or close to the codebase along with conversations with existing developers. It is important to understand how components and applications are currently structure conceptually so we can discuss their interactions with other components and applications. For instance, should we connect via library, SOAP, RPC, or REST?</p>
<p>When I think of application architecture I want to focus on just a few principles:</p>
<ul>
<li>Application architecture is about changeability, not longevity</li>
<li>Application architecture decisions should be made closest to where they are implemented as possible</li>
<li>Application architecture design is not only about our ability to design a solution but also knowing what components, applications, and solutions already exist</li>
<li>The value for change in a component&#8217;s, application&#8217;s, or enterprise&#8217;s architecture is directly proportional to the cost of not addressing</li>
</ul>
<p>If the structure is not able to change as the needs of our business change then the solution will become a liability. If someone other than those who are constructing components and applications are deciding on architecture decisions then there will be important information lost in translation between the two. If we keep using the same design hammer (ie. always using 3-tier or IoC for everything) then we are not allowing the strongest solutions to emerge. The value of architecture can usually be described by the cost incurred if it is not taken care of.</p>
<p>Well, let the onslaught of comments commence. I have put out my ideas on architecture. There are many more out there to discuss and I am sure I will hear some of them. I will finish this entry with a quote from Martin Fowler&#8217;s &#8220;Who Needs an Architect?&#8221; article:</p>
<blockquote><p>&#8220;I define architecture as a word we use when we want to talk about design but want to puff it up to make it sound important.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/01/19/what-is-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
