Hey, Denis,
I've been involved in those situations, many times. You didn't mention mention the nature of the enhancements (additional reports, different data on reports, different screens, calculations), so I can only talk in generalities. Here are some things to chew on:
- As much as possible, drive the UI and functionality through data, which makes it easier to have an app running for multiple clients. It may mean a ton of configuration tables, but generally makes the process more manageable. It means a bit increase in the level of detail - but it needn't be a "mess".
- Think through how much you bill a client asking for new functionality, if other clients may wind up benefiting from it.
- Even if a client asks for something that is really off-strategy for your general product, consider other factors, such as how much revenue the client generates, what the downsides may be if you say no, etc.
- Above all, don't create client-specific EXEs. It's a major headache.
If you don't mind me asking - how many companies are running your app? Have you considered something like an annual user conference? Sometimes getting clients to talk out things amongst themselves can have good benefits long-term.
I just saw Jon's response, which I agree with. He raises a good point - as much as possible, setting up parent class/subclass relationships should help.
My two cents...
Kevin