<?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: Project anti-pattern: Many projects in a Visual Studio Solution File</title>
	<atom:link href="http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/</link>
	<description>Software development, testing, and techie life</description>
	<lastBuildDate>Thu, 08 Mar 2012 22:19:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Thomas Eyde</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-464</link>
		<dc:creator>Thomas Eyde</dc:creator>
		<pubDate>Fri, 22 Aug 2008 11:26:24 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-464</guid>
		<description>@Kevin: A solution to the versioning problem I often promote, is, if the code belongs to someone else, then they should build and deploy the assemblies to a wellknown location. Then each project should aquire their own local copy of needed assemblies and reference those. GAC is forbidden, as is reference to custom assembly outside of the local pool.

Do you believe something like this will work for you?</description>
		<content:encoded><![CDATA[<p>@Kevin: A solution to the versioning problem I often promote, is, if the code belongs to someone else, then they should build and deploy the assemblies to a wellknown location. Then each project should aquire their own local copy of needed assemblies and reference those. GAC is forbidden, as is reference to custom assembly outside of the local pool.</p>
<p>Do you believe something like this will work for you?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-463</link>
		<dc:creator>Mark</dc:creator>
		<pubDate>Wed, 20 Aug 2008 07:02:04 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-463</guid>
		<description>The only one that should be embarrased about large number of VS projects should be the Visual Studio/msbuild and Windows file system developers.

I&#039;d consider it an advantage for incremental building, but it comes at a terrible price for a full build.

My results: ~2x faster full build when reducing the number of projects from ~80 to ~10.

IMO, the C#/.NET assembly model is broken anyway for incremental builds.
</description>
		<content:encoded><![CDATA[<p>The only one that should be embarrased about large number of VS projects should be the Visual Studio/msbuild and Windows file system developers.</p>
<p>I&#8217;d consider it an advantage for incremental building, but it comes at a terrible price for a full build.</p>
<p>My results: ~2x faster full build when reducing the number of projects from ~80 to ~10.</p>
<p>IMO, the C#/.NET assembly model is broken anyway for incremental builds.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-462</link>
		<dc:creator>Mark</dc:creator>
		<pubDate>Tue, 19 Aug 2008 11:35:15 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-462</guid>
		<description>Considering converting to few-large-assemblies. Found 2 serious problems:

1. visual studio enforces default namespace (just in gui, manual tweak in the .csproj seems to work)

2. Dataset designer uses intermediate directories too when creating it&#039;s namespace (can be worked around with reorganization of source tree)</description>
		<content:encoded><![CDATA[<p>Considering converting to few-large-assemblies. Found 2 serious problems:</p>
<p>1. visual studio enforces default namespace (just in gui, manual tweak in the .csproj seems to work)</p>
<p>2. Dataset designer uses intermediate directories too when creating it&#8217;s namespace (can be worked around with reorganization of source tree)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-461</link>
		<dc:creator>Mark</dc:creator>
		<pubDate>Tue, 19 Aug 2008 08:41:05 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-461</guid>
		<description>I guess Java did it right with just namespaces and assemblies are the wrong substitute for .jar files (which are just packaging, not part of build).

</description>
		<content:encoded><![CDATA[<p>I guess Java did it right with just namespaces and assemblies are the wrong substitute for .jar files (which are just packaging, not part of build).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sumod</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-460</link>
		<dc:creator>Sumod</dc:creator>
		<pubDate>Tue, 05 Aug 2008 08:08:36 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-460</guid>
		<description>When you have multi-core CPUs would&#039;nt separate assemblies (~2-4) speed up the compile-test-debug cycle?</description>
		<content:encoded><![CDATA[<p>When you have multi-core CPUs would&#8217;nt separate assemblies (~2-4) speed up the compile-test-debug cycle?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sreenivas.k</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-459</link>
		<dc:creator>sreenivas.k</dc:creator>
		<pubDate>Sun, 20 Jul 2008 16:07:42 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-459</guid>
		<description>We don&#039;t have a single solution containing more than  5 projects... but, I must confess (even at the risk of becoming a legend amongst you), we have around 500 solutions!  

Wait!  This is a comprehensive enterprise-wide application covering distributed business processes.  It consists of 11 modules.  There were around 50 developers organized into 10 teams.  The final application is deployed across a (albeit small) nation on 30 servers, contains around 2000 assemblies with 1.9m LOC in C# (excluding empty lines and comments) + 900 aspx pages.  

I believe that the (extreme) partitioning into small projects helped in minimizing the need for coordination among the teams.  It did help in managing the project; but the technical challenges had become more and more complex.  From having to build a tool that analyzes the dependencies and generates NAnt build file using NVelocity templates, to dealing with memory fragmentation.  

The project has completed pilot stage, and the team size has gone down to 15; now we are thinking of consolidating the projects into 30 (3 in each module: UI, Services and Data Access).

I feel embarrassed to confess here about the number of projects.  But I asked myself what would I do in the next project of the same size.  If I were not forced to confess again on the internet, I would follow the same pattern.  [Or perhaps, we won&#039;t be as lucky on the next project in terms of performance requirements?]

I am wondering if the comments above missed this aspect of partitioning a system: to support concurrent development.</description>
		<content:encoded><![CDATA[<p>We don&#8217;t have a single solution containing more than  5 projects&#8230; but, I must confess (even at the risk of becoming a legend amongst you), we have around 500 solutions!  </p>
<p>Wait!  This is a comprehensive enterprise-wide application covering distributed business processes.  It consists of 11 modules.  There were around 50 developers organized into 10 teams.  The final application is deployed across a (albeit small) nation on 30 servers, contains around 2000 assemblies with 1.9m LOC in C# (excluding empty lines and comments) + 900 aspx pages.  </p>
<p>I believe that the (extreme) partitioning into small projects helped in minimizing the need for coordination among the teams.  It did help in managing the project; but the technical challenges had become more and more complex.  From having to build a tool that analyzes the dependencies and generates NAnt build file using NVelocity templates, to dealing with memory fragmentation.  </p>
<p>The project has completed pilot stage, and the team size has gone down to 15; now we are thinking of consolidating the projects into 30 (3 in each module: UI, Services and Data Access).</p>
<p>I feel embarrassed to confess here about the number of projects.  But I asked myself what would I do in the next project of the same size.  If I were not forced to confess again on the internet, I would follow the same pattern.  [Or perhaps, we won't be as lucky on the next project in terms of performance requirements?]</p>
<p>I am wondering if the comments above missed this aspect of partitioning a system: to support concurrent development.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oran</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-458</link>
		<dc:creator>Oran</dc:creator>
		<pubDate>Sat, 19 Jul 2008 17:28:51 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-458</guid>
		<description>@Colin
&quot;I actually think that we need another way of organizing codebases and much better guidance.&quot;

&quot;I&#039;m not even sure projects/folders are enough, I often want a more virtualized view for example if I&#039;m working on Login I want to see LoginController, its view, the tests, the login parts of the domain mode, LoginService etc. I don&#039;t want to see everything else. So does that mean I put everything in one project and organizing my folders by task/feature?&quot;

See http://douglaspurdy.com/2008/06/21/the-freedom-of-leaving-files-behind/ for an interesting teaser of what the future may look like.  Can&#039;t wait for PDC to see what this is all about....</description>
		<content:encoded><![CDATA[<p>@Colin<br />
&#8220;I actually think that we need another way of organizing codebases and much better guidance.&#8221;</p>
<p>&#8220;I&#8217;m not even sure projects/folders are enough, I often want a more virtualized view for example if I&#8217;m working on Login I want to see LoginController, its view, the tests, the login parts of the domain mode, LoginService etc. I don&#8217;t want to see everything else. So does that mean I put everything in one project and organizing my folders by task/feature?&#8221;</p>
<p>See <a href="http://douglaspurdy.com/2008/06/21/the-freedom-of-leaving-files-behind/" rel="nofollow">http://douglaspurdy.com/2008/06/21/the-freedom-of-leaving-files-behind/</a> for an interesting teaser of what the future may look like.  Can&#8217;t wait for PDC to see what this is all about&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ZagNut</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-457</link>
		<dc:creator>ZagNut</dc:creator>
		<pubDate>Fri, 18 Jul 2008 12:32:54 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-457</guid>
		<description>To Russell w/ 185 projects:  only one response can be made to this: OMFG...

I guess you need some serious ILMerge after that...</description>
		<content:encoded><![CDATA[<p>To Russell w/ 185 projects:  only one response can be made to this: OMFG&#8230;</p>
<p>I guess you need some serious ILMerge after that&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Jack</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-456</link>
		<dc:creator>Colin Jack</dc:creator>
		<pubDate>Fri, 18 Jul 2008 12:00:59 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-456</guid>
		<description>This will be a bit rambling...

One thing I&#039;m now convinced of is there is nothing like a right answer for project/folder structures. 

As an example myself and colleagues went through an exercise of changing the entire structure of our main domain projects, changing the folder structure on disk and the structure in the projects/solution(s). However although we all felt we had improved it the result was still frustratingly far from perfect. I tried to explain one part of the restructuring in this blog post (interestingly doesn&#039;t show up well in FireFox, oh well):

http://colinjack.blogspot.com/2007/11/domain-p.html

Project structure is even more difficult than folder structure as you have so many different factors. Reuse of code, dependencies, build time etc. With this in mind I actually think that we need another way of organizing codebases and much better guidance. 

I&#039;m not even sure projects/folders are enough, I often want a more virtualized view for example if I&#039;m working on Login I want to see LoginController, its view, the tests, the login parts of the domain mode, LoginService etc. I don&#039;t want to see everything else. So does that mean I put everything in one project and organizing my folders by task/feature? Not sure, I&#039;ve tried that approach and I&#039;m not sure it&#039;s great especially when you have re-use (between applications/teams or even just within a codebase).

Oh and here&#039;s another good link:

http://codebetter.com/blogs/jacob.lewallen/archive/2008/04/01/projects-in-visual-studio.aspx


@Chad
&quot;@Colin:  Why does it matter that your domain assembly has a ref to NHibernate?  I used to have a problem with it, but I found it was  largely a vanity argument (i.e. it didn&#039;t &#039;look&#039; right) but there was no real technical argument there.&quot;

So my domain classes never ever access NHibernate and since dependencies are at the project level that&#039;s how I&#039;d manage it. I could be convinced to weaken on the issue but I&#039;ve yet to feel a compelling need.

Let&#039;s say I don&#039;t mind on that front though, its still possible that the domain/controls/utilities are shared between apps. Of course the argument that apps never share large sections of code (especially domain code) is one some people seem to be going for these days, I don&#039;t necessarily agree 100% with this which shapes my thinking.



&quot;I end up usually having a big Foo.Core assembly that has folders/namespaces where everything is properly separated.&quot;

Yeah I&#039;ve worked on such a project. In that case we had a reasonable amount of developers over a reasonable amount of time and in my view the resulting project ended up quite confusing. Not saying it always would though, this project was confusing in general :)

Other thing to consider is where you have multiple apps and code sharing between them. In those cases bringing in one Foo.Core becomes a bit of an issue (Uncle bobs reuse-release arguments and so on). I know it&#039;s all managable but...

</description>
		<content:encoded><![CDATA[<p>This will be a bit rambling&#8230;</p>
<p>One thing I&#8217;m now convinced of is there is nothing like a right answer for project/folder structures. </p>
<p>As an example myself and colleagues went through an exercise of changing the entire structure of our main domain projects, changing the folder structure on disk and the structure in the projects/solution(s). However although we all felt we had improved it the result was still frustratingly far from perfect. I tried to explain one part of the restructuring in this blog post (interestingly doesn&#8217;t show up well in FireFox, oh well):</p>
<p><a href="http://colinjack.blogspot.com/2007/11/domain-p.html" rel="nofollow">http://colinjack.blogspot.com/2007/11/domain-p.html</a></p>
<p>Project structure is even more difficult than folder structure as you have so many different factors. Reuse of code, dependencies, build time etc. With this in mind I actually think that we need another way of organizing codebases and much better guidance. </p>
<p>I&#8217;m not even sure projects/folders are enough, I often want a more virtualized view for example if I&#8217;m working on Login I want to see LoginController, its view, the tests, the login parts of the domain mode, LoginService etc. I don&#8217;t want to see everything else. So does that mean I put everything in one project and organizing my folders by task/feature? Not sure, I&#8217;ve tried that approach and I&#8217;m not sure it&#8217;s great especially when you have re-use (between applications/teams or even just within a codebase).</p>
<p>Oh and here&#8217;s another good link:</p>
<p><a href="http://codebetter.com/blogs/jacob.lewallen/archive/2008/04/01/projects-in-visual-studio.aspx" rel="nofollow">http://codebetter.com/blogs/jacob.lewallen/archive/2008/04/01/projects-in-visual-studio.aspx</a></p>
<p>@Chad<br />
&#8220;@Colin:  Why does it matter that your domain assembly has a ref to NHibernate?  I used to have a problem with it, but I found it was  largely a vanity argument (i.e. it didn&#8217;t &#8216;look&#8217; right) but there was no real technical argument there.&#8221;</p>
<p>So my domain classes never ever access NHibernate and since dependencies are at the project level that&#8217;s how I&#8217;d manage it. I could be convinced to weaken on the issue but I&#8217;ve yet to feel a compelling need.</p>
<p>Let&#8217;s say I don&#8217;t mind on that front though, its still possible that the domain/controls/utilities are shared between apps. Of course the argument that apps never share large sections of code (especially domain code) is one some people seem to be going for these days, I don&#8217;t necessarily agree 100% with this which shapes my thinking.</p>
<p>&#8220;I end up usually having a big Foo.Core assembly that has folders/namespaces where everything is properly separated.&#8221;</p>
<p>Yeah I&#8217;ve worked on such a project. In that case we had a reasonable amount of developers over a reasonable amount of time and in my view the resulting project ended up quite confusing. Not saying it always would though, this project was confusing in general :)</p>
<p>Other thing to consider is where you have multiple apps and code sharing between them. In those cases bringing in one Foo.Core becomes a bit of an issue (Uncle bobs reuse-release arguments and so on). I know it&#8217;s all managable but&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Janko</title>
		<link>http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio-solution-file/#comment-455</link>
		<dc:creator>Janko</dc:creator>
		<pubDate>Fri, 18 Jul 2008 11:06:56 +0000</pubDate>
		<guid isPermaLink="false">/blogs/chad_myers/archive/2008/07/15/project-anti-pattern-many-projects-in-a-visual-studio-solution-file.aspx#comment-455</guid>
		<description>This is one really great post about those things that we all take for granted. The more obvious it is, the more room for mistakes.</description>
		<content:encoded><![CDATA[<p>This is one really great post about those things that we all take for granted. The more obvious it is, the more room for mistakes.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
