<?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>Alexandre Martins &#187; Consulting</title>
	<atom:link href="http://blog.m.artins.net/tag/consulting/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m.artins.net</link>
	<description>On Agile Software Development</description>
	<lastBuildDate>Thu, 12 Aug 2010 20:09:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Wrong Communication In Distributed Teams</title>
		<link>http://blog.m.artins.net/wrong-communication-in-distributed-teams/</link>
		<comments>http://blog.m.artins.net/wrong-communication-in-distributed-teams/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:08:39 +0000</pubDate>
		<dc:creator>Alexandre Martins</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Organizational Transformation]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://blog.m.artins.net/?p=240</guid>
		<description><![CDATA[One of the big challenges faced by distributed teams is how to get over the communication gap created by the physical distances that separates them. We all know that communication, either verbal or non-verbal, is fundamental for any project to be delivered successfully. When a team is good at communicating, they cultivate a more effective [...]]]></description>
			<content:encoded><![CDATA[<p>One of the big challenges faced by distributed teams is how to get over the communication gap created by the physical distances that separates them. We all know that communication, either verbal or non-verbal, is fundamental for any project to be delivered successfully. When a team is good at communicating, they cultivate a more effective sense of collectivity and cooperation, having faster feedback, by sharing information (knowledge) and having valuable discussions.</p>
<p>But this is not quite the real world for distributed development teams. It’s much harder, not to say almost impossible, to know what exactly is happening on each other’s mind. What problems and technical challenges are they facing? What are they doing now? What points are they considering when designing a new feature? How important is for them to write tests? Are they following the project development standards?</p>
<h4>Blame the "Bandwidth Limited" Communication Tools!</h4>
<p><cite><br />
Software development teams, by the nature of their work, needs to discuss and assess different ideas to solve complex problems. And they are very difficult to communicate when using tools such as email or telephone, which on the book they call “bandwidth limited”. And those are exactly the ones available for most distributed teams. So face-to-face communication suits better for this kind of discussions, using the assistance of diagrams or sketches, not to mention the use of body language. This would give us immediate feedback, just by looking into the other person’s eyes, which communicate understanding.<br />
</cite></p>
<p><span style="font-size: smaller;"><em>* Extracted from <a href="http://tinyurl.com/kpoxmx">The Organization and Architecture of Innovation: Managing the Flow of Technology</a> (with some modifications).</em></span></p>
<p>And as you can't always minimize distances to allow verbal communication, you have to look for other ways, and maximizing non-verbal communications is definitely a road to go down.</p>
<h2>Some Bad Outcomes</h2>
<h3>Poor Code Quality</h3>
<ul>
<li><strong>Code Duplication</strong> (<a href="http://www.c2.com/cgi/wiki?DuplicatedCode">see</a>)</li>
<p>It's quite usual. For example, the guy wants to load a XML file as a String so that he can perform some assertions over the result. He will implements something like a <code>FileLoader</code> class. But what he doesn't know is that another developer has already implemented a class with this behaviour.</p>
<li><strong>Reinventing the wheel</strong> (<a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel">see</a>)</li>
<p>This is partially caused by lack of communication and partially a result of the programmer's discipline. When adding a new library to the project the team must have a discussion and look for the benefits earned by using it. Before adding a XML parsing library that you're used to, have  a quick chat with the team will let you know if is there any other parsing library being used. Maybe someone could make a walk-through with you on it. But it is your responsibility to know how to use it afterwards.</p>
<li><strong>Code For The Others</strong> (and for yourself)</li>
<p>When coding, you should always ask yourself if your peers would be able to understand what are you producing. Better still, you should ask if you would easily understand it again in a couple of weeks from now. It's quite common when coding, you get contextualized with what you need to do to deliver that functionality. This context will always get lost after finishing, unless you share it with the others or document it. There are <a href="http://tinyurl.com/m73tjb">some</a> <a href="http://tinyurl.com/3jms4t">good</a> <a href="http://tinyurl.com/lxr9ke">materials</a> <a href="http://tinyurl.com/n34a2h">out</a> <a href="http://tinyurl.com/mkh47l">there</a> that <a href="http://tinyurl.com/lxj2qn">shows</a> you how to write clean and readable code.</p>
<li><strong>Broken Builds</strong></li>
<p>In a distributed team, a broken build not only just affects the people in your room, it also affects people in rooms into other cities. So reverting a broken build should be taken into account, specially when you have a slow build, then definitely the commiter would get himself into a big problem! Imagine a long build that takes about 30 minutes for example, and someone commits something broken. If he fixes it really quickly, it still may take 1 hour for the other team to be able to commit its changes and consequently 1 hour and a half lost in productivity in the other cities. It's all about communication - the quicker the build, the quicker the feedback. So a fast and successful build is mandatory!</ul>
<h3>Fear of Refactoring</h3>
<p>Poor code quality results in fear of refactoring. Who hasn't been in a situation, working on a tightly coupled system, where it was quite hard to do any refactoring? Any attempt would propagate the changes deep in the source code, ending up <a href="http://www.catb.org/~esr/jargon/html/Y/yak-shaving.html">shaving the yak</a>, not going anywhere.</p>
<h3>Absence of Trust</h3>
<p>I see this one as a result of the other two I mentioned above. When your team is biased to go off the tracks when trying to comply with code standards, some precautionary measures are generally created to avoid the worse.</p>
<p>I've seen a case where a pair, assigned to implement a story, and almost completing the development, ended up realising that another pair was also looking at it. Don't ask me why!</p>
<p>I've also seen people creating triggers on the version control system, so that for each commit from one team, the other received an email with all the commit information. This is good in one side, because you can easily identify cowboy commiters that don't write tests. But this is also used to check if the code is acceptable, reverting if not!</p>
<h2>My Current Experience</h2>
<p>The team I'm currently working with is facing some of these problems, and during all last week, when I was on the other side of the fence, visiting the other part of out team on Tasmania, this became even more highlighted. Although we were having daily stand-up meetings, I felt like I was missing something, specially because there was another team in Melbourne joining us and I still didn't know how it was going to work out. Chatting with my friend <a href="http://www.markhneedham.com/">Mark Needham</a> about it, he recommended me a book called <a href="http://tinyurl.com/kpoxmx">The Organization and Architecture of Innovation: Managing the Flow of Technology</a>, where there's a chapter dedicated exclusively to this point, and that I could probably get some ideas of how to overcome this problem.</p>
<h3>Taking actions</h3>
<blockquote><p>
It seems obvious that an organization that wants its technical staff members to communicate needs to ensure the distances among them are minimized. Unfortunately, the traditional and most common form of office configuration does just the opposite. Not to mention when they are in separated buildings.
</p></blockquote>
<p>The quote above also extracted from the book, doesn't tell anything new, and that's exactly one of the issues we wanted to fix. Now, with three teams we agreed that we would need to have them communicating face-to-face more often. So the rule is that every week we should have at least one person from each team visiting a different one. Apart from that, we are continuing with our <a href="http://en.wikipedia.org/wiki/Stand-up_meeting">daily stand-up meetings</a>, each team separately, and later on another daily meeting, but between teams (in the Scrum world called <a href="http://agilecommons.org/posts/d551a84f06">Scrum of Scrums</a>). This one involves, by default, only the iteration manager and the tech lead, but everyone else is also welcome to attend.</p>
<p>We also had to put more effort on improving the non-verbal communication, as they are more required on distributed teams. With this separation teams have to be even more strict with what they permit or not in the codebase. We introduced development tools such as <a href="http://checkstyle.sourceforge.net/">Checkstyle</a> and <a href="http://tinyurl.com/ktn6mn">Compile With Walls</a> to ensure this. Checkstyle acts as a hammer on misbehaved commiters and Compile With Walls ensures that project structure is being respected. Sometimes quite good threads (over IM or email) are created by people trying to understand why a Checkstyle rule has failed.</p>
<p>(Thanks to <a href="http://watchitlater.com/blog/">Tom Czarniecki</a> for helping me with this one.) </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.m.artins.net/wrong-communication-in-distributed-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Martin Fowler: HumaneRegistry</title>
		<link>http://blog.m.artins.net/martin-fowler-humaneregistry/</link>
		<comments>http://blog.m.artins.net/martin-fowler-humaneregistry/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 22:53:33 +0000</pubDate>
		<dc:creator>Alexandre Martins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Organizational Transformation]]></category>
		<category><![CDATA[SOA-Governance]]></category>

		<guid isPermaLink="false">http://blog.m.artins.net/?p=134</guid>
		<description><![CDATA[Latest Martin Fowler's post about HumaneRegistry mentions the first project I was involved working for ThoughtWorks. It was a SOA-Governance consulting with some development effort, and also some effort on harvesting information about services provided by different applications inside the organization, compiling and placing them on the wiki. The idea was to get both service [...]]]></description>
			<content:encoded><![CDATA[<p>Latest <a href="http://www.martinfowler.com">Martin Fowler</a>'s post about <a href="http://www.martinfowler.com/bliki/HumaneRegistry.html">HumaneRegistry</a> mentions the first project I was involved working for <a href="http://www.thoughtworks.com/">ThoughtWorks</a>. It was a <a href="http://en.wikipedia.org/wiki/SOA_Governance">SOA-Governance</a> consulting with some development effort, and also some effort on harvesting information about services provided by different applications inside the organization, compiling and placing them on the <a href="http://en.wikipedia.org/wiki/Wiki">wiki</a>. The idea was to get both service builders and consumers to contribute, inputing information about the services they develop/consume aiming to build a solid service registry for all the services, with some highlighted features such as:</p>
<ul>
<li>Service description and what the user needs to use it.</li>
<li>Who is the best person for the consumer to speak to, by looking the graph indicating who's been contributing to the project.</li>
<li>Who's using it, by looking the graph indicating which applications has been invoking EJBs and consuming messages.</li>
<li>And some other ones mentioned on Martin's <a href="http://www.martinfowler.com/bliki/HumaneRegistry.html">post</a>.</li>
</ul>
<p>This was such a rewarding experience to work with great professionals like <a href="http://erik.doernenburg.com">Erik Dörnenburg</a> and <a href="http://blog.halvard.skogsrud.com/">Halvard Skogsrud</a>. And it was cool that Martin documented this on his bliki.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.m.artins.net/martin-fowler-humaneregistry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
