<?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>Polymorphic Rants</title>
	<atom:link href="http://www.lucagrulla.it/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lucagrulla.it/blog</link>
	<description>The blog formerly known as "(s)ragionamenti polimorfici"</description>
	<lastBuildDate>Sun, 02 Aug 2009 18:42:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Italian Agile Day 2009: date announced</title>
		<link>http://www.lucagrulla.it/blog/2009/08/02/italian-agile-day-2009-date-announced/</link>
		<comments>http://www.lucagrulla.it/blog/2009/08/02/italian-agile-day-2009-date-announced/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 18:42:25 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[IAD09]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/blog/?p=234</guid>
		<description><![CDATA[Friday, 20th of November 2009, the 6th Italian Agile Day will be held in Bologna.

It&#8217;s a great opportunity to share experiences and practices, learn, discuss and meet other praticioners part of the  Agile community&#8230;and moreover it&#8217;s free  
I&#8217;ll see you there !
]]></description>
			<content:encoded><![CDATA[<p>Friday, 20th of November 2009, the <a title="Italian Agile Day" href="http://www.agileday.it/front/2009/italian-agile-day-2009/" target="_blank">6th Italian Agile Da</a>y will be held in Bologna.</p>
<p><img class="aligncenter" title="Italian Agile Day 2009" src="http://www.agileday.it/mediakit/IAD468.gif" alt="" width="468" height="60" /></p>
<p>It&#8217;s a great opportunity to share experiences and practices, learn, discuss and meet other praticioners part of the  Agile community&#8230;and moreover it&#8217;s free <img src='http://www.lucagrulla.it/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I&#8217;ll see you there !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2009/08/02/italian-agile-day-2009-date-announced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What has to be ready for the beginning of  a project ?</title>
		<link>http://www.lucagrulla.it/blog/2009/07/05/what-has-to-be-ready-for-the-beginning-of-a-project/</link>
		<comments>http://www.lucagrulla.it/blog/2009/07/05/what-has-to-be-ready-for-the-beginning-of-a-project/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 13:08:08 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[communication]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/blog/?p=231</guid>
		<description><![CDATA[The beginning of a project is always a hectic period where several things have to be put in place in order to be able to start the actual development from a solid position.
Interestingly enough, I see that what is important to have ready for ThoughtWorkers most of the time is not what has to be [...]]]></description>
			<content:encoded><![CDATA[<p>The beginning of a project is always a hectic period where several things have to be put in place in order to be able to start the actual development from a solid position.</p>
<p>Interestingly enough, I see that what is important to have ready for ThoughtWorkers most of the time is not what has to be ready for other people.</p>
<p>Given that obviously every project is different and deserve specific attention, here is my list of things that has to be ready before the kick off of iteration 1.<strong> </strong></p>
<p><strong>Infrastructure</strong></p>
<p>A repository, a Continuos Integration Environment with <a title="Cruise" href="http://www.studios.thoughtworks.com/cruise-continuous-integration" target="_blank">Cruise</a> (or suitable alternatives) installed and working, a QA environment where we can deploy every successful build whenever we want, a basic build script (i.e. build/run tests/package). Pairing boxes, each one with exactly the same configuration.</p>
<p><strong>Architecture</strong></p>
<p>Just identify  the core services/components, there&#8217;s no need to go into detail for each one at this time of the project. If we identify what is the main responsibility of a service is good enough for now, the details will be discovered later in the project. If we can easily identify the way services will communicate (web service ? message broker ?) good, if not through good OO principles we can abstract the low level mechanism and reduce the cost of change later, deferring the final decision to the point in the project where we have more understanding of the technological constraints.</p>
<p><strong>Patterns</strong></p>
<p>Pairing and frequent pair rotation will help in spreading the knowledge of the approach to solve specific problems and in maintaining consistency throughout the code base, so most of the time there is no need of defining a sort of &#8220;project dictionary&#8221; of valid patterns at day 1.<br />
If we&#8217;re introducing new approaches to solve a specific problem, it&#8217;s important to highlight pros and cons of the approach so that people know what they are doing once pairing.</p>
<p>Most of the time these are probably enough to start Iteration 1.</p>
<p>All the other decisions can (and sometimes should&#8230;) be deferred to a later stage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2009/07/05/what-has-to-be-ready-for-the-beginning-of-a-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>QA productivity metrics</title>
		<link>http://www.lucagrulla.it/blog/2009/03/31/qa-productivity-metrics/</link>
		<comments>http://www.lucagrulla.it/blog/2009/03/31/qa-productivity-metrics/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 08:48:47 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[quality]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/blog/?p=210</guid>
		<description><![CDATA[In a lot of companies  the productivity  of a QA is measured through the number of defects she raised: the  more defects she finds, the harder she works, therefore the better she is.
This approach has an interesting corollary:  if you have really good QAs you don&#8217;t have good developers. If your QAs are finding a lot [...]]]></description>
			<content:encoded><![CDATA[<p>In a lot of companies  the productivity  of a QA is measured through the number of defects she raised: the  more defects she finds, the harder she works, therefore the better she is.</p>
<p>This approach has an interesting corollary:  if you have really good QAs you don&#8217;t have good developers. If your QAs are finding a lot of defects this means that your developers are quite poor and are regularly introducing defects in the code base.</p>
<p>This approach isn&#8217;t obviously team oriented: QA and Development are seen as two separate and independent entities that interact through a specific contract.</p>
<p>If we truly believe in collaboration the most important productivity metrics are not related to a specific role/set of skills but to the team capability of deliver quality software in time and in budget.</p>
<p>We need to ask ourselves why the defects are finding their way into the application deployed in the live environment (incomplete acceptance criteria ? not enough analysis or understanding of the domain ? gap in the test suite ?), and fix the issue as a team, not just using that number as the boundary between two streams of work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2009/03/31/qa-productivity-metrics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Local optimization doesn&#8217;t necessarily mean improvement</title>
		<link>http://www.lucagrulla.it/blog/2009/02/14/local-optimization-doesnt-necessarily-mean-improvement/</link>
		<comments>http://www.lucagrulla.it/blog/2009/02/14/local-optimization-doesnt-necessarily-mean-improvement/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 14:00:24 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[continuous improvement]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[waste]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/blog/?p=209</guid>
		<description><![CDATA[Delivering software is a pretty complex activity that requires interaction between people with different skill sets.
One of the cornerstone of Agile Development is continuous improvement, and one of the tool often used to learn and improve  is the retrospective.
In a context where the collaboration is not effective, people tend to look for local optimization instead [...]]]></description>
			<content:encoded><![CDATA[<p>Delivering software is a pretty complex activity that requires interaction between people with different skill sets.<br />
One of the cornerstone of Agile Development is continuous improvement, and one of the tool often used to learn and improve  is the <a title="Retrospectives" href="http://www.retrospectives.com/" target="_blank">retrospective</a>.</p>
<p>In a context where the collaboration is not effective, people tend to look for local optimization instead of seeing the big picture, and you have things such  the &#8220;QA retrospective&#8221;  or the  &#8220;Developer retrospective&#8221;.</p>
<p>In this scenario a &#8220;QA retrospective&#8221; (as the Dev&#8217;s one, or a BA&#8217;s one)  is probably more harmful than anything else; the specific issues that will be identified won&#8217;t address the whole activity of delivering software but will only be focused on that specific step (&#8220;we need <em>x</em> to do y&#8221;).</p>
<p>But what is the impact of that step in the overall process ?</p>
<p>How that step fits into the chain of event that will take a business idea to be delivered as a software artifact (hopefully in a timely and quality fashion ) ?</p>
<p>Don&#8217;t get me wrong: it&#8217;s definitively through specific improvements that you improve your overall process but if  don&#8217;t frame your changes in the big picture, it&#8217;s more likely that your changes will impact your process in the wrong direction and actually cause an additional waste.</p>
<p>Each attempt of optimization should therefore start from the clear analysis of what is wrong from a high level point of view and only then it&#8217;s time to shift our attention to the specific details of each step.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2009/02/14/local-optimization-doesnt-necessarily-mean-improvement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Acceptance Testing of Flex applications</title>
		<link>http://www.lucagrulla.it/blog/2009/01/26/acceptance-testing-of-flex-applications/</link>
		<comments>http://www.lucagrulla.it/blog/2009/01/26/acceptance-testing-of-flex-applications/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 22:08:09 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/?p=182</guid>
		<description><![CDATA[Acceptance Testing is a fundamental practice: it gives you confidence that your application behaves as expected from the end customer point of view.
In the Flex world there are some projects that are currently emerging in the Acceptance Testing space, each one with specific advantages and weak points.
Let&#8217;s have a look to some of these.
FlexMonkey
FlexMonkey Open [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Acceptance Testing" href="http://en.wikipedia.org/wiki/Acceptance_testing" target="_blank">Acceptance Testing</a> is a fundamental practice: it gives you confidence that your application behaves as expected from the end customer point of view.</p>
<p>In the <a title="Flex" href="http://www.adobe.com/products/flex/" target="_blank">Flex</a> world there are some projects that are currently emerging in the Acceptance Testing space, each one with specific advantages and weak points.</p>
<p>Let&#8217;s have a look to some of these.</p>
<p><strong>FlexMonkey</strong><br />
<a title="FlexMonkey" href="http://code.google.com/p/flexmonkey/" target="_blank">FlexMonkey</a> Open source but based on closed source API (the <a title="Automation API" href="http://www.adobe.com/devnet/flex/samples/custom_automated/" target="_blank">Automation API</a> are released only with <a title="FlexBuilder" href="http://www.adobe.com/products/flex/features/flex_builder/" target="_blank">FlexBuilder</a> and not with the open source Flex SDK), it&#8217;s based on the record-playback approach and as far I  have seen is not easily integrable with a Continuous Integration server.</p>
<p><strong>Flash-Selenium</strong><br />
<a title="Flash-Selenium" href="http://code.google.com/p/flash-selenium/" target="_blank">Flash-Selenium</a> is open source, and it works as an extension of SeleniumRC; the tests can be written in Java, .Net, Ruby or Phyton and the integration with a Continuous Integration server is therefore quite out of the box.<br />
<strong><a title="SeleniumFlex API" href="http://sourceforge.net/projects/seleniumflexapi/" target="_blank"><br />
</a></strong><strong>SeleniumFLex API</strong><br />
<a title="SeleniumFlex" href="http://sourceforge.net/projects/seleniumflexapi/" target="_blank">SeleniumFlex</a> is another open source project. it&#8217;s an extension of SeleniumIDE, test should be written in Selenese.</p>
<p><strong><br />
FunFX</strong><br />
<a title="FunFX" href="http://funfx.rubyforge.org/" target="_blank">FunFX</a> is based on the automation API (therefore you can use it only if you&#8217;re owner of FlexBuilder), the fixtures are  written in Ruby.</p>
<p>At the moment there isn&#8217;t a  de-facto solution: the community is quite dynamic and all these different tools are trying to find their space.</p>
<p>Which one is  my favourite ?</p>
<p>It&#8217;s really hard to say, I think that the context matters a lot. I  don&#8217;t like the solutions that require the Automation API simply because this tights you to a vendor just for testing; it&#8217;s also true that the pure open source solutions requires some extra-hack (like exposing methods through  <a title="ExternalInterface" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00002200.html" target="_blank">ExternalInterface</a>) that are less than ideal.</p>
<p>Looking at the two pure open source tools I like Flash-Selenium for its out of the box integration with Continuous Integration server, while I prefer Selenium-Flex approach for handling the necessary ExternalInterface configuration.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2009/01/26/acceptance-testing-of-flex-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signs of poor communication</title>
		<link>http://www.lucagrulla.it/blog/2008/09/28/signs-of-poor-communication/</link>
		<comments>http://www.lucagrulla.it/blog/2008/09/28/signs-of-poor-communication/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 23:23:53 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/2008/09/28/signs-of-poor-communication/</guid>
		<description><![CDATA[Walking in an office and just looking around for 10 minutes is enough to have a feelingof the level of communication in the environment.
When:

co-located people communicate mainly via IMs, mails, or comments on online collaborative tools instead of face-to-face conversation
a heavyweight tool is the preferred way for driving the work flow instead of using it [...]]]></description>
			<content:encoded><![CDATA[<p>Walking in an office and just looking around for 10 minutes is enough to have a feelingof the level of communication in the environment.</p>
<p><em>When</em>:</p>
<ul>
<li>co-located people communicate mainly via IMs, mails, or comments on online collaborative tools instead of face-to-face conversation</li>
<li>a heavyweight tool is the preferred way for driving the work flow instead of using it only for backup and tracking</li>
<li>on the whiteboard you can read the outcomes of the retrospective of 7 months before</li>
</ul>
<p>There&#8217;s <span style="font-style: italic">definitively</span> something <span style="font-style: italic">wrong</span>.</p>
<p>What about your team ? How many of the above bullet points are you ticking off ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2008/09/28/signs-of-poor-communication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology should leverage your business (a.k.a. REST anyone ??)</title>
		<link>http://www.lucagrulla.it/blog/2008/06/29/technology-should-leverage-your-business-aka-rest-anyone/</link>
		<comments>http://www.lucagrulla.it/blog/2008/06/29/technology-should-leverage-your-business-aka-rest-anyone/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 10:39:55 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/2008/06/29/technology-should-leverage-your-business-aka-rest-anyone/</guid>
		<description><![CDATA[Technology is a exceptional way of improving your business.
The REST architecture is a good example; with a clear URL we definitively improve the effectiveness of our message. People will easily remember the URL and our product will be faster on the market (because people actually know how to get to our product).
Now this sounds pretty [...]]]></description>
			<content:encoded><![CDATA[<p>Technology is a exceptional way of improving your business.</p>
<p>The <a target="_blank" title="REST" href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> architecture is a good example; with a clear URL we definitively improve the effectiveness of our message. People will easily remember the URL and our product will be faster on the market (because people actually know how to get to our product).</p>
<p>Now this sounds pretty basic in 2008 but it looks like that some big companies are still missing the whole point.</p>
<p>Some time ago I was googling for Quality Center, a testing tool owned by <a target="_blank" title="HP" href="http://www.hp.com">HP</a>.</p>
<p>Now, in the REST era, I personally expect a URL on the line of:</p>
<p>www.hp.com/products/testing/qualitycenter</p>
<p>This is not what I had.</p>
<p>The actual direct URL to Quality Center is:</p>
<p>https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&#038;cp=1-11-127-24_4000_100__</p>
<p>HP is obviously missing the key point: how I can remember that thing ???<br />
Even if that is google first choice at the beginning I considered it just white noise because the URL is some undefined bunch and hieroglyphic instead of something with a semantic meaning.</p>
<p>And if I cannot get easily to your product, I will never be able to become a customer.</p>
<p>Sounds easy to me that I&#8217; m not a marketing guy.<br />
It&#8217;s still not so clear to some  companies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2008/06/29/technology-should-leverage-your-business-aka-rest-anyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex: How to achieve proper separation of responsibilities</title>
		<link>http://www.lucagrulla.it/blog/2008/06/24/flex-how-to-achieve-proper-separation-of-responsibilities/</link>
		<comments>http://www.lucagrulla.it/blog/2008/06/24/flex-how-to-achieve-proper-separation-of-responsibilities/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 20:29:35 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/2008/06/24/flex-how-to-achieve-proper-separation-of-responsibilities/</guid>
		<description><![CDATA[In a previous post I was discussing on my experience with Flex and one of the highlighted pain points is the extremely poor quality of the available tutorials.
Let&#8217;s have a look at the source code of the Flick tutorial:

In a single page you have:

the declaration of visual components (TileList)
the declaration of non visual component (HTTPService)
event [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a title="Working with Adobe Flex" href="http://www.lucagrulla.it/wordpress/2008/06/21/working-with-adobe-flex/" target="_blank">previous post</a> I was discussing on my experience with Flex and one of the highlighted pain points is the extremely poor quality of the available tutorials.</p>
<p>Let&#8217;s have a look at the source code of the <a title="Flickr Tutorial" href="http://learn.adobe.com/wiki/display/Flex/Part+I.+Creating+a+Simple+RIA" target="_blank">Flick tutorial</a>:</p>
<p><img id="image159" src="http://www.lucagrulla.it/blog/wp-content/uploads/2008/06/before.jpg" alt="before" width="495" height="564" /></p>
<p>In a single page you have:</p>
<ul>
<li>the declaration of visual components (<em>TileList</em>)</li>
<li>the declaration of non visual component (<em>HTTPService</em>)</li>
<li>event handling (<em>photoHandler</em>)</li>
<li>data binding (<em>photoFeed</em>)</li>
<li>pure logic (<em>requestPhotos</em>)</li>
</ul>
<p>If you decide to follow this development model you will obtain something that is extremely fragile to evolve or simply just to maintain.</p>
<p>Let&#8217;s start assigning the right responsibilities to the right objects.</p>
<p><em><strong>The first step</strong></em> is creating our own Application object and use it as root in the mxml file:<img id="image161" src="http://www.lucagrulla.it/blog/wp-content/uploads/2008/06/FlickrApplication.jpg" alt="FlickrApplication" width="519" height="557" /></p>
<p>Now the HttpService component is not exposed anymore (and ideally can also be injected) and the events handling in the right place.<br />
<em><strong> The second step</strong></em> is to extends the HttpService object to place the <em>requestPhotos</em> behaviour in the service. The result is below:</p>
<p><img id="image162" src="http://www.lucagrulla.it/blog/wp-content/uploads/2008/06/httpservice.jpg" alt="HttpService" width="496" height="291" /><br />
At the end of this refactoring our mxml file looks like this:</p>
<p><img id="image160" src="http://www.lucagrulla.it/blog/wp-content/uploads/2008/06/after.jpg" alt="after" width="537" height="361" /><br />
Now we are declaring only visual components, and its only role is defining what we want to see  and how.</p>
<p><strong>This</strong> is the way of <strong>writing code</strong>.<br />
<strong>The other</strong> one is just <strong>rubbish</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2008/06/24/flex-how-to-achieve-proper-separation-of-responsibilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with Adobe Flex</title>
		<link>http://www.lucagrulla.it/blog/2008/06/21/working-with-adobe-flex/</link>
		<comments>http://www.lucagrulla.it/blog/2008/06/21/working-with-adobe-flex/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 12:58:50 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/2008/06/21/working-with-adobe-flex/</guid>
		<description><![CDATA[RIA is a pretty hot topic in these days; even in ThoughtWorks a lot of discussions are going on (if you have time you can check fellow ThoughtWorkers posts here, here and here).
Funny enough I&#8217;m quite involved in the discussion, due to the use of Adobe Flex in my current project.
So what is Flex ?
Flex [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Rich_Internet_application" target="_blank">RIA</a> is a pretty hot topic in these days; even in <a href="http://www.thoughtworks.com" target="_blank">ThoughtWorks</a> a lot of discussions are going on (if you have time you can check fellow ThoughtWorkers posts <a href="http://blog.jayfields.com/2008/05/argument-for-ria.html" target="_blank">here</a>, <a href="http://memeagora.blogspot.com/2008/05/ria-platform-play.html" target="_blank">here</a> and <a href="http://www.pgrs.net/2008/6/1/the-state-of-flex-development" target="_blank">here</a>).</p>
<p>Funny enough I&#8217;m quite involved in the discussion, due to the use of <a title="Flex" href="http://www.adobe.com/products/flex/" target="_blank">Adobe Flex </a>in my current project.</p>
<p><em><strong>So what is Flex ?</strong></em></p>
<p>Flex is the Adobe solution for RIA; based on <a href="http://en.wikipedia.org/wiki/ActionScript" target="_blank">ActionScript</a>, it promises quick development of rich UI, the ability of testing and TDD-ing, good tools for development and out of the box integration with Web Services and REST services.</p>
<p>Everything sounds cool,but my experience with Flex highlighted few elements that worth a bit of attention&#8230;let&#8217;s analyze those one by one.</p>
<p><strong>Testability</strong></p>
<p>Let&#8217;s start from testability<strong>:</strong> ActionScript is really hard to test !!</p>
<p>A Unit testing framework (<a href="http://code.google.com/p/as3flexunitlib/" target="_blank">FlexUnit</a>) is available, but it cannot be used by command line because the test runner works only in your browser; this slow down your development cycle (red bar-green bar- refactor) quite a lot, reducing your effectiveness during the day.</p>
<p>ActionScript is a half way between a static and a dynamic language (with a clear direction towards being a pure static language, my guess is that the language designers are trying to increase the language appeal to the Java and the dotNet community); the problem is that of a static language you miss the testing framework( mock libraries mostly) and of a dynamic one you&#8217;re missing the complete dynamic approach(all the classes are sealed by default, and you can&#8217;t do methods override at runtime even for objects that are explicitly declared dynamic).</p>
<p>In this scenario interaction testing is nearly impossible to do; sure, you can write your own mock library or stub everything out but this is a pretty strategic decision and a lot depends on the scope of the project.</p>
<p><strong>Flex Security Model</strong></p>
<p>Another aspect that gave us more than one trouble is Flex security model.</p>
<p>A Flex application can connect to a WebService or a REST service only if:</p>
<ul>
<li>the target service is on the same domain where the Flex application is deployed</li>
<li>the target service is on an external domain but in the target domain there is a <em>crossdomain.xml</em> file that declares your domain as secure</li>
</ul>
<p>What does it mean ?<br />
That if I want to access a public feed (let&#8217;s say the BBC weather feed) BBC has to have my domain specified on its <em>crossdomain.xml</em> file that lives on its server.</p>
<p>This is a strong limitation: you cannot simply call BBC and ask to add your domain to their list of trusted site, and this take you down the path of over design your application (like adding a proxy web service on your domain just to be able to get the real data you need from BBC).</p>
<p><strong>Tutorials and suggested best practices </strong></p>
<p>A final comment is for the Adobe tutorials: it&#8217;s hard to see in 2008 something so poor.<br />
The tutorials (have a look at the <a href="http://learn.adobe.com/wiki/display/Flex/Part+I.+Creating+a+Simple+RIA" target="_blank">Flickr one</a> to have an idea) are a collection of worst practices: the basic model of development is spaghetti-code, where you write all the code in the Script tag within your main Flex application file (mxml).</p>
<p>And what about separation of responsibilities ?<br />
Do we really think that this is the code you obtain doing TDD ?</p>
<p>The heavily usage of the Script tag will take you down maintenance nightmares, transforming your application in something that is quickly out of your control and you cannot evolve.</p>
<p><strong>&#8230;but is it good or not ??</strong></p>
<p>Looking at these pain points, for me <em><strong>Flex is not yet a mature technology</strong></em>.<br />
Adobe promises a lot but a number of the promises are not there; TDD is simply to hard to do due to the lack of mock support(even if <a title="TDD in Flex" href="http://www.adobe.com/devnet/flex/articles/unit_testing.html" target="_blank">it&#8217;s promised</a>), the set of possible permissions you can give to the Flash player clashes with the new services oriented feature (introducing cumbersome security model that take you to overdesign as a possible workaround), and with really poor tools (FlexBuilder, the IDE, crashes regularly and the Ant task is pretty basic).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2008/06/21/working-with-adobe-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Article: Seniority, Respect, Authority and an Agile Team</title>
		<link>http://www.lucagrulla.it/blog/2008/05/25/article-seniority-respect-authority-and-an-agile-team/</link>
		<comments>http://www.lucagrulla.it/blog/2008/05/25/article-seniority-respect-authority-and-an-agile-team/#comments</comments>
		<pubDate>Sun, 25 May 2008 22:54:46 +0000</pubDate>
		<dc:creator>Luca</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[infoq]]></category>

		<guid isPermaLink="false">http://www.lucagrulla.it/wordpress/2008/05/25/article-seniority-respect-authority-and-an-agile-team/</guid>
		<description><![CDATA[Here on InfoQ some interesting thoughts around Seniority and Authority in an Agile team.
]]></description>
			<content:encoded><![CDATA[<p><a title="Seniority, Respect, Authority and an Agile Team" href="http://www.infoq.com/news/2008/05/seniority-conflict-agile-team" target="_blank">Here</a> on <a href="http://www.infoq.com">InfoQ</a> some interesting thoughts around Seniority and Authority in an Agile team.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucagrulla.it/blog/2008/05/25/article-seniority-respect-authority-and-an-agile-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
