Make it extensibe. Usually businesses require this little customization here and there and given you provide the customization points, excellent. OOTB hasn't worked well for me... probably I can use excel then more easily.
Consider Microsoft Power Platform / Dynamics 365 Customer Engagement/Sales for which I'm a developer. Obviously this is a behemot and much more than CRM, but it was born out of CRM! But I want to share things I love about the platform.
The following customization points for power platform goes a VERY LONG WAY to adjust CRM to business needs and I yet have to see a significant roadblock for any customization business has needed:
- Custom tables which are 1st party citizens in all the ways and doesn't have any shortcomings. It supports all the auditing, security model and ability to link to first party tables and other way around.
- Custom attributes for 1st party tables.
- Robust Plugin-Architecure - everything is a message (API calls, CRUD, special operations, etc) - I can "plug-in" into the pipeline either for my messages or 1st party messages and have pre-operations and post operations. I can do sync/async plugin. For sync plugin I can live within same database transaction and make it so that all the transaction succeeds or rollbacks if I choose it so.
- 1st party JS library API that enables limited interaction with the form (show/hide fields, set required, get/set values)
- An option to create own Custom APIs, add a plugin to API and you have a nice extensibility.
- Powerful, consisten WebApi for integration that also supports my custom tables and stuff - CRUD operations and API calls. Can build a completely custom client for the CRM if the platform is lacking somehow.
- Custom components framework - whenever builtin controls/JS is lacking, I can build full-blown control in my choice of JS framework that has particular integration points when hosted within CRM.
As I see it, consistency makes things like that possible.