W
If everything is compiled into one dll, then usually it's all in one .NET project. That means that every class can call every other class, and when you make one change you have to test the entire application for possible errors. Now, if you break it up into several projects, then when you change one project, you only have to test that project and all projects that refer to it. Typically, you want your most stable projects down in the dependency hierarchy: they can be referenced by many other projects. Projects that change often should be referenced by as little other projects as possible. The most stable projects make up the framework and can be reused by different applications.