<?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>Propero Solutions &#187; technical</title>
	<atom:link href="http://properosolutions.com/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://properosolutions.com</link>
	<description>Helping organizations succeed with agile software development</description>
	<lastBuildDate>Fri, 06 Apr 2012 16:54:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Backlog items for refactoring tasks</title>
		<link>http://properosolutions.com/2011/02/backlog-items-for-refactoring-tasks/</link>
		<comments>http://properosolutions.com/2011/02/backlog-items-for-refactoring-tasks/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 18:31:53 +0000</pubDate>
		<dc:creator>Brad</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://properosolutions.com/?p=512</guid>
		<description><![CDATA[In an ideal world, teams are be highly disciplined with XP practices, and refactoring is part of the Definition of Done for each backlog item; refactoring does not need to be planned separately in the backlog. In the real world, teams may inherit code with a lot of technical debt, or they may have (shame [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In an ideal world, teams are be highly disciplined with XP practices, and refactoring is part of the Definition of Done for each backlog item; refactoring does not need to be planned separately in the backlog. In the real world, teams may inherit code with a lot of technical debt, or they may have (shame on them!) not been disciplined about refactoring. If your team has enough technical debt to require a significant refactoring effort, how to do you write a good backlog item for refactoring? Does the concept of &#8220;user story&#8221; even work for refactoring efforts?</p>
<p>First, let&#8217;s agree on the definition of refactoring. I like <a href="http://www.refactoring.com/" target="_blank">Martin Fowler&#8217;s definition</a>: <em> </em></p>
<blockquote><p>Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.</p></blockquote>
<p>I would go further to add that the goal of refactoring is to improve  the internal design of code so it is more readable, maintainable,  elegant, and simple; in short, so it is easier to change. Refactoring is <em>not </em>a smokescreen for fixing a bunch of bugs. It is <em>not </em>any effort to change functionality. While it may result in performance enhancements, that is <em>not </em>the primary goal: the performance of a system <em>is </em>form of external behavior.</p>
<p>Before starting a big refactoring effort, be sure to ask question #1: When is the right time to undertake a major refactoring effort to pay down technical debt?</p>
<p>Should you embark on a big refactoring effort at the end of a project, before a production release? This could be risky without a very comprehensive set of automated tests. How could you recover if the refactoring causes more harm than good? Would you be better off starting the next release with the refactoring effort?  <em>Note: I credit my colleague Aidan Ridley with identifying this important first question</em>.</p>
<p>Here are some guidelines for preparing backlog items for refactoring.</p>
<ol>
<li>Keep refactoring tasks small (the &#8220;S&#8221; in <a href="http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/" target="_blank">INVEST</a>). Identify a single small component or even a single class as the scope of a refactoring item.</li>
<li>Use metrics as indicators for refactoring targets. Measure code complexity, coupling &amp; cohesion to identify good candidates for refactoring.</li>
<li>Prioritize refactoring backlog items based on the value-t0-cost ratio. The value of a particular refactoring item may be known subjectively to the team, or may be indicated by metrics.</li>
<li>Define an adequate unit testing standard <em>before </em>starting. Write all the unit tests required to meet the standard before doing the refactoring, and use them to validate component functionality after refactoring.</li>
<li>Identify the components and functionality that may be impacted by the refactoring, and create a test plan accordingly.</li>
<li>Create automated system-level tests (smoke tests, integration tests) in order to validate whole-system functionality, particularly for areas identified in the previous step.</li>
<li>Identify any open defects that <em>may </em>be fixed by a refactoring. Coordinate with the team on any defect-fixing efforts that might overlap with the refactoring effort.</li>
<li>Identify any dependencies between backlog items &#8211; refactoring or otherwise. Can you find ways to break those dependencies, such as changing the scope of an item, or creating interfaces between components to isolate work in different areas?</li>
<li>Do you need help convincing the Product Owner to prioritize the refactoring effort? Try to quantify the value of the refactoring. How much would the team&#8217;s velocity increase as a result of refactoring? What reduction in defects would you expect?</li>
</ol>
<p>I must give credit to some of my colleagues for helping with some of the ideas in this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://properosolutions.com/2011/02/backlog-items-for-refactoring-tasks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SourceMonitor for .NET code quality metrics</title>
		<link>http://properosolutions.com/2009/11/sourcemonitor-for-net-code-quality-metrics/</link>
		<comments>http://properosolutions.com/2009/11/sourcemonitor-for-net-code-quality-metrics/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 03:54:00 +0000</pubDate>
		<dc:creator>Brad</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://accelerateagile.com/2009/11/sourcemonitor-for-net-code-quality-metrics/</guid>
		<description><![CDATA[A tip of the hat to Paul Rayner for recommending SourceMonitor for .NET code quality metrics. I gave this freeware tool a spin today on a C# project I&#8217;m working on for a large client, and was very happy. It&#8217;s easy to use and within a few minutes I had it installed and ran the [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>A tip of the hat to <a href="http://virtual-genius.com/">Paul Rayner</a> for recommending <a href="http://www.campwoodsw.com/sourcemonitor.html">SourceMonitor</a> for .NET code quality metrics. I gave this freeware tool a spin today on a C# project I&#8217;m working on for a large client, and was very happy. It&#8217;s easy to use and within a few minutes I had it installed and ran the analysis on the whole project, gathering these metrics for the whole solution, and for each C# file within the solution:
<ul>
<li>number of statements</li>
<li>methods per class</li>
<li>calls per method</li>
<li>statements per method</li>
<li>average and maximum complexity</li>
<li>average and maximum block depth (number of levels of indentation/curly braces)</li>
</ul>
<p>This is a great tool to quickly find potential problem spots within the solution, so you can identify the components that would likely benefit the most from some refactoring and additional testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://properosolutions.com/2009/11/sourcemonitor-for-net-code-quality-metrics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problem with Windows Vista VPN resolved</title>
		<link>http://properosolutions.com/2009/03/problem-with-windows-vista-vpn-resolved/</link>
		<comments>http://properosolutions.com/2009/03/problem-with-windows-vista-vpn-resolved/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 18:16:00 +0000</pubDate>
		<dc:creator>Brad</dc:creator>
				<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://accelerateagile.com/2009/03/problem-with-windows-vista-vpn-resolved/</guid>
		<description><![CDATA[I&#8217;ve been using a PPTP VPN connection from my Windows Vista box for a while, and suddenly it just stopped connecting, and throwing error code 800. After many hours of banging my head against the wall and googling for a solution, I finally found it at this link. It turns out to be related to [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;ve been using a PPTP VPN connection from my Windows Vista box for a while, and suddenly it just stopped connecting, and throwing error code 800. After many hours of banging my head against the wall and googling for a solution, I finally found it at <a href="http://developers.de/blogs/damir_dobric/archive/2008/12/20/vpn-issue-with-pptp-and-windows-vista.aspx">this link</a>. It turns out to be related to Microsoft Virtual PC 2007.<br />
<blockquote>&#8220;If you have installed Virtual PC 2007 on your machine, it can happen that some windows update (I would really like to know which one) destroy some kind of mapping between VPN connection and WAN Miniport driver.&#8221;</p></blockquote>
<p>To fix it you need to uninstall &#8220;Virtual Machine Network Services&#8221; on your physical network adaptor properties.</p>
<p>Arghhhh.</p>
]]></content:encoded>
			<wfw:commentRss>http://properosolutions.com/2009/03/problem-with-windows-vista-vpn-resolved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium: the 10-minute test</title>
		<link>http://properosolutions.com/2006/06/selenium-the-10-minute-test/</link>
		<comments>http://properosolutions.com/2006/06/selenium-the-10-minute-test/#comments</comments>
		<pubDate>Thu, 29 Jun 2006 16:49:00 +0000</pubDate>
		<dc:creator>Brad</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://accelerateagile.com/2006/06/selenium-the-10-minute-test/</guid>
		<description><![CDATA[I spent some time today getting familiar with Selenium, an open-source web app test tool. Along with the Selenium IDE, which runs as a Firefox plug-in, it passed the 10-minute test with flying colors. It looks promising, and soon I plan to put it through a more rigorous test to see how well it handles [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I spent some time today getting familiar with <a href="http://www.openqa.org/selenium/">Selenium</a>, an open-source web app test tool. Along with the <a href="http://www.openqa.org/selenium-ide">Selenium IDE</a>, which runs as a Firefox plug-in, it passed the 10-minute test with flying colors. It looks promising, and soon I plan to put it through a more rigorous test to see how well it handles javascript and DHTML.</p>
]]></content:encoded>
			<wfw:commentRss>http://properosolutions.com/2006/06/selenium-the-10-minute-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switching roles: scrum master to developer</title>
		<link>http://properosolutions.com/2006/06/switching-roles-scrum-master-to-developer/</link>
		<comments>http://properosolutions.com/2006/06/switching-roles-scrum-master-to-developer/#comments</comments>
		<pubDate>Tue, 27 Jun 2006 16:19:00 +0000</pubDate>
		<dc:creator>Brad</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[people]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://accelerateagile.com/2006/06/switching-roles-scrum-master-to-developer/</guid>
		<description><![CDATA[I&#8217;m the Scrum Master (team leader) for a team of 5 developers working on a complex enterprise application at StorePerform Technologies. I haven&#8217;t worked very closely with most of the team members prior to this project, but most of them worked on the same project for a long time. I started the project hoping that [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m the Scrum Master (team leader) for a team of 5 developers working on a complex enterprise application at <a href="http://www.storeperform.com">StorePerform Technologies</a>. I haven&#8217;t worked very closely with most of the team members prior to this project, but most of them worked on the same project for a long time. I started the project hoping that I could serve both as the team leader (following the Scrum principle of servant leadership) and a part-time developer.  I reluctantly came to the realization that it doesn&#8217;t work, at least not with a new team which is still in the <a href="http://www.businessballs.com/tuckmanformingstormingnormingperforming.htm">Forming &amp; Storming stage</a>. As my colleague <a href="http://merelyinteresting.blogspot.com/">Yuri Gadow</a> helped me understand, the likely result is that I will be a bad leader and a bad developer &#8211; the worst of both worlds.</p>
<p>The team has taken the concept of self-organizing teams to an extreme, and they resent any suggestions from the Scrum master. My goal is to gain more trust and respect from the developers so they&#8217;ll be more open to my suggestions. My solution was to switch roles for a few sprints (iterations) &#8211; I will be a full-time developer, and hand over the Scrum Master duties to Yuri. I believe this approach has several benefits:
<ul>
<li>I can focus on doing one thing well: writing code</li>
<li>I can keep my development skills honed</li>
<li>As an equal peer to the other team members, they&#8217;ll (hopefully) learn to respect my technical skills and experience</li>
<li>I have the opportunity to &#8220;feel their pain&#8221; first-hand</li>
<li>The team (including me) will experience a different leadership style from Yuri</li>
</ul>
<p>After nearly 4 weeks in the trenches, I think it&#8217;s working well. Unfortunately, StorePerform cut the experiment short when they laid offthe entire US development team and outsourced it to India.</p>
]]></content:encoded>
			<wfw:commentRss>http://properosolutions.com/2006/06/switching-roles-scrum-master-to-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

