<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Fabio Pereira</title>
		<description>A blog with ideas and thoughts on Agile, Digital Transformation and Behavioral Economics</description>
		<link>http://localhost:9001</link>
		<atom:link href="http://localhost:9001/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Best parts from PAYOFF - Dan Ariely's new TED Book</title>
				
				
					<description>&lt;p&gt;I just finished &lt;a href=&quot;http://danariely.com/&quot;&gt;Dan Ariely&amp;#39;s&lt;/a&gt; new book &lt;a href=&quot;http://danariely.com/books/payoff/&quot;&gt;PAYOFF&lt;/a&gt; and, as some of you might know, I love listening to book on Audible. &lt;/p&gt;
</description>
				
				<pubDate>Sun, 20 Nov 2016 00:00:00 +1100</pubDate>
				<link>http://localhost:9001/blog/2016/11/20/payoff-danariely-booknotes</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2016/11/20/payoff-danariely-booknotes</guid>
			</item>
		
			<item>
				<title>How to Customize Every Time Zone</title>
				
				
					<description>&lt;p&gt;I have had to work with people in 3 different countries, 5 cities and various timezones.&lt;/p&gt;
</description>
				
				<pubDate>Wed, 29 Jun 2016 00:00:00 +1000</pubDate>
				<link>http://localhost:9001/blog/2016/06/29/how-to-customize-every-time-zone</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2016/06/29/how-to-customize-every-time-zone</guid>
			</item>
		
			<item>
				<title>Young Leaders in Recife and US Assistant Secretary of State</title>
				
				
					<description>&lt;p&gt;On the 16th of July I was privileged to participate in a roundtable discussion as part of the group of &lt;strong&gt;&lt;em&gt;Young Leaders in Recife&lt;/em&gt;&lt;/strong&gt; with members of the consulate of the United States in Brazil and the US Assistant Secretary of State for Western Hemisphere Affairs, &lt;a href=&quot;http://www.state.gov/r/pa/ei/biog/198696.htm&quot;&gt;Roberta S. Jacobson&lt;/a&gt;, who came to visit Brazil. The objective of the round table was to give Roberta our view of the current scenario in the northeast of Brazil, since it was the first time she was visiting Recife.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;RobertaJacobson.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/08/robertajacobson.png&quot; border=&quot;0&quot; alt=&quot;RobertaJacobson&quot; width=&quot;600&quot; height=&quot;356&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Before the roundtable a member of the project Oi Kabum presented some posters that they had worked on to raise awareness racism as a huge issue we have to work on.&lt;br /&gt;We all expressed our opinions and heard Roberta&amp;rsquo;s during the roundtable. The topics of the discussion were mainly about Brazil: education, including English as a second language, protests, corruption and the mindset shift that has happened recently in Brazil in regards of complacency with government issues. &amp;nbsp;It was very interesting to hear everyone&amp;rsquo;s opinion about the topics.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;US Assistant Secretary Roberta Jacobson-1.jpg&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/08/us-assistant-secretary-roberta-jacobson-1.jpg&quot; border=&quot;0&quot; alt=&quot;US Assistant Secretary Roberta Jacobson 1&quot; width=&quot;600&quot; height=&quot;286&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Members of the Consulate:&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.state.gov/r/pa/ei/biog/198696.htm&quot;&gt;Roberta S. Jacobson&lt;/a&gt; - US Assistant Secretary of State for Western Hemisphere Affairs &lt;/li&gt;
