<?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>slipgate.net</title>
	<atom:link href="http://slipgate.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://slipgate.net</link>
	<description>Development, Scrum and Agile.</description>
	<lastBuildDate>Mon, 18 Jul 2011 14:39:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<!-- added to the content header -->	<item>
		<title>Python snippet: for&#8230;else</title>
		<link>http://slipgate.net/2011/07/18/python-snippet-for-else/</link>
		<comments>http://slipgate.net/2011/07/18/python-snippet-for-else/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 14:36:02 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://slipgate.net/?p=38</guid>
		<description><![CDATA[Python has a clever for...else (albeit ancient by now) construct allowing the use of an else suite. Consider the following example, written without the for&#8230;else construct: contains_even = False for element in [1, 2, 3, 4, 5]: if element % 2 == 0: contains_even = True break if contains_even: print "List contains an even element." else: print [...]]]></description>
			<content:encoded><![CDATA[<p>Python has a clever <code><a href="http://docs.python.org/reference/compound_stmts.html#the-for-statement">for...else</a></code> (albeit ancient by now) construct allowing the use of an <code>else</code> suite. Consider the following example, written without the for&#8230;else construct:</p>
<pre>contains_even = False
for element in [1, 2, 3, 4, 5]:
    if element % 2 == 0:
        contains_even = True
        break
if contains_even:
    print "List contains an even element."
else:
    print "List does not contain an even element."</pre>
<p>Compare that to the for&#8230;else equivalent code, allowing us to remove an additional flag variable:</p>
<pre>for element in [1, 2, 3, 4, 5]:
    if element % 2 == 0:
        print "List contains an even element."
        break
else:
    print "List does not contain an even element."</pre>
<p>The <code>else</code> suite will be executed unless the preceding loop has been terminated by a <code>break</code> statement. A <code>continue</code> statement will skip the rest of the suite and proceed with the next item, or with the <code>else</code> clause if there was no items remaining.</p>
]]></content:encoded>
			<wfw:commentRss>http://slipgate.net/2011/07/18/python-snippet-for-else/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why your project key figure will probably not be a great Scrum Master</title>
		<link>http://slipgate.net/2011/06/20/why-your-project-key-figure-will-probably-not-be-a-great-scrum-master/</link>
		<comments>http://slipgate.net/2011/06/20/why-your-project-key-figure-will-probably-not-be-a-great-scrum-master/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 07:52:14 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://slipgate.net/?p=11</guid>
		<description><![CDATA[I&#8217;ve stumbled across this scenario a number of times, both from the inside looking out, and from the outside looking in. A greenfield Scrum company is closing in on launching its maiden scrum project and management is looking to appoint a Scrum Master (SM) to the team. The team consists of one or more developers, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve stumbled across this scenario a number of times, both from the inside looking out, and from the outside looking in. A greenfield Scrum company is closing in on launching its maiden scrum project and management is looking to appoint a Scrum Master (SM) to the team.</p>
<p>The team consists of one or more developers, designers, architects/tech leads etc., all with none or limited scrum experience. For the untrained eye, a good candidate for a SM is someone familiar with the company, its customers and its way of managing projects &#8211; preferably a senior staff member. Obviously, this is the natural choice for the management as well since they&#8217;re looking for someone to &#8220;take charge&#8221; of the project and bring it home, even though this new (Scrum) way of doing projects is new to them.</p>
<p>There are several things that should be noted with this first observation. Sure, it may be valid to put a senior staff member in the center of action for the purpose of showing a good project face towards the rest of the company. However, there are far more subtle dangers lurking behind a decision like this.</p>
<ul>
<li><em>Facilitate, not manage</em>. A primary role for a SM is to facilitate communication between the team members, but never to manage. This difference may be noticed during the Daily Scrum when team members adress the SM instead of the team. A tech lead, or a project key figure in general will easier be seen as manager rather than facilitator in place of for instance one of the developers.</li>
<li><em>Facilitate, not solve.</em> Impediments in different shapes and forms often come up during daily scrum, or in between. One of the primary missions for the SM is to make sure that these impediments are removed, but not necessarily by the SM herself. It&#8217;s easy for a key figure as SM to get to deeply involved in the solution itself, rather than make sure it&#8217;s solved by someone in the team, by someone in the organisation, or someone else entirely.</li>
<li><em>Prioritize the team, not herself. </em>If an impediment surfaces, it&#8217;s important that the SM prioritizes to solve it, even if that means pausing her own current sprint activities. The team is priority #1 for a SM, so that everyone else can focus on making sprint progress.</li>
<li><em>Work for the team, not for herself.</em> The SM must always work to improve the progress and performance of the team, regardless of the impact this has on her own sprint performance.</li>
<li><em>People, not technology or design.</em> System and/or graphical design discussions are crucial ingredients to successfully complete any project, in Scrum even more so. When the SM is also for instance the tech lead, it&#8217;s easy for the team members to adress the SM for technical design discussions &#8211; instead of using other members, or the entire team as opinion. The SM should focus on the people in the team, and leave the technology to &#8220;the team&#8221;, i.e. collaboration.</li>
<li><em>Single point of failure.</em> The SM role in itself is a crucial role to keep the team focused and on track. If this individual is coupled with additional key roles, the team becomes vulnerable to absences, either to sickness or to other teams. It&#8217;s wise to spread the team load evenly among the team members.</li>
<li><em>You should work with what you enjoy, and you&#8217;ll to a better job. </em>Not all people are cut to working with technology, programming or any other role for that matter. This is also very much true for a SM, whose main purpose is to provide an excellent working environment for the team and its members. A key figure within a project is likely to have a thorough knowledge and passion for the area she&#8217;s working in. For the same reason not everyone enjoys technology, it&#8217;s likely that this individual doesn&#8217;t fire on all cylinders when it comes to dealing with people and group dynamics.</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://slipgate.net/2011/06/20/why-your-project-key-figure-will-probably-not-be-a-great-scrum-master/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software Architect neutralizing agility?</title>
		<link>http://slipgate.net/2011/06/15/software-architect-neutralizing-agility/</link>
		<comments>http://slipgate.net/2011/06/15/software-architect-neutralizing-agility/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 22:27:28 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://slipgate.net/?p=9</guid>
		<description><![CDATA[While I&#8217;m no fan of  business titles in general, I do recognize there is a blunt need within (and beyond) an organization to be able to label individuals and groups of individuals. However, ancient titles from the happy days of Waterfall really has no place in an Agile environment. The main reason for this is, [...]]]></description>
			<content:encoded><![CDATA[<p>While I&#8217;m no fan of  business titles in general, I do recognize there is a blunt need within (and beyond) an organization to be able to label individuals and groups of individuals. However, ancient titles from the happy days of <a href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</a> really has no place in an Agile environment. The main reason for this is, <em>collaboration</em>.</p>
<p>Citing <a href="http://en.wikipedia.org/wiki/Architect#cite_note-ns.ca-0">Wikipedia</a> for a definition of an Architect; &#8220;An architect is a person trained in the planning, design and oversight of the construction of buildings.&#8221; Although we&#8217;re into software rather than buildings, the traditional role of a <a href="http://en.wikipedia.org/wiki/Software_architect">Software Architect</a> is generally thought of as being just that of a traditional Architect &#8211; that is, planning, designing and overseeing the construction of software.</p>
<p>Sticking to this method of designing software, including <a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front">Big Design Up Front</a>, may or may not lead to working software. However, keeping a single individual (or a team of individuals in the case of an over-sized project [resulting in even further issues, but that's a whole different post]) responsible for all design aspects of the intended software will likely render the project vulnerable to disturbances. Disturbances come in all shapes and sizes, ranging from real obstacles such as illness to changing or previously unknown requirements.</p>
<p>However, the key issue with this setup is the team environment it produces surrounding the software being built. Developers in general are curious folks (I&#8217;m aware that this may be a cultural thing, but this is true for all my current, previous and definitely future colleagues and programming friends) that thrives in finding good solutions to tricky coding and design problems. If all major design decisions were to go through a single entity (The Architect), where would then all the other great ideas spawning from the collaborative forces of the team be captured? Probably down the bin, or in a good scenario into the software, ignoring the Ever-So-Busy-Architect-That-Never-Tends-To-Pick-Up-An-Editor-And-Actually-Produce-Code.</p>
<p>I do recognize that this is an oversimplification, I&#8217;m however fully convinced that a collaborative effort triumphs that of a single individual, each and every time. <strong>The key is collective ownership of the software being built.</strong></p>
<p>So, what are the alternatives, if any? Most projects will do just fine with a close team of Developers (disregarding the fact that the project most likely will need other qualities besides the technical ones) with a common goal and an agile approach to design and implementation. However, dealing with more complex systems as currently are being built all around the globe, I do agree that there are some projects that require someone with a different set of priorities, with a broader sense and understanding of both technical and business issues.</p>
<p>It comes down to the organisation itself whether there is an actual need for an additional business title for this individual. A common term surfacing around the web is <a href="http://en.wikipedia.org/wiki/Lead_programmer">Tech Lead</a> (TL), or <a href="http://en.wikipedia.org/wiki/Lead_programmer">Lead Programmer</a>. Depending on what you want to accomplish, this role may require one or several of the following qualities:</p>
<ul>
<li><em>Facilitate deployment of good practices. </em>Preferably, it should be in the interest of the entire team to stay on top of current techniques and practices. The TL can however drive this process by making sure that a good idea is always pursued. <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a>, <a href="http://en.wikipedia.org/wiki/Extreme_Programming">XP</a>, <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">BDD</a>, <a href="http://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>, <a href="http://en.wikipedia.org/wiki/Continuous_integration">Continuous Integration</a>, <a href="http://camping.rubyforge.org/">Camping</a>, <a href="http://memcached.org/">Memcached</a>, <a href="http://www.scala-lang.org/">Scala</a> or <a href="http://cassandra.apache.org/">Cassandra</a>, the list is endless.</li>
<li><em>Keep a technical overview of the major parts of the system</em>. Since most developers in a team are highly focused on certain aspects of a system, it&#8217;s easy to loose track of the long term goals and make decisions that may be overly costly to change later on.</li>
<li><em>Write a lot of code.</em> This is probably the biggest difference in comparing a TL/LP with a Software Architect. A TL is never far from the nitty gritty, and thrives in solving difficult programming problems in the most elegant and/or high performing way. The TL is always a good partner to discuss programming issues with.</li>
<li><em>Facilitate collaborative ownership.</em> In order for a successful collaborative environment to flourish, it&#8217;s essential that the TL brings his A-game and encourages continuous improvements to the software by the entire team and all its individual members.</li>
</ul>
<p>And most important of all, this individual should thrive in improving both herself and her teammates skill and delivered quality. This work is never done, it has merely begun.</p>
]]></content:encoded>
			<wfw:commentRss>http://slipgate.net/2011/06/15/software-architect-neutralizing-agility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	<!-- added to the content footer --></channel>
</rss>

