<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: One wrong DLL = 3 months gone</title>
	<atom:link href="http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sun, 14 Mar 2010 06:27:00 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Udi Dahan - The Software Simplist</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-336</link>
		<dc:creator>Udi Dahan - The Software Simplist</dc:creator>
		<pubDate>Sat, 01 Jul 2006 00:52:58 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-336</guid>
		<description>John,

As the architect for the whole system, I am responsible for making sure that when we connect all the pieces together, and they don&#039;t work, we&#039;ll be able to quickly find out why.

The fact that some of these pieces are developed at other companies doesn&#039;t change that. Also, beyond affecting what interfaces those pieces expose/implement, I can&#039;t dictate how those companies develop/build their pieces. I want to receive from those companies binary artifacts whose behavior I can verify (with unit tests, for instance).

Although I wish that I could positively affect those other companies&#039; build processes, its more important for me to focus on the team, or teams, in my company.

As to the issue of whether an interface being an element of development or integration - I think that its both, if done right.

Consider the case where 2 or more companies depend on a common package, like the one containing IEntity. Its really important for me to know that all the binaries provided by all companies were developed and tested against the same version of that shared package, otherwise there&#039;s a good chance that things will break in unexpected ways (depending on the backwards and forwards compatibility characteristics of that package).

Of course, such a process may not scale down so well.
</description>
		<content:encoded><![CDATA[<p>John,</p>
<p>As the architect for the whole system, I am responsible for making sure that when we connect all the pieces together, and they don&#8217;t work, we&#8217;ll be able to quickly find out why.</p>
<p>The fact that some of these pieces are developed at other companies doesn&#8217;t change that. Also, beyond affecting what interfaces those pieces expose/implement, I can&#8217;t dictate how those companies develop/build their pieces. I want to receive from those companies binary artifacts whose behavior I can verify (with unit tests, for instance).</p>
<p>Although I wish that I could positively affect those other companies&#8217; build processes, its more important for me to focus on the team, or teams, in my company.</p>
<p>As to the issue of whether an interface being an element of development or integration &#8211; I think that its both, if done right.</p>
<p>Consider the case where 2 or more companies depend on a common package, like the one containing IEntity. Its really important for me to know that all the binaries provided by all companies were developed and tested against the same version of that shared package, otherwise there&#8217;s a good chance that things will break in unexpected ways (depending on the backwards and forwards compatibility characteristics of that package).</p>
<p>Of course, such a process may not scale down so well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Wood</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-335</link>
		<dc:creator>John Wood</dc:creator>
		<pubDate>Thu, 29 Jun 2006 08:37:44 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-335</guid>
		<description>But Udi, from what you were saying it sounded like this was *your* decision - after all, you were the one who took the team into a room to justify yourself. From what you were describing it sounded like you already had taken responsibility for the build process, given this has a direct effect on the granularity of deployment. You say &quot;the integration I perform&quot; - yet what you were describing was a decision on whether to create DLLs for each and every interface. That&#039;s not integration, that&#039;s development and that&#039;s taking a direct role in deciding how the developed components are deployed. Or did I miss something?
It&#039;s not worth me harping on because without being directly involved in the project it&#039;s impossible for me to construct any informed opinions. But from what I&#039;ve understood from the little I have read, I just don&#039;t see the justification.</description>
		<content:encoded><![CDATA[<p>But Udi, from what you were saying it sounded like this was *your* decision &#8211; after all, you were the one who took the team into a room to justify yourself. From what you were describing it sounded like you already had taken responsibility for the build process, given this has a direct effect on the granularity of deployment. You say &#8220;the integration I perform&#8221; &#8211; yet what you were describing was a decision on whether to create DLLs for each and every interface. That&#8217;s not integration, that&#8217;s development and that&#8217;s taking a direct role in deciding how the developed components are deployed. Or did I miss something?<br />
It&#8217;s not worth me harping on because without being directly involved in the project it&#8217;s impossible for me to construct any informed opinions. But from what I&#8217;ve understood from the little I have read, I just don&#8217;t see the justification.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Udi Dahan - The Software Simplist</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-334</link>
		<dc:creator>Udi Dahan - The Software Simplist</dc:creator>
		<pubDate>Wed, 28 Jun 2006 12:04:06 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-334</guid>
		<description>Would you take responsibility for the build process for another company&#039;s deliverables? I wouldn&#039;t. Each company has their own process, and you just can&#039;t change that. The integration I perform needs to be done at the level of modules (or CSCIs as they&#039;re called in my industry), where each CSCI can be made up of numerous assemblies, config files, databases, etc.</description>
		<content:encoded><![CDATA[<p>Would you take responsibility for the build process for another company&#8217;s deliverables? I wouldn&#8217;t. Each company has their own process, and you just can&#8217;t change that. The integration I perform needs to be done at the level of modules (or CSCIs as they&#8217;re called in my industry), where each CSCI can be made up of numerous assemblies, config files, databases, etc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Wood</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-333</link>
		<dc:creator>John Wood</dc:creator>
		<pubDate>Wed, 28 Jun 2006 04:21:39 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-333</guid>
		<description>A bit that somehow got missed...

&gt;&gt; Not all source is necessarily in a single repository. &lt;&lt;

Well that&#039;s probably your biggest problem. I would make a point of converging the source depots even if it means having a process that pulls stuff from other SCCSs nightly.</description>
		<content:encoded><![CDATA[<p>A bit that somehow got missed&#8230;</p>
<p>&gt;&gt; Not all source is necessarily in a single repository. &lt;&lt;</p>
<p>Well that&#8217;s probably your biggest problem. I would make a point of converging the source depots even if it means having a process that pulls stuff from other SCCSs nightly.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Wood</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-332</link>
		<dc:creator>John Wood</dc:creator>
		<pubDate>Wed, 28 Jun 2006 04:19:55 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-332</guid>
		<description>&gt;&gt; Not all source is necessarily in a single repository. &gt; By having more granular deployment, and smaller iterations, a smaller percentage of your deployment footprint changes each time. That means higher stability. &lt;&lt;

I disagree. That means lower stability because you cannot be sure what it is they&#039;re running without looking at the version number of each and every DLL. The more unknowns there are, the less stable the system is. When you release everything from source control it is controlled - if you have a good build system it can dump out what has changed since the last build was performed (including the files) so you can be absolutely sure what it is they&#039;re getting. I mean, if you don&#039;t know what your build produces then what hope is there?

Like I said, it greatly depends on your setup and the nature of your development - but I can say that for at least 5 larger projects I&#039;ve worked on, they were each in DLL hell until we made the decision to move towards holistic deployment.</description>
		<content:encoded><![CDATA[<p>&gt;&gt; Not all source is necessarily in a single repository. &gt; By having more granular deployment, and smaller iterations, a smaller percentage of your deployment footprint changes each time. That means higher stability. &lt;&lt;</p>
<p>I disagree. That means lower stability because you cannot be sure what it is they&#8217;re running without looking at the version number of each and every DLL. The more unknowns there are, the less stable the system is. When you release everything from source control it is controlled &#8211; if you have a good build system it can dump out what has changed since the last build was performed (including the files) so you can be absolutely sure what it is they&#8217;re getting. I mean, if you don&#8217;t know what your build produces then what hope is there?</p>
<p>Like I said, it greatly depends on your setup and the nature of your development &#8211; but I can say that for at least 5 larger projects I&#8217;ve worked on, they were each in DLL hell until we made the decision to move towards holistic deployment.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Udi Dahan - The Software Simplist</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-331</link>
		<dc:creator>Udi Dahan - The Software Simplist</dc:creator>
		<pubDate>Wed, 28 Jun 2006 03:48:24 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-331</guid>
		<description>First of all, thanks for all the comments. Take my suggestions in the context of large, complex projects with numerous developers and teams, and even companies working on the same project. The kinds of project where the average success rate doesn&#039;t even make double digits.

John,

1. Not all source is necessarily in a single repository.
2. By having more granular deployment, and smaller iterations, a smaller percentage of your deployment footprint changes each time. That means higher stability.

Paul,

I shall consider myself fired. But, for those clients who haven&#039;t fired me yet...

I&#039;m not worried about the cases where programmers quickly home in on a bug, fix it, and move on. I&#039;m worried about the bugs that don&#039;t show up on the programmers machine, or sometimes do, and sometimes don&#039;t. I&#039;m worried about bugs that we thought we fixed 2 iterations ago, but have suddenly come back. These are the kinds of things that eat up project time, and don&#039;t behave deterministically.

Mehran,

By following my &quot;first principle of design&quot;, I usually avoid the problems you describe. See:
http://udidahan.weblogs.us/archives/035032.html
http://udidahan.weblogs.us/archives/035222.html</description>
		<content:encoded><![CDATA[<p>First of all, thanks for all the comments. Take my suggestions in the context of large, complex projects with numerous developers and teams, and even companies working on the same project. The kinds of project where the average success rate doesn&#8217;t even make double digits.</p>
<p>John,</p>
<p>1. Not all source is necessarily in a single repository.<br />
2. By having more granular deployment, and smaller iterations, a smaller percentage of your deployment footprint changes each time. That means higher stability.</p>
<p>Paul,</p>
<p>I shall consider myself fired. But, for those clients who haven&#8217;t fired me yet&#8230;</p>
<p>I&#8217;m not worried about the cases where programmers quickly home in on a bug, fix it, and move on. I&#8217;m worried about the bugs that don&#8217;t show up on the programmers machine, or sometimes do, and sometimes don&#8217;t. I&#8217;m worried about bugs that we thought we fixed 2 iterations ago, but have suddenly come back. These are the kinds of things that eat up project time, and don&#8217;t behave deterministically.</p>
<p>Mehran,</p>
<p>By following my &#8220;first principle of design&#8221;, I usually avoid the problems you describe. See:<br />
<a href="http://udidahan.weblogs.us/archives/035032.html" rel="nofollow">http://udidahan.weblogs.us/archives/035032.html</a><br />
<a href="http://udidahan.weblogs.us/archives/035222.html" rel="nofollow">http://udidahan.weblogs.us/archives/035222.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mehran Nikoo</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-330</link>
		<dc:creator>Mehran Nikoo</dc:creator>
		<pubDate>Tue, 27 Jun 2006 19:17:41 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-330</guid>
		<description>Components (assemblies in .NET terms) are units of deployment. This should ideally be the main deciding factor for the number of components in the application. For example if you want to be able to install only part of the application (i.e. the core framework) without optional components, you need to break it down to multiple components. 

Same applies if you want to minimise the number of files that need to be re-deployed in a patch release. But be careful. If your application has too many components, it is very likely that a bug fix needs many components to be re-deployed. Look at Windows service packs for instance; they include hundreds of updated files, which is defeating the purpose of minimising the number of re-deployed files and could end up in versioning conflicts too.

In terms of development, in the same way that having one large project (and therefore one assembly) can prove to be very slow, having too many projects with project references will have the same effect as the referenced projects need to be recompiled and the references in parent projects need to be updated, and this process can be repeated many times, based on the depth of project reference tree.

As you mentioned, it is up to the solution architect to decide which way to do based on project environment and complexity.</description>
		<content:encoded><![CDATA[<p>Components (assemblies in .NET terms) are units of deployment. This should ideally be the main deciding factor for the number of components in the application. For example if you want to be able to install only part of the application (i.e. the core framework) without optional components, you need to break it down to multiple components. </p>
<p>Same applies if you want to minimise the number of files that need to be re-deployed in a patch release. But be careful. If your application has too many components, it is very likely that a bug fix needs many components to be re-deployed. Look at Windows service packs for instance; they include hundreds of updated files, which is defeating the purpose of minimising the number of re-deployed files and could end up in versioning conflicts too.</p>
<p>In terms of development, in the same way that having one large project (and therefore one assembly) can prove to be very slow, having too many projects with project references will have the same effect as the referenced projects need to be recompiled and the references in parent projects need to be updated, and this process can be repeated many times, based on the depth of project reference tree.</p>
<p>As you mentioned, it is up to the solution architect to decide which way to do based on project environment and complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Louth</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-329</link>
		<dc:creator>Paul Louth</dc:creator>
		<pubDate>Tue, 27 Jun 2006 08:45:04 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-329</guid>
		<description>Your methods of defect hunting are crazy.  Do you really check all code/DLLs that have changed?  I think most experienced developers would instinctively know where to look and would then do a diff on the source file(s) in question.  Checking DLL version numbers to see what&#039;s changed seems insane to me, and increasing the DLL count just means more headaches.

Also if you were on my project and randomly downed-tools to grandstand in front of the whole team then I&#039;d fire you.  There&#039;s no room for prima donna programmers of development teams in my opinion.  

And your grandstanding adds-up too does it not?  

One Prima Donna Coder = 3 Months Gone</description>
		<content:encoded><![CDATA[<p>Your methods of defect hunting are crazy.  Do you really check all code/DLLs that have changed?  I think most experienced developers would instinctively know where to look and would then do a diff on the source file(s) in question.  Checking DLL version numbers to see what&#8217;s changed seems insane to me, and increasing the DLL count just means more headaches.</p>
<p>Also if you were on my project and randomly downed-tools to grandstand in front of the whole team then I&#8217;d fire you.  There&#8217;s no room for prima donna programmers of development teams in my opinion.  </p>
<p>And your grandstanding adds-up too does it not?  </p>
<p>One Prima Donna Coder = 3 Months Gone</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Wood</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-328</link>
		<dc:creator>John Wood</dc:creator>
		<pubDate>Tue, 27 Jun 2006 02:27:05 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-328</guid>
		<description>Udi,
While there may be benefits specific to your project, in my experience more DLLs simply equates to more headaches.

&gt;&gt; From that version number, we can find all the specific version numbers of the DLLs that comprise that system wide version number. &lt;&lt;

But why. From a version number you can go to source control and see what changed between labels. What does this have to do with DLLs? The only source they have to look through will be a diff report between those two version labels. 

I think there are very few reasons to separate /components/ into their own DLLs, let alone individual interfaces. In my mind DLLs are a necessary evil - necessary only when sharing classes or interfaces between modules.

Surely you&#039;ve heard the phrase &#039;DLL hell?&#039; - it&#039;s not limited to COM at all. It&#039;s limited to anything that is deployed piecemeal. The more granular your deployment, the more room there is for errors caused by mismatched DLLs, or a botched compilation that linked against the wrong DLLs. In my experience it causes FAR more headaches than it&#039;s worth. I&#039;m 100% a proponent of deploying applications as an atomic entity. Even patches go out as the entire thing, just to ensure that somebody doesn&#039;t apply a patch in the wrong order and mess everything up. You say it reduces the source code - but I don&#039;t see it. A DLL means an extra project file, extra references list, extra using statements, the list goes on. And this isn&#039;t to mention the performance hits of all those assembly resolutions. In my experience you can increase the size of the project by an order of magnitude by being DLL happy.</description>
		<content:encoded><![CDATA[<p>Udi,<br />
While there may be benefits specific to your project, in my experience more DLLs simply equates to more headaches.</p>
<p>&gt;&gt; From that version number, we can find all the specific version numbers of the DLLs that comprise that system wide version number. &lt;&lt;</p>
<p>But why. From a version number you can go to source control and see what changed between labels. What does this have to do with DLLs? The only source they have to look through will be a diff report between those two version labels. </p>
<p>I think there are very few reasons to separate /components/ into their own DLLs, let alone individual interfaces. In my mind DLLs are a necessary evil &#8211; necessary only when sharing classes or interfaces between modules.</p>
<p>Surely you&#8217;ve heard the phrase &#8216;DLL hell?&#8217; &#8211; it&#8217;s not limited to COM at all. It&#8217;s limited to anything that is deployed piecemeal. The more granular your deployment, the more room there is for errors caused by mismatched DLLs, or a botched compilation that linked against the wrong DLLs. In my experience it causes FAR more headaches than it&#8217;s worth. I&#8217;m 100% a proponent of deploying applications as an atomic entity. Even patches go out as the entire thing, just to ensure that somebody doesn&#8217;t apply a patch in the wrong order and mess everything up. You say it reduces the source code &#8211; but I don&#8217;t see it. A DLL means an extra project file, extra references list, extra using statements, the list goes on. And this isn&#8217;t to mention the performance hits of all those assembly resolutions. In my experience you can increase the size of the project by an order of magnitude by being DLL happy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Sterling</title>
		<link>http://www.udidahan.com/2006/06/24/one-wrong-dll-3-months-gone/comment-page-1/#comment-327</link>
		<dc:creator>Chris Sterling</dc:creator>
		<pubDate>Mon, 26 Jun 2006 11:49:36 +0000</pubDate>
		<guid isPermaLink="false">http://wp_630.weblogs.us/archives/291#comment-327</guid>
		<description>I entirely agree and use many of the same practices when developing a product for our customers.  Our entire Professional Services division runs their projects using Scrum and many of the Agile development best practices such as TDD, continuous integration, collective code ownership, most use pair programming, and others.

What we have found to be one of the biggest time savers, and therefore money savers for our customers, is the use of an agreed upon versioning system for our projects.  This is a cross-cutting concern which involves our SCM, project dashboards, project structures, requirements tracking, and issue tracker.  It comes down to having the right infrastructure in place to make getting work done much easier.

Now, most of the projects I work with are Java based but they have similar issues as described above.  We use Maven 2 to build, test, deploy, and view project dashboard across these projects.  We found this to be so helpful that we even created plugins (or Mojos as they put it) for our .NET projects.  Reports for FxCop, NDepend, NUnit, and others all get placed into the Maven 2 dashboard.  It can even build our solutions.

The consistency allows our developers to help across project lines without dealing with as much getting up to speed homework.  It doesn&#039;t eliminate it, but we are working on that. ;)</description>
		<content:encoded><![CDATA[<p>I entirely agree and use many of the same practices when developing a product for our customers.  Our entire Professional Services division runs their projects using Scrum and many of the Agile development best practices such as TDD, continuous integration, collective code ownership, most use pair programming, and others.</p>
<p>What we have found to be one of the biggest time savers, and therefore money savers for our customers, is the use of an agreed upon versioning system for our projects.  This is a cross-cutting concern which involves our SCM, project dashboards, project structures, requirements tracking, and issue tracker.  It comes down to having the right infrastructure in place to make getting work done much easier.</p>
<p>Now, most of the projects I work with are Java based but they have similar issues as described above.  We use Maven 2 to build, test, deploy, and view project dashboard across these projects.  We found this to be so helpful that we even created plugins (or Mojos as they put it) for our .NET projects.  Reports for FxCop, NDepend, NUnit, and others all get placed into the Maven 2 dashboard.  It can even build our solutions.</p>
<p>The consistency allows our developers to help across project lines without dealing with as much getting up to speed homework.  It doesn&#8217;t eliminate it, but we are working on that. <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