&lt;li&gt;Todd Chapman - vice ambassador from US in Brazil&lt;/li&gt;
&lt;li&gt;Heidi Arola - consul from US in Brazil&lt;/li&gt;
&lt;li&gt;Brian Bedsworth - vice consul from US in Brazil&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Young Leaders:&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://br.linkedin.com/pub/dir/Guilherme/Cavalcanti&quot;&gt;Guilherme Cavalcanti&lt;/a&gt; - CEO at CESAR-PAR&lt;/li&gt;
&lt;li&gt;Renata Accioly &amp;ndash; AMCHAM - Products and Services - Recife&lt;/li&gt;
&lt;li&gt;Gilse Arruda &amp;ndash; UFPE Student / Works at the consulate in Recife&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;www.fabiopereira.me&quot;&gt;Fabio Pereira&lt;/a&gt; &amp;ndash; entrepreneur and IT Lead Consultant at ThoughtWorks Sydney/Recife&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;US Assistant Secretary Roberta Jacobson-2.jpg&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/08/us-assistant-secretary-roberta-jacobson-2.jpg&quot; border=&quot;0&quot; alt=&quot;US Assistant Secretary Roberta Jacobson 2&quot; width=&quot;600&quot; height=&quot;397&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;US Assistant Secretary Roberta Jacobson-3.jpg&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/08/us-assistant-secretary-roberta-jacobson-3.jpg&quot; border=&quot;0&quot; alt=&quot;US Assistant Secretary Roberta Jacobson 3&quot; width=&quot;600&quot; height=&quot;369&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
</description>
				
				<pubDate>Sun, 04 Aug 2013 06:36:30 +1000</pubDate>
				<link>http://localhost:9001/blog/2013/08/04/young-leaders-in-recife-and-us-assistant-secretary-of-state</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2013/08/04/young-leaders-in-recife-and-us-assistant-secretary-of-state</guid>
			</item>
		
			<item>
				<title>Follow Up on Retrospective Actions </title>
				
				
					<description>&lt;p&gt;One of the biggest complaints I see on retrospective is that action items are not followed up.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;I'm quite happy to see that on my current project people take it very seriously. There's actually a wall with the retro items to be followed up (To Be Done TBD) and when they're done we move them to the \o/ happy/done column. During the following retro we go through them. Another important thing is to assign owners to these items! yay for the team!!!&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;retrospective follow up action items.jpg&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/02/retrospective-follow-up-action-items.jpg&quot; border=&quot;0&quot; alt=&quot;Retrospective follow up action items&quot; width=&quot;600&quot; height=&quot;800&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Foto:&amp;nbsp;Henrique Rezende&lt;/p&gt;&lt;/p&gt;
</description>
				
				<pubDate>Fri, 22 Feb 2013 10:56:58 +1100</pubDate>
				<link>http://localhost:9001/blog/2013/02/22/follow-up-on-retrospective-actions</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2013/02/22/follow-up-on-retrospective-actions</guid>
			</item>
		
			<item>
				<title>RSS Recife Summer School</title>
				
				
					<description>&lt;p&gt;Last week I gave a talk at&amp;nbsp;&lt;a href=&quot;http://rss.portodigital.org/&quot;&gt;Recife Summer School&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;rss recife summer school.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/02/rss-recife-summer-school.png&quot; border=&quot;0&quot; alt=&quot;Rss recife summer school&quot; width=&quot;600&quot; height=&quot;395&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I spoke about how to treat JavascrRipt as a 1st Class Language. More about it and the slides can be found&amp;nbsp;&lt;a href=&quot;http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.twitter.com/gfcmotta&quot;&gt;@gfcmotta&lt;/a&gt; registered the event.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;recife summer school rss fabio.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2013/02/recife-summer-school-rss-fabio.png&quot; border=&quot;0&quot; alt=&quot;Recife summer school rss fabio&quot; width=&quot;433&quot; height=&quot;192&quot; /&gt;&lt;/p&gt;
