[prev in list] [next in list] [prev in thread] [next in thread] 

List:       extremeprogramming
Subject:    Re: [XP] Reuse across projects
From:       "J. B. Rainsberger" <jbrains762 () gmail ! com>
Date:       2009-04-29 19:38:27
Message-ID: E09C6CF0-C93F-4469-8A99-1E89570AAF08 () gmail ! com
[Download RAW message or body]

On 2009-04-09, at 04:03 , Brandon Olivares wrote:

> As far as I understand it, XP discourages assuming something is  
> going to be
> needed until you actually get to that point where it is needed. Also
> according to my understanding, that includes abstracting code to be  
> more
> general for reuse, until there is duplication, and then it can be
> refactored.
>
> So, what about reuse across projects? That'd be duplication, but not  
> within
> the same project.
>
> I've put about 30 hours into a part of this project I'm working on  
> that I
> really think could be reused, which is why I'm curious about this.  
> Surely
> reuse across projects can save a lot of time.
>
> So how do you handle this, when you're working on a new project, and  
> there's
> a part that is very similar to something in another project? How do  
> you know
> when to abstract it for better reuse?
>
I ask organizations to consider an "internal open source" model for  
promoting reusable code across projects. When two teams notice they  
share some code in common, they extract a library or framework,  
publish it to the intranet, then promote it to the rest of the  
organization. Sometimes those projects take on a life of their own;  
sometimes better projects eclipse them; sometimes weird stuff happens.  
I strongly encourage those organizations to make cross-project  
collaboration happen, which can be as simple as a Lunch and Learn once  
per month and as elaborate as an internal Open Space-based Tech Fair.

Take care.
----
J. B. (Joe) Rainsberger :: http://www.jbrains.ca
Your guide to software craftsmanship
JUnit Recipes: Practical Methods for Programmer Testing
2005 Gordon Pask Award for contributions to Agile Software Practice


