<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Art of Software Reuse &#187; refactoring</title>
	<atom:link href="http://artofsoftwarereuse.com/tag/refactoring/feed/" rel="self" type="application/rss+xml" />
	<link>http://artofsoftwarereuse.com</link>
	<description>Enabling Organizational Agility using Systematic Software Reuse</description>
	<lastBuildDate>Sun, 27 May 2012 03:44:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='artofsoftwarereuse.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/867ea3399412f403d50af9d95344fa89?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Art of Software Reuse &#187; refactoring</title>
		<link>http://artofsoftwarereuse.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://artofsoftwarereuse.com/osd.xml" title="Art of Software Reuse" />
	<atom:link rel='hub' href='http://artofsoftwarereuse.com/?pushpress=hub'/>
		<item>
		<title>Systematic Reuse Mythbuster #1 &#8211; Reusable Doesn&#8217;t Mean Perfection</title>
		<link>http://artofsoftwarereuse.com/2011/12/26/systematic-reuse-mythbuster-1-reusable-doesnt-mean-perfection/</link>
		<comments>http://artofsoftwarereuse.com/2011/12/26/systematic-reuse-mythbuster-1-reusable-doesnt-mean-perfection/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 08:48:18 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[domain modeling]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[mythbuster]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[reuse myth]]></category>
		<category><![CDATA[systematic reuse]]></category>
		<category><![CDATA[systematic software reuse]]></category>
		<category><![CDATA[variability]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2646</guid>
		<description><![CDATA[One common criticism against systematic software reuse is the myth that it implies perfection &#8211; creating a reusable asset automatically conjures up visions of a perfect design, something that is done once and done right.  Many developers and managers confuse reusability with design purity. However, reusability is a quality attribute like maintainability, scalability, or availability [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2646&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One common criticism against systematic software reuse is the myth that it implies perfection &#8211; creating a reusable asset automatically conjures up visions of a perfect design, something that is done once and done right.  Many developers and managers confuse reusability with design purity. However, reusability is a quality attribute like maintainability, scalability, or availability in a software solution. It isn&#8217;t necessary or advisable to pursue a generic design approach or what one believes is highly reusable without the right context.</p>
<p>The key is to go back to the basics of good design: identify what varies and encapsulate it.</p>
<p>The myth that you can somehow create this masterpiece that is infinitely reusable and should never be touched is just that &#8211; it is a myth and is divorced from reality. Reusable doesn&#8217;t imply:</p>
<ul>
<li>that you invest a lot in big up front design effort</li>
<li>you account for everything that will vary in the design &#8211; the critical factor is to understand the domain &#8211; well enough, deep enough, so you can identify the sub-set of variability that truly matters</li>
</ul>
<p>In the same vein, reusablility strives for separating concerns that should be kept distinct. Ask repeatedly:</p>
<ul>
<li>Are there multiple integration points accessing the core domain logic?</li>
<li>Is there a requirement to support more than one client and if so, how will multiple clients use the same interface?</li>
<li>What interfaces do your consumers need? is there a need to support more than one?</li>
<li>What are the common input parameters and what are those that vary across the consumer base?</li>
</ul>
<p>These are the key questions that will lead the designer to anticipate the appropriate places where reuse is likely to happen.  Finally, it is important that we don&#8217;t build for unknown needs in the future &#8211; so the asset is likely to solve a particular problem, solve it well, solve it for more than one or two consumers, and finally has potential to be used beyond the original intent. At each step there are design decisions made, discarded, continuous refactoring, refinements to the domain model &#8211; if not re-definition altogether.</p>
<p>Don&#8217;t set out trying to get to the end state or you will run the risk of adding needless complexity and significant schedule risk.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/domain-modeling/'>domain modeling</a>, <a href='http://artofsoftwarereuse.com/tag/interfaces/'>interfaces</a>, <a href='http://artofsoftwarereuse.com/tag/mythbuster/'>mythbuster</a>, <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/reuse-myth/'>reuse myth</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-reuse/'>systematic reuse</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-software-reuse/'>systematic software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/variability/'>variability</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2646/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2646/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2646/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2646&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2011/12/26/systematic-reuse-mythbuster-1-reusable-doesnt-mean-perfection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>9 Quick Tips to Reducing Technical Debt</title>
		<link>http://artofsoftwarereuse.com/2011/04/13/9-quick-tips-to-reducing-technical-debt/</link>
		<comments>http://artofsoftwarereuse.com/2011/04/13/9-quick-tips-to-reducing-technical-debt/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 02:26:24 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[domain driven design]]></category>
		<category><![CDATA[loose coupling]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[systematic software reuse]]></category>
		<category><![CDATA[technical debt]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2577</guid>
		<description><![CDATA[Wrote earlier about the importance of refactoring and continuous alignment within the context of systematic reuse effectiveness. Reducing technical debt is an integral aspect of refactoring. This post provides tips for reducing technical debt in your software assets: Minimize redundant definitions of key domain objects (i.e. competing, conflicting definitions of the same domain object across [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2577&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wrote earlier about the importance of refactoring and continuous alignment within the context of systematic reuse effectiveness. Reducing technical debt is an integral aspect of refactoring. This post provides tips for reducing technical debt in your software assets:</p>
<ol>
<li>Minimize redundant definitions of key <a href="http://artofsoftwarereuse.com/2009/10/16/systematic-reuse-success-factor-5-manage-domain-complexity/">domain objects</a> (i.e. competing, conflicting definitions of the same domain object across related applications)</li>
<li>Minimize similar solutions for slightly varying business processes and instead create common process flows</li>
<li>Loosen tightly coupled integration/transport logic with business logic</li>
<li>Provide consistent strategies for implementing <a href="http://artofsoftwarereuse.com/2010/08/29/using-spring-interceptors-to-reuse-functionality/">cross cutting concerns</a></li>
<li>Replace tactical implementation for a problem that has a better open-source alternative</li>
<li>Eliminate redundant approaches for managing configuration information</li>
<li>Harmonize multiple, incompatible interfaces and make them more domain relevant</li>
<li>Minimize excessive coupling with a particular technology/implementation stack</li>
<li>last but not the least &#8211; create a comprehensive suite of <a href="http://artofsoftwarereuse.com/2009/10/08/automated-tests-are-foundational-to-systematic-reuse/">automated tests</a></li>
</ol>
<p>Are there similar themes in your development efforts? What steps are you taking to ensure technical debt is addressed?</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/configuration/'>configuration</a>, <a href='http://artofsoftwarereuse.com/tag/domain-driven-design/'>domain driven design</a>, <a href='http://artofsoftwarereuse.com/tag/loose-coupling/'>loose coupling</a>, <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 href='http://artofsoftwarereuse.com/tag/technical-debt/'>technical debt</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2577/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2577&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2011/04/13/9-quick-tips-to-reducing-technical-debt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile Software Reuse Design Practices Primer</title>
		<link>http://artofsoftwarereuse.com/2011/03/05/agile-software-reuse-design-practices/</link>
		<comments>http://artofsoftwarereuse.com/2011/03/05/agile-software-reuse-design-practices/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 08:02:50 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[Reuse]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[design practices]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[practical]]></category>
		<category><![CDATA[practices]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[pragmatic reuse]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[systematic reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2571</guid>
		<description><![CDATA[Pursuing systematic reuse the agile way? This primer will cover a variety of design practices to help your development teams. It covers: Building reusable assets from existing applications Designing new reusable components and services Design patterns, product line practices, and more! Tagged: agile, design patterns, design practices, legacy, practical, practices, pragmatic, pragmatic reuse, refactoring, software [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2571&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:left;">Pursuing systematic reuse the agile way? This <a href="http://www.box.net/shared/kds46gv334" target="_blank">primer</a> will cover a variety of design practices to help your development teams. It covers:</p>
<p><a href="http://www.box.net/shared/kds46gv334" target="_blank"><img class="size-full wp-image-1614 alignright" title="Agile Software Reuse Design Practices" src="http://softwarereuse.files.wordpress.com/2009/10/pdf.jpg?w=450" alt=""   /></a></p>
<ul>
<li>Building reusable assets from existing applications</li>
<li>Designing new reusable components and services</li>
<li>Design patterns, product line practices, and more!</li>
</ul>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/design-patterns/'>design patterns</a>, <a href='http://artofsoftwarereuse.com/tag/design-practices/'>design practices</a>, <a href='http://artofsoftwarereuse.com/tag/legacy/'>legacy</a>, <a href='http://artofsoftwarereuse.com/tag/practical/'>practical</a>, <a href='http://artofsoftwarereuse.com/tag/practices/'>practices</a>, <a href='http://artofsoftwarereuse.com/tag/pragmatic/'>pragmatic</a>, <a href='http://artofsoftwarereuse.com/tag/pragmatic-reuse/'>pragmatic reuse</a>, <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-reuse/'>systematic reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2571/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2571&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2011/03/05/agile-software-reuse-design-practices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>

		<media:content url="http://softwarereuse.files.wordpress.com/2009/10/pdf.jpg" medium="image">
			<media:title type="html">Agile Software Reuse Design Practices</media:title>
		</media:content>
	</item>
		<item>
		<title>Domain Analysis Key To Systematic Reuse</title>
		<link>http://artofsoftwarereuse.com/2010/11/26/domain-analysis-key-to-systematic-reuse/</link>
		<comments>http://artofsoftwarereuse.com/2010/11/26/domain-analysis-key-to-systematic-reuse/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 11:19:39 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[domain modeling]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[systematic reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2518</guid>
		<description><![CDATA[Domain analysis is a foundational capability required for effective systematic reuse. Why? There are a lot of applications your teams are working on and the common theme among them most likely is the fact that they are in the same problem domain. In order to truly bring down cost of new applications and services, it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2518&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Domain analysis is a foundational capability required for effective systematic reuse. Why? There are a lot of applications your teams are working on and the common theme among them most likely is the fact that they are in the same problem domain. In order to truly bring down cost of new applications and services, it is critical that the <a href="http://artofsoftwarereuse.com/2009/10/10/systematic-reuse-success-factor-4-domain-context/">domain is understood</a> and modeled appropriately. Here are some specific strategies to make this idea operational:</p>
<ol>
<li>Account for domain analysis and modeling in your iteration planning. Domain analysis is necessary to understand the nuances and variation points that an application/service/process needs to realize. Discovering the right variations requires time and interactions with business stakeholders and subject matter experts.</li>
<li>Aspire for a core set of business object definitions that can be shared across business processes and service interfaces. Without appropriate data governance, domain knowledge will either be inaccurate/incomplete or worse duplicated in an inconsistent fashion. As the number of customer interfaces increase for your services, the domain inconsistencies will lead to greater point-to-point integrations and complexity.</li>
<li>Align overall architecture with domain variations. Your domain is rich and complex but probably varies in a known set of ways. Additionally, what varies isn&#8217;t uniform and the rate of change across these variations aren&#8217;t identical. This is significant because the variations in the domain need to be captured in your overall architecture. Products/applications in the domain need to share a common architecture &#8211; only then can components integrate and inter-operate and systematic reuse will take hold. Constantly evaluate the need for a new version of a core business entity and associated classes to manage the entity.</li>
<li>Refactor constantly to get to intention revealing design and code. As Eric Evans illustrates in <a href="http:/http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215" target="_blank">Domain Driven Design</a>, intention revealing code is easier to understand and evolve.  It also makes it easier to address new business requirements &#8211; as the design/implementation are closely aligned with the business domain, the quality of communication (referred to as <em>ubiquitous language</em>) and the ability to change it both increase significantly.</li>
</ol>
<p>This isn&#8217;t an exhaustive list &#8211; instead, it is meant to highlight the need for placing the domain in the middle of every design, architecture, and implementation decision your teams make.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/analysis/'>analysis</a>, <a href='http://artofsoftwarereuse.com/tag/domain/'>domain</a>, <a href='http://artofsoftwarereuse.com/tag/domain-modeling/'>domain modeling</a>, <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-reuse/'>systematic reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2518/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2518&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/11/26/domain-analysis-key-to-systematic-reuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Practicing Continuous Alignment &#8211; Examples</title>
		<link>http://artofsoftwarereuse.com/2010/09/05/practicing-continuous-alignment-examples/</link>
		<comments>http://artofsoftwarereuse.com/2010/09/05/practicing-continuous-alignment-examples/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 23:42:06 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[software reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2194</guid>
		<description><![CDATA[Received an email from a reader on the continuous alignment post and wanted additional examples. Practicing continuous alignment entails refactoring existing code to align assets better towards a reuse strategy. Here are a few scenarios where refactoring opportunities can be utilized: Horizontal logic mixed with app-specific logic: This is typically manifested in two flavors &#8211; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2194&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Received an email from a reader on the <a href="http://artofsoftwarereuse.com/2009/05/24/continously-align-your-software-assets-to-be-more-reusable/">continuous alignment</a> post and wanted additional examples. Practicing continuous alignment entails refactoring existing code to align assets better towards a reuse strategy.</p>
<p>Here are a few scenarios where refactoring opportunities can be utilized:</p>
<p><em>Horizontal logic mixed with app-specific logic: </em>This is typically manifested in two flavors &#8211; cross-cutting functionality that is horizontal across several applications or domain-specific functionality that is applicable to a product line. Cross cutting functionality such as authentication, logging, error handling etc. can be refactored from app-specific to distinct components.</p>
<p><em>Redundant definition of business objects: </em>maybe two or more of your projects are redefining a core concept from your problem domain and refactoring can help align them to a common definition. Once a common definition is used, add tasks into your iteration plans.</p>
<p><em>Manage application configuration: </em>If several applications use ad-hoc set of practices to manage runtime configurations (e.g. xml configurations, property files etc.), refactoring them to use a consistent strategy would certainly make sense. This refactoring can be done one component at a time if time constraints make it harder to transform an entire suite of components in the app.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2194/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2194&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/09/05/practicing-continuous-alignment-examples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Transforming Object to XML using Freemarker</title>
		<link>http://artofsoftwarereuse.com/2010/08/22/transforming-object-to-xml-using-freemarker/</link>
		<comments>http://artofsoftwarereuse.com/2010/08/22/transforming-object-to-xml-using-freemarker/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 02:00:08 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[freemarker]]></category>
		<category><![CDATA[object transformation]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[template engine]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2400</guid>
		<description><![CDATA[I wrote earlier about using open source software for fulfilling functionality prior to building a custom implementation. Many projects have the need to transform object to text or XML &#8211; e.g. return XML response for REST-based services or return JSON string to support a web application etc. Freemarker is a templating engine that can be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2400&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I wrote earlier about <a href="http://artofsoftwarereuse.com/2010/04/17/refactoring-to-reuse-5/">using open source software</a> for fulfilling functionality prior to building a custom implementation. Many projects have the need to transform object to text or XML &#8211; e.g. return XML response for REST-based services or return JSON string to support a web application etc.</p>
<p><a href="http://freemarker.sourceforge.net/">Freemarker </a>is a templating engine that can be leveraged to perform object to text transformations &#8211; with freemarker it is easy to generate RSS feeds or delimited text or plain old XML very easily. Below are some code fragments that illustrate freemarker usage:</p>
<p>Below is a code fragment for setting up the template configuration:</p>
<p><pre class="brush: plain;">
try {
	// Initialize configuration;
	cfg = new Configuration();
	cfg.setDirectoryForTemplateLoading(new File(templatesLocation));
	cfg.setTemplateUpdateDelay(0);
	cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
	//Use beans wrapper (recommmended for most applications)
	cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
	cfg.setDefaultEncoding(&quot;ISO-8859-1&quot;);
	//charset of the output
	cfg.setOutputEncoding(&quot;UTF-8&quot;);
	//default locale
	cfg.setLocale(Locale.US);

} catch (Exception e) {
	//handle the exception
}
</pre></p>
<p>The <em>templatesLocation </em>variable is the path to a folder with freemarker templates (referred to as FTL templates). These are similar to templates used with frameworks such as Velocity. For example, below is a template fragment:</p>
<p><pre class="brush: plain;">
&lt;Name&gt;${myBean.firstName?xml} ${myBean.lastName?xml}&lt;/Name&gt;
</pre></p>
<p>&#8220;myBean&#8221; is the java object that has first name and last name properties supported by JavaBeans style getXYZ() methods. The ?xml built-in function is used to encode any special XML characters.</p>
<p>Below is the code fragment when trying to invoke a template with a java object:</p>
<p><pre class="brush: plain;">
// loading the template file
Template template = //get template from a map
Writer out = new StringWriter();
template.process(dataObject, out);
String strResponse = out.toString();
</pre></p>
<p>The above code fragment essentially takes a java object (dataObject) as input and creates a string as output. Using the template above, the output for example could be:</p>
<p><pre class="brush: plain;">&lt;Name&gt;John Smith&lt;/Name&gt;</pre></p>
<p>Freemarker also supports loops and conditions and offers a <a href="http://freemarker.sourceforge.net/docs/ref.html" target="_blank">rich library of built-in functions</a> as well.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/freemarker/'>freemarker</a>, <a href='http://artofsoftwarereuse.com/tag/object-transformation/'>object transformation</a>, <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/template-engine/'>template engine</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2400/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2400/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2400&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/08/22/transforming-object-to-xml-using-freemarker/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>In a hurry to decide if something is reusable?</title>
		<link>http://artofsoftwarereuse.com/2010/08/15/in-a-hurry-to-decide-if-something-is-reusable/</link>
		<comments>http://artofsoftwarereuse.com/2010/08/15/in-a-hurry-to-decide-if-something-is-reusable/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 21:05:31 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[Reuse]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Asset]]></category>
		<category><![CDATA[code generation]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software investment]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2376</guid>
		<description><![CDATA[I have heard some variation of the following line from developers, technical leads, and architects &#8211; &#8220;we want to make things more reusable, but we don&#8217;t have the time.&#8221; There is always a deadline (or many deadlines) to meet and technical debt to accumulate. Since we are always in a hurry, it helps to be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2376&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have heard some variation of the following line from developers, technical leads, and architects &#8211; &#8220;we want to make things more reusable, <em>but </em>we don&#8217;t have the time.&#8221;</p>
<p>There is always a deadline (or many deadlines) to meet and technical debt to accumulate. Since we are always in a hurry, it helps to be aware of what should be reusable &#8211; even if we won&#8217;t get to it in this iteration . So here are some ideas that can help you decide whether or not a capability should be developed for reuse:</p>
<ul>
<li>is the capability <em>unique </em>to your enterprise? i.e. it captures logic and/or process variations that provide competitive differentiation.</li>
<li>is the capability making something incredibly hard/defect prone simpler and/or easier?</li>
<li>is there a desire for customers to have a capability across business channels? i.e. from the web, from a mobile device etc.</li>
<li>is it specific to your domain and potentially relevant to multiple applications in the domain? this may or may not be obvious &#8211; if it isn&#8217;t, <a href="http://artofsoftwarereuse.com/2009/03/27/not-sure-if-something-is-reusable-delay-the-decision/">delay commitment</a>.</li>
<li>is the capability only available in a particular technical platform but is solving  an often needed problem?</li>
<li>is it automating boiler plate code generation or preventing defects?</li>
<li>is there an in-house/external alternative that achieves your functional requirements? if so, seriously consider stopping investment in the asset.</li>
</ul>
<p>This is a starter list &#8211; the idea that we keep coming back to is this &#8211; treat a reusable asset like a real investment. Every iteration and release is an opportunity to review and update the investment. When you make a decision, <a href="http://artofsoftwarereuse.com/2010/04/10/continuous-refactoring-is-a-wise-investment/">continuously refactor</a> to make the capabilities less app specific and reusable.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/asset/'>Asset</a>, <a href='http://artofsoftwarereuse.com/tag/code-generation/'>code generation</a>, <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/software-investment/'>software investment</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a>, <a href='http://artofsoftwarereuse.com/tag/strategy/'>strategy</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2376/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2376&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/08/15/in-a-hurry-to-decide-if-something-is-reusable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Systematic Reuse Success Factor #11 &#8211; Code Reviews</title>
		<link>http://artofsoftwarereuse.com/2010/07/14/systematic-reuse-success-factor-11-code-reviews/</link>
		<comments>http://artofsoftwarereuse.com/2010/07/14/systematic-reuse-success-factor-11-code-reviews/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 02:55:46 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[Reuse]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[code reviews]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software reuse]]></category>
		<category><![CDATA[success factor]]></category>
		<category><![CDATA[systematic reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2324</guid>
		<description><![CDATA[Code reviews can be extremely effective driving systematic reuse. To be sure, there are multiple objectives with code reviews (e.g. adhering to naming standards, detect defect, write consistent comments, etc.). Additionally, they can help with reuse in the following ways: Reviews happen prior to code being placed in production &#8211; they give you a chance [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2324&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Code reviews can be extremely effective driving systematic reuse. To be sure, there are multiple objectives with code reviews (e.g. adhering to naming standards, detect defect, write consistent comments, etc.). Additionally, they can help with reuse in the following ways:</p>
<ul>
<li>Reviews happen prior to code being placed in production &#8211; they give you a chance to extract, build, or integrate reusable assets.</li>
<li>Code reviews often identify opportunities to refactor &#8211; refactoring to reuse. Have you ever had a review where someone said, &#8220;you know what, you should talk to Joe, since he is building a similar thing&#8230;&#8221; or &#8220;&#8230;we should use the existing service for implementing this story.&#8221;</li>
<li>Reviews help discover reusable assets &#8211; you might include classes and interfaces (not necessarily neatly demarcated) &#8211; in a component that can really be split up into two or more components. It may be appropriate to slice up the logic to ensure the existing component isn&#8217;t too monolithic</li>
<li>Reviews are very effective in preventing defects &#8211; with reusable assets, quality is everything and the act of reviewing them is critical to their stability and production-readiness. These can be extended to unit tests and documentation as well.</li>
<li>Reviews are a neat opportunity to communicate to at least a sub-set of the team what reusable assets exist and how they can be leveraged. Often times, when assets are mentioned as-is, they may not be that well received. Place them within the context of a real project, a real deliverable, and a tangible need &#8211; now the communication is much more effective.</li>
</ul>
<p>As more developers pitch in and learn from each other, the reviews will become a critical part of how you develop and evolve reusable assets.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/code-reviews/'>code reviews</a>, <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/success-factor/'>success factor</a>, <a href='http://artofsoftwarereuse.com/tag/systematic-reuse/'>systematic reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2324/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2324&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/07/14/systematic-reuse-success-factor-11-code-reviews/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Build for Use, then Refactor to Reuse</title>
		<link>http://artofsoftwarereuse.com/2010/07/11/build-for-use-then-refactor-to-reuse/</link>
		<comments>http://artofsoftwarereuse.com/2010/07/11/build-for-use-then-refactor-to-reuse/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 00:46:36 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[refactoring]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[software reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=1348</guid>
		<description><![CDATA[You want to build reusable assets in an agile manner &#8211; avoiding a significant design effort upfront and evolving behavior over time.  Why? Because building for reuse involves several steps: the right abstractions have to be identified, appropriate variations have to be modeled and accounted for, and the asset has to be generic enough for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=1348&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You want to build reusable assets in an agile manner &#8211; avoiding a significant design effort upfront and evolving behavior over time.  Why? Because building for reuse involves several steps: the right abstractions have to be identified, appropriate variations have to be modeled and accounted for, and the asset has to be generic enough for use beyond a single project.</p>
<p>This is hard to get right the first time &#8211; often, business requirements aren&#8217;t clear from the early on making it tricky to identify reusable assets. More importantly, reuse adds project risk &#8211; specifically risk to the timeline. Always ask yourself if it is worth making the extra investment &#8211; if you aren&#8217;t sure <a href="http://artofsoftwarereuse.com/2009/03/27/not-sure-if-something-is-reusable-delay-the-decision/">delay commitment</a>.</p>
<p>Capture possible enhancements to your codebase via an issue tracking tool and you can always assign those enhancements to future iterations. When you implement a story and you see the opportunity for making something reusable, consciously align classes and interfaces for reuse. Refactor, refactor, and <a href="http://artofsoftwarereuse.com/2010/04/10/continuous-refactoring-is-a-wise-investment/">keep refactoring</a> &#8211; because only with multiple iterations is your asset going to be increase it&#8217;s reuse potential. Remember &#8211; very often, the asset would not be used as-is. It will need changes &#8211; patches, enhancements, major redesign even &#8211; before it can be leveraged across projects.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/agile/'>agile</a>, <a href='http://artofsoftwarereuse.com/tag/interfaces/'>interfaces</a>, <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/1348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/1348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/1348/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=1348&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/07/11/build-for-use-then-refactor-to-reuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
		<item>
		<title>Evaluating Existing Assets for Reuse Potential</title>
		<link>http://artofsoftwarereuse.com/2010/04/25/evaluating-existing-assets-for-reuse-potential/</link>
		<comments>http://artofsoftwarereuse.com/2010/04/25/evaluating-existing-assets-for-reuse-potential/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 13:09:46 +0000</pubDate>
		<dc:creator>vijaynarayanan</dc:creator>
				<category><![CDATA[Planning]]></category>
		<category><![CDATA[Reuse]]></category>
		<category><![CDATA[business rules]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[legacy assets]]></category>
		<category><![CDATA[loose coupling]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software reuse]]></category>

		<guid isPermaLink="false">http://artofsoftwarereuse.com/?p=2292</guid>
		<description><![CDATA[One of the often-repeated reasons for not starting a reuse program is the upfront investment required for building the initial set of reusable assets. This is a legitimate impediment that can be addressed by taking advantage of existing code in your team. When you evaluate existing assets for their reuse potential, there are a lot [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2292&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the often-repeated reasons for not starting a reuse program is the upfront investment required for building the initial set of reusable assets. This is a legitimate impediment that can be addressed by taking advantage of existing code in your team. When you evaluate existing assets for their reuse potential, there are a lot of factors to consider. Here are a few salient ones:</p>
<ul>
<li><strong>Fit within product line</strong>: is the asset of relevance to one or more applications in your domain? You want to invest in assets that encapsulate business functionality that can be utilized in multiple business processes and applications. Similarly, if there are assets with business relevance but in a area that your organization intends to divest out of &#8211; you will be less inclined to use them.</li>
<li><strong>Coupling</strong>: How tightly or loosely coupled are the pieces within an asset? sometimes the asset itself might be mixed in &#8211; tightly coupled &#8211; with a lot of extraneous code. Business logic might be mixed with data access, presentation, and even specific calls to external systems. Every one of these aspects introduces coupling that will need to be assessed thoroughly.</li>
<li><strong>Integration</strong>: what is the effort required to integrate the reusable asset with applications? The asset might be very difficult to integrate because of platform specific requirements or because of language needs.</li>
<li><strong>Business Assumptions</strong>: are there assumptions that the asset makes about business rules or business activities? if so, are these assumptions still relevant? will the rules need externalization/refactoring? Often, business assumptions are lost due to lack of alignment between business concepts and abstractions in code.</li>
</ul>
<p>In a followup post, I will elaborate on robustness, scalability, deployment, documentation &amp; samples. Without thinking through these aspects it is risky to introduce new assets for reuse. You will quickly discover that your consumers are unforgiving when it comes to asset quality. Additionally, a huge learning curve will drive away potential and existing developers and technical leads from evaluating assets for use with new applications.</p>
<br /> Tagged: <a href='http://artofsoftwarereuse.com/tag/business-rules/'>business rules</a>, <a href='http://artofsoftwarereuse.com/tag/integration/'>integration</a>, <a href='http://artofsoftwarereuse.com/tag/legacy-assets/'>legacy assets</a>, <a href='http://artofsoftwarereuse.com/tag/loose-coupling/'>loose coupling</a>, <a href='http://artofsoftwarereuse.com/tag/refactoring/'>refactoring</a>, <a href='http://artofsoftwarereuse.com/tag/software-reuse/'>software reuse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwarereuse.wordpress.com/2292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwarereuse.wordpress.com/2292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwarereuse.wordpress.com/2292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=artofsoftwarereuse.com&#038;blog=7058737&#038;post=2292&#038;subd=softwarereuse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://artofsoftwarereuse.com/2010/04/25/evaluating-existing-assets-for-reuse-potential/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/edf4a0cc88a15552fecbf78099c790ac?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vijay</media:title>
		</media:content>
	</item>
	</channel>
</rss>