</description>
				
				<pubDate>Wed, 13 Feb 2013 18:57:42 +1100</pubDate>
				<link>http://localhost:9001/blog/2013/02/13/rss-recife-summer-school</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2013/02/13/rss-recife-summer-school</guid>
			</item>
		
			<item>
				<title>Introducing Depth of Test (DOT)</title>
				
				
					<description>&lt;p&gt;For the last couple of years I have been particularly passionate and vocal on&amp;nbsp;&lt;a href=&quot;http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/&quot;&gt;my projects&lt;/a&gt; and &lt;a href=&quot;http://www.slideshare.net/fabiopereirame/shallow-depth-of-test-test-at-the-appropriate-level&quot;&gt;in the&lt;/a&gt; &lt;a href=&quot;http://fabiopereira.me/blog/2012/02/05/speaking-at-qcon-beijing/&quot;&gt;community&lt;/a&gt; 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 &lt;a href=&quot;http://fabiopereira.me/blog/2012/03/05/testing-pyramid-a-case-study/&quot;&gt;testing pyramids&lt;/a&gt; as opposed to expensive and brittle &lt;a href=&quot;http://watirmelon.com/2012/01/31/introducing-the-software-testing-ice-cream-cone/&quot;&gt;ice-cream cones&lt;/a&gt;. 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.&amp;nbsp;I was one of the passionate advocates of this technique during a &lt;a href=&quot;thoughtworks.com/radar&quot;&gt;ThoughtWorks Technology Radar&lt;/a&gt; session where we collected new ideas. Now I&amp;nbsp;am quite satisfied to see that the technique has recently been added to the &lt;strong&gt;adopt&lt;/strong&gt; section&amp;nbsp;of the &lt;a href=&quot;thoughtworks.com/radar&quot;&gt;latest radar&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;ThoughtWorks Radar.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/thoughtworks-radar.png&quot; border=&quot;0&quot; alt=&quot;ThoughtWorks Radar&quot; width=&quot;480&quot; height=&quot;414&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Testing at the appropriate level&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;The advent of BDD, testing&amp;nbsp;frameworks like Cucumber, combined with browser&amp;nbsp;automation tools like Selenium, has encouraged&amp;nbsp;widespread use of acceptance testing at the browser level.&amp;nbsp;This unfortunately encouraged doing the bulk of testing&amp;nbsp;where the cost to run the tests is the greatest. Instead,&amp;nbsp;we should &lt;strong&gt;test at the appropriate level&lt;/strong&gt;, &lt;strong&gt;as close to the&amp;nbsp;code as possible&lt;/strong&gt;, so that tests can be run with maximum&amp;nbsp;efficiency. Browser-level tests should be the icing on the&amp;nbsp;cake, supported by acceptance and unit tests executed&amp;nbsp;at appropriate layers&quot;&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&lt;em&gt;&lt;a href=&quot;http://thoughtworks.fileburst.com/assets/thoughtworks-tech-radar-march-2012-us-color.pdf&quot;&gt;thoughtworks.com/radar&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shallow Depth of Test&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;I believe that neologistic metaphors, like Ward Cunningham's&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Technical_debt&quot;&gt;Technical Debt&lt;/a&gt;,&amp;nbsp;are extremely effective to explain concepts like this. I will explain a real world example and eventually I'll get to my neologism: &lt;strong&gt;Shallow Depth of Tests.&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Let'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's perspective, the app is pretty much like this:&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;DOT Depth of Test Black Box System.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-black-box-system.png&quot; border=&quot;0&quot; alt=&quot;DOT Depth of Test Black Box System&quot; width=&quot;420&quot; height=&quot;331&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Let's keep in mind that we want to avoid testing this system as a black box, so let's break it down and understand what's inside. The system's architecture is explained in more detailed in the image below:&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff6900;&quot;&gt;Javascript layer&lt;/span&gt;&lt;/strong&gt; communicating to server side using JSON services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #2c00b8;&quot;&gt;Controller and mandatory validator&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #68bb20;&quot;&gt;Domain model, business rules and pricing calculator&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;color: #a855b6;&quot;&gt;Data storage&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;DOT Depth of Test Architecture.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-architecture.png&quot; border=&quot;0&quot; alt=&quot;DOT Depth of Test Architecture&quot; width=&quot;480&quot; height=&quot;354&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;pricing calculator&lt;/strong&gt; 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 &lt;a href=&quot;http://code.google.com/p/selenium/&quot;&gt;WebDriver/Selenium&lt;/a&gt;, 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 &lt;strong&gt;&lt;span style=&quot;color: #ae0000;&quot;&gt;&lt;em&gt;on focus&lt;/em&gt;&lt;/span&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;DOT Depth of Test Test Flow.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-test-flow.png&quot; border=&quot;0&quot; alt=&quot;DOT Depth of Test Test Flow&quot; width=&quot;480&quot; height=&quot;358&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;strong&gt;visiting&lt;/strong&gt; those components many times when all we are testing is the pricing calculator. In other words, everything will be &lt;strong&gt;on focus&lt;/strong&gt;, when all we want to be focused is the pricing calculator component.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Here is when I start my neologistic metaphor&amp;hellip; In optics, particularly in film and photography, there is the concept of &lt;strong&gt;depth of field:&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;&quot;&lt;strong&gt;Depth of Field (DOF)&lt;/strong&gt; is the distance between the nearest and farthest objects in a scene that appear acceptably sharp in an image.&quot;&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Depth_of_field&quot;&gt;wikipedia&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Depth_of_field&quot;&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;440px-Depth_of_field_diagram.png&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Depth_of_field_diagram.png/440px-Depth_of_field_diagram.png&quot; border=&quot;0&quot; alt=&quot;440px-Depth_of_field_diagram.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Therefore, adapting this definition to software testing:&lt;/p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;&quot;&lt;strong&gt;Depth of Test (DOT)&lt;/strong&gt; is the distance between the nearest and farthest software components that get visited during the execution of a test.&quot;&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;It is important to point out that the definition mentions a &quot;&lt;strong&gt;&lt;em&gt;software component&lt;/em&gt;&lt;/strong&gt;&quot;, which is not necessarily one &quot;&lt;em&gt;class&lt;/em&gt;&quot; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot;&gt;OOP&lt;/a&gt;), or one &quot;&lt;em&gt;function&quot;&lt;/em&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Functional_programming&quot;&gt;FP&lt;/a&gt;). 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.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;strong&gt;Shallow Depth of Test. &lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;DOT Depth of Test Shallow.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/dot-depth-of-test-shallow.png&quot; border=&quot;0&quot; alt=&quot;DOT Depth of Test Shallow&quot; width=&quot;480&quot; height=&quot;358&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;&lt;/p&gt;
