We have an application which is implemented for our own company.
By time, the application has been purchased by various companies.
For each company, we created a new TFS Branch in source control. And each one has been changed for specific customer requirements.
That’s why the source code has many versions now.
Making a change became so difficult because the change needs to implemented and tested seperately for each branch if it is from a common structure.
What is the best and conventional way to manage source code?
Is it recommended to have a SINGLE SOLUTION that can run on each customer’s systems.
There are several ways to handle customer-specific customizations, among them:
Which route to take depends on the nature of the application and the amount of customizations per customer. If the context allows so, separate branches are least favourable due to the manual merging, bug fixing and testing overhead.
In a specific industry (telecom billing systems) I have seen all three: suppliers who work with dedicated code branches, others with pluggable customizations and configurable off-the-shelf products. Naturally, each supplier has a different level of customization flexibility, level of productification and integration approach.
As a software supplier the big trade-off is to balance the level of customization flexibility versus the level of productification.