[Attachment #3 (text/html)]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" \
"http://www.w3.org/TR/html4/strict.dtd"> <html>
<head>
</head>




<body style="background-color: #ffffff;">

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="width:655px; position:relative;">
<div id="ygrp-msg" style="width: 470px; margin:0; padding:0 25px 0 0; float:left; \
z-index:1;"> <!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text" >
            <!--~-|**|PrettyHtmlStart|**|-~-->
            <br><br>
      <!--~-|**|PrettyHtmlEnd|**|-~-->
      <p>On 2009-04-09, at 04:03 , Brandon Olivares wrote:<br>
<br>
&gt; As far as I understand it, XP discourages assuming something is  <br>
&gt; going to be<br>
&gt; needed until you actually get to that point where it is needed. Also<br>
&gt; according to my understanding, that includes abstracting code to be  <br>
&gt; more<br>
&gt; general for reuse, until there is duplication, and then it can be<br>
&gt; refactored.<br>
&gt;<br>
&gt; So, what about reuse across projects? That'd be duplication, but not  <br>
&gt; within<br>
&gt; the same project.<br>
&gt;<br>
&gt; I've put about 30 hours into a part of this project I'm working on  <br>
&gt; that I<br>
&gt; really think could be reused, which is why I'm curious about this.  <br>
&gt; Surely<br>
&gt; reuse across projects can save a lot of time.<br>
&gt;<br>
&gt; So how do you handle this, when you're working on a new project, and  <br>
&gt; there's<br>
&gt; a part that is very similar to something in another project? How do  <br>
&gt; you know<br>
&gt; when to abstract it for better reuse?<br>
&gt;<br>
I ask organizations to consider an &quot;internal open source&quot; model for  <br>
promoting reusable code across projects. When two teams notice they  <br>
share some code in common, they extract a library or framework,  <br>
publish it to the intranet, then promote it to the rest of the  <br>
organization. Sometimes those projects take on a life of their own;  <br>
sometimes better projects eclipse them; sometimes weird stuff happens.  <br>
I strongly encourage those organizations to make cross-project  <br>
collaboration happen, which can be as simple as a Lunch and Learn once  <br>
per month and as elaborate as an internal Open Space-based Tech Fair.<br>
<br>
Take care.<br>
----<br>
J. B. (Joe) Rainsberger :: <a \
href="http://www.jbrains.ca">http://www.jbrains.<wbr>ca</a><br> Your guide to \
software craftsmanship<br> JUnit Recipes: Practical Methods for Programmer \
Testing<br> 2005 Gordon Pask Award for contributions to Agile Software Practice<br>
<br>
</p>
 

    </div>  

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div width="1" style="color: white; clear: both;">__._,_.___</div>

           
  
    
    <!-- Start the section with Message In topic -->
    <div id="ygrp-actbar" style="clear: both; margini-bottom: 25px; \
white-space:nowrap; color: #666; text-align: right;">  <span class="left" \
style="float: left; white-space:nowrap;">  <a \
href="http://groups.yahoo.com/group/extremeprogramming/message/149980;_ylc=X3oDMTM4dmt \
wN2F2BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzE1MDQ0MARzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzEyNDEwNDU1NTUEdHBjSWQDMTQ5OTgw">
                
            Messages in this topic          </a> (<span class="bld" \
style="font-weight:bold;">22</span>)  </span>
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJyMG \
FuNzVtBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzE1MDQ0MARzZWMDZnRyBHNsawNycGx5BHN0aW1lAzEyNDEwNDU1NTU-?act=reply&messageNum=150440">
  <span class="bld" style="font-weight:bold;">
            Reply          </span> (via web post)
        </a>  | 
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJlZz \
U3NXF0BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTI0MTA0NTU1NQ--" \
class="bld" style="font-weight:bold;">  Start a new topic        </a>
          </div> 
    <!-------     Start Nav Bar  ------>
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-vitnav" style="padding-top: 10px; font-family: Verdana; font-size: \
77%; margin: 0;">  <a \
href="http://groups.yahoo.com/group/extremeprogramming/messages;_ylc=X3oDMTJlNmk5bG03B \
F9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTI0MTA0NTU1NQ--">Messages</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/files;_ylc=X3oDMTJmbm \
82MHVrBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzEyNDEwNDU1NTU-">Files</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/photos;_ylc=X3oDMTJla \
3JtNHFqBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTI0MTA0NTU1NQ--">Photos</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/links;_ylc=X3oDMTJmNn \
ZtMmJxBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzEyNDEwNDU1NTU-">Links</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/database;_ylc=X3oDMTJ \
jbDh1ZTh1BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzEyNDEwNDU1NTU-">Database</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/polls;_ylc=X3oDMTJmMm \
NmYm82BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzEyNDEwNDU1NTU-">Polls</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJl \
NDNwZTN2BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTI0MTA0NTU1NQ--">Members</a> \
  
    </div>  
    <!-- |**|end egp html banner|**| -->

                <div id="ygrp-grfd" style="font-family: Verdana; font-size: 77%; \
padding: 15px 0;">  
<!-- |**|begin egp html banner|**| -->

          To Post a message, send it to:&nbsp;&nbsp; \
extremeprogramming@eGroups.com<BR> <BR>
To Unsubscribe, send a blank message to: \
extremeprogramming-unsubscribe@eGroups.com<BR> <BR>
ad-free courtesy of objectmentor.com          
<!-- |**|end egp html banner|**| -->

              </div>
    
    <!-- yahoo logo -->
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-ft" style="font-family: verdana; font-size: 77%; border-top: 1px \
solid #666; padding: 5px 0;">  <a \
href="http://groups.yahoo.com/;_ylc=X3oDMTJkNGIwbTUwBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMjQxMDQ1NTU1">
                
      <img src="http://us.i1.yimg.com/us.yimg.com/i/yg/img/logo/ma_grp_160.gif" \
height="15" width="106" border="0" alt="Yahoo! Groups"></a> <br>  <a \
href="http://groups.yahoo.com/group/extremeprogramming/join;_ylc=X3oDMTJmaWQ0Y29lBF9TA \
zk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzEyNDEwNDU1NTU-">Change \
settings via the Web</a> (Yahoo! ID required) <br>  Change settings via email: <a \
href="mailto:extremeprogramming-digest@yahoogroups.com?subject=Email Delivery: \
Digest">Switch delivery to Daily Digest</a> | <a href = \
"mailto:extremeprogramming-traditional@yahoogroups.com?subject=Change Delivery \
Format: Traditional">Switch format to Traditional</a> <br>

      <a href="http://groups.yahoo.com/group/extremeprogramming;_ylc=X3oDMTJkM3Mybm5xB \
F9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMjQxMDQ1NTU1">
  Visit Your Group 
      </a> |
      <a href="http://docs.yahoo.com/info/terms/">
        Yahoo! Groups Terms of Use      </a> |
      <a href="mailto:extremeprogramming-unsubscribe@yahoogroups.com?subject=">
        Unsubscribe      </a> 
    </div>     <!-- |**|end egp html banner|**| -->
  </div> <!-- ygrp-msg -->

  
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px \
0; background: white;">  <!-- Network content -->
    
<!-- Start Recommendations -->
<div id="ygrp-reco">
     </div>
<!-- End Recommendations -->

	    <!-- Start vitality -->
	    <div id="ygrp-vital" style="background-color: #e0ecee; margin-bottom: 20px; \
                padding: 2px 0 8px 8px;">
	      		<div id="vithd" style="font-size: 77%; font-family: Verdana; font-weight: \
bold; color: #333; text-transform: uppercase;">Recent Activity</div>  <ul \
                style="list-style-type:none; padding: 0; margin: 2px 0;">
		        <li style="clear: both; list-style-type: none; border: 1px solid #e0ecee;">
      <div class="ct" style="float: right; font-weight: bold; color: #ff7900; float: \
right; width: 2em; text-align:right; padding-right: .5em;"><span \
style="display:none">&nbsp;</span>9</div>  <div class="cat" style="font-weight: \
bold;"><a href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJm \
ODFucWloBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEyNDEwNDU1NTU-">New \
Members</a></div>  </li>
  
		    
		    
		    
		    
		    
		</ul>
	      	      <a href="http://groups.yahoo.com/group/extremeprogramming;_ylc=X3oDMTJlb \
DJ0OG5wBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTI0MTA0NTU1NQ--">
  Visit Your Group	      </a>
	    </div> 
	    	    	      
	    <!-- Network content -->
	    	      <div style="background-color:#EEEEEE; margin-bottom:20px; padding:10px \
                8px;">    <div id="nc">
              <div class="ad" style="color:#628C2A; font-family:Arial; \
font-weight:bold;">  <div id="hd1">Yahoo! Finance</div> 
<p><a href="http://us.ard.yahoo.com/SIG=14hck1gj7/M=493064.12016257.12445664.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1241052755/L=/B=m80tCkPDhFY-/J=1241045555624126/K= \
q__BHJJcacXbMEjWG0N_qA/A=4507179/R=0/SIG=12de4rskk/*http://us.rd.yahoo.com/evt=50284/*http://finance.yahoo.com/personal-finance">It's \
Now Personal</a></p>  <p>Guides, news,</p> 
<p>advice & more.</p>                   </div>
                    <div class="ad" style="color:#628C2A; font-family:Arial; \
font-weight:bold;">  <div id="hd1">Ads on Yahoo!</div> 
<p><a href="http://us.ard.yahoo.com/SIG=14huf2kqf/M=493064.12016308.12445700.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1241052755/L=/B=nM0tCkPDhFY-/J=1241045555624126/K= \
q__BHJJcacXbMEjWG0N_qA/A=3848643/R=0/SIG=131q47hek/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2005&cmp=Yahoo&ctv=Groups4&s=Y&s2=&s3=&b=50">Learn \
more now.</a></p>  <p>Reach customers</p> 
<p>searching for you.</p>                  </div>
                    <div class="ad" style="color:#628C2A; font-family:Arial; \
font-weight:bold;">  <div id="hd1">Yahoo! Groups</div> 
<p><a href="http://us.ard.yahoo.com/SIG=14hmk9fsa/M=493064.12662708.12980600.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1241052755/L=/B=nc0tCkPDhFY-/J=1241045555624126/K= \
q__BHJJcacXbMEjWG0N_qA/A=5349275/R=0/SIG=11nhsqmjq/*http://advision.webevents.yahoo.com/EverydayWellness/">Everyday \
Wellness Zone</a></p>  <p>Check out featured</p> 
<p>healthy living groups.</p>                  </div>
          </div>
</div>
	    
	  </div> 	  <!-- |**|end egp html banner|**| -->
	  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
	</div> 		  <img src="http://geo.yahoo.com/serv?s=97359714/grpId=1505409/grpspId=1707276718/msgId=150440/stime=1241045555/nc1=4507179/nc2=3848643/nc3=5349275" \
width="1" height="1"> <br>  
	<div style="color: white; clear: both;">__,_._,___</div>
	<!--~-|**|PrettyHtmlEnd|**|-~-->
	</body>
	<!--~-|**|PrettyHtmlStart|**|-~-->
	<head>
<style type="text/css">
<!--
#ygrp-mkp{
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 14px 0px;
  padding: 0px 14px;
}
#ygrp-mkp hr{
  border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd{
  color: #628c2a;
  font-size: 85%;
  font-weight: bold;
  line-height: 122%;
  margin: 10px 0px;
}
#ygrp-mkp #ads{
  margin-bottom: 10px;
}
#ygrp-mkp .ad{
  padding: 0 0;
}
#ygrp-mkp .ad a{
  color: #0000ff;
  text-decoration: none;
}
-->
</style>
</head>
	<head>