</description>
				
				<pubDate>Sun, 18 Mar 2012 17:57:22 +1100</pubDate>
				<link>http://localhost:9001/blog/2012/03/18/introducing-depth-of-test-dot</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2012/03/18/introducing-depth-of-test-dot</guid>
			</item>
		
			<item>
				<title>Testing Pyramid - A Case Study</title>
				
				
					<description>&lt;p&gt;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.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;One common issue reported by many teams and that I have also experienced many times is the&amp;nbsp;&lt;a href=&quot;http://blogs.agilefaqs.com/2011/02/01/inverting-the-testing-pyramid/&quot;&gt;inverted testing pyramid&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;http://watirmelon.com/tag/software-testing-pyramid/&quot;&gt;ice-cream cone&lt;/a&gt;. However, this time we tried a different approach. Our test strategy was heavily based on the concept of &lt;a href=&quot;http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/&quot;&gt;Shallow Depth of Tests&lt;/a&gt;, which means&amp;nbsp;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.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Now, one year later, we have a stable and fast build, which gives us an extremely high level of confidence.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Here is our project's&amp;nbsp;&lt;a href=&quot;http://jamescrisp.org/2011/05/30/automated-testing-and-the-test-pyramid/&quot;&gt;testing pyramid&lt;/a&gt;, of which we are very proud:&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Testing Pyramid Fabio Pereira.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/testing-pyramid-fabio-pereira.png&quot; border=&quot;0&quot; alt=&quot;Testing Pyramid Fabio Pereira&quot; width=&quot;600&quot; height=&quot;443&quot; /&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Some observations:&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only 12 tests through the UI take 13 minutes to run&lt;/li&gt;
&lt;li&gt;1748 unit tests take only 1 minute&lt;/li&gt;
&lt;li&gt;273 JavaScript unit tests take less than 1 second. Treating &lt;a href=&quot;http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/&quot;&gt;JS as a 1st class language&lt;/a&gt; helped us as well&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;Feel free to share your testing pyramid as well. And always keep an eye on it&amp;hellip; It can make a big difference to your project.&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;/p&gt;
</description>
				
				<pubDate>Mon, 05 Mar 2012 23:28:18 +1100</pubDate>
				<link>http://localhost:9001/blog/2012/03/05/testing-pyramid-a-case-study</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2012/03/05/testing-pyramid-a-case-study</guid>
			</item>
		
			<item>
				<title>Speaking at QCon Beijing</title>
				
				
					<description>&lt;p&gt;I'm very happy to be a guest speaker at&amp;nbsp;&lt;a href=&quot;http://www.qconbeijing.com/speakers.php&quot; target=&quot;_blank&quot;&gt;QCon Beijing&lt;/a&gt; in April 2012.&lt;/p&gt;
