Самое простое решение - разделить продукт на основной продукт, а каждую функцию - на плагин. Таким образом, каждый клиент может выбрать нужные функции. Но даже это решение может быстро сокрушить небольшую компанию.
В действительности вы обычно находитесь в худшем положении: у вас есть новая функция, которая помогает клиенту А и ломает что-то для клиента Б (скажем, клиент Б не готов изменить свою базу данных, и новая функция не работает без изменение, так что это фактически делает новую версию непригодной для клиента B). Если бы вы были большими, вы могли бы просто игнорировать клиента B.
В сущности, вам действительно нужно найти способ убедить своих клиентов двигаться дальше. Самый простой способ - это деньги: скажите им, сколько им будет стоить, чтобы получить индивидуальный продукт, и сколько они сэкономят, если вы найдете решение, которое подходит всем. Пригласите своих клиентов, составьте список изменений вместе, и пусть все согласятся с планом.
Кроме того, у вас действительно должны быть автоматические юнит-тесты, так что вы можете быть на 100% уверены, что продукт, выходящий из дома сегодня, не может быть хуже, чем тот, что вы продали четыре недели назад.
Даже при наличии самой лучшей системы контроля версий (для меня это будет git ), вы не сможете решить проблему с разветвлением, которое получите, если не можете заставить всех втянуть себя в одно и то же. направление (за исключением, конечно, вы можете действительно разделить каждого клиента на плагин).