<style type="text/css">
<!--
#ygrp-sponsor #ygrp-lc{
  font-family: Arial;
}
#ygrp-sponsor #ygrp-lc #hd{
  margin: 10px 0px;
  font-weight: bold;
  font-size: 78%;
  line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad{
  margin-bottom: 10px;
  padding: 0 0;
}
-->
</style>
</head>
	<head>
	<style type="text/css">
	<!--
	#ygrp-mlmsg {font-size:13px; font-family: \
arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}  #ygrp-mlmsg table \
{font-size:inherit;font:100%;}  #ygrp-mlmsg select, input, textarea {font:99% \
arial,helvetica,clean,sans-serif;}  #ygrp-mlmsg pre, code {font:115% \
monospace;*font-size:100%;}  #ygrp-mlmsg * {line-height:1.22em;}
	#ygrp-text{
	    font-family: Georgia;	
	}
	#ygrp-text p{
	    margin: 0 0 1em 0;
	}

	dd.last p a {
          font-family: Verdana;
          font-weight: bold;
	}

	#ygrp-vitnav{
		padding-top: 10px;
		font-family: Verdana;
		font-size: 77%;
		margin: 0;
	}
	#ygrp-vitnav a{
		padding: 0 1px;
	}
	#ygrp-mlmsg #logo{
	  padding-bottom: 10px;
	}

	#ygrp-reco {
	margin-bottom: 20px;
	padding: 0px;
	}
	#ygrp-reco #reco-head {
		font-weight: bold;
		color: #ff7900;
	}

	#reco-category{
        	font-size: 77%;
	}
	#reco-desc{
        	font-size: 77%;
	}

	#ygrp-vital a{
		text-decoration: none;
	}

	#ygrp-vital a:hover{
	  text-decoration: underline;
	}

	#ygrp-sponsor #ov ul{
		padding: 0 0 0 8px;
		margin: 0;
	}
	#ygrp-sponsor #ov li{
		list-style-type: square;
		padding: 6px 0;
		font-size: 77%;
	}
	#ygrp-sponsor #ov li a{
		text-decoration: none;
		font-size: 130%;
	}
	#ygrp-sponsor #nc{
	  background-color: #eee;
	  margin-bottom: 20px;
	  padding: 0 8px;
	}
	#ygrp-sponsor .ad{
		padding: 8px 0;
	}
	#ygrp-sponsor .ad #hd1{
		font-family: Arial;
		font-weight: bold;
		color: #628c2a;
		font-size: 100%;
		line-height: 122%;
	}
	#ygrp-sponsor .ad a{
		text-decoration: none;
	}
	#ygrp-sponsor .ad a:hover{
		text-decoration: underline;
	}
	#ygrp-sponsor .ad p{
		margin: 0;
		font-weight: normal;
		color: #000000;
	}
	o{font-size: 0; }
	.MsoNormal{
	   margin: 0 0 0 0;
	}
	#ygrp-text tt{
	  font-size: 120%;
	}
	blockquote{margin: 0 0 0 4px;}
	.replbq{margin:4}

dd.last p span {
  margin-right: 10px;
  font-family: Verdana;
  font-weight: bold;
}

dd.last p span.yshortcuts {
  margin-right: 0;
}

div.photo-title a,
div.photo-title a:active,
div.photo-title a:hover,
div.photo-title a:visited {
    text-decoration: none;
}

div.file-title a,
div.file-title a:active,
div.file-title a:hover,
div.file-title a:visited {
    text-decoration: none;
}

#ygrp-msg p#attach-count {
    clear: both;
    padding: 15px 0 3px 0;
    overflow: hidden;
}

#ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: bold;
}

div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
}

#ygrp-msg p a {
    font-family: Verdana;
    font-size: 10px;
}

#ygrp-mlmsg a {
    color: #1E66AE;
}

div.attach-table div div a {
    text-decoration: none;
}

div.attach-table {
    width: 400px;
}

	-->
	</style>
	</head>
	<!--~-|**|PrettyHtmlEnd|**|-~-->
	</html><!--End group email -->



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic