<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx</link><description>There have been some interesting discussion on our internal "agile" alias around pair programming, with some advocates and some skeptics. 
 I wrote something in response to one of the skeptical posters, who (to paraphrase badly and perhaps miss his point</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#524150</link><pubDate>Fri, 03 Feb 2006 19:42:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:524150</guid><dc:creator>Paul</dc:creator><description>I wrote a rather lengthier reply in my blog to your post (which I think raises some great points): &lt;a rel="nofollow" target="_new" href="http://www.oobaloo.co.uk/articles/2006/02/01/pair-programming"&gt;http://www.oobaloo.co.uk/articles/2006/02/01/pair-programming&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;However, I did have one observation I wanted to make here (albeit a bit more succinctly).&lt;br/&gt;&lt;br/&gt;I don't think there's necessarily a direct correlation between intro/extrovertedness and how well the person works in a pair. I think it's more fundamentally down to how they perceive the benefits of pairing, but also how they perceive a kind of fear through working directly with someone else.&lt;br/&gt;&lt;br/&gt;I've worked in pairs where the 2 of us have been extremely productive -- moreso than one of us working on our own, we actually got through more work, not just producing better work! However, there have been other times where if one person isn't entirely convinced, it's very difficult to achieve the benefits pairing promotes. For instance, if the navigator of the pair isn't interested, they won't be asking questions, and the driver will just go on whichever route they please.&lt;br/&gt;&lt;br/&gt;Although Miral points out there are places that still have excellent communication, I still think nothing beats actually looking at the same code, asking questions of each other &amp;quot;Where are we going with this, what do we actually need to do here, are you sure this is what the customer wanted?&amp;quot; Rather than spending a few hours going somewhere you didn't need to, before asking the room how to do something, only to be asked why you felt you need to do it (fortunately, not something I've had to do! :)).&lt;br/&gt;&lt;br/&gt;I think your post was spot on with regards to drivers against it -- I think people either think that they have a greater commitment to throughput, and see that working by themselves they get more done, or, they perceive that their code will be torn to shreds and they'd rather get it out the way and take advantage of a fast-moving codebase that obfuscates responsibilties.&lt;br/&gt;&lt;br/&gt;As you say, TDD can still lead to unnecessarily complicated, or poorly designed code -- I've seen so many examples of it recently. Crucially though, it gives you the support necessary to ensure that when you need to clean it up, you can do so safely -- that your code performs to the same original assumptions. Pairing should help both prevent this in the first place, but also improve/encourage the tidying afterwards! Together it's a good combo, and I think that a TDD approach really benefits from pairing.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=524150" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#523736</link><pubDate>Fri, 03 Feb 2006 05:24:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:523736</guid><dc:creator>wpoust</dc:creator><description>I'm in your camp with all reasons with one important caveat; the chemistry of the pair is critical.  If you get the right pair programming together, great things can happen.  On the other hand, if the each persons doesn't like each other (even if its because of some personal quirk), you might be better off having a lone introvert.  I know that sounds awful but that's my experience.  I would be willing to take that one step further and say if you find a pair that works great together, don't split them up.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=523736" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#522705</link><pubDate>Thu, 02 Feb 2006 04:42:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:522705</guid><dc:creator>Miral</dc:creator><description>I'm an introvert who practices pair programming :)&lt;br/&gt;&lt;br/&gt;At least when possible (sometimes it's not possible because management gives us more streams of code to implement than we have pairs available, so we have to do individual work; other times the individual work just makes more sense, depending on the type of work).&lt;br/&gt;&lt;br/&gt;When not actually pairing, we're still in a common room, so it's still easy to discuss alternative implementations with someone else, or help someone out with a problem, or overhear them discussing something and offer a suggestion.  It works out quite well, though not as good as full pairing.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=522705" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#522437</link><pubDate>Wed, 01 Feb 2006 23:49:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:522437</guid><dc:creator>Andy Tegethoff</dc:creator><description>I'm no Agile guru, and I've had only limited experience w/ pair programming, but my spider-sense tells me it COULD offer great benefits (not WILL, but COULD) were it instituted in certain kinds of teams.&lt;br/&gt;Pair programming has the potential to be like a code review cubed.  It's not even just &amp;quot;code reviewing in real-time&amp;quot; -- having someone tell you you missed a semi-colon, or failed to add a Finally clause.  &lt;br/&gt;Pair programming has the potential for both current and future benefits, in that you're avoiding low-level stupid bugs that just tie up dev and test time, spreading knowledge of the particular code being developed w/o having to &amp;quot;train&amp;quot; or brain-dump another developer, and capitalizing on the senior developer's architectural knowledge of the larger system (assuming there is one), all in one move.  This assumes you're pairing junior programmers w/ senior programmers, of course.&lt;br/&gt;But many of the &amp;quot;anti-review&amp;quot; reasons listed by Eric have &amp;quot;mirror-images&amp;quot; on the side of the reviewer, and can be summed up by saying that people generally take as little time as possible to perform code reviews.  That's been my experience, anyway, from both the reviewer and the reviewee side.&lt;br/&gt;To gain the benefit of pair programming, you need pre-dev design reviews AND post-dev code reviews -- both of which are almost certain to be less thorough/in-depth than you'd get from PP.&lt;br/&gt;Obviously, though, PP will not fit every project/team.  It's definitely something to consider, though.  Perhaps even in opposition to TDD, since TDD requires infrastructure and methodology changes that PP does not.&lt;br/&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=522437" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#522181</link><pubDate>Wed, 01 Feb 2006 20:38:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:522181</guid><dc:creator>A</dc:creator><description>agreed with all the points. &lt;br/&gt;&lt;br/&gt;Matt - &amp;quot;If you've got developers that use the reasons you listed to skip a code review, then you've got bigger issues...&amp;quot;  - none of the points listed by eric for skipping reviews make any one a bad programmer.&lt;br/&gt;&lt;br/&gt;They are all real live issues/problems and pair programming is just another methodology for helping out with those problems &lt;br/&gt;&lt;br/&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=522181" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#522103</link><pubDate>Wed, 01 Feb 2006 19:59:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:522103</guid><dc:creator>Nicholas Paldino [.NET/C# MVP]</dc:creator><description>I have two reasons I have never engaged in paired programming:&lt;br/&gt;&lt;br/&gt;1) I am the only programmer where I work&lt;br/&gt;2) No one can match up to me =)&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=522103" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#521894</link><pubDate>Wed, 01 Feb 2006 16:51:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:521894</guid><dc:creator>Matt Thalman</dc:creator><description>If you've got developers that use the reasons you listed to skip a code review, then you've got bigger issues that pair programming isn't going to help with.  That's just sweeping the other problems under the rug.  If there are managers that allow code check-ins without reviews, that's an additional problem.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=521894" width="1" height="1"&gt;</description></item><item><title>Pair Programming</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#521495</link><pubDate>Wed, 01 Feb 2006 06:32:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:521495</guid><dc:creator>TheChaseMan's Frenetic SoapBox</dc:creator><description>&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=521495" width="1" height="1"&gt;</description></item><item><title>re: Collaborative development, pair programming, etc.</title><link>http://blogs.msdn.com/b/ericgu/archive/2006/01/31/520981.aspx#521141</link><pubDate>Wed, 01 Feb 2006 01:35:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:521141</guid><dc:creator>Kevin Dente</dc:creator><description>&amp;gt;But TDD doesn't address code maintainability issues - you can still write overly &lt;br/&gt;&amp;gt;grandiose and poorly factored code using TDD. &lt;br/&gt;&lt;br/&gt;While TDD can't prevent this entirely (nothing can), it can certainly help. TDD emphasizes YAGNI, which steers you away from overly complex designs. It also emphasizes refactoring, which helps improve the understandability and maintainability of the code. &lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=521141" width="1" height="1"&gt;</description></item></channel></rss>