<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thinking in G &#187; Code Reuse</title>
	<atom:link href="http://thinkinging.com/category/code-reuse/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinging.com</link>
	<description>an unfiltered stream of data flow consciousness</description>
	<lastBuildDate>Fri, 02 Oct 2009 23:51:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Knock out some reusable code in between projects.</title>
		<link>http://thinkinging.com/2008/11/01/knock-out-some-reusable-code-in-between-projects/</link>
		<comments>http://thinkinging.com/2008/11/01/knock-out-some-reusable-code-in-between-projects/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 17:26:53 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[VIPM]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=652</guid>
		<description><![CDATA[One great way to make the most of your time between projects is to work on your reusable code library.  You aren&#8217;t under the gun to finish a huge project, and you have some &#8220;free&#8221; time that&#8217;s not billable.  So, why not spend that time working on your reusable code?
You&#8217;ve probably created lots of reusable [...]]]></description>
			<content:encoded><![CDATA[<p>One great way to make the most of your time between projects is to work on your reusable code library.  You aren&#8217;t under the gun to finish a huge project, and you have some &#8220;free&#8221; time that&#8217;s not billable.  So, why not spend that time working on your reusable code?</p>
<p>You&#8217;ve probably created lots of <a href="http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/">reusable gems</a> in your past projects that just needs to be polished up a bit.  Now is a great time to dig these up, improve them, organize them into a reuse library, and then use <a href="http://jkisoft.com/vipm/">VIPM Professional</a> to convert your reuse library into VI Packages.</p>
<p>The truth is, just because your time right now isn&#8217;t billable to customer projects, it doesn&#8217;t mean that you can&#8217;t profit from this &#8220;free&#8221; time later &#8212; if you&#8217;re working on reusable code that you can use in future projects, those future projects will get done faster and with higher quality by leveraging your reusable code.</p>
<p>Great companies work hard through slow downs, training for the moment that the starting bell rings, signaling the start of the next round.  Then, they come out strong and ready to scrap.  If you think a slow down at work is a good time to go on vacation, then you&#8217;re the one whose going to get knocked out by the competition.</p>
<p><img class="aligncenter size-medium wp-image-657" title="speedbag" src="http://thinkinging.com/wp-content/uploads/2008/11/speedbag.jpg" alt="" width="433" height="293" /></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/11/01/knock-out-some-reusable-code-in-between-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The JKI State Machine makes its public debut</title>
		<link>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/</link>
		<comments>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 06:50:31 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=624</guid>
		<description><![CDATA[I&#8217;m very happy to announce that JKI has released the JKI State Machine™ to the public as a free download.  This is the very same template that is used by the JKI team, nearly every day, in our products and various projects.

This tool is the direct result of putting some of the best LabVIEW minds [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very happy to announce that JKI has released the <a href="http://jkisoft.com/state-machine/">JKI State Machine</a>™ to the public as a free download.  This is the very <span style="font-weight: bold;">same template that is used by the JKI team</span>, nearly every day, in our products and various projects.</p>
<p><img class="aligncenter" title="JKI State Machine palette" src="http://jkisoft.com/state-machine/docs/JKI_State-Machine_Palette.png" alt="" width="174" height="114" /></p>
<p>This tool is the direct result of putting some of the best LabVIEW minds together for several years, tasked with the challenge of creating a LabVIEW architectural design pattern that would allow easy coding, readability, and maintenance.  As you might imagine the JKI team has created something truly special that we hope will have a significant impact on LabVIEW users everywhere.</p>
<p>This has been in the works for quite some time and we&#8217;re excited that the time has finally come to share this tool with you, now.</p>
<p>Please take this challenge:</p>
<ol>
<li><a href="http://jkisoft.com/state-machine/download/">Download and install</a> the JKI State Machine.</li>
<li>Watch this great <a href="http://forums.jkisoft.com/index.php?showforum=49">video tutorial</a>.</li>
<li>Take a look at how we <a href="http://forums.jkisoft.com/index.php?showtopic=892">refactored the 3-button dialog</a> (VI that ships with LabVIEW) using the JKI State Machine.</li>
<li><a href="http://forums.jkisoft.com/index.php?showforum=46">Tell us what you think</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/10/13/the-jki-state-machine-makes-its-public-debut/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Planning for software reuse is easy &#8212; mining is hard</title>
		<link>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/</link>
		<comments>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 17:17:23 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LabVIEW Tips]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/?p=574</guid>
		<description><![CDATA[One of the best places to find reusable code is in your old projects.  However, &#8220;mining&#8221; your old projects for &#8220;reuse gems&#8221; (sorting through every VI, looking for sparkly little gems of general-purpose code that have immense value) is simply not an effective use of time or energy.

For example, if you were a miner looking [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">One of the best places to find reusable code is in your old projects.  However, <strong>&#8220;mining&#8221; your old projects for &#8220;reuse gems&#8221;</strong> (sorting through every VI, looking for sparkly little gems of general-purpose code that have immense value) <strong>is simply not an effective use of time or energy</strong>.</p>
<p class="MsoNormal" style="text-align: center;"><img class="aligncenter size-full wp-image-576" title="diamonds" src="http://thinkinging.com/wp-content/uploads/2008/09/diamonds.jpg" alt="" width="400" height="211" /></p>
<p class="MsoNormal">For example, if you were a miner looking for precious minerals, you would wouldn’t roam the countryside digging random holes in the ground.  Rather, you would work smart &#8212; you would <strong>try to identify a geographic location with a very high natural concentration of precious minerals</strong> (based on a variety of clues).  Guess what?  This is exactly how you should mine for reusable code in your past projects.  But, where do you start looking and what are the clues that will lead you to those reuse gems?</p>
<p class="MsoNormal"><strong>Here&#8217;s the secret</strong>:</p>
<blockquote>
<p class="MsoNormal"><em>While writing code, when you identify that you are writing a VI that is generic and has the potential to be reused, save it inside a sub-folder of your project folder called &#8220;Reusable VIs&#8221;.</em></p>
</blockquote>
<p class="MsoNormal">If you adhere to this strategy, it will be very easy for you to come back later and find your reuse gems.  And, before you know it, you will have what resembles a reuse library.  Best of all, you didn&#8217;t even have to get your hands too dirty.</p>
<p class="MsoNormal"><em>Note: As your reuse library grows (which it will if you use the planning techniques described above), you&#8217;ll need to start thinking about how to utilize your reuse library on multiple projects and share these VIs with other developers.  Make sure you don&#8217;t get stuck in the <a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/">pitfalls of a monolithic reuse library</a> caused by copying your reuse library from project to project or by using the same version of your reuse library on each project.  Create a <a href="http://jkisoft.com/vipm/guide/">VI Package</a> and install your reuse library in your palettes using <a href="http://jkisoft.com/vipm/">VIPM</a> &#8212; it&#8217;s easy and simple. </em></p>
<p class="MsoNormal">I&#8217;d love to hear your feedback, so please feel free to leave a comment.  For example:</p>
<ul>
<li>Do you have a folder in your project where you put new, reusable VIs?</li>
<li>Do you think that this is a good idea, or do you have a better strategy?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/09/17/planning-for-software-reuse-is-easy-mining-is-hard/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Top 5 signs you&#8217;ve lost control of your reusable VIs</title>
		<link>http://thinkinging.com/2008/07/11/top-5-signs-youve-lost-control-of-your-reusable-vis/</link>
		<comments>http://thinkinging.com/2008/07/11/top-5-signs-youve-lost-control-of-your-reusable-vis/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 07:00:06 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/07/11/top-5-signs-youve-lost-control-of-your-reusable-vis/</guid>
		<description><![CDATA[Top 5 signs you&#8217;re not in control of your reusable VIs.
# 5 &#8211; You (and your team) aren&#8217;t using the reuse library.
You used to have big plans for your reusable VIs.  You organized them.  You had meetings to review them.  You assigned someone the job to clean them up and create a great big library for everyone [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Top 5 signs you&#8217;re not in control of your reusable VIs.</strong></p>
<p style="font-weight: bold;"><strong><img style="width: 159px; height: 230px; float: right;" src="http://thinkinging.com/wp-content/uploads/2008/07/tires_small.jpg" alt="" hspace="10" /></strong># 5 &#8211; You (and your team) aren&#8217;t using the reuse library.</p>
<p><span style="font-weight: normal;">You used to have big plans for your reusable VIs.  You organized them.  You had meetings to review them.  You assigned someone the job to <span style="font-style: italic;">clean them up</span> and create <a href="http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/">a great big library for everyone to share</a>.  But, that was years ago and, after an initial burst, progress and interest tapered off</span><span style="font-weight: normal;">. You realized that reusable VIs were either too much trouble to find or too much work to maintain.  You&#8217;re not really sure what went wrong, but something did go wrong because your reusable VIs (and all the effort that was put into them) aren&#8217;t being reused.</span></p>
<p><span style="font-weight: bold;"># 4 &#8211; You haven&#8217;t added new VIs to your reuse library in years.</span><br style="font-weight: bold;" /></p>
<p>Something killed the fun and/or productivity gain you thought would be realized when you started your reuse library.  You&#8217;re not really sure what it is, but you know that it&#8217;s just too much work to reuse VIs.  Sure, you&#8217;re reusing a VI here and there, but <a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/">your grand reuse library isn&#8217;t really growing</a> &#8212; it&#8217;s just too much work add new VIs to it.</p>
<p><span style="font-weight: bold;">#3  - You&#8217;re missing VIs when you open your project and palettes.</span><br style="font-weight: bold;" /><br />
You write a great reusable VI for project A, so you copy it over to project B.  Then, you find and fix a bug in a reusable VI while working on B, so you copy the fixed VI over to project A.  When you try to open your project after copying your reusable VIs, you&#8217;re missing some important subVIs.  Or, maybe they are <a href="http://thinkinging.com/2008/06/16/customizing-the-labview-palettes-is-ridiculously-hard/">missing from your LabVIEW palettes</a> after you spent hours getting the palettes just the way you like them.  You spend <span style="font-style: italic;">even more</span> hours trying to find the missing VIs and put all the pieces back together.  In the time you spend, you might as well have just rewritten the VIs from scratch.</p>
<p><span style="font-weight: bold;">#2 -  You have multiple copies of your reusable VIs in several projects, but they&#8217;re all slightly different.</span><br style="font-weight: bold;" /><br />
When projects are started you always grab the latest and greatest version of your reuse library.  Why wouldn&#8217;t you?  Then, as you work on your project, you find and fix a few bugs, and add a few useful VI inputs and features.  Like most people you tend to work on one or two main projects at a time and do occasional maintenance on a handful of others.  But, when you&#8217;re working on a project you&#8217;re more focused on getting the job done, than you are in making sure that your &#8220;main reuse library&#8221; gets updated (or that the copies of it in various projects are kept in sync).  As a result, each project has a slightly different copy of your reuse library.  In fact, you might have even fixed the same bug multiple times in different projects.  And, you&#8217;re not really sure which projects have the fix and which ones still have the bug.</p>
<div style="text-align: center;"><span style="font-weight: bold; font-style: italic;">And, the #1 </span><strong style="font-weight: bold; font-style: italic;">sign you&#8217;re not in control of your reusable VIs&#8230;</strong></div>
<p><strong style="font-weight: bold; font-style: italic;"></strong></p>
<p><strong style="font-weight: bold; font-style: italic;"></strong></p>
<div style="text-align: center;"><span style="font-weight: bold;"><img style="width: 81px; height: 95px;" src="http://thinkinging.com/wp-content/uploads/2008/07/wheel_small.jpg" alt="" hspace="10" align="middle" /></span><span style="font-weight: bold;"><img style="width: 81px; height: 95px;" src="http://thinkinging.com/wp-content/uploads/2008/07/wheel_small.jpg" alt="" hspace="10" align="middle" /></span><span style="font-weight: bold;"><img style="width: 81px; height: 95px;" src="http://thinkinging.com/wp-content/uploads/2008/07/wheel_small.jpg" alt="" hspace="10" align="middle" /></span><span style="font-weight: bold;"><img style="width: 81px; height: 95px;" src="http://thinkinging.com/wp-content/uploads/2008/07/wheel_small.jpg" alt="" hspace="10" align="middle" /></span><span style="font-weight: bold;"><img style="width: 81px; height: 95px;" src="http://thinkinging.com/wp-content/uploads/2008/07/wheel_small.jpg" alt="" hspace="10" align="middle" /></span></div>
<div style="text-align: center;"><span style="font-weight: bold;"><br />
</span></div>
<p><span style="font-weight: bold;">1) You&#8217;ve rewritten the same VI over a dozen times!!!</span><br style="font-weight: bold;" /><br />
You have had ambitions to create a reusable VI library, but you never really got around to it (or, you&#8217;ve tried and not gotten very far). It&#8217;s way easier to just rewrite that VI than to find the one that you already wrote, because you have no idea where that other one is.  But, you&#8217;re rewritten that same VI at least a dozen times and it&#8217;s driving you crazy.  You&#8217;ve just about had it. You wonder, &#8220;I&#8217;m an engineer, so why you keep reinventing the same wheel?&#8221;</p>
<p><span style="font-weight: bold;">So what now? Should you give up on the idea of reusable VIs?</span><br style="font-weight: bold;" /><br />
Of course, we should not give up.  One great solution is <a href="http://jkisoft.com/vipm/">VI Package Manager</a>.  Stay tuned for my follow-up article <span style="font-weight: bold;">The 5 steps to take control of your reusable VI library</span> where I&#8217;ll tell you everything you need to know to regain control.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/07/11/top-5-signs-youve-lost-control-of-your-reusable-vis/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Monolithic vs. Modular Software Reuse Libraries (Part II)</title>
		<link>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/</link>
		<comments>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 04:15:59 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[VIPM]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/</guid>
		<description><![CDATA[ 

 

In part
I of this series, we discussed
the benefits of the monolithic
reuse library.  These benefits make it a very attractive
solution in the early
stages of a reuse library's evolution. 
Most of these
benefits are a result of the fact that there is a single unit, which is
easy to distribute, version control, and manage.
 
 

However, a monolithic reuse library can quickly become [...]]]></description>
			<content:encoded><![CDATA[ 

 

In <a href="http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/">part
I</a> of this series, we discussed
the benefits of the monolithic
reuse library.  These benefits make it a very attractive
solution in the <span style="font-style: italic;">early</span>
stages of a reuse library's evolution. 
Most of these
benefits are a result of the fact that there is a single unit, which is
easy to distribute, version control, and manage.
<div style="text-align: center;"><img style="width: 400px; height: 118px;" src="http://thinkinging.com/wp-content/uploads/2008/06/iStock_000005356096XSmall.jpg" alt="Monoliths" /> </div>
 

However, a monolithic reuse library can quickly become a victim of its
own success -- the more you use it (on various projects) and improve it
(by adding new components and fixing bugs), the more effort that is
consumed in maintaining and improving it.  Let me explain:
<h3 style="font-weight: bold;">The slow death of the
monolithic reuse library</h3>
A <strong>
monolithic reuse
library
</strong>is one where <em>
all components of the library are released at the
same time as a single unit</em>. 

There are two main problems with monolithic reuse libraries:
<ul>
	<li><span style="font-weight: bold;">As
the monolithic library grows large in size, it
becomes hard to distribute</span> -- it consumes large amounts of
disk space and network bandwidth</li>
	<li><span style="font-weight: bold;">Users must
choose a single version of the entire monolithic library for use in
their projects</span> -- it's all or nothing </li>
</ul>
These two issues inevitably drive users of the reuse library to do the
following:
<ul>
	<li><span style="font-weight: bold;">Users fork
the reuse library</span> -- Users make a copy of the library
locally in their project and modify it.  They possibly only
copy subsets of the reuse library, breaking the monolith.</li>
	<li><span style="font-weight: bold;">Users stop
upgrading to newer versions of the reuse library</span> -- Users
forever stick with an out-of-date, stagnant version of the reuse
library, even though they might be able to take advantage of
improvements made to some parts of the library.  The cost of
upgrading, due to the possibility of breaking code is not worth the
possible benefits of the new features and fixes.</li>
</ul>
The end result is that the reuse library suffers from one of two fates:
<ul>
	<li><span style="font-weight: bold;">Improvements
to the library stop</span>, because nobody ever upgrades to newer
versions of the library.</li>
	<li><span style="font-weight: bold;">Improvements
to the library happen in project forks</span>.  Either
these changes never make their way into the main reuse library
or are copied between projects adding tremendous uncertainty and
ambiguity as to which versions of library components are being used.</li>
</ul>
Either way, once these fates have been realized, the effectiveness of
the reuse library has plateaued.  The effort to use and
contribute to the library begins to outweigh the benefit, and this is
when the monolithic reuse library dies from neglect, frozen in time.
<h3><span style="font-weight: bold;">Enter the
modular reuse library</span></h3>
The <strong>
modular reuse
library
</strong>is one where <em>
several
individual libraries are released at different times, independently as
separate
and distinct units</em>.

One of the primary benefits of a modular reuse library is that <span style="font-style: italic;">users can choose which versions
of each component they want, independently</span>.  This
provides the following benefits:
<ul>
	<li> 
<ul>
	<li>downloads are faster and less project disk space is
consumed</li>
	<li>upgrades can be done on a per-component basis, minimizing
the risk of upgrades and the amount of testing required to re-validate
code</li>
</ul>
</li>
</ul>
However, there are some challenges to having a modular reuse
library that stem from the fact that there are several individual
components:
<ul>
	<li><span style="font-weight: bold;">there are
more software products for library developers to manage</span>
-- each has its own life-cycle</li>
	<li><span style="font-weight: bold;">there are
more components for users to obtain</span> -- these have to be
found and downloaded, and if one component depends other components,
these have to be identified and obtained, too </li>
</ul>
The good news is that these challenges can be automated using software
development tools.
<h3><span style="font-weight: bold;">VIPM 2.0, a
modular reuse library development tool for LabVIEW</span></h3>
As you might know <a href="http://jkisoft.com/vipm/">VI
Package Manager</a> is a tool for installing the <a href="http://openg.org">OpenG</a> (modular) reuse
libraries.  I'm happy to tell you that JKI has just <a href="http://forums.jkisoft.com/index.php?showtopic=673">announced
the alpha program for VI Package Manager 2.0</a> and, in
doing so, we have taken on the challenge of delivering <span style="font-weight: bold;">the ultimate developer tool for
software reuse in LabVIEW</span>.  We want to help
LabVIEW developers everywhere realize the true potential of reusing
their existing software by hiding the complexity of managing
multiple independent components.

Granted, these are bold ambitions.  In some upcoming articles,
I'll discuss more about the challenges of developing a modular reuse
library in LabVIEW and how VIPM 2.0 is going to help solve them.
 Oh, and if you're facing challenges with software reuse in
LabVIEW, please consider <a href="http://jkisoft.com/beta/vipm/">applying to our alpha
program</a> -- we could certainly user your feedback.]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Monolithic vs. Modular Software Reuse Libraries (Part I)</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/</link>
		<comments>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 17:50:15 +0000</pubDate>
		<dc:creator>Jim Kring</dc:creator>
				<category><![CDATA[Code Reuse]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/</guid>
		<description><![CDATA[
If you’ve gotten
past the horrendously boring title of this article, you probably know a
little bit about
software reuse libraries.
 
You probably
even contribute to a software reuse library (a personal reuse library
or one belonging to your organization).
 
So, I
won’t go into the benefits of code reuse and the pitfalls of
reinventing the
wheel -- I’ll jump right in and get to [...]]]></description>
			<content:encoded><![CDATA[<span>
If you’ve gotten
past the horrendously boring title of this article, you probably know a
little bit about
software reuse libraries.
<span> 
</span>You probably
even contribute to a software reuse library (a personal reuse library
or one belonging to your organization).
<span> 
</span>So, I
won’t go into the benefits of code reuse and the pitfalls of
reinventing the
wheel -- I’ll jump right in and get to the meat of the
matter.
<span> 
</span>Let’s consider two strategies for managing a
software reuse library.
</span>
<h3 style="font-weight: bold;"><span>Monolithic
vs. Modular Reuse
Libraries</span></h3>
A <strong>
monolithic reuse
library
</strong>is one where <em>
all components of the library are released at the
same time as a single unit</em>. 

A <strong>
modular reuse
library
</strong>is one where <em>
several
individual libraries are released at different times, independently as
separate
and distinct units</em>.

For example,
LabVIEW ships with a monolithic reuse library
called <strong>
vi.lib
</strong>, the built-in library
of
VIs
found beneath the <span>
&lt;LabVIEW&gt;\vi.lib
</span>folder.
<span> 
</span>These
VIs
are
all kept under the same revision and release cycle as LabVIEW, itself.
You'll only get new versions of these
w:st="on"&gt;
VIs
when
LabVIEW itself is released -- it's monolithic, all or nothing.

National
Instruments (the makers of LabVIEW) also sells
modular libraries, such as the LabVIEW add-on toolkits.
<span> 
</span>These libraries each have their own version,
different from LabVIEW’s, and are installed separately.
<span> 
</span>These add-on libraries have dependencies on
vi.lib
VIs
, but rarely have dependencies on
other add-ons.<strong>

zid="101"&gt;
</strong>
<h3><span><img alt="" />
src="http://thinkinging.com/wp-content/uploads/2008/02/el_cap.png"
style="padding-top: 10px;" align="right" border="0"
hspace="4" vspace="0"&gt;</span>
zid="34"&gt;<span style="font-weight: bold;">
Monolithic wins the short
race</span><strong>
</strong></h3>
<span>
zid="84"&gt;
</span>Most LabVIEW developers and teams
find that <em>
the overhead of the modular reuse library is
a show-stopper
</em>, right out of the gate.
<span> 
</span>It’s too much work compared to the much-simpler
monolithic reuse
library, which can be developed and deployed as a single unit.<span>
zid="43"&gt; </span>

zid="105"&gt;

The monolithic reuse library is alluring, because it’s:
zid="48"&gt; 
<ul style="margin-top: 0in;" type="disc">
	<li>easy
to distribute – it might be delivered as a single ZIP file,
or a checkout
from source code control.</li>
	<li>easy
to keep track of which version you have – there is a single
version number
for the entire reuse library (perhaps a date stamp)</li>
	<li>easy
to manage, since there are no external dependencies – every
VI that you
need is kept within the reuse library, so users will never have missing
VIs.
zid="55"&gt;</li>
</ul>
<h3><span style="font-weight: bold;">
But, there are scalability
concerns</span><strong></strong></h3>
After the monolithic reuse system is up and
running, several
problems loom on the horizon that will slow down progress.
<span> 
</span>Soon, the reuse system might become a victim
of its own success and get harder and harder to maintain as the
code-base grows.
<h3><span style="font-weight: bold;">The solution is
a modular system</span><strong></strong></h3>
The solution to the
scalability issues (number of
developers, number of project, number of reuse
w:st="on"&gt;
VIs
)
is to make the reuse library modular.
<span> 
</span>The only other option is to stop improving the reuse
library – but, we
can’t do that, of course. 

In <a>
href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/"&gt;part
II</a> of this series, I talk about the specific
<a>
href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/"&gt;shortcomings
of the monolithic reuse library</a> and how the modular
approach can
solve them. Of
course, this introduces some new problems that will have to be
addressed.
<h3 style="font-weight: bold;">What is your experience?</h3>
Please share your experience with
LabVIEW software reuse.  I'm curious to know the following:
<ul>
	<li>Do you have an effective LabVIEW reuse system?</li>
	<li>What does your system look like?
<ul>
	<li>Is your system monolithic or modular?</li>
</ul>
<ul>
	<li>How big is the
library?</li>
	<li>How many developers contribute the the library?</li>
	<li>How do you manage your installation?</li>
</ul>
</li>
	<li>Are you feeling
any pain points?</li>
	<li>How do you plan to
solve them?</li>
</ul>
<hr style="width: 100%; height: 2px;" /><small><span>
style="font-style: italic;"&gt;El Capitan </span><a>
style="font-style: italic;"
href="http://en.wikipedia.org/wiki/Image:Yosemite_El_Capitan.jpg"&gt;photo</a><span>
style="font-style: italic;"&gt; courtesy of Mike Murphy.</span></small>]]></content:encoded>
			<wfw:commentRss>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
