<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Book Review: The Art of Agile Development</title>
	<atom:link href="http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/</link>
	<description>Rod Hilton&#039;s rants about stuff he cares about way too much.</description>
	<lastBuildDate>Sat, 28 Jan 2012 12:01:26 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
	<item>
		<title>By: Certifications Aren&#8217;t Bad (They Just Aren&#8217;t Good, Either) » Absolutely No Machete Juggling</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-60299</link>
		<dc:creator>Certifications Aren&#8217;t Bad (They Just Aren&#8217;t Good, Either) » Absolutely No Machete Juggling</dc:creator>
		<pubDate>Wed, 28 Apr 2010 03:15:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-60299</guid>
		<description>[...] by a few posts made by James Shore lately. Though I greatly respect Shore and immensely enjoyed his book, one particular post of his really irked me: &#8220;Your Certification Is [...]</description>
		<content:encoded><![CDATA[<p>[...] by a few posts made by James Shore lately. Though I greatly respect Shore and immensely enjoyed his book, one particular post of his really irked me: &#8220;Your Certification Is [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: I Love Pair-Programming &#187; Absolutely No Machete Juggling</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42325</link>
		<dc:creator>I Love Pair-Programming &#187; Absolutely No Machete Juggling</dc:creator>
		<pubDate>Sat, 21 Feb 2009 16:44:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42325</guid>
		<description>[...] the comments for my review of &#8220;The Art of Agile Development&#8221; an old colleague asked me a few questions about Pair-Programming, one of the key tenants of XP [...]</description>
		<content:encoded><![CDATA[<p>[...] the comments for my review of &#8220;The Art of Agile Development&#8221; an old colleague asked me a few questions about Pair-Programming, one of the key tenants of XP [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rod</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42324</link>
		<dc:creator>Rod</dc:creator>
		<pubDate>Sat, 21 Feb 2009 16:07:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42324</guid>
		<description>Holy shit that was a longer comment than I expected.  I think I might move that into it&#039;s own post.</description>
		<content:encoded><![CDATA[<p>Holy shit that was a longer comment than I expected.  I think I might move that into it&#8217;s own post.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rod</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42323</link>
		<dc:creator>Rod</dc:creator>
		<pubDate>Sat, 21 Feb 2009 16:06:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42323</guid>
		<description>No, you pair up for tasks.  So, once all of the stories for the iteration have had concrete tasks assigned to them, people pair up to do them.  So a dev and I might pick a specific task and work on it together.  Two other devs pick another task.  My pairing partner and I sit at a big 30 inch monitor and work on the task (just that task) together.  Generally when you pair one person is the &quot;driver&quot; and one is the &quot;navigator&quot; so one person is implementing code and the other is thinking of design implications, refactoring opportunities, or the &quot;next step&quot; for the task.  If you get stuck or pause or just want to switch, you pass the keyboard to the other person and switch roles.

When doing Test-Driven Development, one of the things we do is called &quot;ping-pong pairing&quot;.  So the other developer will write a test, then make it compile but fail.  Then he passes the keyboard to me.  I implement the feature just enough to make the test pass, then I write another failing test and pass it back.

When the task is done and code is checked in (at least to the local git repo if not the big svn repo), the pair breaks up.  Generally tasks only have 2 hour estimates (sometimes less) so you&#039;re only pairing for the two hours.  Then you pair up with someone else to work on another task.  If a task is taking longer than expected, or the pair &quot;goes dark&quot; (meaning they aren&#039;t talking) then you shuffle the pairings.

Between these tasks, you might go have lunch, or take a break from coding to watch a video on youtube at your desk, or check your RSS reader for a few minutes, or go take a walk, or go downstairs and play some ping pong or foosball.  We take breaks often because getting away from the code for a few minutes helps keep a fresh perspective when you come back to the task.  Physical activities like walking or playing ping pong help with blood circulation, which helps your brain.

It&#039;s also nice to have an odd number of developers, which we do.  This way, one person is working without pairing.  Usually this person will work on a defect instead of a story, or they&#039;ll work on a story where everyone understands what needs to be done for that part of the code.  If you don&#039;t feel like pairing, you volunteer to be the odd man out for a task.

In an 8 hour day, I&#039;m probably pairing somewhere between 4 and 6 hours.  It&#039;s important to have a good setup for it - big monitors, comfy chairs, no corner desks (so that the devs can be side by side at the flat desk with the monitor between them).

I see pairing work so well every day that I consider my dev career prior to Rally to have consisted mostly of wasting time.  When I think back to all the code I&#039;ve written for a job, I&#039;m annoyed at how much less efficient I was then since I wasn&#039;t pairing, and how much better my code and my products would have been if I had paired on them full time.

When you have a second person working with you, you find that you try harder to code well.  You&#039;re far, far less likely to be willing to apply duct tape to a problem, because someone else is working with you and he or she is more likely to object to the duct tape.  If two people approve a hack and implement it, it&#039;s almost certainly because it&#039;s the right approach given the time constraints.  If one person sitting alone decides to pursue a hack, it&#039;s far more likely to be a situation where there is a better approach.

Two people attacking a design problem together is far, far easier than one person doing it.  Your partner will think of things you don&#039;t, and vice versa.  In a non-pairing environment, you can always call someone to a whiteboard to help you work through a design issue, but when you do that you&#039;re only calling for help when you know you need it.  The times when you need help and don&#039;t know it go unaddressed - and yet despite the fact that you need help, I guarantee that you&#039;re coding SOMETHING and checking it in.  It&#039;s almost certain to be shitty code.  The amount of time you spend trying to figure out &quot;what&#039;s going on here&quot; or &quot;why isn&#039;t this working the way I expect&quot; is severely reduced.  I&#039;m talking hours of debugging that literally turn into seconds.

Pairing also helps a great deal with collective code ownership.  I don&#039;t feel like there are any realms of the code that &quot;belong&quot; to any team member.  You don&#039;t have a situation where one person is the &quot;expert&quot; on a part of the codebase, since that person worked with someone else when they wrote it, and everyone likely shuffled around while it was developed.  EVERYONE has seen that part of the codebase before, which means EVERYONE feels comfortable refactoring or extending it.  This enables the team to perform improvements to any part of the code whenever they are working, which leads to technical debt being paid off very quickly.  I often find myself shocked at how good the quality of the code is that we write and that we&#039;ve written before.  The product is ENORMOUS in code size, easily the biggest I&#039;ve ever worked on, but there are very few areas of code that I would consider bad at all, and all of those are the earliest parts of the code that were written (and were written without pairing or TDD).

Pairing fosters a collective unity that I haven&#039;t seen anywhere else.  There are obviously issues (like you mention, when people have burritos for lunch pairing in the afternoon can be a challenge; hygiene can sometimes be a serious issue as well, especially with all the Boulder hippie-types) and challenges, and there&#039;s no denying that you&#039;re producing fewer lines of code per day since only half your team is coding at any one point.  I don&#039;t consider that a bad thing, though (if you have two solutions that equally solve a problem, the solution with fewer lines of code is the superior one) because the QUALITY of the code that IS produced is so, so, so much higher.

Like I said, when I leave Rally (which I don&#039;t see happening any time soon) if the next company doesn&#039;t do pair programming, it&#039;s going to be a tough adjustment to me.  It would be like walking into a new company and finding out that all of the developers only use vi for everything and refuse to use IDEs.  Sure you get the job done, but god damn you&#039;re being inefficient about it.  When people hiss at pairing because they can&#039;t listen to headphones or don&#039;t want to sit next to a fat guy, it sounds to my ears EXACTLY like someone complaining about IDEs being too complicated or how great vi is.  Programming alone/vi is definitely a good way to get code written, but pairing/intellij is so much more effective that I just shake my head at all the time wasted not utilizing it.</description>
		<content:encoded><![CDATA[<p>No, you pair up for tasks.  So, once all of the stories for the iteration have had concrete tasks assigned to them, people pair up to do them.  So a dev and I might pick a specific task and work on it together.  Two other devs pick another task.  My pairing partner and I sit at a big 30 inch monitor and work on the task (just that task) together.  Generally when you pair one person is the &#8220;driver&#8221; and one is the &#8220;navigator&#8221; so one person is implementing code and the other is thinking of design implications, refactoring opportunities, or the &#8220;next step&#8221; for the task.  If you get stuck or pause or just want to switch, you pass the keyboard to the other person and switch roles.</p>
<p>When doing Test-Driven Development, one of the things we do is called &#8220;ping-pong pairing&#8221;.  So the other developer will write a test, then make it compile but fail.  Then he passes the keyboard to me.  I implement the feature just enough to make the test pass, then I write another failing test and pass it back.</p>
<p>When the task is done and code is checked in (at least to the local git repo if not the big svn repo), the pair breaks up.  Generally tasks only have 2 hour estimates (sometimes less) so you&#8217;re only pairing for the two hours.  Then you pair up with someone else to work on another task.  If a task is taking longer than expected, or the pair &#8220;goes dark&#8221; (meaning they aren&#8217;t talking) then you shuffle the pairings.</p>
<p>Between these tasks, you might go have lunch, or take a break from coding to watch a video on youtube at your desk, or check your RSS reader for a few minutes, or go take a walk, or go downstairs and play some ping pong or foosball.  We take breaks often because getting away from the code for a few minutes helps keep a fresh perspective when you come back to the task.  Physical activities like walking or playing ping pong help with blood circulation, which helps your brain.</p>
<p>It&#8217;s also nice to have an odd number of developers, which we do.  This way, one person is working without pairing.  Usually this person will work on a defect instead of a story, or they&#8217;ll work on a story where everyone understands what needs to be done for that part of the code.  If you don&#8217;t feel like pairing, you volunteer to be the odd man out for a task.</p>
<p>In an 8 hour day, I&#8217;m probably pairing somewhere between 4 and 6 hours.  It&#8217;s important to have a good setup for it &#8211; big monitors, comfy chairs, no corner desks (so that the devs can be side by side at the flat desk with the monitor between them).</p>
<p>I see pairing work so well every day that I consider my dev career prior to Rally to have consisted mostly of wasting time.  When I think back to all the code I&#8217;ve written for a job, I&#8217;m annoyed at how much less efficient I was then since I wasn&#8217;t pairing, and how much better my code and my products would have been if I had paired on them full time.</p>
<p>When you have a second person working with you, you find that you try harder to code well.  You&#8217;re far, far less likely to be willing to apply duct tape to a problem, because someone else is working with you and he or she is more likely to object to the duct tape.  If two people approve a hack and implement it, it&#8217;s almost certainly because it&#8217;s the right approach given the time constraints.  If one person sitting alone decides to pursue a hack, it&#8217;s far more likely to be a situation where there is a better approach.</p>
<p>Two people attacking a design problem together is far, far easier than one person doing it.  Your partner will think of things you don&#8217;t, and vice versa.  In a non-pairing environment, you can always call someone to a whiteboard to help you work through a design issue, but when you do that you&#8217;re only calling for help when you know you need it.  The times when you need help and don&#8217;t know it go unaddressed &#8211; and yet despite the fact that you need help, I guarantee that you&#8217;re coding SOMETHING and checking it in.  It&#8217;s almost certain to be shitty code.  The amount of time you spend trying to figure out &#8220;what&#8217;s going on here&#8221; or &#8220;why isn&#8217;t this working the way I expect&#8221; is severely reduced.  I&#8217;m talking hours of debugging that literally turn into seconds.</p>
<p>Pairing also helps a great deal with collective code ownership.  I don&#8217;t feel like there are any realms of the code that &#8220;belong&#8221; to any team member.  You don&#8217;t have a situation where one person is the &#8220;expert&#8221; on a part of the codebase, since that person worked with someone else when they wrote it, and everyone likely shuffled around while it was developed.  EVERYONE has seen that part of the codebase before, which means EVERYONE feels comfortable refactoring or extending it.  This enables the team to perform improvements to any part of the code whenever they are working, which leads to technical debt being paid off very quickly.  I often find myself shocked at how good the quality of the code is that we write and that we&#8217;ve written before.  The product is ENORMOUS in code size, easily the biggest I&#8217;ve ever worked on, but there are very few areas of code that I would consider bad at all, and all of those are the earliest parts of the code that were written (and were written without pairing or TDD).</p>
<p>Pairing fosters a collective unity that I haven&#8217;t seen anywhere else.  There are obviously issues (like you mention, when people have burritos for lunch pairing in the afternoon can be a challenge; hygiene can sometimes be a serious issue as well, especially with all the Boulder hippie-types) and challenges, and there&#8217;s no denying that you&#8217;re producing fewer lines of code per day since only half your team is coding at any one point.  I don&#8217;t consider that a bad thing, though (if you have two solutions that equally solve a problem, the solution with fewer lines of code is the superior one) because the QUALITY of the code that IS produced is so, so, so much higher.</p>
<p>Like I said, when I leave Rally (which I don&#8217;t see happening any time soon) if the next company doesn&#8217;t do pair programming, it&#8217;s going to be a tough adjustment to me.  It would be like walking into a new company and finding out that all of the developers only use vi for everything and refuse to use IDEs.  Sure you get the job done, but god damn you&#8217;re being inefficient about it.  When people hiss at pairing because they can&#8217;t listen to headphones or don&#8217;t want to sit next to a fat guy, it sounds to my ears EXACTLY like someone complaining about IDEs being too complicated or how great vi is.  Programming alone/vi is definitely a good way to get code written, but pairing/intellij is so much more effective that I just shake my head at all the time wasted not utilizing it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bryan</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42282</link>
		<dc:creator>Bryan</dc:creator>
		<pubDate>Fri, 20 Feb 2009 23:11:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42282</guid>
		<description>That&#039;s surprising.  Do you literally pair up with someone for 40 hours a week?  The same person every week?  Do neither of you ever fart?</description>
		<content:encoded><![CDATA[<p>That&#8217;s surprising.  Do you literally pair up with someone for 40 hours a week?  The same person every week?  Do neither of you ever fart?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rod</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42280</link>
		<dc:creator>Rod</dc:creator>
		<pubDate>Fri, 20 Feb 2009 22:02:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42280</guid>
		<description>I didn&#039;t start full-time pairing until working here.  I was very skeptical at first as well, but I&#039;ll be honest: the quality of the code produced by the pairs is far superior to the code produced by the same people when we aren&#039;t pairing.  To be honest, I&#039;ve seen pair programming work so well that it actually seems kind of stupid to me now to not do it.

I&#039;ll probably write a more detailed post about pairing someday.</description>
		<content:encoded><![CDATA[<p>I didn&#8217;t start full-time pairing until working here.  I was very skeptical at first as well, but I&#8217;ll be honest: the quality of the code produced by the pairs is far superior to the code produced by the same people when we aren&#8217;t pairing.  To be honest, I&#8217;ve seen pair programming work so well that it actually seems kind of stupid to me now to not do it.</p>
<p>I&#8217;ll probably write a more detailed post about pairing someday.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bryan</title>
		<link>http://www.nomachetejuggling.com/2009/02/19/book-review-the-art-of-agile-development/comment-page-1/#comment-42260</link>
		<dc:creator>Bryan</dc:creator>
		<pubDate>Fri, 20 Feb 2009 15:06:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.nomachetejuggling.com/?p=263#comment-42260</guid>
		<description>I&#039;ve always been a bit suspect of full time pair programming.  I get it and have used it and still do for certain situations.  Things like a particularly hard problem, dealing with a new technology that you both need to learn, or a part of the code where it pays to have more than one person know it well because of hit-by-bus-syndrome, but the idea of doing it full time 40 hours a week has always struck me as a bit unnecessary.

Maybe part of it is because I never wanted to be that close to another fat guy for that much time, particularly if we had lunch at a place that... well... lends itself to flatulence in the afternoon.

You&#039;ve eliminated the &#039;fat guy&#039; concern from your list of reasons not to do it though, so maybe you don&#039;t feel the same way.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve always been a bit suspect of full time pair programming.  I get it and have used it and still do for certain situations.  Things like a particularly hard problem, dealing with a new technology that you both need to learn, or a part of the code where it pays to have more than one person know it well because of hit-by-bus-syndrome, but the idea of doing it full time 40 hours a week has always struck me as a bit unnecessary.</p>
<p>Maybe part of it is because I never wanted to be that close to another fat guy for that much time, particularly if we had lunch at a place that&#8230; well&#8230; lends itself to flatulence in the afternoon.</p>
<p>You&#8217;ve eliminated the &#8216;fat guy&#8217; concern from your list of reasons not to do it though, so maybe you don&#8217;t feel the same way.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

