I recently became lead developer of a project at my first non-internship programming position. I've been there for 8 months since I've graduated in December. The project is a web service we offer that is used to track inventory, provide reporting features, and other administration services. The project was originally created for a single client, but has started to become a general project that can be customized for each client. So as each new client signs on, we copy the code from the most recent project and start fresh again customizing the site for the new client.
The Customization can be fairly dramatic in some areas of the site, or in some cases very little customization is needed. The problem I see is when we make improvements to the core functionality of the site, that all clients would benefit from, we would have to copy this new feature into every client's site. This seems very cumbersome to me, even with my limited amount of experience and feel there has to be a better way. And to be honest, it usually isn't copied over at all. Same for bug fixes. They'll go client by client, fixing the same bugs as they go in each site. Right now we use Microsoft's Team Foundation Server as our code repository, so a new project for each client is created and added.
It may help to mention that it is a smaller company with about 40 employees. Of which 9 are programmer's. I feel like this could be a chance to prove my worth and figure out a better solution. If anyone here has had experience with a similar situation any input would be appreciated.
Some questions that have been asked that I have added in here.
Q. Describe what the application looks like. Is this a web application? Does the application on it's own look to have three (or more) tiers? Is the code a mess?
A. Yeah this is a web application that has a fairly extensive database, and is FDA regulated. It is used by Pharmaceutical companies to track pharmaceutical drug samples distributed by their representatives. The code isn't horrible, but it can definitely be improved. Which is something I have been trying to do. It was developed with ASP.Net and C#.
Q. Tell me about the database. Is there a common database that all instances of the application interact with?
A. No shared database, each client has their own database instance. When a new client signs on we take a copy of the most recent client's database to be used. The database is written in a fairly generic way. Some business logic needs to be tweaked depending on the client, but it usually isn't too extensive and doesn't require modifying table structures or anything like that.
And finally, most of the customization that has to be done involves business logic. We don't really change the UI per client or anything like that. Just acquire a copy of the Company's logo and smack it the default spot. Some of the more extensive changes had to do with the companies structure and involved the database/ BL. Most of the time though it is more minor changes.