<?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>Eric Lefevre-Ardant on Java &#38; Agile &#187; agile</title>
	<atom:link href="http://ericlefevre.net/wordpress/category/process/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://ericlefevre.net/wordpress</link>
	<description>Eric&#039;s Earnest Elucidations</description>
	<lastBuildDate>Mon, 06 Feb 2012 06:08:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Worse than static methods or final classes?</title>
		<link>http://ericlefevre.net/wordpress/2011/11/28/worse-than-static-methods-or-final-classes/</link>
		<comments>http://ericlefevre.net/wordpress/2011/11/28/worse-than-static-methods-or-final-classes/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 09:53:56 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=911</guid>
		<description><![CDATA[Do you know what&#8217;s worse that static methods or classes marked as final? I&#8217;ll tell you what&#8217;s worse: static methods that return final classes. That only provides private constructors. Here I was, merrily testing my way through a piece of &#8230; <a href="http://ericlefevre.net/wordpress/2011/11/28/worse-than-static-methods-or-final-classes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Do you know what&#8217;s worse that static methods or classes marked as final? I&#8217;ll tell you what&#8217;s worse: static methods that return final classes. That only provides private constructors.</p>
<p>Here I was, merrily testing my way through a piece of software that sends emails. According to the Java Mail documentation, you are supposed to first create an email session as follows:</p>
<pre>Session mailSession = Session.getInstance(properties);</pre>
<p>(it is worth noting that all what the getInstance() method does is call the private constructor for Session: new Session(props, null)).<br />
Had Session been a more normal class, I could have mocked it like that:</p>
<pre>Session mockSession = mock(Session.class);</pre>
<p>and probably checked how it is being passed around like this:</p>
<pre>verify(someService).startEmailSession(mockSession);</pre>
<p>What follows is what I have to do instead.</p>
<p><strong>The case of static methods</strong></p>
<p>If getInstance() had been an instance method, I would have been able to mock it:</p>
<pre>Session mockSessionProvider = mock(Session.class);
Session mockSessionInstance = mock(Session.class);
when(mockSessionProvider.getInstance()).thenReturn(mockSessionInstance);</pre>
<p>Unfortunately, a static method cannot easily be mocked with Mockito (other mocking frameworks support that, but I believe they make the tests too obscure). So, first step: create a wrapper class just for the builder method.</p>
<pre>public class SessionProvider {
	public Session getInstance(Properties properties) {
		return Session.getInstance(properties);
	}
}</pre>
<p><strong>The case of final classes</strong></p>
<p>So far, so (relatively) good. However, since Session is a final class, the usual mocking mecanism under Mockito does not work:</p>
<pre>SessionProvider mockSessionProvider = mock(SessionProvider.class);
Session mockSessionInstance = mock(Session.class); // fails because Session is final
when(mockSessionProvider.getInstance()).thenReturn(mockSessionInstance);</pre>
<p><strong>The case of private constructors</strong></p>
<p>Another option would have been to instantiate the session instance, but that fails too, since the constructor is private:</p>
<pre>SessionProvider mockSessionProvider = mock(SessionProvider.class);
Session sessionInstance = new Session(properties, null); // fails because constructor is private
when(mockSessionProvider.getInstance()).thenReturn(sessionInstance);</pre>
<p>A third way might have been to call the original Session.getInstance() to create the test object:</p>
<pre>SessionProvider mockSessionProvider = mock(SessionProvider.class);
Session sessionInstance = Session.getInstance(properties);
when(mockSessionProvider.getInstance()).thenReturn(sessionInstance);</pre>
<p>That would work, but that also opens a whole new can of worms. Session does not implement the equals() method, so if I want to check the value of the Session instance passed around, I must either:</p>
<ul>
<li>compare with the pointer to the sessionInstance &#8212; the issue is that there is no way to check that the session has not been changed (any call to a setter method on the session instance will have no effect on the comparison of pointers)</li>
<li>implement a generic deep equal matcher for Mockito &#8212; something we did at my company, but that I am reluctant to do myself</li>
<li>use an argument captor to catch the instance passed and test &#8212; which produces a fair amount of awkward lines of test</li>
<li>create a custom argument matcher &#8212; which hides the comparison in a separate class or method</li>
<li>yet another is to wrap the instance of Session in yet another class, such as SessionInstance &#8212; which would require us to also wrap any service that takes an instance of Session</li>
</ul>
<p>So we also need a wrapper for the Session instance:</p>
<pre>public class SessionInstance {
	private final Session session;

	public SessionInstance(Session session) {
		this.session = session;
	}

	public Session getSession() {
		return session;
	}
}</pre>
<p>Which forces us to change the SessionProvider:</p>
<pre>public class SessionProvider {
	public SessionInstance getInstance(Properties properties) {
		return new SessionInstance(Session.getInstance(properties));
	}
}</pre>
<p>At last, we can mock this way:</p>
<pre>SessionProvider mockSessionProvider = mock(SessionProvider.class);
SessionInstance mockSessionInstance = mock(SessionInstance.class);
when(mockSessionProvider.getInstance()).thenReturn(mockSessionInstance);</pre>
<p>Done? Hardly. All other, possibly mockable, classes from third-parties that rely on instances of Session must now also by wrapper. For example, a third-party JavaMailTransport that requires an instance of Session now needs its own wrapper if I want to test it. Sigh&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2011/11/28/worse-than-static-methods-or-final-classes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Java&#8217;s varargs are for unit tests</title>
		<link>http://ericlefevre.net/wordpress/2011/11/21/javas-varargs-are-for-unit-tests/</link>
		<comments>http://ericlefevre.net/wordpress/2011/11/21/javas-varargs-are-for-unit-tests/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 16:53:30 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=947</guid>
		<description><![CDATA[At Devoxx last week, Joshua Bloch argued during his talk &#8220;The Evolution of Java: Past, Present, and Future&#8221; that varargs are only &#8220;somewhat useful&#8221;. I think he is overlooking some usages, particularly in tests. Here is my case. A reminder &#8230; <a href="http://ericlefevre.net/wordpress/2011/11/21/javas-varargs-are-for-unit-tests/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.devoxx.com/">Devoxx</a> last week, Joshua Bloch argued during his talk &#8220;The Evolution of Java: Past, Present, and Future&#8221; that varargs are only &#8220;somewhat useful&#8221;. I think he is overlooking some usages, particularly in tests. Here is my case.</p>
<p>A reminder on how varargs work: essentially, they allow the last parameter of a method to be made of zero to many values of the same type.<br />
For example, a method like this:</p>
<pre>int max(int... values) {...};</pre>
<p>is used by code like that:</p>
<pre>int maximum = max(1, 2, 7, 0);
int maximum = max(1);</pre>
<p>In truth, that form is only moderately useful in production code. It turns out that, on my projects at least, it is not so common for methods to be called with varying number of parameters. And in those cases, it is often acceptable to simply overload a method with more parameters.</p>
<p>There are however at least two cases where varargs shine.</p>
<p>One is in utilities classes. For example, Math.max() only takes exactly two parameters. Which comparisons between 3 or more elements very awkward. If a varargs had been used, Math.max(3, Math.max(1, 4)) would be written Math.max(3, 1, 4). Agreed, that does not happen that often. But it does occasionally.<br />
(I must admit that I do not understand exactly why Math.max() has not been modified to take a varargs nowadays)</p>
<p>However, the biggest benefit, I believe, is in the writing of tests.<br />
Tests tend to contain lots of variations in the values passed to the code under test. And it is critical to keep the clutter to a minimum.<br />
For example, here is how a typical series of tests might look like</p>
<pre>@Test
public void should_find_the_longest_name_for_a_single_user() {
	List users = new ArrayList();
	users.add(new User("eric"));
	assertThat(findLongestName(users), is("eric"));
}</pre>
<pre>@Test
public void should_find_the_longest_name_when_shorted_is_first() {
	List users = new ArrayList();
	users.add(new User("eric"));
	users.add(new User("cecile"));
	assertThat(findLongestName(users), is("cecile"));
}</pre>
<pre>@Test
public void should_find_the_longest_name_when_longest_is_first() {
	List users = new ArrayList();
	users.add(new User("cecile"));
	users.add(new User("eric"));
	assertThat(findLongestName(users), is("cecile"));
}</pre>
<pre>@Test(expected = RuntimeException.class)
public void should_fail_when_search_for_the_longest_name_with_no_users() {
	assertThat(findLongestName(new ArrayList()), is("eric"));
}</pre>
<p>Of course, they can be made a bit nicer using the varargs in Arrays.asList():</p>
<pre>@Test
public void should_find_the_longest_name_for_a_single_user() {
	assertThat(findLongestName(asList(new User("eric"))), is("eric"));
}

@Test
public void should_find_the_longest_name_when_shorted_is_first() {
	assertThat(findLongestName(asList(new User("eric"),
		new User("cecile"))), is("cecile"));
}

@Test
public void should_find_the_longest_name_when_longest_is_first() {
	assertThat(findLongestName(asList(new User("cecile"),
		new User("eric"))), is("cecile"));
}

@Test(expected = RuntimeException.class)
public void should_fail_when_search_for_the_longest_name_with_no_users() {
	findLongestName(Arrays.asList());
}</pre>
<p>However, the real goodness comes when writing our own builder method:</p>
<pre>private static List users(String... names) {
	List users = new ArrayList();
	for (String name : names) {
		users.add(new User(name));
	}
	return users;
}</pre>
<p>(side note: I like this type of methods to be private -so that I get notified when they are not used anymore- and static -mostly because they look nicer in italic, which makes it clearer that they are not part of the code being tested-)</p>
<p>which allow our tests to become:</p>
<pre>@Test
public void should_find_the_longest_name_for_a_single_user() {
	assertThat(findLongestName(users("eric")), is("eric"));
}

@Test
public void should_find_the_longest_name_when_shorted_is_first() {
	assertThat(findLongestName(users("eric", "cecile")), is("cecile"));
}

@Test
public void should_find_the_longest_name_when_longest_is_first() {
	assertThat(findLongestName(users("cecile", "eric")), is("cecile"));
}

@Test(expected = RuntimeException.class)
public void should_fail_when_search_for_the_longest_name_with_no_users() {
	findLongestName(users());
}</pre>
<p>Tests become a lot shorter, consistent, and easier to read. In fact, at this point, it is worth grouping the tests (at least those that do not throw an exception) into a single one:</p>
<pre>@Test
public void should_find_the_longest_name_for_a_single_user() {
	assertThat(findLongestName(users("eric")), is("eric"));
	assertThat(findLongestName(users("eric", "cecile")), is("cecile"));
	assertThat(findLongestName(users("cecile", "eric")), is("cecile"));
}

@Test(expected = RuntimeException.class)
public void should_fail_when_search_for_the_longest_name_with_no_users() {
	findLongestName(users());
}</pre>
<p>Final note: I prefer not to group those builder methods into a general utilities class &#8212; I tend to duplicate them in each test class. One reason is that I prefer keeping much of the test code close together. Another is that I tend to change the name of the method from test class to test class to make the code more fluent. Also, I think that DRY principles are not as important in the tests as they are in the production code.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2011/11/21/javas-varargs-are-for-unit-tests/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why aren&#8217;t there more Agile luminaries developing and selling software?</title>
		<link>http://ericlefevre.net/wordpress/2010/09/10/why-arent-there-more-agile-luminaries-developing-and-selling-software/</link>
		<comments>http://ericlefevre.net/wordpress/2010/09/10/why-arent-there-more-agile-luminaries-developing-and-selling-software/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 09:11:26 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=854</guid>
		<description><![CDATA[Have you noticed that few Agile luminaries earn a living from writing and selling software? Many do write code as consultants. Other are respected authors of non-commercial open-source development tools. Some do work for software companies such as RallyDev or &#8230; <a href="http://ericlefevre.net/wordpress/2010/09/10/why-arent-there-more-agile-luminaries-developing-and-selling-software/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Have you noticed that few Agile luminaries earn a living from writing and selling software? Many do write code as consultants. Other are respected authors of non-commercial open-source development tools. Some do work for software companies such as RallyDev or ThoughtWork Studios, though it seems that most visible presenters coming from there are consultants or at least business-facing types. But almost none actually make money directly by doing what they teach others to do.<br />
James Shore mentioned working on his own startup with Arlo Belshee and Kim Wallmark, but that was <a href="http://jamesshore.com/Blog/Agile-Startup-Build-and-Deploy.html">more than a year ago</a> and we haven&#8217;t heard much since. Ward Cunningham is <a href="http://www.aboutus.org/Ward_Cunningham_Joins_AboutUs">CTO of a website</a>, which come reasonably close to being a software house. In fact, Kent Beck is the only example I know of someone who actually tries to make a living out of writing and selling software (with mixed <a href="http://www.threeriversinstitute.org/blog/?p=291">results</a>). Tellingly, Ward and Kent are not very visible on the conference circuit anymore (though they are certainly interviewed regularly).</p>
<p style="text-align: center;"><a title="Programmer on &quot;Vacation&quot; by M. Keefe, on Flickr" href="http://www.flickr.com/photos/mkeefe/3123775954/"><img class="aligncenter" src="http://farm4.static.flickr.com/3220/3123775954_a2a25b2eb2.jpg" alt="Programmer on &quot;Vacation&quot;" width="500" height="333" /></a></p>
<p>This lead to an interesting discussion yesterday on Twitter with <a href="http://twitter.com/deborahh">Deborah Hartmann Preuss</a>, <a href="http://twitter.com/alexboly">Alexandru Bolboaca</a>, <a href="http://twitter.com/mostalive">Willem van den Ende</a>, <a href="http://twitter.com/marick">Brian Marick</a>, and <a href="http://twitter.com/Jtf">Jeffrey Fredrick</a> (see transcript at the end of this post).</p>
<p>I think most Agile personalities have become addicted to the relatively easy money of consulting. Why would they risk get a software product out in the highly competitive software market? It is so easy to just found your own consultancy. It is probably related to age, too, as you do need to have lots of spare energy for late night coding (Paul Graham once wrote that the <a href="http://www.paulgraham.com/start.html">ideal age to start a startup was between 23 and 38</a>).</p>
<p>In fact, as I argue below, I do not believe that &#8220;being agile&#8221; is <em>viewed</em> as a desirable trait for a startup and I&#8217;m sure it might even deter some of the most likely candidates to create one, as it is now viewed as a process for medium to large companies. What is viewed as needed is raw hacking powers, even if that means making things hang together with duct tape. Agile techniques might be preferable, but their ROI will become mostly apparent after two years, an eternity for a startup.</p>
<p>So, Agile luminaries are not starting software development ventures, and the founders of successful startups that use Agile techniques probably do not have the time or the will to tell the rest of the Agile world how they did it.</p>
<p>This is regrettable. I wish there was more cross-pollination, like 37signals has done with <a href="http://gettingreal.37signals.com/ch01_What_is_Getting_Real.php">Getting Real</a>. Where are the others?</p>
<p>Transcript of our conversation on twitter:</p>
<ul>
<li><a href="http://twitter.com/elefevre/status/23992476090">elefevre</a> Wondering why so few Agile luminaries are into the commercial software business.</li>
<li><a href="http://twitter.com/alexboly/status/23992811162">alexboly</a> @elefevre I think Kent Beck said it best: &#8220;As a business man, I&#8217;m a very good software developer&#8221; :)</li>
<li><a href="http://twitter.com/elefevre/status/23993041085">elefevre</a> @alexboly interestingly, he seems to be the only one actually trying to make a living selling software (seems hard)</li>
<li><a href="http://twitter.com/mostalive/status/23993103340">mostalive</a> @elefevre because they are too busy consulting or marketing? want to publish own commercial product? work happens in odd hours -&gt; slow</li>
<li><a href="http://twitter.com/alexboly/status/23993340206">alexboly</a> @elefevre As a programmer I would rather live in Castalia (<a href="http://goo.gl/AzQn">http://goo.gl/AzQn</a>) As a business man, I need to live in the real world.</li>
<li><a href="http://twitter.com/elefevre/status/23993502818">elefevre</a> @mostalive sure they do consulting. But if agile dev is really better, then products they would make ought to be better too. =&gt; Profit?</li>
<li><a href="http://twitter.com/DeborahH/status/23993605867">DeborahH</a> @elefevre I guess Mike Beedle (PatientKeeper) is an exception, then. Co-author of first Scrum book.</li>
<li><a href="http://twitter.com/mostalive/status/23993618984">mostalive</a> @elefevre Profit yes, and, consulting &amp; product development don&#8217;t really mix, as the business drivers point in opposite directions.</li>
<li><a href="http://twitter.com/DeborahH/status/23993657148">DeborahH</a> @elefevre ken Schwaber came from sw dev company iirc, but perhaps you can&#8217;t change the world AND refactor your codebase at once. Or?</li>
<li><a href="http://twitter.com/mostalive/status/23993667552">mostalive</a> @elefevre agile tool vendors may be the exception, however their consultants can not recommend the best tool for the context (post-its ;))</li>
<li><a href="http://twitter.com/mostalive/status/23993726953">mostalive</a> @elefevre and if a product is successful, it generates so much revenue, that consulting revenue is irrelevant.</li>
<li><a href="http://twitter.com/DeborahH/status/23993740747">DeborahH</a> @elefevre &#8230; Then they wouldn&#8217;t be luminaries in the sense of &#8220;visible as a teacher, writer&#8221; imo: these things are jobs in themselves.</li>
<li><a href="http://twitter.com/DeborahH/status/23993830131">DeborahH</a> @elefevre though I respect more those who take time for practice as well, it grounds one&#8217;s teaching. But usually on s/one else&#8217; project?</li>
<li><a href="http://twitter.com/elefevre/status/23993835979">elefevre</a> @DeborahH yes. Maybe if you&#8217;re busy developing (not consulting), then you have less time &amp; inclination helping others.</li>
<li><a href="http://twitter.com/elefevre/status/23993954714">elefevre</a> @mostalive also, I suspect majority of (or the best known) consultants from Agile Tool vendors are more business-facing type than developers</li>
<li><a href="http://twitter.com/DeborahH/status/23994168511">DeborahH</a> @elefevre until recently, Jeff was CTO @ PatientKeeper.<a href="http://bit.ly/ctQJRb">http://bit.ly/ctQJRb</a> Once yr own house is in order, you gotta get a new challenge?</li>
<li><a href="http://twitter.com/elefevre/status/23994171815">elefevre</a> @DeborahH @mostalive @alexboly I think my point could be: are successful/rich developers/hackers really applying Agile techniques?</li>
<li><a href="http://twitter.com/elefevre/status/23994171815">elefevre</a> @DeborahH @mostalive @alexboly or is Agile orthogonal unnecessary for a successful startup? (maybe I&#8217;ve been reading too much Paul Graham)</li>
<li><a href="http://twitter.com/elefevre/status/23994449402">elefevre</a> @DeborahH @mostalive @alexboly I think that, in a startup, techniques might be &#8220;agile&#8221;, but do not need to be identified as such</li>
<li><a href="http://twitter.com/elefevre/status/23994492785">elefevre</a> @DeborahH @mostalive @alexboly while, in a bigger biz, it helps that people can relate to a consensual definition of development process</li>
<li><a href="http://twitter.com/elefevre/status/23994550232">elefevre</a> @DeborahH @mostalive @alexboly in our startup, we are 3 former Agile consultants (out of 5 devs), but we take care not to say we&#8217;re agile</li>
<li><a href="http://twitter.com/alexboly/status/23994627898">alexboly</a> @elefevre @DeborahH @mostalive Agile doesn&#8217;t exist. Agile tools exist. Do you need agile tools for a succesful startup? I think you do.</li>
<li><a href="http://twitter.com/alexboly/status/23994663218">alexboly</a> @DeborahH @mostalive @elefevre Do you need to call the agile tools &#8220;agile&#8221; in order do succeed? Of course not. :)</li>
<li><a href="http://twitter.com/DeborahH/status/23995352665">DeborahH</a> @elefevre &#8220;Agile&#8221; is a means to an end. You cannot afford to primarily &#8220;be agile&#8221;n you must be primarily busines owners!</li>
<li><a href="http://twitter.com/alexboly/status/23995572610">alexboly</a> @DeborahH @mostalive @elefevre The point was never to &#8220;be agile&#8221;, it always was to build software in a way that increases the success rate.</li>
<li><a href="http://twitter.com/elefevre/status/23995886396">elefevre</a> @DeborahH @mostalive @alexboly there might even be a stigma to calling things &#8220;agile&#8221; in a startup. Not hip (anymore)</li>
<li><a href="http://twitter.com/DeborahH/status/23995954811">DeborahH</a> @elefevre surely &#8220;hipness&#8221; is not more important than profitability? Like &#8220;agility&#8221;, &#8220;hipness&#8221; sounds like a red herring, to me.</li>
<li><a href="http://twitter.com/alexboly/status/23996114206">alexboly</a> @elefevre @DeborahH @mostalive I&#8217;d like to see that people don&#8217;t talk about agile anymore but do the right thing. Human nature loves labels.</li>
<li><a href="http://twitter.com/elefevre/status/23996115605">elefevre</a> @DeborahH certainly is a red herring. But I do think it&#8217;s important for startups, often packed with smug hackers. #overgeneralization</li>
<li><a href="http://twitter.com/marick/status/24010583072">marick</a> @elefevre I don&#8217;t have any good product ideas. I don&#8217;t have skills to do it all &amp; it&#8217;s a big step from 1-person company to N-person company.</li>
<li><a href="http://twitter.com/elefevre/status/24016857230">elefevre</a> @marick my thinking is that the mobile market is more tolerant of seemingly mediocre ideas than the desktop/enterprise space</li>
<li><a href="http://twitter.com/DeborahH/status/24017033829">DeborahH</a> @elefevre @marick perhaps because in mobile market short release cycles allow products to &#8220;grow up&#8221; in public?</li>
<li><a href="http://twitter.com/elefevre/status/24018064686">elefevre</a> @DeborahH @marick I think it&#8217;s because there are fewer high-standard apps, so users tolerate mediocre ones. eg. quizzes, website wrappers</li>
<li><a href="http://twitter.com/Jtf/status/24020122755">Jtf</a> @elefevre I think people who are successful consultants are addicted to fast feedback from helping. Products are delayed gratification.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2010/09/10/why-arent-there-more-agile-luminaries-developing-and-selling-software/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Bob Martin on TDD in Clojure</title>
		<link>http://ericlefevre.net/wordpress/2010/06/04/bob-martin-on-tdd-in-clojure/</link>
		<comments>http://ericlefevre.net/wordpress/2010/06/04/bob-martin-on-tdd-in-clojure/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 12:54:23 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=821</guid>
		<description><![CDATA[Robert &#8220;Uncle Bob&#8221; Martin has just blogged on the differences in TDD styles using Clojure, as compared to more traditional languages such as Java. Though I am a Clojure-newbie, I mostly disagree with his conclusions. His main point is that, &#8230; <a href="http://ericlefevre.net/wordpress/2010/06/04/bob-martin-on-tdd-in-clojure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Robert &#8220;Uncle Bob&#8221; Martin has just blogged on <a href="http://blog.objectmentor.com/articles/2010/06/03/tdd-in-clojure">the differences in TDD styles using Clojure</a>, as compared to more traditional languages such as Java. Though I am a Clojure-newbie, I mostly disagree with his conclusions.</p>
<p>His main point is that, because Clojure is a functional language, functions have no side-effects and therefore can be used directly in the tests.</p>
<p>For example, the production code</p>
<pre>(defn update-all [os]
  (update os))</pre>
<p>would be tested with something like</p>
<pre>(testing "update-all"
  (let [
    o1 (make-object ...)
    o2 (make-object ...)
    os [o1 o2]
    us (update-all os)
    ]
    (is (= (nth us 0) (update o1)))
    (is (= (nth us 1) (update o2)))
    )
  )</pre>
<h2>There is no reason to believe that the (update) function is side-effect-free</h2>
<p>Changing internal values is only one way of creating side-effect. I admit that Clojure encourages coders to write code that does not change variables (if I got it right, it is definitely possible to do so, but with some additional work). However, that effect only stops at the boundaries of the language. At some point, it might access the file system or a database. Clearly, the state might change there.</p>
<h2>Correct implementation of the (update-all) function depends on the correct implementation of (update)</h2>
<p>Bob Martin says: &#8221;this test simply checks that the appropriate three functions are getting called on each element of the list&#8221;.<br />
Suppose that the (update) function does not do anything or maybe does something that does not return a value, such as printing out to the console. Then, calling it will have the same effect as not calling it at all. The test above will pass even if the (update-all) function does not provide any implementation at all. When, later, the bug is found, it will be harder to fix.</p>
<h2>The test could be clearer (with a more powerful test framework)</h2>
<p>One of my biggest concerns is that the test looks a lot like the code itself. Looks like duplication of information to the reader.<br />
If there was a mock framework for Clojure, I would expect to see something like</p>
<pre>(testing "update-all"
  (let [
    pre-conditions (
      (should-return (update 1) 1.5)
      (should-return (update 3) 3.0) )
    o1 (make-object 1)
    o2 (make-object 3)
    os [o1 o2]
    us (update-all os)
    ]
    (is (= (nth us 0) (1.5)
    (is (= (nth us 1) (3.0)
    )
  )</pre>
<h2>Bob Martin is right to conclude that &#8220;Clojure without TDD is just as much a nightmare as Java or Ruby without TDD.&#8221;</h2>
<p>But he should also make it clearer that it is lacking a mock framework (he does point to Brian Marick&#8217;s work on this).</p>
<p>It should be noted that it is possible to get a similar implementation style in Java as in Clojure, though it is significant work. In fact, that&#8217;s often how we use it here at <a href="http://www.algodeal.com/">Algodeal</a>. That means mostly relying on <a href="http://en.wikipedia.org/wiki/Immutable_object">immutable objects</a> and state-less methods. Immutable collections from <a href="http://code.google.com/p/google-collections/">Google Collections</a> help a lot, too. Still, we like to use mocks in our tests (too much for some, probably).</p>
<p>In the end, Uncle Bob&#8217;s post is another aspect of the (almost) age-old debate described by Martin Fowler: <a href="http://martinfowler.com/articles/mocksArentStubs.html">classicists vs. mockists</a>. If you haven&#8217;t already, read Fowler&#8217;s article, it&#8217;s worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2010/06/04/bob-martin-on-tdd-in-clojure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interviewed by François Beauregard</title>
		<link>http://ericlefevre.net/wordpress/2009/09/10/interviewed-by-francois-beauregard/</link>
		<comments>http://ericlefevre.net/wordpress/2009/09/10/interviewed-by-francois-beauregard/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 21:55:45 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[agile2009]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=733</guid>
		<description><![CDATA[François Beauregard from Pyxis Technologies interviewed me during Agile 2009 for their Vox Agile podcast. The interview is now online. We chatted about a favorite topic of mine: how to expand the horizons for Agile. My point is mostly that &#8230; <a href="http://ericlefevre.net/wordpress/2009/09/10/interviewed-by-francois-beauregard/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pyxis-tech.com/blog/author/fbeauregard/">François Beauregard</a> from <a href="http://www.pyxis-tech.com/">Pyxis Technologies</a> interviewed me during <a href="http://agile2009.agilealliance.org/">Agile 2009</a> for their <a href="http://bit.ly/Wo7qS">Vox Agile podcast</a>. The interview is now <a href="http://pyxis-tech.com/fr/medias/elargir-les-horizons">online</a>.</p>
<p style="text-align: center;"><a title="Toy sampling megaphone by mikael altemark" href="http://www.flickr.com/photos/24844537@N00/337248947"> <img class="aligncenter" src="http://farm1.static.flickr.com/133/337248947_f1eadc7cc0.jpg" alt="Toy sampling megaphone" width="300" height="247" /> </a></p>
<p>We chatted about a favorite topic of mine: how to expand the horizons for Agile. My point is mostly that the Agile crowd is mostly talking about basic issues in software development, including during the Agile 2009 conference. I fear that this my give the wrong impression to beginners (&#8220;how, so we only need to do this and that, and we&#8217;re agile? Cool!&#8221;) and even to seasoned practitioners (&#8220;this Agile thing is not addressing my needs anymore&#8221;).<br />
I would much prefer that we talk more about complex problems, whether they relate directly to Agile or not. This can include technical discussions or more touchy-feely ones. As long as we are addressing difficult problems, we will be making progress.</p>
<p>I also want to see more cross-domains talks. Obvious domains are the heavy industry (I won&#8217;t need to remind how influential Toyota has been to the IT industry) or performing arts. But that could also include things such as <a href="http://en.wikipedia.org/wiki/Behavioral_economics">Behavioral Economics</a>.</p>
<p>Or not. I don&#8217;t know for sure. However, I do know that we should be taking more risks. And stop presenting Introductions to Retrospectives for the upteenth time.</p>
<p>At the end of the talk, I mention 2 things for further reading. Here they are, plus a bonus book that I&#8217;ve just read:</p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0321413091?ie=UTF8&amp;tag=ericlefevre-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321413091">Implementation Patterns</a>, by Kent Beck</li>
<li><a href="http://www.randsinrepose.com/">Rands In Repose</a>, a blog on technological culture and managerial aspect of life in an IT firm; posts are not frequent, but very interesting (and long)</li>
<li>bonus track: <a href="http://www.amazon.com/gp/product/0812977874?ie=UTF8&amp;tag=ericlefevre-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0812977874">The Logic of Life</a>, a book by Tim Harford; this is very much in the style of <a href="http://www.amazon.com/gp/product/0345494016?ie=UTF8&amp;tag=ericlefevre-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0345494016">The Undercover Economist</a> (his previous books, which I enjoyed a lot) and <a href="http://www.amazon.com/gp/product/0060731338?ie=UTF8&amp;tag=ericlefevre-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0060731338">Freakonomics</a> (ditto)</li>
</ul>
<p>The podcast is available in French on the <a href="http://pyxis-tech.com/fr/medias/elargir-les-horizons">Vox Agile site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2009/09/10/interviewed-by-francois-beauregard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Is Scrum Evil?&#8221; Beyond our session at XP Day Paris</title>
		<link>http://ericlefevre.net/wordpress/2009/06/02/is-scrum-evil-beyond-our-session-at-xp-day-paris/</link>
		<comments>http://ericlefevre.net/wordpress/2009/06/02/is-scrum-evil-beyond-our-session-at-xp-day-paris/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 11:14:42 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[scrum]]></category>
		<category><![CDATA[xpday]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=635</guid>
		<description><![CDATA[Our session &#8220;Is Scrum Evil?&#8221; at XP Day Paris this year went well. Attendance was good (50 people or so). One participant called it an &#8220;eye opener&#8220;. Two recorded the discussion (one of the records is available, in French, here; &#8230; <a href="http://ericlefevre.net/wordpress/2009/06/02/is-scrum-evil-beyond-our-session-at-xp-day-paris/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Is Scrum Evil? by elefevre7, on Flickr" href="http://www.flickr.com/photos/elefevre/3569286059/"><img class="alignright" src="http://farm4.static.flickr.com/3388/3569286059_c542db4960_m.jpg" alt="Is Scrum Evil?" width="240" height="160" /></a>Our session &#8220;Is Scrum Evil?&#8221; at <a href="http://xpday.fr/">XP Day Paris</a> this year went well. Attendance was good (50 people or so). One participant called it an &#8220;<a href="http://twitter.com/morlhon/status/1922417164">eye opener</a>&#8220;. Two recorded the discussion (one of the records is available, in French, <a href="http://www.touilleur-express.fr/podcast_page/">here</a>; look for the podcast published on May 30th 2009). Nicolas Martignole even did a <a href="http://www.touilleur-express.fr/2009/05/29/xp-day-france-2009-scrum-est-il-dangereux/">transcript of the session</a> (in French &#8212; you might want to check out the <a href="http://translate.google.com/translate?js=n&amp;prev=_t&amp;hl=fr&amp;ie=UTF-8&amp;u=http://www.touilleur-express.fr/2009/05/29/xp-day-france-2009-scrum-est-il-dangereux/&amp;sl=fr&amp;tl=en&amp;history_state0=&amp;swap=1">Google translation</a>).</p>
<p>I thought I would give more details here.</p>
<h2>Our goals</h2>
<p>We didn&#8217;t exactly manipulate the participants, but we certainly did not reveal, on purpose, what our goals were:</p>
<ul>
<li>help dissenting voices come out of the closet &#8212; very few people are vocally criticizing Scrum today in France, and I have found no blogs. I wanted to show the pro-Scrum side that they do not have the final word.</li>
<li>let people vent &#8212; both pros and antis</li>
<li>make participants think &#8212; one later came to me and suggested that I should have offered &#8220;alternative solutions&#8221;. Well, I have none (though I do have some starting points, see below)<img class="alignright" src="http://farm4.static.flickr.com/3349/3570113092_0d6b7f13d4_m.jpg" alt="Is Scrum Evil?" width="240" height="180" /></li>
</ul>
<h2>Alternative endings</h2>
<p>We had prepare additional materials, in case the discussion died out. Fortunately, it was so lively that we couldnt use them at all. You&#8217;ll find all three of them below.</p>
<h3>You are not alone</h3>
<p>The first thing I wanted to highlight is that, though dissenting voices on Scrum (or Agile) are not currently heard in France, they do exist in the rest of the world:</p>
<ul>
<li>James Shore has <a href="http://jamesshore.com/Blog/The-Decline-and-Fall-of-Agile.html">blogged</a> that &#8220;<em>when people say &#8220;Agile,&#8221; they usually mean Scrum</em>&#8221; and that &#8220;<em>it&#8217;s very easy for teams using Scrum to throw out design</em>&#8220;. Finally, he points out that the &#8220;<em>Scrum makes it worse by ignoring important (but hard) agile engineering practices, and the Scrum Alliance makes it worse still with their armies of trainers [...] issuing dubious &#8220;ScrumMaster&#8221; certificates to people</em>&#8220;. There is more in <a href="http://www.infoq.com/news/2009/06/shore-interview">today&#8217;s article on InfoQ</a>.</li>
<li>David Anderson <a href="http://www.agilemanagement.net/Articles/Weblog/TheCaseforanAgileFringe.html">lobbyied hard for an &#8216;Agile Fringe&#8217; stage at Agile 2009 Conference</a>, feeling that the vocal agile community is too mainstream. I agree with him, and I feel that the Agile 2009 program could have given more room to dissenting voices. The <a href="http://agile2009.agilealliance.org/AgileFrontier">Agile Frontier stage</a> is not bad, but it should have gone further.</li>
<li>Naresh Jain says that <a href="http://blogs.agilefaqs.com/2009/04/29/agile-as-practiced-today-is-the-new-waterfall/">Agile (as practices today) is the new waterfall</a>.</li>
<li>which reminds us directly of <a href="http://www.m3p.co.uk/">Steve Freeman</a>&#8216;s aphorism, uttered during CITCON Amsterdam: &#8220;Scrum is the new RUP&#8221;</li>
<li>some people did manage to get controversial sessions accepted to Agile 2009. Not all are directly related to Scrum:
<ul>
<li>JB Rainsberger: <a href="http://agile2009.agilealliance.org/node/708">Integration Tests are a scam</a></li>
<li>Bas Vodde &amp; Steven Mak: <a href="http://agile2009.agilealliance.org/node/656">Let&#8217;s Stop Calling It Agile</a></li>
<li>Paul Hodgetts: <a href="http://agile2009.agilealliance.org/node/3231">ScrumMasters considered harmful &#8211; Where did it go wrong?</a></li>
<li>Brian Foote &amp; Joseph Yoder: <a href="http://agile2009.agilealliance.org/node/2470">Big Balls of Mud: Is this the best Agile can do?</a></li>
<li>also, there might be good content at Linda Rising&#8217;s <a href="http://agile2009.agilealliance.org/node/408">Agile: placebo or real solution?</a></li>
</ul>
</li>
<li>last but not least, <a href="http://alistair.cockburn.us/">Alistair Cockburn</a>, author of the Crystal family of methodologies, signatory of the Agile Manifesto and Certified ScrumMaster Trainer, will host a keynote at Agile 2009 entitled <a href="http://agile2009.agilealliance.org/keynotes">“I Come to Bury Agile, Not to Praise It”</a></li>
</ul>
<p><a title="Is Scrum Evil? by elefevre7, on Flickr" href="http://www.flickr.com/photos/elefevre/3570113476/"><img class="alignright" src="http://farm4.static.flickr.com/3593/3570113476_85648d6b1a_m.jpg" alt="Is Scrum Evil?" width="180" height="240" /></a></p>
<h3>Scrum has Crossed The Chasm</h3>
<p>There is a model that give hints to the current situation with Scrum. It is the <a href="http://en.wikipedia.org/wiki/Technology_adoption_lifecycle">Technology Adoption Life-Cycle</a>, as amended by <a href="http://en.wikipedia.org/wiki/Geoffrey_Moore">Geoffrey Moore</a> in his seminal book &#8220;<a href="http://en.wikipedia.org/wiki/Crossing_the_Chasm">Crossing The Chasm</a>&#8220;.</p>
<p>In short, it appears that many of the arguments against Scrum do not just mean that it is poorly explained, nor just that it is poorly understood, but rather that it is now being adopted by a large number of people. Or, to rephrase this, that it has been (consciously or not) packaged in order to be palatable to the mainstream. This implies trainings, books, consulting services, explanations, case studies, success stories. In short, packaging the approach just like a marketing team would do. That the people behind Scrum did it on purpose (as I believe) is beyond the point: the Agile approach that wins the hearts and minds of IT professionals everywhere is necessarily the one that comes with such as package, a <em>whole product</em>, in the words of Moore.</p>
<p>That is a reality that people that are blindly against Scrum must acknowledge.</p>
<h3>ARXTA</h3>
<p>Finally, I would like to point any aspiring Scrum-evil-ist to <a href="http://www.exampler.com/blog/">Brian Marick</a>&#8216;s writing on Agile roots. His argument is that &#8220;Agile&#8221; (and, I guess, the names of pretty much all Agile methodologies) is too easy a term to adopt. In other words, many people will look at the name, glance at the practices, and quickly come to the conclusion that &#8220;hey, this is exactly what we&#8217;ve been doing all along! Let&#8217;s avoid asking ourselves hard questions and let&#8217;s not change the way we work.&#8221; Which is, obviously, missing the whole point.</p>
<p>Brian has came up with a new name for the roots of Agile: &#8220;<a href="http://arxta.net/">Artisanal Retro-Futurism, crossed with Team-Scale Anarcho-Syndicalism</a>.&#8221; The name is cryptic (and even slightly repulsing) on purpose, so that people will have to ask, and will have to have a conversation.</p>
<h2>Further reading</h2>
<p>Check out</p>
<ul>
<li>my <a href="http://www.flickr.com/photos/elefevre/3569301289/in/photostream/">photos of the notes</a> taken on easel pads</li>
<li><a href="http://www.touilleur-express.fr/2009/05/29/xp-day-france-2009-scrum-est-il-dangereux/">the transcript (in French) of the session</a> by Nicolas Martignole (<a href="http://translate.google.com/translate?js=n&amp;prev=_t&amp;hl=fr&amp;ie=UTF-8&amp;u=http://www.touilleur-express.fr/2009/05/29/xp-day-france-2009-scrum-est-il-dangereux/&amp;sl=fr&amp;tl=en&amp;history_state0=&amp;swap=1">Google translation in English</a>); he even has <a href="http://www.touilleur-express.fr/podcast_page/">a recording somewhere on his site</a></li>
<li><a href="http://ericlefevre.net/wordpress/2008/10/07/scrum-is-evil/">my notes</a> from the session at CITCON Amsterdam 2008</li>
<li>&#8220;<a href="http://stackoverflow.com/questions/343162/is-scrum-evil">Is Scrum Evil?</a>&#8221; a question asked by Jeffrey on Stackoverflow</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2009/06/02/is-scrum-evil-beyond-our-session-at-xp-day-paris/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Refactoring applied to features (or YAGNIAM &#8211; You Aren&#8217;t Gonna Need It&#8230; Any More)</title>
		<link>http://ericlefevre.net/wordpress/2009/03/10/refactoring-applied-to-features-or-yagniam-you-arent-gonna-need-it-any-more/</link>
		<comments>http://ericlefevre.net/wordpress/2009/03/10/refactoring-applied-to-features-or-yagniam-you-arent-gonna-need-it-any-more/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 12:52:25 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=550</guid>
		<description><![CDATA[Refactoring code without modifying its external behavior is necessary to keep your code base manageable. That is nowadays a well-established fact. However, it can only go so far to prevent your code base from swelling permanently. In theory, if your &#8230; <a href="http://ericlefevre.net/wordpress/2009/03/10/refactoring-applied-to-features-or-yagniam-you-arent-gonna-need-it-any-more/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="photo sharing" href="http://www.flickr.com/photos/clairity/141872743/"><img class="flickr-photo alignright" src="http://farm1.static.flickr.com/44/141872743_39d1fccfa3_t.jpg" alt="Taking Off" width="100" height="74" /></a><a href="http://en.wikipedia.org/wiki/Code_refactoring">Refactoring code without modifying its external behavior</a> is necessary to keep your code base manageable. That is nowadays a well-established fact.</p>
<p>However, it can only go so far to prevent your code base from swelling permanently. In theory, if your revenues keep growing, you can keep recruiting more people in your development team, and all will be good. Unforunately, that&#8217;s not usually how software works.</p>
<p><a href="http://www.truehealth.org/anatcycl.html">Like many other things in life</a>, software goes through well-known phases: birth, growth, maturity, and decay. At some point, the costs of maintaining the software are just not justified anymore and the editor pulls the plug.</p>
<p>However, we can do a little better than that. If the project still has some life in it, it can be a better plan to <em>reduce</em> its complexity, in order to lower its maintainance costs and increase its life. In fact, there is no need to wait for the product to decrease in popularity. Housekeeping should be done as early as possible in the lifecycle. No need to maintain features that cost more than they pay.</p>
<p>My current customer has exactly this problem. Their project suffers from feature creep. Regression tests become more and more costly to maintain (it is actually planned to delete some of them regularly &#8212; though, of course, nobody <em>really</em> knows which ones we can afford to throw away).</p>
<p>I would call the activity I&#8217;m promoting &#8220;<em>Feature Refactoring: the process of changing a computer program&#8217;s list of features (and corresponding code) without modifying revenues significantly</em>&#8221; (balancing short- and long- term revenues). This means that it is OK to remove some features, as long as it is acceptable to your customer base, in terms of money to make in the long term. Basically, you want to avoid the classic pattern where 80% features that are little used or not used at all.</p>
<p>Note that I am not merely talking about features representing significant weight in terms of code, tests, or documentation. Rather, I want to target anything that costs money to maintain, understand (for new hires), market, etc.</p>
<p>How can we do this? Well, here are a few <a href="http://en.wikipedia.org/wiki/Code_smell">smells</a> that can help</p>
<ul>
<li>your client representative tell you about it &#8212; the easy scenario</li>
<li>you detect that few customers actually use your modules &#8211; <a href="http://www.appspy.org/">monitoring tools</a> can help you here</li>
<li>you find bugs in production&#8230; and few people actually complain about it &#8212; should this feature be there at all?</li>
<li>you upgrade your project&#8230; and nobody complains &#8212; if your features are popular, someone is bound to complain about <em>any</em> change</li>
<li>specs for a particular feature are not updated &#8212; features that do not evolve tend to rot</li>
<li>run workshops with customers &#8212; a interesting format for this is <a href="http://innovationgames.com/the-games/speed-boat/">Speed Boat</a></li>
</ul>
<p>My point is that there are even more potential benefits in term of code maintenance when removing features, compared to refactoring the code base (which is a good thing to do, too).</p>
<p>Refactor your features. See this one there in the corner? You Aren&#8217;t Going to Need It.</p>
<p>You&#8217;ll be happier.  And you will probably save money.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2009/03/10/refactoring-applied-to-features-or-yagniam-you-arent-gonna-need-it-any-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Alliance Meeting in Paris</title>
		<link>http://ericlefevre.net/wordpress/2009/01/17/agile-alliance-meeting-in-paris/</link>
		<comments>http://ericlefevre.net/wordpress/2009/01/17/agile-alliance-meeting-in-paris/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 11:36:30 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=540</guid>
		<description><![CDATA[As you might know, the AA board is meeting in person a couple of times a year and, for once, they decided to reach out to the crowd. This time, it happened in Paris. Not much talking that evening; mostly &#8230; <a href="http://ericlefevre.net/wordpress/2009/01/17/agile-alliance-meeting-in-paris/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Hall by elefevre7, on Flickr" href="http://www.flickr.com/photos/elefevre/3201623560/"><img class="aligncenter" src="http://farm4.static.flickr.com/3479/3201623560_0547518b35.jpg" alt="Hall" width="500" height="375" /></a></p>
<p>As you might know, the <a href="http://www.agilealliance.org/show/1647">AA board</a> is meeting in person a couple of times a year and, for once, they decided to reach out to the crowd. This time, it happened in Paris.</p>
<p>Not much talking that evening; mostly networking, really. I got to talk to a few people that I had seen at <a href="http://ericlefevre.net/wordpress/2008/08/11/agile-2008-conference-is-over/">Agile 2008</a>, but couldn&#8217;t meet, because of the huge crowd. It&#8217;s too bad I couldn&#8217;t stay for drinks, since I was giving a training the following day.</p>
<p>Check out <a href="http://flickr.com/photos/elefevre/sets/72157612594796529/">my pictures</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2009/01/17/agile-alliance-meeting-in-paris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>30,000 ScrumMasters and 1,500,000 members of Scrum Teams?!</title>
		<link>http://ericlefevre.net/wordpress/2008/11/03/30000-scrummasters-and-1500000-members-of-scrum-teams/</link>
		<comments>http://ericlefevre.net/wordpress/2008/11/03/30000-scrummasters-and-1500000-members-of-scrum-teams/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 18:17:47 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=474</guid>
		<description><![CDATA[A look on the ScrumAlliance list of Certified ScrumMasters shows that they have 618 pages each containing 50 names of ScrumMaster. This means more than 30,000 CSMs as of Novembre, 3rd, 2008. According to an interview of Jeff Sutherland, for &#8230; <a href="http://ericlefevre.net/wordpress/2008/11/03/30000-scrummasters-and-1500000-members-of-scrum-teams/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A look on the <a href="http://scrumalliance.org/community/csms_only">ScrumAlliance list of Certified ScrumMasters</a> shows that they have 618 pages each containing 50 names of ScrumMaster. This means more than 30,000 CSMs as of Novembre, 3rd, 2008.</p>
<p>According to an interview of Jeff Sutherland, <a href="http://www.infoq.com/interviews/jeff-sutherland-scrum-rules">for every CSM, there are 10 Scrum teams that have not had training</a>.  That is, 300,000 Scrum teams.</p>
<p><a href="http://www.flickr.com/photos/vipez/2470805136/"><img class="alignright" title="Watch out! The Scrum people are coming..." src="http://farm4.static.flickr.com/3199/2470805136_ca2edbe9bb_m.jpg" alt="" width="240" height="180" /></a>Finally, Scrum defines that a team is made of 7 people, give or take 2. Taking the conservative value of 5, this means that we have 1,500,000 people doing Scrum.</p>
<p>One and a half million?! Is it really possible? That said, even taking more conservative numbers, there is no doubt that many people are using (trying to use?) Scrum. The <a href="http://www.versionone.com/AgileSurvey2008/index.asp">annual Agile Survey</a> showed that more than 60% of agile projects are using Scrum, or Scrum combined with XP.</p>
<p>To be honest, this is probably off the mark but maybe not by an order of magnitude. <a href="http://www.theserverside.com/discussions/thread.tss?thread_id=18838">Some estimates put the number of developers worldwide to something between 8 to 13 millions</a>. I&#8217;d be surprised that even 5% of developers <em>worldwide</em> are using Scrum (400,000 to 650,000 individuals), but the 1,500,000 figure contains all people in a scrum team, including some that probably do not qualify as developers, such as business analysts, testers, graphical designers, etc. So it could work.</p>
<p>At least it would explain why <a href="http://ericlefevre.net/wordpress/2008/10/07/scrum-is-evil/">many people now start to think that Scrum Is Evil</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2008/11/03/30000-scrummasters-and-1500000-members-of-scrum-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More about Coding Dojo at CITCON Amsterdam</title>
		<link>http://ericlefevre.net/wordpress/2008/10/21/more-about-coding-dojo-at-citcon-amsterdam/</link>
		<comments>http://ericlefevre.net/wordpress/2008/10/21/more-about-coding-dojo-at-citcon-amsterdam/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 20:52:42 +0000</pubDate>
		<dc:creator>Eric Lefevre-Ardant</dc:creator>
				<category><![CDATA[citcon]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://ericlefevre.net/wordpress/?p=458</guid>
		<description><![CDATA[As a nice followup to my earlier post, Willem did a great write up of our Coding Dojo session at CITCON Europe, in early October. His post is supplemented with pictures by Marc.]]></description>
			<content:encoded><![CDATA[<p>As a nice followup to <a href="http://ericlefevre.net/wordpress/2008/10/08/coding-dojo-on-legacy-code/">my earlier post</a>, Willem did <a href="http://me.andering.com/2008/10/21/as-a-programmer-i-want-to-go-to-a-coders-dojo-so-that-i-can-improve-my-skills/">a great write up of our Coding Dojo session</a> at <a href="http://ericlefevre.net/wordpress/2008/10/05/back-from-citcon-europe-amsterdam-2008/">CITCON Europe</a>, in early October. His post is supplemented with <a href="http://www.flickr.com/photos/27671788@N05/sets/72157608207996555/">pictures by Marc</a>.</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/27671788@N05/2957339873/in/set-72157608207996555/"><img class="aligncenter" title="Marc and Eric in action during the first 5 mins of the Coding Dojo" src="http://farm4.static.flickr.com/3033/2957339873_66447d67c8_m.jpg" alt="" width="240" height="160" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ericlefevre.net/wordpress/2008/10/21/more-about-coding-dojo-at-citcon-amsterdam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

