I just started a new job in a product-based company that allows client customizations. I work on product A.
Product A gets sold to client 1 and client 2 for example. So each client requests its own customizations. These customizations must be kept separate from the main stream features. However, new main stream features must be included in each of the clients' copies while reserving their own customizations.
Clients may request customizations from simple naming of fields or adding/removing grid or report columns to adding/deleting whole pages or modules.
We just started using SVN to manage our C#.net code.
My question is: from anyone's experience what is the best way to manage the code for all these requirements while reducing duplicate effort:
- Main-stream product features for all clients.
- Separate each client's customization and keep them for the client all along the client product's life time.
Branching may solve part of the problem, however main-stream features will not be included in clients' versions.
I hope this question is clear enough, and please explain your suggestion as clear as possible maybe with examples. Thanks
I'd recommend against keeping a forever-divergent branch per client. It will make any change painful, because there's likely to be some client's branch that gives merge conflicts.
From the examples you give, it sounds more like a simple matter of allowing more configuration. You could allow field names, columns, pages and modules to be configured via some sort of admin interface, and store the configuration for that on the client's end. Or, if you want to retain full control and don't want to build such a UI, store the configuration for each client on your end, and update it on their behalf.