Ok so first I want to describe the anti-pattern anti-practice.
Company creates system for customer number 1. Then customer number 2 comes along they fork the codebase customize it. (Say for variations in customer number 2s country) Rinse and repeat for the next 14 customers.
Now to add an new feature needs to be repeated 16 times. Very expensive!
Let's say you get to rewind the clock back to starting work for customer number 2.
What patterns or practices can be used to keep one core code base which can service many different customers/countries, but with some quite divergent requirements?
I am not looking for implementations, but for abstract patterns that can be applied to any system