&lt;p&gt;I submitted the 2 abstracts below. We haven'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).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Shallow Depth of Tests - Scalable TDD/BDD&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;br /&gt;
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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Predictably and Irrationally Agile&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;br /&gt;
This talk will compare and correlate Dan Ariely's controlled experiments described in his book &quot;Predictably Irrational&quot; 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.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; title=&quot;qcon-speakers-2.png&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2012/03/qcon-speakers-21.png&quot; border=&quot;0&quot; alt=&quot;Qcon speakers 2&quot; width=&quot;600&quot; height=&quot;358&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				
				<pubDate>Sun, 05 Feb 2012 03:09:38 +1100</pubDate>
				<link>http://localhost:9001/blog/2012/02/05/speaking-at-qcon-beijing</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2012/02/05/speaking-at-qcon-beijing</guid>
			</item>
		
			<item>
				<title>JavaScript as a First Class Language</title>
				
				
					<description>&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modularise JS code (&lt;a href=&quot;http://jawr.java.net/&quot; target=&quot;_blank&quot;&gt;JAWR&lt;/a&gt; helps)&lt;/li&gt;
&lt;li&gt;Unit test it. (we use &lt;a href=&quot;http://pivotal.github.com/jasmine/&quot; target=&quot;_blank&quot;&gt;Jasmine&lt;/a&gt; and &lt;a href=&quot;http://code.google.com/p/js-test-driver/&quot; target=&quot;_blank&quot;&gt;JSTestDriver&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Static analysis, &amp;ldquo;checkstyle for JS&amp;rdquo;. (we use &lt;a href=&quot;http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/&quot; target=&quot;_blank&quot;&gt;JSHint&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JS Dependency Injection to facilitate testing&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
Here are the slides with more info and some code samples.&lt;/p&gt;
&lt;div id=&quot;__ss_10511916&quot; style=&quot;width: 425px; text-align: center;&quot;&gt;&lt;strong&gt; &lt;a title=&quot;JavaScript as a Fist Class Language&quot; href=&quot;http://www.slideshare.net/fabiopereirame/javascript-as-a-fist-class-language&quot;&gt;JavaScript as a First Class Language&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; width=&quot;425&quot; height=&quot;355&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot;&gt;&lt;param name=&quot;id&quot; value=&quot;__sse10511916&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;&lt;param name=&quot;src&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fabiopereirajs1stclasslanguagexconf2011-111208043337-phpapp01&amp;amp;stripped_title=javascript-as-a-fist-class-language&amp;amp;userName=fabiopereirame&quot; /&gt;&lt;embed id=&quot;__sse10511916&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;355&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fabiopereirajs1stclasslanguagexconf2011-111208043337-phpapp01&amp;amp;stripped_title=javascript-as-a-fist-class-language&amp;amp;userName=fabiopereirame&quot; wmode=&quot;transparent&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
</description>
				
				<pubDate>Thu, 08 Dec 2011 03:44:53 +1100</pubDate>
				<link>http://localhost:9001/blog/2011/12/08/javascript-as-a-first-class-language</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2011/12/08/javascript-as-a-first-class-language</guid>
			</item>
		
			<item>
				<title>My Echidna photo was selected</title>
				
				
					<description>&lt;p&gt;I was quite happy that my photo was selected by &lt;a href=&quot;http://melbourne.schmap.com/attractions/melbourne_zoo?pn=21&quot; target=&quot;_blank&quot;&gt;schmap.com&lt;/a&gt; to represent &lt;a href=&quot;http://melbourne.schmap.com/attractions/melbourne_zoo?pn=21&quot; target=&quot;_blank&quot;&gt;Melbourne Zoo&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been working a lot on my photography skills&amp;hellip; Who knows&amp;hellip; One day I could be famous &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2011/11/wlemoticon-smile.png&quot; /&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://melbourne.schmap.com/attractions/melbourne_zoo?pn=21&quot;&gt;&lt;img style=&quot;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&quot; title=&quot;melbourne-zoo-fabio-pereira-photo&quot; border=&quot;0&quot; alt=&quot;melbourne-zoo-fabio-pereira-photo&quot; src=&quot;http://fabiopereira.me/blog/wp-content/uploads/2011/11/melbourne-zoo-fabio-pereira-photo.jpg&quot; width=&quot;514&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;
</description>
				
				<pubDate>Tue, 08 Nov 2011 02:40:12 +1100</pubDate>
				<link>http://localhost:9001/blog/2011/11/08/my-echidna-photo-was-selected</link>
				<guid isPermaLink="true">http://localhost:9001/blog/2011/11/08/my-echidna-photo-was-selected</guid>
			</item>
		
	</channel>
</rss>
