<?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>Source Allies Blog &#187; Agile</title>
	<atom:link href="http://blogs.sourceallies.com/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.sourceallies.com</link>
	<description>Technical and process thinking from Source Allies employees</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:40:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pair Programming 101</title>
		<link>http://blogs.sourceallies.com/2011/03/pair-programming-101/</link>
		<comments>http://blogs.sourceallies.com/2011/03/pair-programming-101/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 18:45:12 +0000</pubDate>
		<dc:creator>David Kessler</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blogs.sourceallies.com/?p=2022</guid>
		<description><![CDATA[Overview
Pair programming is a technique where two programmers work at a single work station.  One person &#8220;drives&#8221; or has control of the mouse and keyboard.  The other person &#8220;navigates&#8221; or keeps track of where they are and where they are headed.  This is a perfect environment for teaching and learning to occur.

Roles
Navigator

Keeps track of the [...]]]></description>
			<content:encoded><![CDATA[<h1>Overview</h1>
<p><a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">Pair programming</a> is a technique where two programmers work at a single work station.  One person &#8220;drives&#8221; or has control of the mouse and keyboard.  The other person &#8220;navigates&#8221; or keeps track of where they are and where they are headed.  This is a perfect environment for teaching and learning to occur.<br />
<span id="more-2022"></span></p>
<h1>Roles</h1>
<h2>Navigator</h2>
<ul>
<li>Keeps track of the big picture.</li>
<li>Responsible for directing the flow of work to a specific conclusion.</li>
<li>Reviews code.</li>
<li>Keeps track of tasks identified by the driver so they can focus on coding.</li>
<li>Ensures that best practices are followed.</li>
<li>Track potential code improvements.</li>
<li>Asks questions about the driver&#8217;s implementation</li>
</ul>
<h2>Driver</h2>
<ul>
<li>Implements the next task provided by the navigator.</li>
<li>Gives future tasks to the navigator to track.</li>
<li>Answers navigators questions.</li>
</ul>
<h1>Typical Pitfalls</h1>
<h2>Navigator</h2>
<ul>
<li>Taking control of the mouse and/or keyboard.  Resist the urge to always be in control.</li>
<li>Dictating every step of implementation.  Your partner is not a voice activated typing machine.</li>
<li>Interrupting you partner&#8217;s thought process.  Write down your thoughts and bring them up when your partner is ready to focus on what you are saying.  Be patient.  Use this extra time to focus on their code and where your pair is headed.  You are supposed to be focused on the big picture.</li>
<li>Failing to pay attention to what your partner is doing.</li>
<li>Questioning every choice they make.  Trust your partner.  You can certainly question some of their decisions, but don&#8217;t question everything they do.</li>
</ul>
<h2>Driver</h2>
<ul>
<li>Ignoring your partner.  The navigator is there to keep you on track.  Listen to them.</li>
<li>Failing to explain what you are trying to accomplish.  Your partner is not a mind reader.  Before you start the next step take a moment to explain what you are going to do to your partner.</li>
<li>Driving all the time.  This is not smart in a car and this is not a good idea when you are pairing.  Give up the keyboard periodically.</li>
</ul>
<h1>Rotating</h1>
<h2>Pair Rotation</h2>
<p>Teams should agree on how often they will switch pairs.  I prefer to switch partners once a day.  This allows each team member to be exposed to different levels of expertise and different perspectives.  This also prevent teams from having knowledge silos.  On the other hand, switching too often can result in team members knowing a little of everything without understanding anything very well.  Take time to reflect on the effects of pairing on your team.  Adjust the practice of pairing to support the goals of your team.</p>
<h2>Role Rotation</h2>
<p>The driver and navigator should switch roles periodically.  Driving or navigating too long can become monotonous and mentally overwhelming.  My favorite rotation approach uses <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a> as a cadence.</p>
<ol>
<li>writes a failing test.</li>
<li>switch</li>
<li>make it pass</li>
<li><a href="http://en.wikipedia.org/wiki/Code_refactoring" target="_blank">refactor</a> the code</li>
<li>write a failing test (step 1)</li>
<li>switch (step 2)</li>
</ol>
<p>This is just a rhythm that I enjoy following. It is fast paced and keeps my attention.  Try different thing and figure out what works best for you.  Just remember that each partner is different.  Find a pace that works for both of you.</p>
<h1>Environment</h1>
<ul>
<li>Make sure you have enough space.  Move you monitors to the center of the desk.</li>
<li>Use comfortable chairs.</li>
<li>Agree to take periodic breaks.</li>
<li>Remove Distractions
<ul>
<li>Turn off or at least silence your phone(s).</li>
<li>Tell your significant others to not call/text during pairing hours</li>
<li>Suppress distracting new message signals for email</li>
<li>Ask other team members to not interrupt you during pairing time.</li>
<li>Try to avoid scheduling meetings during this time.  Block out time on your calendar.</li>
</ul>
</li>
<li>Keep some gum/breath mints handy to mask the onions you ate for lunch</li>
<li>Get some caffeine in you before you start if you need some.</li>
<li>Clean off your desk.  Make it inviting for your pair.</li>
<li>Keep some scratch paper and pens/pencils available for notes.</li>
</ul>
<h1>Conclusion</h1>
<p>I spent several years pairing 6 hours a day.  I learned more about people and software development than I have ever though I could.  I am not recommending that you try to institute a similar policy on your development team.  In fact, I was telling <a href="http://en.wikipedia.org/wiki/Extreme_Programming" target="_blank">Extreme</a> programmer <a href="http://en.wikipedia.org/wiki/Uncle_Bob" target="_blank">Uncle Bob</a> that our development shop required developers to pair 6 hours a day.  He was shocked and a bit appalled that we would require this much pairing.  He explained that pairing is a tool that should be used to distribute knowledge throughout our team.  He recommended that we consider being less extreme in the area of pairing.</p>
<p>When we first instituted this requirement we found that we were more tired than usual, at the end of the day.  Many of our spouses began to notice that we did not talk as much in the evenings.  This fatigue stemmed from the focusing nature of pairing.  We were learning and thinking more than we had before we started pairing.  Pairing is a valuable tool that should not be ignored or abused, but rather used to improve your team.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.sourceallies.com/2011/03/pair-programming-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Teams: Unequal and Opposite Reactions</title>
		<link>http://blogs.sourceallies.com/2010/07/agile-teams-unequal-and-opposite-reactions/</link>
		<comments>http://blogs.sourceallies.com/2010/07/agile-teams-unequal-and-opposite-reactions/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 13:23:30 +0000</pubDate>
		<dc:creator>David Kessler</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://blogs.sourceallies.com/?p=1533</guid>
		<description><![CDATA[Newton&#8217;s Third law of motion, &#8220;To every action there is always an equal and opposite reaction&#8230;&#8221; is a powerful standard in analyzing team dynamics.  I have been leading agile teams for over five years.  When I am asked to lead a new team I begin by looking for reactions that are disproportionate.  While this may [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">Newton&#8217;s <a title="Third law of motion" href="http://en.wikipedia.org/wiki/Newton%27s_laws_of_motion#Newton.27s_third_law" target="_blank">Third law of motion</a>, &#8220;To every action there is always an equal and opposite reaction&#8230;&#8221; is a powerful standard in analyzing team dynamics.  I have been leading agile teams for over five years.  When I am asked to lead a new team I begin by looking for reactions that are disproportionate.  While this may seem like a strange place to focus this is a simple way to identify significant areas of improvement.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">Time and time again, I have uncovered issues that have been ignored and/or hidden by exploring &#8220;over reactions&#8221;.  They are indicators that there is more to the story.  For example, one of teams that I was leading was very frustrated with how much time we were spending estimating stories.  Their frustration eventually culminated in some of the team members refusing to participate in team estimation meetings.  As you can imagine this created significant tension between the developers and the business team.</span><br />
<span id="more-1533"></span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">While some teams do take too long to estimate, this team generally spent less than 1 percent of their month estimating cards.  With this unequal and opposite reaction focusing my attention I began to interview team members one-on-one.  These conversations confirmed that there was a problem, but failed to adequately explain why.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">At this point I approached the Project Lead and requested that we all sit down and discuss the estimation process.  At the conclusion of this meeting two things were clear.  First, the development team did not trust the business team&#8217;s motivations for gathering estimates.  Second, they did not feel like decision makers were adjusting their expectations based on the estimates that they received.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">This conversation helped both sides understand each other.  While this was not a magical cure, it did realign the action of estimating and the team’s reactions.  This may still seem like it was not worth addressing.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">On the contrary, exaggerated emotional investment can be a significant source of <a title="waste" href="http://en.wikipedia.org/wiki/Lean_software_development#Eliminate_waste" target="_blank">waste</a>.  This type of waste is often expressed through frustrations, confusion, fear, and/or apathy.  Individual opinions spread throughout teams and become a significant source of waste.  The only way to reduce this waste is to understand the root causes.  I do not have a perfect approach to efficiently identify these sources.  In my experience it takes patience and persistence to uncover the truth.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">These principles also apply to under reactions.  Some teams that have lost hope will withdraw.  The under reactions that will follow are just as important to address as over reactions.  Remember to pay attention to wheels that are abnormally quiet while you are oiling squeaky wheels.</span></p>
<p><span style="font-size: 11pt;font-family: Arial;color: #000000;background-color: transparent;font-weight: normal;font-style: normal;text-decoration: none;vertical-align: baseline">As technical people we often shy away from feelings, however like it or not our teams are made up of people.  People that have feelings that are formed by their experiences and perceptions.  Ultimately people want to be heard and understood.  Once this occurs, teams tend to realign their reactions.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.sourceallies.com/2010/07/agile-teams-unequal-and-opposite-reactions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile Conversations</title>
		<link>http://blogs.sourceallies.com/2009/11/agile-conversations/</link>
		<comments>http://blogs.sourceallies.com/2009/11/agile-conversations/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:24:43 +0000</pubDate>
		<dc:creator>John  Bracy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://blogs.sourceallies.com/2009/11/agile-conversations/</guid>
		<description><![CDATA[Everyone, especially project managers, is in love with Agile Development. And why wouldn&#8217;t they be? Under the old school system, you&#8217;d end up with developers either sitting around uselessly, or drafting up prototypes that will only be thrown away. Agile allows for parallel design and development, wasting less time and money. But there&#8217;s always a [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone, especially project managers, is in love with Agile Development. And why wouldn&#8217;t they be? Under the old school system, you&#8217;d end up with developers either sitting around uselessly, or drafting up prototypes that will only be thrown away. Agile allows for parallel design and development, wasting less time and money. But there&#8217;s always a tradeoff. In this case, I&#8217;m thinking of commonality of design. Let me explain by example:</p>
<p>I&#8217;m currently working an Agile project with three developers including myself. We&#8217;ve divied up the tasks so that one is doing the JSF database plumbing, and the other two are creating the web services that sit on the back end. We started development without having a certain idea of certain database keys, so we naturally wrapped the keys in an object that we could easily change when the decision was made. It let us move forward with development and had a very low cost for change when business came back with a decision. But we each implemented it in a difference way, using a different nomenclature and at different times. So now we have three objects that perform identical tasks, and require a translation process when our respective parts interact with each other. It&#8217;s not broken, but it&#8217;s definitely messy.</p>
<p>And it&#8217;s a natural fallout of the tendency to think that Agile means you start developing right away, and things like requirements and interfaces can be laid on top of the code later. How do we prevent it? Sadly, communication is the only answer. Code reviews early on could have prevented this situation before it would have been a pain in the tuckus to refactor. A project wiki exists, and even has a section that lays out common objects and interfaces. But the wiki was infrequently referenced for matters of actual code implementation; it was for the documents and the Agile storyboards. </p>
<p>In the end, it&#8217;s important to recognize that Agile development has taken the large chunk of communication out of the beginning phase of a project. But that communication isn&#8217;t gone, it&#8217;s been spread out over the duration of the project, and in most cases that means there going to be a lot more of it. As developers we eagerly embrace Agile projects since it means we don&#8217;t spend two months in design meetings and can&#8217;t indulge our love of code early on, but we have to realize that it comes with a cost. We actually have to talk to each other. </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.sourceallies.com/2009/11/agile-conversations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

