<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Fabio Pereira » Technical</title>
	
	<link>http://fabiopereira.me/blog</link>
	<description>My thoughts and ideas on Software Development  - Agile, XP, Scrum, Lean, Java, Ruby on Rails</description>
	<pubDate>Fri, 22 Feb 2013 17:58:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FabioPereiraTechnical" /><feedburner:info uri="fabiopereiratechnical" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Introducing Depth of Test (DOT)</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/kJl8KDoEWfo/</link>
		<comments>http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 00:57:22 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[BDD]]></category>

		<category><![CDATA[Metaphor]]></category>

		<category><![CDATA[TDD]]></category>

		<category><![CDATA[ThoughtWorks]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/?p=508</guid>
		<description><![CDATA[For the last couple of years I have been particularly passionate and vocal on my projects and in the community about the importance of writing tests as close as possible to where the code is written. As a result I have been achieving easier and cheaper to maintain testing pyramids as opposed to expensive and brittle [...]]]></description>
			<content:encoded><![CDATA[<p>For the last couple of years I have been particularly passionate and vocal on <a href="http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/">my projects</a> and <a href="http://www.slideshare.net/fabiopereirame/shallow-depth-of-test-test-at-the-appropriate-level">in the</a> <a href="http://fabiopereira.me/blog/2012/02/05/speaking-at-qcon-beijing/">community</a> about the importance of writing tests as close as possible to where the code is written. As a result I have been achieving easier and cheaper to maintain <a href="http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/">testing pyramids</a> as opposed to expensive and brittle <a href="http://watirmelon.com/2012/01/31/introducing-the-software-testing-ice-cream-cone/">ice-cream cones</a>. My passion stems from all the times that I saw, and wrote myself, test suites which attempted to achieve most of the high level scenario coverage through the user interface. I was one of the passionate advocates of this technique during a <a href="thoughtworks.com/radar">ThoughtWorks Technology Radar</a> session where we collected new ideas. Now I am quite satisfied to see that the technique has recently been added to the <strong>adopt</strong> section of the <a href="thoughtworks.com/radar">latest radar</a>.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="ThoughtWorks Radar.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/thoughtworks-radar.png" border="0" alt="ThoughtWorks Radar" width="480" height="414" /></p>
<p> </p>
<p><strong>Testing at the appropriate level</strong></p>
<p><em>&#8220;The advent of BDD, testing frameworks like Cucumber, combined with browser automation tools like Selenium, has encouraged widespread use of acceptance testing at the browser level. This unfortunately encouraged doing the bulk of testing where the cost to run the tests is the greatest. Instead, we should <strong>test at the appropriate level</strong>, <strong>as close to the code as possible</strong>, so that tests can be run with maximum efficiency. Browser-level tests should be the icing on the cake, supported by acceptance and unit tests executed at appropriate layers&#8221;</em></p>
<div style="text-align: right;"><em><a href="http://thoughtworks.fileburst.com/assets/thoughtworks-tech-radar-march-2012-us-color.pdf">thoughtworks.com/radar</a></em></div>
<p><strong>Shallow Depth of Test</strong></p>
<p>I believe that neologistic metaphors, like Ward Cunningham&#8217;s <a href="http://en.wikipedia.org/wiki/Technical_debt">Technical Debt</a>, are extremely effective to explain concepts like this. I will explain a real world example and eventually I&#8217;ll get to my neologism: <strong>Shallow Depth of Tests.</strong></p>
<p>Let&#8217;s say, hypothetically, as if I had never worked on one of these, that we have to implement a quote web application that has several business rule validations and if the details provided are valid, it gives the user a price. From the user&#8217;s perspective, the app is pretty much like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="DOT Depth of Test Black Box System.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-black-box-system.png" border="0" alt="DOT Depth of Test Black Box System" width="420" height="331" /></p>
<p> </p>
<p>Let&#8217;s keep in mind that we want to avoid testing this system as a black box, so let&#8217;s break it down and understand what&#8217;s inside. The system&#8217;s architecture is explained in more detailed in the image below:</p>
<ul>
<li><strong><span style="color: #ff6900;">Javascript layer</span></strong> communicating to server side using JSON services</li>
<li><strong><span style="color: #2c00b8;">Controller and mandatory validator</span></strong></li>
<li><strong><span style="color: #68bb20;">Domain model, business rules and pricing calculator</span></strong></li>
<li><strong><span style="color: #a855b6;">Data storage</span></strong></li>
</ul>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="DOT Depth of Test Architecture.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-architecture.png" border="0" alt="DOT Depth of Test Architecture" width="480" height="354" /></p>
<ul>
</ul>
<p>The <strong>pricing calculator</strong> is a crucial component of this system. It has to be thoroughly tested in order to make sure that it provides the right price for several scenarios.If we decide to test pricing through the user interface, using a tool like <a href="http://code.google.com/p/selenium/">WebDriver/Selenium</a>, or any other tool that drives a browser the image below shows all the components that will be visited by these tests, I call these components <strong><span style="color: #ae0000;"><em>on focus</em></span>.</strong></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="DOT Depth of Test Test Flow.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-test-flow.png" border="0" alt="DOT Depth of Test Test Flow" width="480" height="358" /></p>
<p>For pricing, there are several scenarios, maybe tens, sometimes hundreds of different combinations of factors that might affect the amount to be paid. This means that we will be <strong>visiting</strong> those components many times when all we are testing is the pricing calculator. In other words, everything will be <strong>on focus</strong>, when all we want to be focused is the pricing calculator component.</p>
<p>Here is when I start my neologistic metaphor… In optics, particularly in film and photography, there is the concept of <strong>depth of field:</strong></p>
<p style="text-align: center;"><em>&#8220;<strong>Depth of Field (DOF)</strong> is the distance between the nearest and farthest objects in a scene that appear acceptably sharp in an image.&#8221;</em></p>
<p style="text-align: right;"><em><a href="http://en.wikipedia.org/wiki/Depth_of_field">wikipedia</a></em></p>
<p><a href="http://en.wikipedia.org/wiki/Depth_of_field"><img style="display: block; margin-left: auto; margin-right: auto;" title="440px-Depth_of_field_diagram.png" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Depth_of_field_diagram.png/440px-Depth_of_field_diagram.png" border="0" alt="440px-Depth_of_field_diagram.png" /></a></p>
<p>Therefore, adapting this definition to software testing:</p>
<p style="text-align: center;"><em>&#8220;<strong>Depth of Test (DOT)</strong> is the distance between the nearest and farthest software components that get visited during the execution of a test.&#8221;</em></p>
<p>It is important to point out that the definition mentions a &#8220;<strong><em>software component</em></strong>&#8220;, which is not necessarily one &#8220;<em>class</em>&#8221; (<a href="http://en.wikipedia.org/wiki/Object-oriented_programming">OOP</a>), or one &#8220;<em>function&#8221;</em> (<a href="http://en.wikipedia.org/wiki/Functional_programming">FP</a>). Components are logical entities that performs a small feature of the system. It could be an entire pricing calculator, a business rule validator or a simple string concatenation function. Each system will have its own components with various sizes.</p>
<p>Having defined that, if we want to test the pricing calculator mentioned above, we should keep it on focus and test it at a different level, not through the user interface, in this case a browser. If we do that, we will end up having a <strong>Shallow Depth of Test. </strong></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="DOT Depth of Test Shallow.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-shallow.png" border="0" alt="DOT Depth of Test Shallow" width="480" height="358" /></p>
<p>What I have learned and observed is that the more shallow the depth of tests, the cheaper is it to maintain and also the faster it is to execute them.</p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/kJl8KDoEWfo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/</feedburner:origLink></item>
		<item>
		<title>Testing Pyramid - A Case Study</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/qJnVxpKslow/</link>
		<comments>http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 06:28:18 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[BDD]]></category>

		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/?p=487</guid>
		<description><![CDATA[Test automation is prevalent in the software development community. Practices like TDD and BDD are widespread and applied almost unquestionably. However, several organisations have struggled in attempting to scale automated test suites, which very often become slow, brittle, non-deterministic, unreliable and difficult to maintain.
One common issue reported by many teams and that I have also [...]]]></description>
			<content:encoded><![CDATA[<p>Test automation is prevalent in the software development community. Practices like TDD and BDD are widespread and applied almost unquestionably. However, several organisations have struggled in attempting to scale automated test suites, which very often become slow, brittle, non-deterministic, unreliable and difficult to maintain.</p>
<p>One common issue reported by many teams and that I have also experienced many times is the <a href="http://blogs.agilefaqs.com/2011/02/01/inverting-the-testing-pyramid/">inverted testing pyramid</a>.</p>
<p>A year ago I joined a project that was going in that direction. I could see us making the same mistakes again. If we had kept going we would have ended up with the slow and hard to maintain, melting <a href="http://watirmelon.com/tag/software-testing-pyramid/">ice-cream cone</a>. However, this time we tried a different approach. Our test strategy was heavily based on the concept of <a href="http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/">Shallow Depth of Tests</a>, which means testing the code as close as possible to where it is written using preferably either unit or integration tests. We only automated high level test journeys at the UI level.</p>
<p>Now, one year later, we have a stable and fast build, which gives us an extremely high level of confidence.</p>
<p>Here is our project&#8217;s <a href="http://jamescrisp.org/2011/05/30/automated-testing-and-the-test-pyramid/">testing pyramid</a>, of which we are very proud:</p>
<p><img title="Testing Pyramid Fabio Pereira.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/testing-pyramid-fabio-pereira.png" border="0" alt="Testing Pyramid Fabio Pereira" width="600" height="443" /></p>
<p>Some observations:</p>
<ul>
<li>Only 12 tests through the UI take 13 minutes to run</li>
<li>1748 unit tests take only 1 minute</li>
<li>273 JavaScript unit tests take less than 1 second. Treating <a href="http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/">JS as a 1st class language</a> helped us as well</li>
</ul>
<p>Feel free to share your testing pyramid as well. And always keep an eye on it… It can make a big difference to your project.</p>
<ul>
</ul>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/qJnVxpKslow" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/</feedburner:origLink></item>
		<item>
		<title>Speaking at QCon Beijing</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/GDuJ0w3YiIs/</link>
		<comments>http://fabiopereira.me/blog/2012/02/05/speaking-at-qcon-beijing/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 10:09:38 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Conference]]></category>

		<category><![CDATA[Presentation]]></category>

		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/?p=484</guid>
		<description><![CDATA[I&#8217;m very happy to be a guest speaker at QCon Beijing in April 2012.
I submitted the 2 abstracts below. We haven&#8217;t agreed completely on the schedule, but it seems like one of them will be a half-day tutorial (Shallow Depth of Tests) and the other one a talk (Predictably and Irrationally Agile).
Shallow Depth of Tests - [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very happy to be a guest speaker at <a href="http://www.qconbeijing.com/speakers.php" target="_blank">QCon Beijing</a> in April 2012.</p>
<p>I submitted the 2 abstracts below. We haven&#8217;t agreed completely on the schedule, but it seems like one of them will be a half-day tutorial (Shallow Depth of Tests) and the other one a talk (Predictably and Irrationally Agile).</p>
<p><strong><span style="text-decoration: underline;">Shallow Depth of Tests - Scalable TDD/BDD</span></strong></p>
<p>Test automation is prevalent in the software development community. Practices like TDD and BDD are widespread and applied almost unquestionably. However, several organisations have struggled in attempting to scale automated test suites, which very often become slow, brittle, non-deterministic, unreliable and difficult to maintain.<br />
In this talk, I will discuss some common mistakes, Tautological TDD (TTDD), for example, and also present patterns that I have successfully applied, such as Shallow Depth of Tests and Testing Pyramid. These have enabled us to achieve maintainable and scalable tests that fulfill their purpose - to help software development teams deliver faster and more confidently the features required by business people.</p>
<p><strong><span style="text-decoration: underline;">Predictably and Irrationally Agile</span></strong></p>
<p>People behavior is one of the centerpieces of Agile software development. Cognitive Psychology and Behavioral Economics have helped us achieve a better understanding of some human seemingly idiosyncratic behaviors, for example, the decoy effect on the decision-making process. Agile teams are constantly making decisions, for instance, while prioritising, estimating stories or choosing the size of an iteration.<br />
This talk will compare and correlate Dan Ariely&#8217;s controlled experiments described in his book &#8220;Predictably Irrational&#8221; to Agile. The anticipated result should be an increased awareness of the reasoning behind some Agile values, principles and practices which, as a consequence, should improve the way we apply them as agile adopters and practitioners.</p>
<p><span style="font-size: 13px;"><img style="display: block; margin-left: auto; margin-right: auto;" title="qcon-speakers-2.png" src="http://fabiopereira.me/blog/wp-content/uploads/2012/03/qcon-speakers-21.png" border="0" alt="Qcon speakers 2" width="600" height="358" /></span></p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/GDuJ0w3YiIs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2012/02/05/speaking-at-qcon-beijing/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2012/02/05/speaking-at-qcon-beijing/</feedburner:origLink></item>
		<item>
		<title>JavaScript as a First Class Language</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/h-GSh0uH5-s/</link>
		<comments>http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 10:44:53 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[Presentation]]></category>

		<category><![CDATA[Slides]]></category>

		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/</guid>
		<description><![CDATA[A couple of weeks ago I presented at the internal ThoughtWorks conference called XConf about how we have been treating JavaScript as a First Class Language recently on our current project. What it means to us is:

Modularise JS code (JAWR helps)
Unit test it. (we use Jasmine and JSTestDriver)
Static analysis, “checkstyle for JS”. (we use JSHint)
JS [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I presented at the internal ThoughtWorks conference called XConf about how we have been treating JavaScript as a First Class Language recently on our current project. What it means to us is:</p>
<ul>
<li>Modularise JS code (<a href="http://jawr.java.net/" target="_blank">JAWR</a> helps)</li>
<li>Unit test it. (we use <a href="http://pivotal.github.com/jasmine/" target="_blank">Jasmine</a> and <a href="http://code.google.com/p/js-test-driver/" target="_blank">JSTestDriver</a>)</li>
<li>Static analysis, “checkstyle for JS”. (we use <a href="http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/" target="_blank">JSHint</a>)</li>
<li>JS Dependency Injection to facilitate testing</li>
</ul>
<p>Here are the slides with more info and some code samples.</p>
<div id="__ss_10511916" style="width: 425px; text-align: center;"><strong> <a title="JavaScript as a Fist Class Language" href="http://www.slideshare.net/fabiopereirame/javascript-as-a-fist-class-language">JavaScript as a First Class Language</a></strong></div>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="__sse10511916" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fabiopereirajs1stclasslanguagexconf2011-111208043337-phpapp01&amp;stripped_title=javascript-as-a-fist-class-language&amp;userName=fabiopereirame" /><embed id="__sse10511916" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fabiopereirajs1stclasslanguagexconf2011-111208043337-phpapp01&amp;stripped_title=javascript-as-a-fist-class-language&amp;userName=fabiopereirame" wmode="transparent" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/h-GSh0uH5-s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/</feedburner:origLink></item>
		<item>
		<title>ThoughtWorks Brazil in João Pessoa</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/mKHAVguiLb8/</link>
		<comments>http://fabiopereira.me/blog/2011/10/25/thoughtworks-brazil-in-joo-pessoa/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 11:08:53 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/10/25/thoughtworks-brazil-in-joo-pessoa/</guid>
		<description><![CDATA[I am extremely excited about the fact that ThoughtWorks is organising a Boot Camp Recruitment Event in João Pessoa this month. I was born in João Pessoa and it is also where I lived while I was at university UFPB Federal University of Paraiba.
I have been working for ThoughtWorks for the last 4 years and [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">I am extremely excited about the fact that <a href="http://www.thoughtworks.com/events/thoughtworks-brazil-recruitment-boot-camp" target="_blank">ThoughtWorks</a> is organising a <a href="http://www.thoughtworks.com/events/thoughtworks-brazil-recruitment-boot-camp" target="_blank">Boot Camp Recruitment Event</a> in <a href="http://en.wikipedia.org/wiki/Jo%C3%A3o_Pessoa" target="_blank">João Pessoa</a> this month. I was born in <a href="http://en.wikipedia.org/wiki/Jo%C3%A3o_Pessoa" target="_blank">João Pessoa</a> and it is also where I lived while I was at university <a href="http://www.ufpb.br/" target="_blank">UFPB Federal University of Paraiba</a>.</p>
<p align="left">I have been working for ThoughtWorks for the last 4 years and would <strong><span style="color: #0000a0">totally recommend it to all my friends</span>. </strong>So, if you are a passionate IT person in João Pessoa go <a href="http://www.thoughtworks.com/events/thoughtworks-brazil-recruitment-boot-camp" target="_blank">check it out</a>.</p>
<p align="center"><a href="http://www.thoughtworks.com/events/thoughtworks-brazil-recruitment-boot-camp" target="_blank"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tw-brazil-joaopessoa" border="0" alt="tw-brazil-joaopessoa" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-brazil-joaopessoa.jpg" width="604" height="403" /></a></p>
<p align="center"><a href="http://www.thoughtworks.com/events/thoughtworks-brazil-recruitment-boot-camp" target="_blank"><img alt="" src="http://www.thoughtworks.com/sites/www.thoughtworks.com/files/images/128/brazil-recruitment-boot-camp-postcard.jpg" /></a></p>
<p align="justify">And, if one day, potentially, hypothetically, eventually ThoughtWorks decides to open an office in João Pessoa… And if you work for ThoughtWorks in any other <a href="http://www.thoughtworks.com/other-offices" target="_blank">offices all over the world</a>… and you decided to transfer there, here’s what you would find… I love this city… I’m just saying… <img src='http://fabiopereira.me/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p align="justify"><a href="http://fabiopereira.me/blog/wp-content/uploads/2011/10/joao-pessoa1.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="joao pessoa" border="0" alt="joao pessoa" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/joao-pessoa-thumb1.jpg" width="539" height="836" /></a></p>
<p align="center"><span style="font-size: xx-small">Photos from</span></p>
<p align="center"><a href="http://www.pbase.com/alexuchoa/joao_pessoa"><span style="font-size: xx-small">www.pbase.com/alexuchoa/joao_pessoa</span></a></p>
<p align="center"><a href="http://about.me/arthurlucena"><span style="font-size: xx-small">http://about.me/arthurlucena</span></a></p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/mKHAVguiLb8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/10/25/thoughtworks-brazil-in-joo-pessoa/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/10/25/thoughtworks-brazil-in-joo-pessoa/</feedburner:origLink></item>
		<item>
		<title>TW SSC - Deep Sea Fishing</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/-Y0p-bvKtyQ/</link>
		<comments>http://fabiopereira.me/blog/2011/10/19/tw-ssc-deep-sea-fishing/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 12:09:57 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[ssc sydney]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/10/19/tw-ssc-deep-sea-fishing/</guid>
		<description><![CDATA[Last Sunday (16/Oct) we went on a deep sea fishing trip as part of the SSC – Sydney Social Club, an ThoughtWorks initiative to help people have fun together…

Camila caught the first fish on the boat… A tiny little one, but really cute, like her 

Right after that I started feeling seasick and I threw [...]]]></description>
			<content:encoded><![CDATA[<p>Last Sunday (16/Oct) we went on a deep sea fishing trip as part of the SSC – Sydney Social Club, an <a href="http://www.thoughtworks.com/">ThoughtWorks</a> initiative to help people have fun together…</p>
<p><a href="https://picasaweb.google.com/115434109245321932302/TWSSCDeepSeaFishing" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TW_SSC_Deep_Sea_Fishing-162-Edit-Edit" border="0" alt="TW_SSC_Deep_Sea_Fishing-162-Edit-Edit" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-ssc-deep-sea-fishing-162-edit-edit1.jpg" width="584" height="388" /></a></p>
<p>Camila caught the first fish on the boat… A tiny little one, but really cute, like her <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/wlemoticon-smile.png" /></p>
<p><a href="https://picasaweb.google.com/115434109245321932302/TWSSCDeepSeaFishing" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TW_SSC_Deep_Sea_Fishing-59" border="0" alt="TW_SSC_Deep_Sea_Fishing-59" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-ssc-deep-sea-fishing-591.jpg" width="584" height="388" /></a></p>
<p>Right after that I started feeling seasick and I threw up 6 times… It was a horrible experience. I had taken a ginger seasickness tablet, apparently, it doesn’t work. When we came back to the harbour I felt much better.</p>
<p><a href="https://picasaweb.google.com/115434109245321932302/TWSSCDeepSeaFishing" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TW_SSC_Deep_Sea_Fishing-84" border="0" alt="TW_SSC_Deep_Sea_Fishing-84" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-ssc-deep-sea-fishing-841.jpg" width="584" height="388" /></a></p>
<p>And that was when we had a lot of fun cooking some bbq and also the fish that we caught.</p>
<p><a href="https://picasaweb.google.com/115434109245321932302/TWSSCDeepSeaFishing" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TW_SSC_Deep_Sea_Fishing-153" border="0" alt="TW_SSC_Deep_Sea_Fishing-153" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-ssc-deep-sea-fishing-1531.jpg" width="584" height="331" /></a></p>
<p>And we had delicious food… </p>
<p><a href="https://picasaweb.google.com/115434109245321932302/TWSSCDeepSeaFishing" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TW_SSC_Deep_Sea_Fishing-171" border="0" alt="TW_SSC_Deep_Sea_Fishing-171" src="http://fabiopereira.me/blog/wp-content/uploads/2011/10/tw-ssc-deep-sea-fishing-1711.jpg" width="584" height="335" /></a></p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/-Y0p-bvKtyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/10/19/tw-ssc-deep-sea-fishing/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/10/19/tw-ssc-deep-sea-fishing/</feedburner:origLink></item>
		<item>
		<title>Gource–The history of a codebase</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/7h7LYR9DXC4/</link>
		<comments>http://fabiopereira.me/blog/2011/09/04/gourcethe-history-of-a-codebase/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 09:47:38 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[Code]]></category>

		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/09/04/gourcethe-history-of-a-codebase/</guid>
		<description><![CDATA[Codebase history generated using Gource.



]]></description>
			<content:encoded><![CDATA[<p>Codebase history generated using <a href="http://code.google.com/p/gource/" target="_blank">Gource</a>.</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:533492b4-34d2-496d-bd5b-c873a82675c6" class="wlWriterEditableSmartContent">
<div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/uzoT2H_AnBQ?hl=en&amp;hd=1"></param><embed src="http://www.youtube.com/v/uzoT2H_AnBQ?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div>
</div>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/7h7LYR9DXC4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/09/04/gourcethe-history-of-a-codebase/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/09/04/gourcethe-history-of-a-codebase/</feedburner:origLink></item>
		<item>
		<title>Testing Ajax with WebDriver – Make your tests deterministic</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/E-qzkWpukUA/</link>
		<comments>http://fabiopereira.me/blog/2011/08/24/testing-ajax-with-webdrivermake-your-tests-deterministic/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 01:00:42 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[Code]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/08/23/testing-ajax-with-webdrivermake-your-tests-deterministic/</guid>
		<description><![CDATA[We had some non-deterministic tests on our project so we decided to implement a generic way to test ajax calls using webdriver. I was quite impressed with how quickly we achieved this, mainly due to the fact that javascript is dynamic and functional. And also thanks to my js learning sessions with Romain, who is [...]]]></description>
			<content:encoded><![CDATA[<p>We had some <a href="http://martinfowler.com/articles/nonDeterminism.html#AsynchronousBehavior" target="_blank">non-deterministic</a> tests on our project so we decided to implement a generic way to test ajax calls using <a href="http://code.google.com/p/selenium/" target="_blank">webdriver</a>. I was quite impressed with how quickly we achieved this, mainly due to the fact that javascript is dynamic and functional. And also thanks to my js learning sessions with <a href="http://blog.cuttleworks.com/about.html">Romain</a>, who is also responsible for a great majority of the js code below <img src='http://fabiopereira.me/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Here’s the code, split into well defined components as we’ve been treating javascript as a first class language. It has also been unit tested, but I&#8217;ll save that for another post.</p>
<h3>Http</h3>
<p>A wrapper around jquery ajax</p>
<pre class="java" name="code">var Async = Async || {};
Async.Http = function() {

    function get(url, data, successHandler, errorHandler) {
        $.ajax({
            url: url,
            data: data,
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            async: false,
            success: successHandler,
            error: errorHandler
        });
    }

    function post(url, data, successHandler, errorHandler) {
        $.ajax({
            type: 'POST',
            url: url,
            data: JSON.stringify(data),
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: successHandler,
            error: errorHandler
        });
    }

    return {
        get: get,
        post: post
    };

};</pre>
<h3>Notifier</h3>
<p>A stateful js component that keeps track of all the ajax calls and adds a div to the dom with that information.</p>
<pre class="java" name="code">var Async = Async || {};
Async.Notifier = function() {

    var $notifierElement = $('&lt;div id="asyncNotifier" class="done"&gt;');
    $('body').append($notifierElement);    

    var inProgress = 0;

    function start() {
        ++inProgress;
        $notifierElement.removeClass('done');
    }

    function finished() {
        --inProgress;
        if (inProgress === 0) {
            $notifierElement.addClass('done');
        }
    }

    return {
        start: start,
        finished: finished
    };

};</pre>
<h3>HttpAsyncDecorated</h3>
<p>A decorated version of Async.Http that uses Notifier.</p>
<pre class="java" name="code">var Async = Async || {};
Async.HttpAsyncDecorated = function(http, asyncNotifier) {

    function decorateWithFinish(handler) {
        return function(data, textStatus, jqXHR) {
            handler(data, textStatus, jqXHR);
            asyncNotifier.finished();
        };
    }

    function get(url, data, successHandler, errorHandler) {
        asyncNotifier.start();
        http.get(url, data, decorateWithFinish(successHandler), decorateWithFinish(errorHandler));
    }

    function post(url, data, successHandler, errorHandler) {
        asyncNotifier.start();
        http.post(url, data, decorateWithFinish(successHandler), decorateWithFinish(errorHandler));
    }

    return {
        get: get,
        post: post
    };

};</pre>
<h3>JS App Context (Wiring things together)</h3>
<p>Here’s the js code that glues everything together… Like a <strong><em>“javascript app context”</em></strong>.</p>
<pre class="java" name="code">var MyAppMain = MyAppMain || {};
MyAppMain.Context = function() {
    function startup() {
        var http = Async.HttpAsyncDecorated(Async.Http(), Async.Notifier());
	MyApp.SomethingThatUsesAjaxHttp(http);
    }

    return {
        startup: startup
    };
};</pre>
<h3>WebDriver</h3>
<p>And finally we need to use webdriver to wait for the div with the class asyncNotifier. We used <a href="http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html" target="_blank">WebDriverWait</a> for that.</p>
<pre class="java" name="code">public static void waitForAsyncCallsToFinish(WebDriver driver)
{
	waitForCssClass(driver, By.id("asyncNotifier"), "done");
}</pre>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/E-qzkWpukUA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/08/24/testing-ajax-with-webdrivermake-your-tests-deterministic/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/08/24/testing-ajax-with-webdrivermake-your-tests-deterministic/</feedburner:origLink></item>
		<item>
		<title>ThoughtWorks Poker Night</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/jd9QC59gPzk/</link>
		<comments>http://fabiopereira.me/blog/2011/08/19/thoughtworks-poker-night/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 11:45:08 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/08/19/thoughtworks-poker-night/</guid>
		<description><![CDATA[As part of the Sydney Social Club we had a Poker Night in the ThoughtWorks Sydney Office. 
We had so much fun… There was not really much money involved, everyone chipped only $5 just to make things a bit more exciting.


Enif, Leo’s partner, was the winner of the night.


We had hilarious all in’s, like this [...]]]></description>
			<content:encoded><![CDATA[<p>As part of the Sydney Social Club we had a Poker Night in the ThoughtWorks Sydney Office. </p>
<p>We had so much fun… There was not really much money involved, everyone chipped only $5 just to make things a bit more exciting.</p>
<p align="center"><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-68" border="0" alt="poker_night_thoughtworks_social_club-68" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-68.jpg" width="584" height="388" /></a></p>
<p align="center"><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-41" border="0" alt="poker_night_thoughtworks_social_club-41" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-41.jpg" width="584" height="388" /></a></p>
<p align="center">Enif, <a href="http://www.leonardoborges.com" target="_blank">Leo’s</a> partner, was the winner of the night.</p>
<p align="center"><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-14" border="0" alt="poker_night_thoughtworks_social_club-14" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-14.jpg" width="388" height="584" /></a></p>
<p align="center"><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-97" border="0" alt="poker_night_thoughtworks_social_club-97" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-97.jpg" width="584" height="388" /></a></p>
<p>We had hilarious all in’s, like this one with almost nothing</p>
<p align="center"><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-95" border="0" alt="poker_night_thoughtworks_social_club-95" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-95.jpg" width="388" height="584" /></a></p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150284408486590.351933.529031589&amp;l=2c8828cdb6&amp;type=1"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="poker_night_thoughtworks_social_club-79" border="0" alt="poker_night_thoughtworks_social_club-79" src="http://fabiopereira.me/blog/wp-content/uploads/2011/08/poker-night-thoughtworks-social-club-79.jpg" width="584" height="388" /></a></p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/jd9QC59gPzk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/08/19/thoughtworks-poker-night/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/08/19/thoughtworks-poker-night/</feedburner:origLink></item>
		<item>
		<title>Agile Australia 2011</title>
		<link>http://feedproxy.google.com/~r/FabioPereiraTechnical/~3/0YEsc04sS3w/</link>
		<comments>http://fabiopereira.me/blog/2011/06/19/agile-australia-2011/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 10:15:37 +0000</pubDate>
		<dc:creator>Fabio Pereira</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<category><![CDATA[Presentation]]></category>

		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">http://fabiopereira.me/blog/2011/06/19/agile-australia-2011/</guid>
		<description><![CDATA[The so waited conference Agile Australia 2011 happened in Sydney last week. 2 days of overwhelming presentations talking about this software development philosophy that is celebrating its 10 years since its manifesto.
Agile is a means to an end
I felt like the message of the conference was that it’s not about being Agile, it’s about being [...]]]></description>
			<content:encoded><![CDATA[<p>The so waited conference <a href="http://www.agileaustralia.com/" target="_blank">Agile Australia 2011</a> happened in Sydney last week. 2 days of overwhelming presentations talking about this software development <strong>philosophy</strong> that is celebrating its 10 years since its <a href="http://agilemanifesto.org/" target="_blank">manifesto</a>.</p>
<h3>Agile is a means to an end</h3>
<p>I felt like the message of the conference was that <strong>it’s not about being Agile, it’s about being <a href="http://theagilepirate.net/archives/687" target="_blank">BETTER</a>.</strong> ThoughtWorks logo <strong>Get it DONE</strong> was aligned with this message.</p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="agile australia 2011-14" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-14.jpg" border="0" alt="agile australia 2011-14" width="584" height="388" /></a></p>
<p>Unfortunately many organizations are missing the point of the original reason why Agile was created. Some of them have strategies towards <strong>becoming agile</strong>, they even have the percentage of how much agile they’re aiming to be… And I wonder how can that be measured? And what problem they are trying to solve when being agile.</p>
<p>I hope the conference was a wake-up call as this topic was extremely discussed and I hope that people understand that agile is a <strong>philosophy</strong>, not a religion (as some pointed out) that ultimately helps teams achieve <strong>success </strong>and <strong>productivity</strong>.</p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Agile is not a religion, it's a filosophy" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-136.jpg" border="0" alt="Agile is not a religion, it's a filosophy" width="388" height="584" /></a></p>
<p><span style="font-size: xx-small;">Agile is not a religion</span></p>
<h3>Lean Lego Game</h3>
<p><a href="http://blog.franktrindade.com/" target="_blank">Francisco</a> and I ran a introductory workshop for Lean called <a href="http://fabiopereira.me/blog/2011/05/17/lean-lego-game-at-agile-australia-2011/" target="_blank">Lean Lego Game</a>. We had a lot of fun. The workshop had 24 seats and almost 50 people showed up.</p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Agile_Australia_2011_Lean_Lego_Game-53" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-lean-lego-game-53.jpg" border="0" alt="Agile_Australia_2011_Lean_Lego_Game-53" width="584" height="358" /></a></p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Agile_Australia_2011_Lean_Lego_Game-56" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-lean-lego-game-56.jpg" border="0" alt="Agile_Australia_2011_Lean_Lego_Game-56" width="584" height="388" /></a></p>
<h3><a href="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-lean-lego-game-40.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Agile_Australia_2011_Lean_Lego_Game-40" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-lean-lego-game-40-thumb.jpg" border="0" alt="Agile_Australia_2011_Lean_Lego_Game-40" width="584" height="388" /></a></h3>
<h3>Mingling</h3>
<p>I had the opportunity to chat with some colleagues from ThoughtWorks, previous projects and also to meet new people with similar interests <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/wlemoticon-smile.png" alt="Smile" /></p>
<p><a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="agile australia 2011-139" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-139.jpg" border="0" alt="agile australia 2011-139" width="584" height="388" /></a></p>
<h3>Continuous Delivery</h3>
<p>Continuous Delivery was another big topic at the conference. It seems like this is one of the next logical steps towards becoming a highly productive team. Having the power to decide when and what features should go to production is the dream of every business person who has been locked by IT constraints and unnecessary bureaucracy.</p>
<p><a href="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-26.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="agile australia 2011-26" src="http://fabiopereira.me/blog/wp-content/uploads/2011/06/agile-australia-2011-26-thumb.jpg" border="0" alt="agile australia 2011-26" width="584" height="388" /></a></p>
<h3>Fowler brings us back to the roots of Agile</h3>
<p>The end of the conference was triumphal with <a href="http://martinfowler.com/" target="_blank">Martin Fowler</a> doing his Uncle Bob impersonation and also reminding us all of what Agile is all about. I really enjoyed watching his presentations about <a href="http://martinfowler.com/articles/nonDeterminism.html" target="_blank">Non-Determinism in Tests</a> and <a href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html" target="_blank">Technical Debt</a>, a topic about which <a href="http://fabiopereira.me/blog/2009/09/01/technical-debt-retrospective/" target="_blank">I am</a> quite <a href="http://fabiopereira.me/blog/2009/09/01/technical-debt-retrospective/" target="_blank">passionate</a> too.</p>
<p>More photos can be found <a href="http://www.facebook.com/media/set/?set=a.10150221837271590.334479.529031589&amp;l=6cf84b4183" target="_blank">here</a> and <a href="http://www.flickr.com/photos/thoughtworksaustralia/sets/72157626870672921/" target="_blank">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/FabioPereiraTechnical/~4/0YEsc04sS3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fabiopereira.me/blog/2011/06/19/agile-australia-2011/feed/</wfw:commentRss>
		<feedburner:origLink>http://fabiopereira.me/blog/2011/06/19/agile-australia-2011/</feedburner:origLink></item>
	</channel>
</rss>
