<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Art of Software Reuse</title><link>http://artofsoftwarereuse.com</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SoftwareReuseInTheRealWorld" /><description>Enabling Organizational Agility using Systematic Software Reuse</description><language>en</language><image><link>http://artofsoftwarereuse.com</link><url>http://s2.wp.com/i/buttonw-com.png</url><title>Art of Software Reuse</title></image><lastBuildDate>Mon, 20 May 2013 19:12:18 PDT</lastBuildDate><generator>http://wordpress.com/</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="search" type="application/opensearchdescription+xml" href="http://artofsoftwarereuse.com/osd.xml" title="Art of Software Reuse" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SoftwareReuseInTheRealWorld" /><feedburner:info uri="softwarereuseintherealworld" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://artofsoftwarereuse.com/?pushpress=hub" /><geo:lat>40.10386</geo:lat><geo:long>-74.937343</geo:long><feedburner:emailServiceId>SoftwareReuseInTheRealWorld</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SoftwareReuseInTheRealWorld" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FSoftwareReuseInTheRealWorld" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><feedburner:browserFriendly>(Enter a personal message you would like to have appear at the top of your feed.)</feedburner:browserFriendly><item><title>5 Questions To Increase Systematic Reuse Effectiveness</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/dXSuRda0yHk/</link><category>Collaboration</category><category>General</category><category>Reuse</category><category>software reuse</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 12 May 2013 19:34:11 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2870</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Here are five questions to ask your teams to increase reuse effectiveness when evaluating a functional requirement:</p>
<ol>
<li>Is a requirement already met within the application or platform or is this the first time?</li>
<li>If the capability already exists, does the current implementation provide the right extensibility? Often, existing code would need refactoring to meet a slightly varying set of requirements when compared to the original one. Take this as an opportunity to tease apart the abstractions necessary to capture the variations. What&#8217;s common and what&#8217;s truly different is the key aspect to figure out.</li>
<li>Which other team or application has encountered this functional requirement before and how did they solve it? If you aren&#8217;t sure, ask around!</li>
<li>Do we truly believe we are the first ones to stumble upon this need in the team/department/division/the firm? Try &#8220;laddering up&#8221; &#8211; as the Heath brothers call it in their latest book <a href="http://heathbrothers.com/books/decisive/">Decisive</a> - incrementally and deliberately extract the key aspects of the problem you are trying to solve and look for places where solutions already exist. </li>
<li>If you find existing code to meet your need &#8211; evaluate it with a critical eye towards non-functional needs. Is it performant enough to meet the needs of your use case? does it provide adequate extension points / hooks to integrate with the rest of your application? is it a library or a hosted service? If hosted, what is the resiliency and availability strategy?</li>
</ol>
<p>Too often, there is a bias towards implementing from the ground up due to either lack of time (don&#8217;t want to find out if other implementations or existing solutions exist and if they do, would they fit) or lack of trust (don&#8217;t want to use this team&#8217;s software or codebase or don&#8217;t trust that the quality of the implementation).</p>
<p>These aren&#8217;t exhaustive &#8211; what other questions come to mind?</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/collaboration/'>Collaboration</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2870/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2870/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2870&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=dXSuRda0yHk:4tA3QLFw-Aw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/dXSuRda0yHk" height="1" width="1"/>]]></content:encoded><description>Here are five questions to ask your teams to increase reuse effectiveness when evaluating a functional requirement: Is a requirement already met within the application or platform or is this the first time? If the capability already exists, does the current implementation provide the right extensibility? Often, existing code would need refactoring to meet a [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2870&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/05/13/5-questions-to-increase-systematic-reuse-effectiveness/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/05/13/5-questions-to-increase-systematic-reuse-effectiveness/</feedburner:origLink></item><item><title>Refactor Code Often, Continuously, Every Iteration</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/fh1lOYhNn80/</link><category>agile</category><category>refactoring</category><category>Reuse</category><category>software reuse</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 24 Mar 2013 07:23:54 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2864</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Refactoring is a way to improve code quality over time using incremental set of improvements &#8211; the idea is to increase the ability to make changes safer and faster and is not meant to deliver new functionality per se. For systematic reuse to succeed, refactoring has to happen often and on a continuous basis.  Why? It provides several benefits from a systematic reuse perspective. For instance:</p>
<ol>
<li><span style="line-height:13px;">You will learn which aspects of the code base have the most technical debt &#8211; what&#8217;s complicated to understand and extend/enhance? which parts of the codebase are difficult to verify via automated tests?</span></li>
<li>See repetition more often and will eliminate redundant methods, classes, even entire chunks of functionality &#8211; over time, you will see the same capability being provided by a different library, or there is a new requirement in a project that can reuse the capability if changes were made to it etc. Finally &#8211; and this happens to me a lot &#8211; you ask yourself &#8211; &#8220;what was I thinking implementing it a certain way when there is a better approach?&#8221;</li>
<li>Systematic reuse needs deep understanding of the domain &#8211; the team needs to tease apart different technical concerns, identify which ones are relevant for the business, and identify variations within the scope of candidate reusable components. Which brings us to the most important question &#8211; are the assumptions made earlier about the domain and the subsequent design still valid? This continuous validation and re-validation of the core underlying assumptions and design choices will ultimately decide the reuse effectiveness of the component</li>
<li>Over time, doing this will provide the team with a valuable data on providing estimates &#8211; which parts of the codebase are tricky? which ones lack tests? which ones are bug infested? All these aspects weigh into an estimate and continuous refactoring will give the team very good insights.</li>
</ol>
<p>So, please don&#8217;t wait for a project or a deliverable to arrive &#8211; start refactoring every day and across every project <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2864/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2864/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2864&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=fh1lOYhNn80:gHTaOQR1ats:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/fh1lOYhNn80" height="1" width="1"/>]]></content:encoded><description>Refactoring is a way to improve code quality over time using incremental set of improvements &amp;#8211; the idea is to increase the ability to make changes safer and faster and is not meant to deliver new functionality per se. For systematic reuse to succeed, refactoring has to happen often and on a continuous basis.  Why? [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2864&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/03/24/refactor-code-often-continuously-every-iteration/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/03/24/refactor-code-often-continuously-every-iteration/</feedburner:origLink></item><item><title>Paper On Incentive Compatibility and Systematic Reuse</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/odHMnIOioX4/</link><category>Reuse</category><category>cost of reuse</category><category>organizational structure</category><category>software reuse</category><category>systematic software reuse</category><category>technical governance</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 10 Mar 2013 06:45:34 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2859</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>This paper on <a href="http://www.pitt.edu/~ckemerer/CK%20research%20papers/IncentiveCompatibility_FichmanKemerer2001.pdf">Incentive Compatibility and Systematic Software Reuse</a> provides several insights on incentives and organizational structure that will impact and influence systematic software reuse.  A few questions and points to ponder:</p>
<ol>
<li><span style="line-height:13px;">Are you tracking cross project dependencies with an eye towards developing and sharing reusable components? Is this word of mouth, best effort or more systematic and instutionalized?</span></li>
<li>Do you understand the cost of systematic reuse? what is the cost of discovering and evaluating a component for a particular use case? what is the cost of developer training and learning curve?</li>
<li>How is funding allocated for ongoing maintenance/upkeep/bug fixes etc. for reusable assets? In short &#8211; how do you keep the program humming &#8211; will it become sustainable?</li>
<li>Which role will provide the curator or expertise with reusable asset integration? Which role will provide guidance on when to use and when not to use a particular component?</li>
</ol>
<p>This paper provides several models for enabling and operationalizing systematic reuse. There are several organizational considerations to picking and adapting these models. Regardless of which model is picked it should become quite evident that enabling reuse isn&#8217;t a purely technical endeavour. It is much more than that &#8211; from understanding the true costs behind reuse to continuous governance &#8211; it takes considerable effort and lot of discipline to get returns.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/cost-of-reuse/'>cost of reuse</a>, <a href='http://artofsoftwarereuse.com/tag/organizational-structure/'>organizational structure</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/technical-governance/'>technical governance</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2859/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2859/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2859&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=odHMnIOioX4:dggZIHN46xs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/odHMnIOioX4" height="1" width="1"/>]]></content:encoded><description>This paper on Incentive Compatibility and Systematic Software Reuse provides several insights on incentives and organizational structure that will impact and influence systematic software reuse.  A few questions and points to ponder: Are you tracking cross project dependencies with an eye towards developing and sharing reusable components? Is this word of mouth, best effort or [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2859&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/03/10/paper-on-incentive-compatibility-and-systematic-reuse/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/03/10/paper-on-incentive-compatibility-and-systematic-reuse/</feedburner:origLink></item><item><title>Facilitate Reuse Through Interfaces</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/EPZA1sQ0CVw/</link><category>Reuse</category><category>decoupling</category><category>interfaces</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 10 Mar 2013 05:58:14 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2832</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Predicting and designing for systematic reuse is hard &#8211; in trying to design for future requirements, team often bake in accidental complexity. One effective way to avoid that trap is to separate your concerns via well designed interfaces. It is important to point out that although separating concerns is essential, which ones to prioritize and plan for is heavily dependent on your problem domain. Additionally, it is not pragmatic to provide for variability across all points in your design.</p>
<p>Here is an example of facilitating reuse via interfaces &#8211; the example class takes a ReportResult object and needs to format them into a variety of formats (XML, PDF, etc.). Although this is a simple example it is powerful &#8211; as new requirements for supporting additional formats arise it can gracefully be extended. Plus, more importantly, formats that aren&#8217;t required don&#8217;t have to be implemented until there is a real requirement.</p>
<pre class="brush: plain; title: ; notranslate">
public interface Formatter {
    public T format(ReportResult reportResult) ;
}
</pre>
<p>The above can be implemented using specific formatters as shown below:</p>
<pre class="brush: plain; title: ; notranslate">
public class XmlFormatter {
    public String format(ReportResult reportResult)  {
       //implement logic for XML formatting
    }
}
</pre>
<p>With the report generation and formatting separation in place, additional formatters can be implemented with ease &#8211; e.g. PdfFormatter, HtmlFormatter, or PlainTextFormatter, etc. This decouples formatting logic from report generation classes thus enabling reuse for the report generation functionality.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/decoupling/'>decoupling</a>, <a href='http://artofsoftwarereuse.com/tag/interfaces/'>interfaces</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2832/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2832/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2832&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=EPZA1sQ0CVw:wRDhLgpNGrk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/EPZA1sQ0CVw" height="1" width="1"/>]]></content:encoded><description>Predicting and designing for systematic reuse is hard &amp;#8211; in trying to design for future requirements, team often bake in accidental complexity. One effective way to avoid that trap is to separate your concerns via well designed interfaces. It is important to point out that although separating concerns is essential, which ones to prioritize and [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2832&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/03/10/facilitate-reuse-through-interfaces/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/03/10/facilitate-reuse-through-interfaces/</feedburner:origLink></item><item><title>5 Tips to Co-Create Reusable Components</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/CrbXj7QwUEI/</link><category>agile</category><category>Collaboration</category><category>Reuse</category><category>code review</category><category>design review</category><category>retrospective</category><category>software reuse</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 17 Feb 2013 07:54:43 PST</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2810</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Want to envision, design, and implement reusable software components that your development community will enthusiastically adopt? Co-create! Here are 5 tips to leverage co-creation when driving systematic reuse initiatives:</p>
<ol>
<li>Have an idea that applies to multiple projects? Get the project leads to co-ordinate and align resources and partner with developers from both teams to develop the design</li>
<li>Share the source code of all your reusable components so every developer in the team can see under the hood how the component works and how it can be improved</li>
<li>Work hands-on with developers when defining classes, external interfaces, etc. &#8211; not just via block diagrams but actual code. Pair program and show them how to think using abstractions, what aspects of the design to make extensible and the rationale for it, etc. &#8211; you&#8217;ll be surprised how effective this is and how much all parties learn from the process</li>
<li>Share the big picture &#8211; every time and across every project &#8211; developers and development managers need to be convinced that their contribution aligns with the overall technical strategy. This should also highlight why a shared component&#8217;s test coverage and robustness needs to be high and continuously improved</li>
<li>Use design reviews, code reviews, and retrospectives to continually look for ways to collaborate and leverage each other. See boiler plate code that can be better encapsulated, or missing tests, or a smarter algorithm &#8211; get your hands into the code and work with the concerned developer. They will appreciate why you want them to use a particular design pattern or think about a problem in a certain way. Added bonus &#8211; just like item #3 &#8211; every participant will learn from the exercise.</li>
</ol>
<p>Finally, co-creating reusable components greatly reduces friction associated with having to implement a design that was mandated. You want passion and enthusiasm from the dev community &#8211; not compliance!</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/code-review/'>code review</a>, <a href='http://artofsoftwarereuse.com/tag/design-review/'>design review</a>, <a href='http://artofsoftwarereuse.com/tag/retrospective/'>retrospective</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2810/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2810/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2810&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=CrbXj7QwUEI:RzXNsAnCwnY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/CrbXj7QwUEI" height="1" width="1"/>]]></content:encoded><description>Want to envision, design, and implement reusable software components that your development community will enthusiastically adopt? Co-create! Here are 5 tips to leverage co-creation when driving systematic reuse initiatives: Have an idea that applies to multiple projects? Get the project leads to co-ordinate and align resources and partner with developers from both teams to develop the [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2810&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/02/17/5-tips-to-co-create-reusable-components/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/02/17/5-tips-to-co-create-reusable-components/</feedburner:origLink></item><item><title>Systematic Reuse Needs Extensibility</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/e5jJ5IKYSfg/</link><category>Reuse</category><category>decoupling</category><category>Design</category><category>design patterns</category><category>software reuse</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 03 Feb 2013 04:06:38 PST</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2775</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Accidental complexity is a <a href="http://artofsoftwarereuse.com/2009/05/07/risks-with-software-reuse/">real risk</a> with trying to pursue systematic reuse . In trying to get reuse, you don&#8217;t want developers to jump through layers of indirection and complexity before they can write any useful code. Accounting for extensibility is a pragmatic approach when striving to design for systematic reuse.</p>
<p>Extensibility needs to be supported at various points in the design &#8211; it could be in user interface, integration, data contracts/definitions, system flows, services, and many other points. There are a plethora of choices and the question then becomes &#8211; how does one know what needs to be extensible? The answer lies in &#8220;finding what varies and encapsulating it&#8221;[1].</p>
<p>If a reusable component provides an extensibility hook &#8211; the consumer of the component can extend / replace default behaviour. Extensibility can be provided in a variety of ways &#8211; there ins&#8217;t a magic bullet here and each tactic needs to be considered in context. Here are various examples:</p>
<p>Spring Framework provides application <a href="http://www.java-forums.org/blogs/spring-framework/419-listening-events-spring.html">context loader listeners</a> that a developer can use to plugin custom logic. The listener doesn&#8217;t allow customization of how Spring constructs the beans or injects dependencies. However, it does provide a convenient mechanism for the developer to provide logic after container startup and before shutdown &#8211; place logic specific to a legacy/proprietary API that doesn&#8217;t support dependency injection. Alternatively, if there is a specific way to guarantee cleaning up resources prior to destroying context &#8211; that logic can be placed here as well.</p>
<p>Another extensibility strategy is from <a href="http://www.slf4j.org/">SLF4J </a>- it is a logging facade and provides logging API methods that can be wired with concrete providers such as Log4J. Here, the idea is to free up individual classes from coupling with a specific provider. It provides much more points of extensibility than the above example.</p>
<p>Finally, the nature and number of extension points needs to be carefully weighed in the context of real applications. Not enough extension points hurts reusability. Similarly, too many increases learning curve, complexity, and possibly investment prior to making it usable in an application.</p>
<p>1. Alan Shalloway, James Trott, <a href="http://www.amazon.com/Design-Patterns-Explained-Perspective-Object-Oriented/dp/0201715945">Design patterns explained: a new perspective on object-oriented design</a></p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/decoupling/'>decoupling</a>, <a href='http://artofsoftwarereuse.com/tag/design/'>Design</a>, <a href='http://artofsoftwarereuse.com/tag/design-patterns/'>design patterns</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2775/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2775/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2775&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=e5jJ5IKYSfg:dBo0jeZ00hk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/e5jJ5IKYSfg" height="1" width="1"/>]]></content:encoded><description>Accidental complexity is a real risk with trying to pursue systematic reuse . In trying to get reuse, you don&amp;#8217;t want developers to jump through layers of indirection and complexity before they can write any useful code. Accounting for extensibility is a pragmatic approach when striving to design for systematic reuse. Extensibility needs to be [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2775&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/02/03/systematic-reuse-needs-extensibility/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/02/03/systematic-reuse-needs-extensibility/</feedburner:origLink></item><item><title>Continuously Explore and Execute on Project Synergies</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/JBEXi6JWDqQ/</link><category>Reuse</category><category>alignment</category><category>project planning</category><category>synergies</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Fri, 25 Jan 2013 22:04:05 PST</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2758</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Managing delivery risk is one of the key risks with pursuing systematic reuse. How can your teams mitigate that risk yet make progress on the reuse front? The trick is to keep moving &#8211; pro-actively, continuously explore synergies across projects and align project delivery. </p>
<p>Here are some common areas to explore areas of synergy across projects:</p>
<ul>
<li>Requirements &#8211; this is the most overlooked part of systematic reuse &#8211; if multiple projects exhibit common/similar/overlapping requirements &#8211; this is the most rewarding and domain-aligned minefield of reuse candidates. Focus not only on technical / infrastructure requirements but also domain specific ones including logic specific to a region/country &#8211; internationalization and locale-specific components are examples. </li>
<li>Integration across systems &#8211; common message formats, alerting, exception handling, monitoring &#8211; several projects will need to address these areas.</li>
<li>Providing data that is used again and again &#8211; whether it is static table code sets or common repository of customer information &#8211; data services and access interfaces can be leveraged across projects quite easily</li>
<li>Binding components that act as the bridge or &#8220;glue&#8221; between open-source/proprietary software with your internal enterprise are invaluable reuse candidates.</li>
<li>Organizing and accessing test data &#8211; many projects have bespoke approaches for sourcing, organizing, and integrating test data into unit and regression tests. Synergies will save valuable time during testing but also is quite often necessary as functionality starts to span across multiple areas within the domain</li>
</ul>
<p>Alignment on delivery may not always be possible &#8211; business priorities do and need to take precedence &#8211; but that shouldn&#8217;t stop your teams from exploring these routes.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/alignment/'>alignment</a>, <a href='http://artofsoftwarereuse.com/tag/project-planning/'>project planning</a>, <a href='http://artofsoftwarereuse.com/tag/synergies/'>synergies</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2758/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2758/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2758&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=JBEXi6JWDqQ:usrwp-BIu7g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/JBEXi6JWDqQ" height="1" width="1"/>]]></content:encoded><description>Managing delivery risk is one of the key risks with pursuing systematic reuse. How can your teams mitigate that risk yet make progress on the reuse front? The trick is to keep moving &amp;#8211; pro-actively, continuously explore synergies across projects and align project delivery.  Here are some common areas to explore areas of synergy across [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2758&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2013/01/26/continuously-explore-and-execute-on-project-synergies/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2013/01/26/continuously-explore-and-execute-on-project-synergies/</feedburner:origLink></item><item><title>Surfing The Innovation Wave – Talk by Sharad Sharma</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/bEji99-aYg4/</link><category>General</category><category>open source</category><category>innovation</category><category>risk taking</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Thu, 06 Dec 2012 20:01:11 PST</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2746</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Heard a very interesting talk by Mr Sharad Sharma titled <a href="http://www.iimb.ernet.in/node/3164">&#8220;Surfing The Innovation Waves&#8221;</a> that puts in context the nature of innovation happening in the marketplace and the contextual forces behind the changes. He talks about adopting the<br />
&#8220;hobbyist temperament&#8221; and gave several examples of people in the edges of industries disrupting the establishment. The key behavioral traits he mentioned are as follows:</p>
<ul>
<li>Stepping outside one&#8217;s comfort zone</li>
<li>Having an internal compass &#8211; &#8220;i got to excel.&#8221; Don&#8217;t rely on external cues and rely on self-mastery instead.</li>
<li>Get comfortable to stand out and be an underdog.</li>
<li>Persisting in face of adversity. Even if you are right, it doesn&#8217;t matter till you are able to go past the criticisms that will keep coming</li>
</ul>
<p>He then expanded on a New Age Code of Conduct  - keeping in line with the idea of the hobbyists and people who are innovating at the margins. He talked about volunteers, poeple are doing it for others like themselves and participating in creating and growing &#8220;Creation Nets&#8221;. The Creation Nets are going to be the wave of the future where many people sharing a common cause will come together and contribute to innovation via rapid and effective collaboration. Community activity is key because the world is much too complex and you have to collaborate with others for innovation to happen both within and outside the organizational boundaries.</p>
<p>This new code of conduct has particular behaviours that he recommends:</p>
<ul>
<li>Setting others up for success. Form of servant leadership &#8211; make it your job to help others around you get to their goals. Evolving shared aspirations is very important</li>
<li>Make sure you give more than what you take &#8211; effect of the commons. Amplification of co-operation is key and if you don&#8217;t invest in public good, collaboration isn&#8217;t sustainable. Academic institutions take an active role to play in public good creation.</li>
<li>Say what you mean, do what you say. Allow for trust bonds to be formed &#8211; cannot allow duplicity. Without trust, no creation nets are possible and effective collaboration isn&#8217;t an option.</li>
<li>Make mistakes. Make them fast and recover quickly</li>
<li>Don&#8217;t wait for instructions &#8211; just make it happen. Pick the challenge that catches your fancy and start working to happen. Pull based model and not a push based model. I will do this with the best of my ability. Focus on excellence.</li>
</ul>
<p>The talk is definitely worth the time in full &#8211; do see it online here: <a href="http://www.iimb.ernet.in/node/3164">http://www.iimb.ernet.in/node/3164</a></p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/innovation/'>innovation</a>, <a href='http://artofsoftwarereuse.com/tag/risk-taking/'>risk taking</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2746/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2746&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=bEji99-aYg4:unc2Uoa1Dmk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/bEji99-aYg4" height="1" width="1"/>]]></content:encoded><description>Heard a very interesting talk by Mr Sharad Sharma titled &amp;#8220;Surfing The Innovation Waves&amp;#8221; that puts in context the nature of innovation happening in the marketplace and the contextual forces behind the changes. He talks about adopting the &amp;#8220;hobbyist temperament&amp;#8221; and gave several examples of people in the edges of industries disrupting the establishment. The [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2746&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2012/12/07/surfing-the-innovation-wave-talk-by-sharad-sharma/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2012/12/07/surfing-the-innovation-wave-talk-by-sharad-sharma/</feedburner:origLink></item><item><title>Software Reuse Quick Tip #30</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/1180gyzY3q8/</link><category>Reuse</category><category>maven</category><category>software reuse</category><category>tips</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sat, 15 Sep 2012 23:45:21 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2741</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><strong>Tip #30 &#8211; Enforce Consistent Dependencies via Maven Parent POM</strong></p>
<p>Maven parent POM can be used as a consistent mechanism to define dependencies and dependency versions. The module that defines common set of entries can then be used in any arbitrary module &#8211; it doesn&#8217;t have to be restricted to a child module in a multi-module build. This is very useful when you want to enforce consistent set of dependencies across multiple projects that share either a core set of reusable libraries including 3rd party dependencies.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/maven/'>maven</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/tips/'>tips</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2741/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2741/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2741&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=1180gyzY3q8:lIP2tgLN2A8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/1180gyzY3q8" height="1" width="1"/>]]></content:encoded><description>Tip #30 &amp;#8211; Enforce Consistent Dependencies via Maven Parent POM Maven parent POM can be used as a consistent mechanism to define dependencies and dependency versions. The module that defines common set of entries can then be used in any arbitrary module &amp;#8211; it doesn&amp;#8217;t have to be restricted to a child module in a [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2741&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2012/09/16/software-reuse-quick-tip-30/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2012/09/16/software-reuse-quick-tip-30/</feedburner:origLink></item><item><title>5 Tips to Ease Reusable Asset Integration</title><link>http://feedproxy.google.com/~r/SoftwareReuseInTheRealWorld/~3/-UmXm-SXgqM/</link><category>Reuse</category><category>enterprise integration</category><category>integration</category><category>library</category><category>software reuse</category><category>systematic software reuse</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vijaynarayanan</dc:creator><pubDate>Sun, 09 Sep 2012 03:57:00 PDT</pubDate><guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2737</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Resuable software assets need to be created and evolved with two perspectives &#8211; functional value and ease of integration. A library that offers little functional value and is difficult to integrate into an application is unlikely to get wide adoption.  Are there tips to balance these two perspectives? I think so and here are some pointers:</p>
<ol>
<li>Minimize the number of 3rd party transitive dependencies &#8211; if reusing a module means bringing in 100 JARs, there are lots of opportunities for conflicting libraries build time and unanticipated runtime exceptions. I will elaborate specific strategies for this aspect in a separate post.</li>
<li>Carefully assess integration points in your environment &#8211; does your company already have a widely adopted library for concurrency, logging, alerting, or messaging? Then your reusable asset needs to facilitate or ease out of box integration. Most importantly, it shouldn&#8217;t attempt to provide the same capabilities</li>
<li>When providing overlapping capabilities you will have to convince the right set of folks that another API is necessary and there is a rationale for application teams to switch. Remember that the learning curve, integration effort, regression testing effort, and ongoing maintenance need to be factored into this decision</li>
<li>When you are not sure how an existing library in your organization works, descope integration and instead focus on the core value that is unique in your reusable asset. It is much simpler to bolt that on rather than invest in an integration mechanism that you cannot support well.</li>
<li>Boost developer productivity via IDE plugins, quick start project setup via Maven archetypes, or through code examples and automated tests. Regardless of what strategies you adopt the key is to demonstrate how easy it is to integrate your reusable asset with the rest of your enterprise.</li>
</ol>
<p>Do these resonate with reuse practices you follow or have seen in your team? What other practices can help achieve adoption objectives?</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/enterprise-integration/'>enterprise integration</a>, <a href='http://artofsoftwarereuse.com/tag/integration/'>integration</a>, <a href='http://artofsoftwarereuse.com/tag/library/'>library</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2737/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2737/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2737&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?a=-UmXm-SXgqM:6QcLuzARgbM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SoftwareReuseInTheRealWorld?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SoftwareReuseInTheRealWorld/~4/-UmXm-SXgqM" height="1" width="1"/>]]></content:encoded><description>Resuable software assets need to be created and evolved with two perspectives &amp;#8211; functional value and ease of integration. A library that offers little functional value and is difficult to integrate into an application is unlikely to get wide adoption.  Are there tips to balance these two perspectives? I think so and here are some [&amp;#8230;]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&amp;#038;blog=7058737&amp;#038;post=2737&amp;#038;subd=softwarereuse&amp;#038;ref=&amp;#038;feed=1" width="1" height="1" /&gt;</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://artofsoftwarereuse.com/2012/09/09/5-tips-to-ease-reusable-asset-integration/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://2.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content><feedburner:origLink>http://artofsoftwarereuse.com/2012/09/09/5-tips-to-ease-reusable-asset-integration/</feedburner:origLink></item></channel></rss>
