<?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"
	>

<channel>
	<title>Mickaël's Weblog</title>
	<atom:link href="http://www.sauvee.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sauvee.com/blog</link>
	<description>Re-usability is just a nice side effect</description>
	<pubDate>Tue, 11 Nov 2008 10:19:19 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>SpringSource acquires G2One</title>
		<link>http://www.sauvee.com/blog/2008/11/11/springsource-acquires-g2one/</link>
		<comments>http://www.sauvee.com/blog/2008/11/11/springsource-acquires-g2one/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 10:14:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Grails]]></category>

		<category><![CDATA[groovy]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[OSGi]]></category>

		<category><![CDATA[Spring]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=293</guid>
		<description><![CDATA[G2One is the software company delivering open source projects Grails and Groovy. This company is made of 6 java experts. YOçu can find all the details in this article.
SpringSource expect to integrate Grails in dm server, the OSGi paltform.
Ruby on Rails has now a serioous competitor.
 ]]></description>
			<content:encoded><![CDATA[<p>G2One is the software company delivering open source projects Grails and Groovy. This company is made of 6 java experts. YOçu can find all the details in this <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay8yMDA4LzExLzExL3NwcmluZ3NvdXJjZV9nMjEv" target=\"_blank\">article</a>.</p>
<p>SpringSource expect to integrate Grails in dm server, the OSGi paltform.</p>
<p>Ruby on Rails has now a serioous competitor.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=293" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/11/11/springsource-acquires-g2one/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Depedency Management</title>
		<link>http://www.sauvee.com/blog/2008/10/07/depedency-management/</link>
		<comments>http://www.sauvee.com/blog/2008/10/07/depedency-management/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 08:05:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[dependency]]></category>

		<category><![CDATA[DI]]></category>

		<category><![CDATA[DLL]]></category>

		<category><![CDATA[injection]]></category>

		<category><![CDATA[IoC]]></category>

		<category><![CDATA[methodology]]></category>

		<category><![CDATA[OSGi]]></category>

		<category><![CDATA[Spring]]></category>

		<category><![CDATA[Spring DM Server]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=292</guid>
		<description><![CDATA[I bet on this as the major infrastructure component for software within near future.
Separation of Concern (SoC) is really important to me and goes beyond simple separation of layers os a software implementation. I should add &#8220;cohesive&#8221;, but this is part of the same idea: everythings doing the right thing in the rigth area.
This principle [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="float: right;" src="http://farm1.static.flickr.com/204/524794828_f0cfd0abfb.jpg?v=0" alt="DLL Hell" hspace="5" vspace="5" width="240" />I bet on this as the major infrastructure component for software within near future.</p>
<p>Separation of Concern (SoC) is <strong>really </strong>important to me and goes beyond simple separation of layers os a software implementation. I should add &#8220;cohesive&#8221;, but this is part of the same idea: <em>everythings doing the right thing in the rigth area</em>.</p>
<p>This principle does apply obviously to the source code as a programming practice, useing a tool as maven that introduce some structure into the code organization. But it also apply to the architecture (<a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXJ2aWNlX2NvbXBvbmVudF9hcmNoaXRlY3R1cmU=">SCA</a>), the deliverables (DLL&#8230;and its hell), platform (<a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PU0dp">OSGi</a> / <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zcHJpbmdzb3VyY2UuY29tL3Byb2R1Y3RzL3N1aXRlL2Rtc2VydmVy">Spring DM server</a>), components/framework (<a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnZlcnNpb25fb2ZfY29udHJvbA==">IoC</a>, <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2NvZGUubXNkbi5taWNyb3NvZnQuY29tL21lZg==">MEF</a>), and methodologies (Agile).</p>
<p>The last one could be amazing, but I think the rational is the same: change adpoption. <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy50d28tc2RnLmRlbW9uLmNvLnVrL2N1cmJyYWxhbi9rZXZsaW4uaHRtbA==">Kevlin Henney</a> in his post <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NlYXJjaHNvZnR3YXJlcXVhbGl0eS50ZWNodGFyZ2V0LmNvbS9uZXdzL2FydGljbGUvMCwyODkxNDIsc2lkOTJfZ2NpMTMzMjU4NiwwMC5odG1s">Manage component dependencies for improved system quality</a> says:</p>
<blockquote><p>Another consideration in managing dependencies is the question of change. The dependency structure of a system can enable or discourage change, which makes dependency management a question of architecture, not merely one of fine-grained code quality</p></blockquote>
<p>Having a system allowing effective depedency management at compile-time will ease test infrastructure setup (abaility to test a piece of code without having the entire system setup), hence quality&#8230;humm&#8230;be sure to automate your test to really ensure quality (doing manual repetive stuff is the best way to do it in a bad way over the time).</p>
<p>Having a system allowing effective depedency management at run-time will ease deployement as you will be able to do hotswapping of components even when they are running as for OSGi platforms.</p>
<p>Having a system allowing effective depedency management at run-time with version management, will allow multi-tenant applications and smooth upgrade&#8230;and probably start to solve the DLL&#8217;s hell.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=292" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/10/07/depedency-management/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to: Deploy .Net mobile application on storage card</title>
		<link>http://www.sauvee.com/blog/2008/10/01/how-to-deploy-net-mobile-application-on-storage-card/</link>
		<comments>http://www.sauvee.com/blog/2008/10/01/how-to-deploy-net-mobile-application-on-storage-card/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 12:32:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.Net]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[deploy]]></category>

		<category><![CDATA[mobile]]></category>

		<category><![CDATA[storage card]]></category>

		<category><![CDATA[Tip]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=290</guid>
		<description><![CDATA[I&#8217;m currently reviving a mobile application that I started a long time a go.
Since that time, I downloaded lots of useless software on my mobile phone&#8230;no more space to deploy my application. I tried to deploy directly on the storage card but the way to do so did not pop immediately. I googlized around this [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently reviving a mobile application that I started a long time a go.</p>
<p>Since that time, I downloaded lots of useless software on my mobile phone&#8230;no more space to deploy my application. I tried to deploy directly on the storage card but the way to do so did not pop immediately. I googlized around this topic to get the tip and did not find anything. </p>
<p>The tip is simple: go in the properties of your .Net mobile project, in the &#8220;Device&#8221; tab, you click on the button on the right of &#8220;Output file folder&#8221; and select &#8220;Root folder&#8221;, then enter the full path &#8220;\Storage Card\Program Files\MyApp&#8221;.</p>
<p><a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zYXV2ZWUuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMDgvMTAvZGVwbG95LmpwZw=="><img class="aligncenter size-medium wp-image-291" title="deploy" src="http://www.sauvee.com/blog/wp-content/uploads/2008/10/deploy-300x269.jpg" alt="" width="400" /></a></p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=290" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/10/01/how-to-deploy-net-mobile-application-on-storage-card/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unit testing on legacy</title>
		<link>http://www.sauvee.com/blog/2008/09/25/unit-testing-on-legacy/</link>
		<comments>http://www.sauvee.com/blog/2008/09/25/unit-testing-on-legacy/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 09:55:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[Legacy]]></category>

		<category><![CDATA[Refactoring]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=289</guid>
		<description><![CDATA[Today, I received a mail referencing this post from Llewellyn Faco.
My first though is: &#8220;does adding unit test on legacy code makes sense?&#8221;. I beleive it does not. You would like to refactore your code and be sure not to break any feature? Refactoring makes sense only to make your code evolve to change design [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.ciren.org/ciren/conferences/120504/Black_Box.gif" alt="legacy code black boxing" hspace="5" vspace="5" width="250" align="left" />Today, I received a mail referencing this <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2xsZXdlbGx5bmZhbGNvLmJsb2dzcG90LmNvbS8yMDA4LzA5L2xvY2tpbmctZG93bi1sZWdhY3ktY29kZS5odG1s" target=\"_blank\">post</a> from <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2xsZXdlbGx5bmZhbGNvLmJsb2dzcG90LmNvbS8=" target=\"_blank\">Llewellyn Faco</a>.</p>
<p>My first though is: &#8220;does adding unit test on legacy code makes sense?&#8221;. I beleive it does <span style="text-decoration: underline;"><strong>not</strong></span>. You would like to refactore your code and be sure not to break any feature? Refactoring makes sense only to make your code evolve to change design or add feature and so on. Legacy code that support features you are not aware of (no unit test) &#8230; does not need to evolve&#8230;does need only to be replaced by other code (with test around this time). So I found this simply useless. </p>
<p>The second issue I see is the feasibility of the solution proposed by Llewellyn. One nice side effect of unit testing is the decoupling. And usually, legacy code without tests around has a lot of coupling between classes, thrid parties and databases. Even if the legacy code was well written, you always have a damned coupling somewhere deep inside. So there is no way to instanciate the class you would like only for test purpose.</p>
<p>To summarize: you have some legacy code which works (new code has 99% of the bugs) but you don&#8217;t know what it does exactly. Why would you like to add test around? I usually add test to describe what I want tmy code to do and reuse these test to ensure evolution (refactoring, redesign&#8230;etc). In the case of legacy code: isolate it as much as possible, consider it as a black box and the only possible evolution is replacement!</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=289" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/09/25/unit-testing-on-legacy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Immutability for modeling</title>
		<link>http://www.sauvee.com/blog/2008/09/12/immutability-for-modeling/</link>
		<comments>http://www.sauvee.com/blog/2008/09/12/immutability-for-modeling/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 12:21:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Immutability]]></category>

		<category><![CDATA[Modeling]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=288</guid>
		<description><![CDATA[I&#8217;m currently working on a modeling exercised for connected applications. Modeling an RDBMS schema for a standalone monolithic appliaction is not a real challenge. On top of a set of connected applications, this task start to raise some concept that requires some guidance.
The article Data on the outside vs. the inside from Pat Helland highlight [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a <em>modeling</em> exercised for connected applications. Modeling an RDBMS schema for a standalone monolithic appliaction is not a real challenge. On top of a set of connected applications, this task start to raise some concept that requires some guidance.</p>
<p>The article <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zOTU0NTg3LmFzcHg=" target=\"_blank\">Data on the outside vs. the inside</a> from <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2Jsb2dzLm1zZG4uY29tL3BhdGhlbGxhbmQvZGVmYXVsdC5hc3B4" target=\"_blank\">Pat Helland</a> highlight some of this concept.</p>
<p>As I mentionned in <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zYXV2ZWUuY29tL2Jsb2cvMjAwNy8wMi8yMS9wZXJzaXN0ZW5jZS1zdGFjay0yLw==" target=\"_self\">this post</a> about persistance, it&#8217;s very common to see RDBMS primary keys appearing in entity definition. This is a mistake for a couple of reasons. First, entities should be loosely coupled from the persistance type (RDMS, file, memoty&#8230;etc). Using a primary key is introducing technical details from the implementation in the model. The second reason I see is about the immutability of the key.</p>
<p>When i&#8217;m talking about <em>key</em>, it&#8217;s about the part of the reference of a business entity that identify it. For example, in a REST environement you could reference purchase orders using  this url : customer/C00123/PO/PO00112. In this case the key is the PO number (PO00112). </p>
<p>The goal of a model (or schema) is to support business application in describing things. 2 <em>things</em> that may seam different are in fact the same from the business perspective. For example, from an asset management perspective, if a laptop already acquired is replaced by another one (of almost the same model) because of a technical problem/failure, the second laptop is concidered as the same. In this particular case, nothing change in the description of the laptop even if physically there are 2 distinc laptops.</p>
<p>So to define the key, you need to answer to this question: from the business perspective, what qualify/reference uniquely an entity type. In the case of laptop for AssetManagement it&#8217;s the AssetTag, in the case of employee in HR it will probably be the social number&#8230;etc.</p>
<p>Immutability of such key means that key of an entity can&#8217;t change. If you want to change it because you assigned a temporary one for example) that measn your application should expose a process for this and in fact you will create a new entity with the new key and look at all attributes and relationship to apply them on the new entity. And this process should trigger all audit system.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=288" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/09/12/immutability-for-modeling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>97 Things Every Software Architect Should Know</title>
		<link>http://www.sauvee.com/blog/2008/09/05/97-things-every-software-architect-should-know/</link>
		<comments>http://www.sauvee.com/blog/2008/09/05/97-things-every-software-architect-should-know/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 09:20:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Book]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Fun]]></category>

		<category><![CDATA[Architect]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=286</guid>
		<description><![CDATA[Communities, in general, are getting more and more traction.
O&#8217;Reilly is creating on line books that are &#8220;community centric&#8221; : dedicated to a community and community-authored&#8221;. Everyone can contribute to this books composed of articles that are rated by the community.
Having a look at the 97 Things Every Software Architect Should Know is worthy.
 ]]></description>
			<content:encoded><![CDATA[<p>Communities, in general, are getting more and more traction.</p>
<p>O&#8217;Reilly is creating on line books that are &#8220;community centric&#8221; : dedicated to a community and community-authored&#8221;. Everyone can contribute to this books composed of articles that are rated by the community.</p>
<p>Having a look at the <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovLzk3LXRoaW5ncy5uZWFyLXRpbWUubmV0L3dpa2k=" target=\"_blank\">97 Things Every Software Architect Should Know</a> is worthy.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=286" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/09/05/97-things-every-software-architect-should-know/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Articles sur Spring MVC</title>
		<link>http://www.sauvee.com/blog/2008/09/03/articles-sur-spring-mvc/</link>
		<comments>http://www.sauvee.com/blog/2008/09/03/articles-sur-spring-mvc/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 12:03:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[recommendation]]></category>

		<category><![CDATA[Spring]]></category>

		<category><![CDATA[Spring MVC]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=285</guid>
		<description><![CDATA[Je vous recommande les tutoriaux sur Spring MVC de Serge Tahé. Ce ne sont pas des Quick Start Guides, mais comme l&#8217;indique le titre: Spring MVC par l&#8217;exemple. Tout y est donc illustré avec des exemples et la couverture me semble exhaustive (pour l&#8217;instant je n&#8217;ai parcouru que la partie 2&#8230;mais elle fait déjà 99 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="float: left; margin: 5px;" src="http://ddata.over-blog.com/xxxyyy/0/41/19/48/fond-d-ecran-2/Books_Library.jpg" alt="book" hspace="5" vspace="5" width="140" align="left" />Je vous recommande <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3RhaGUuZGV2ZWxvcHBlei5jb20vamF2YS9zcHJpbmdtdmMtcGFydDEv" target=\"_blank\">les tutoriaux sur Spring MVC</a> de <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3RhaGUuZGV2ZWxvcHBlei5jb20v">Serge Tahé</a>. Ce ne sont pas des <em>Quick Start Guides</em>, mais comme l&#8217;indique le titre: Spring MVC par l&#8217;exemple. Tout y est donc illustré avec des exemples et la couverture me semble exhaustive (pour l&#8217;instant je n&#8217;ai parcouru que la partie 2&#8230;mais elle fait déjà 99 pages).</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=285" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/09/03/articles-sur-spring-mvc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Talent vs Resources</title>
		<link>http://www.sauvee.com/blog/2008/08/05/talent-vs-resources/</link>
		<comments>http://www.sauvee.com/blog/2008/08/05/talent-vs-resources/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 14:21:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=283</guid>
		<description><![CDATA[
In his post &#8220;We&#8217;re not resources&#8221;, Mark Gregory Turansky is writing:
Talent matters.
Winning organizations build winning teams, they don’t schedule resources and they don’t break up a winning team. They pay top dollar for top talent knowing that it’s entirely talent that makes a winning team.
I had the opportunity to see this during my (short) carrier. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://nor.zorpia.com/0/3195/20451248.119eab.jpg" alt="" hspace="5" vspace="5" width="150" align="right" /></p>
<p>In his post <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2Jsb2cubWFya3R1cmFuc2t5LmNvbS9hcmNoaXZlcy85NQ==">&#8220;We&#8217;re not resources&#8221;</a>, <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2Jsb2cubWFya3R1cmFuc2t5LmNvbQ==">Mark Gregory Turansky</a> is writing:</p>
<blockquote><p>Talent matters.</p>
<p>Winning organizations build winning teams, they don’t schedule resources and they don’t break up a winning team. They pay top dollar for top talent knowing that it’s entirely talent that makes a winning team.</p></blockquote>
<p>I had the opportunity to see this during my (short) carrier. Large team tends to force this &#8220;resource&#8221; direction (large company also obviously). Having a small team (lets say 5 to 7) of talent and senior can produce far more than a &#8220;regular&#8221; team of 30.</p>
<p>In the case of a large team, I prefer split into small teams (preferably using the architecture components as a guidance &#8230; yes I know, some agile folks will not agree) with leaders having a good leadership and management skills to do <span style="text-decoration: underline;">people</span> management, not resource management.</p>
<p>Where I disagree from Mark&#8217;s point of view is the direct relation he emphasys between talent and dollars. Sure, talent people are more expensive, but dollars is not a way to get people efficient, simply a way to get them in. <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5wb3BwZW5kaWVjay5jb20vcGRmcy9Db21wZW5zYXRpb24ucGRm" target=\"_blank\">This article</a> form Mary Poppendiek highlights very well this point.</p>
<p>Another skill that makes the difference  (in addition to talent) is sense of responsibilities (I&#8217;m back to an agile point of view <img src='http://www.sauvee.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). The best talented developer will not help that much if he (or she) cares only about his code, do not try to understand code/work of the others, do not try to help level 3 support even if it&#8217;s a totally unkown area of the software for him/her.</p>
<p>Having teams sharing the responsibility of what they deliver, composed of talent, and leaded by a people manager (vs resource manager) is one of the best cocktail to quickly create creative softwares.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=283" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/08/05/talent-vs-resources/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deprecation and black boxing</title>
		<link>http://www.sauvee.com/blog/2008/07/15/deprecation-and-black-boxing/</link>
		<comments>http://www.sauvee.com/blog/2008/07/15/deprecation-and-black-boxing/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 08:07:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[black boxing]]></category>

		<category><![CDATA[code base]]></category>

		<category><![CDATA[deprecation]]></category>

		<category><![CDATA[IoC]]></category>

		<category><![CDATA[legacy code]]></category>

		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=280</guid>
		<description><![CDATA[After reading Ayende’s post Obsolete in isolation, I decided to write back in my bog on such topic that inspires me.
I&#8217;m in agreement with Ayende (yes again!), even if I would not use the same wording, I prefer to do deprecation and black boxing (which is almost the same at the end).
Back to the initial [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" vspace=5 hspace=5 src="http://www.ciren.org/ciren/conferences/120504/Black_Box.gif" alt="" width="200" align="left" /><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">After reading Ayende’s post </span><span style="font-size: 8.5pt; color: #000000; font-family: Verdana;"><a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2ZlZWRzLmZlZWRidXJuZXIuY29tL35yL0F5ZW5kZVJhaGllbi9+My8zMzUzMTMzNTgvT2Jzb2xldGUtaW4tSXNvbGF0aW9uLmFzcHg=" target=\"_blank\"><span style="mso-ansi-language: EN-GB" lang="EN-GB">Obsolete in isolation</span></a></span><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">, I decided to write back in my bog on such topic that inspires me.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">I&#8217;m in agreement with Ayende (yes again!), even if I would not use the same wording, I prefer to do <strong><span style="font-family: Verdana; mso-bidi-font-family: Arial;">deprecation and black boxing</span></strong> (which is almost the same at the end).</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">Back to the initial question: How to handle legacy code?</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">I&#8217;ve heard in the past, managers saying &#8220;what are the estimates to get ride of the C++ code? » This is simply stupid: arguing that code is wrong due to his language is simple a non-sense. More over, I would add that legacy code is obviously less buggy than brand new code as less tested (even if you are doing TDD). Some may argue that there are intrinsic reasons to get ride of C++ because of the language itself: the interoperability in a JEE stack for example. I can&#8217;t say it&#8217;s totally wrong but JNI works well here, and anyway my point is that managers tends to think that removing/rewriting a piece of code and keep the exact same feature is simple, costless, without danger and will allow the implementation of lots of wonderful new features. This is 100% wrong.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">First, legacy code is often a spaghetti plate: lots of dependencies. Even if you are using Spring or Windsor, this is a question of maturity of the developers and best practices, more than tooling.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">Secondly, legacy code often encapsulates the business logic. Replacing such code can&#8217;t be done at the exact same level of features. If your legacy code was not written using TDD (or at least with a very large coverage by tests)&#8230;which almost never the case&#8230;you will lose some features, or have different behaviour. The best thing that can occur is that you discover yourself the discrepancies before the customers.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">The suggestion of Ayende to embed an isolated version of legacy code in a new project is interesting. But I think it should not be just isolated, but also black boxed: I mean the legacy code should be seen as external code base (as a middle ware for example). The idea behind this is that legacy code is less buggy that new code, so take it as is, do not look inside use the interface it exposes and that&#8217;s it! So I think there is no need for new developers to learn the legacy code, only the legacy behaviour. Obviously, you will find some defects in legacy code, so you need at least one or tow developers that know about this code base.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">Ok, fine, we have a big black box in the middle of our code: will I keep it for years? Obviously not, so that&#8217;s why we have to make this black box smaller each time it&#8217;s possible. The overall strategy is to have features leaving the old legacy code base to be <em><span style="font-family: Verdana; mso-bidi-font-family: Arial;">reimplemented</span></em> in the new code base. When I say &#8220;reimplemented&#8221;, it can&#8217;t be with the exact same behaviour&#8230;the feature has to be better, embrace new requirement, be more appealing&#8230;etc. Having the exact same behaviour would be very hard and will include what is not really nice in the feature. </span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">Should I remove the code of the features that I remove from legacy code base? No. Even removing some code can create defects. If it&#8217;s not the case, it may be painless to remove all the dependencies. So I prefer deprecate the feature, I mean: keep the code, document the feature is replaced by another one, remove it from all the user interfaces and check that the new code base do not use this feature. This is safe and costless than removing the code.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;">This approach has some issues, may not feet your requirements or is simply not accurate for you. But, I think it provide a reasonable approach for legacy code management. What is important to be aware is that legacy code is very often the code that makes $$ and the code that is less buggy.</span></p>
<p><span style="font-size: 8.5pt; color: #000000; font-family: Verdana; mso-ansi-language: EN-GB;"> </span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=280" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/07/15/deprecation-and-black-boxing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spring Application Platform as a PaaS</title>
		<link>http://www.sauvee.com/blog/2008/06/20/spring-appliaction-platform-as-a-paas/</link>
		<comments>http://www.sauvee.com/blog/2008/06/20/spring-appliaction-platform-as-a-paas/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 11:57:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[PaaS]]></category>

		<category><![CDATA[Plateform]]></category>

		<category><![CDATA[S2AP]]></category>

		<category><![CDATA[Spring]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.sauvee.com/blog/?p=278</guid>
		<description><![CDATA[
SpringSource will release sone (around july) the version 1.0 of its application platform: S2AP. I&#8217;m having a look at it, especially from a PaaS point of view. S2AP present lots of interest for different perspective, but PaaS is what I&#8217;m currently looking for.
First, S2AP makes a big jump in the notion of application server&#8230;it&#8217;s not an [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="float: left;" src="http://fishtrain.com/wp-content/uploads/platform_edge.jpg" alt="" hspace="5" vspace="5" width="180" /><br />
<a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zcHJpbmdzb3VyY2UuY29tLw==" target=\"_blank\">SpringSource</a> will release sone (around july) the version 1.0 of its application platform: <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zcHJpbmdzb3VyY2UuY29tL3Byb2R1Y3RzL3N1aXRlL2FwcGxpY2F0aW9ucGxhdGZvcm0=" target=\"_blank\">S2AP</a>. I&#8217;m having a look at it, especially from a <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QbGF0Zm9ybV9hc19hX3NlcnZpY2U=" target=\"_blank\">PaaS</a> point of view. S2AP present lots of interest for different perspective, but PaaS is what I&#8217;m currently looking for.</p>
<p>First, S2AP makes a big jump in the notion of application server&#8230;it&#8217;s not an application server but an application platform which is different and open new horizons. The application servers stand for containing applications. These application can be web app, web services&#8230;etc, but they are monolothics. With JMX and ear, you can go further in decoupling by allowing multiple <em>micro </em>appplications to be delivered inside the same enveloppe: the ear. But this is not enough: you still deliver an entire ear, you do not handle multiple versions of the same application, you get worried by transitive depedencies for third parties, communication between ear are remote calls. S2AP takes a real new approach. It provide separation/decoupling and allow integration betweens components without remote call (yes, this can be discussed : RPC and AOP proxy vs web service and remote calls). IMHO, this is why we are talking about application platform and not application server as it provide support for multiple components tightly coupled which are all belonging to the same application.</p>
<p>Various technologies tried to hide (or abstract) the fact a method call was remote or not. this is clearly a mistake. Remote calls are integration points, local calls are not. Integration points are fragility and low performances points. Developers and architects must be aware of all of them to ensure reliability and good performances. More over, developping applications mostly based on remote calls is an error and should raise a red flag. With S2AP we get a new approach which keep capabilities of regular applciation server. From a PaaS point of view, it is a significant technolgy jump (we will see the Microsoft response with Oslo project), and an instance of S2AP will be used to deploy all the applications of the SaaS vendor.</p>
<p>Those who read a <a href="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3d3dy5zYXV2ZWUuY29tL2Jsb2cvMjAwOC8wMi8xMi9wYWFzLWlzLXNmLw==" target=\"_self\">previous post on my vision of PaaS</a>, could argue S2AP is far from the Software Factory approach. I agree, but S2AP present at least one interesting characteristic: the hot deployment. This is an essential piece of technology to allow deployment of components. The next step are to better project management and source control management capabilities (a kind of mavenization), and allow deployement from one S2AP to another. This way a developper could have it&#8217;s S2AP instance to develop (and test) applicitions, then automatique deployment on the S2AP production system. Of course, this last step requires far more than just a hot deployment capabilities&#8230;but at least we have the key technological piece. More over all this inetgrations (SCM, PM, Eclipse, test and deployment) can be developed out of S2AP&#8230;I hope a lot of satellite projects will appear in that area.</p>
<p> To conclude, S2AP is a very interesting opportunity for PaaS as it allows a decoupling and componentization of applciations inside a platform and not inside an ear.</p>
 <img src="http://www.sauvee.com/blog/wp-content/plugins/feed-statistics.php?view=1&post_id=278" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.sauvee.com/blog/2008/06/20/spring-appliaction-platform-as-a-paas/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
