A Team Lead in Need

Recently I got the email below and I thought I would share it as well as my comments with you and solicit your comments. Please let us know what you think.

 

Shawn

 

I'm Team Lead at the XYZ company for .Net development.  Our shop has multiple .Net developers, most of our work to date has been one developer on a project at a time, occasionally 2 for brief periods of time.  We have source control (SourceGear) and love what it does for us.  We have a mixture of C# and VB code (some prefer one versus the other, all of us feel comfortable looking over either when needed), but we are leaning more toward C# as time goes on.  We have a mixture of Web applications and Windows applications.  Our Windows applications tend to be larger scale.  In Windows applications, we separate business logic from the forms in separate class libraries.

 

Now we are tackling a larger project (Windows application) where we want to have 4 or 5 of us working together.  Our thoughts are to have 3 assemblies:

 

Main Project - will contain Main, instance forms that inherit base functionality from base forms, common functionality classes like messaging, error handling, etc.

 

Base Forms - will contain the base forms

 

Business Classes - will contain the business logic class libraries

 

One developer will be responsible for business classes (less experienced in .Net but very familiar with the business logic for the application), one developer (less experienced) will be responsible for the instance forms, and 2 of us (seasoned .Net developers) will be responsible for base forms and common functionality.  The 5th developer is also seasoned and will be helping the 2 less experienced developers and acting as a backup in all areas.

 

We like the idea of separating the tasks into 3 projects, but there is some concern that we will have circular references (project A references B and B later references A).  We aren't locked into the design yet, but need to very soon.  Any thoughts on how best to organize the various parts of the application?  Any links you could point me to regarding best practices for organizing multi developer development?

 

Thanks in advance,

 

A Team Lead in Need

 

 

To A Team Lead in Need,

 

Your problem is all too common, finding the correct skill mix between your team and your project can be difficult and without knowing each of your developers I cannot comment on who should be doing what. My only thought is to do some type of pair programming. This would allow your more experience developers to mentor those that need more experience.

 

As for project structure, I would check out the Microsoft recommendations at http://msdn.microsoft.com/practices . I strongly recommend the use of there application blocks. On the other hand the use of these libraries does not come free. They can tend to be a little overwhelming for beginning users.

 

My typical application small application ends up with 2 libraries; the UI library where the user interface goes and the Common (business rules) library that I use for what else my business rules. Now for larger projects the business rules library might be broken up into different parts to help better segment functionality and the same goes for the UI library. Additionally I have even seen what you mention above forms are separated into different dll’s and the exe does nothing more then launch them. Finally depending on the requirements I might add a console exe to augment the functionality of the smart client. For web applications I do much the same but with the website replacing the UI library. All in all how you break down your interface and business layers, in my humble opinion, depend mainly on the project you are working on. Many projects will do just fine with one of each. Sometimes you want/need to break it up for larger projects. Of course functionality that will be common across projects should be put in a library that can be shared (i.e. if you build a datagrid that you want to share across projects or have a common set of utility functions).

 

As for circular project references, in my experience I have not seen this to be a problem. For example I cannot think of a reason that my business library would need a reference to my UI, on the other hand the UI will always need a reference to the business library. .NET will not allow you to create a circular reference (dependency). My recommendation is that when someone wants to make one to analyze why, my guess it will be that some class is in the wrong place and should be moved.

 

 Hope this helps!

 

I put the call out to all my readers, what do you think our friend should do? Leave your comments below. . .

Published Thursday, November 09, 2006 11:11 AM by sweisfeld
Filed under:

Comments

# re: A Team Lead in Need

I agree completely with Shawn's advice.  I would strongly recommend using the Enterprise Libraries.  They are well documented and well tested.  Plus they work together as a package.  It is important for applications to have a solid DAL, Logging, Exception Handling, etc.

I would also suggest taking a look at the Smart Client Software Factory (CAB).  Furthermore, you could investigate ClickOnce as a deployment strategy for your WinForms applications.

Sunday, November 12, 2006 12:15 AM by dbottjer