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.
- Backend: offer extensibility that is powerful while secure in our multi-tenant cloud service.
- Frontend: ensure that custom plugins don't feel limiting while not disrupting the unified design, as the overall software appearance, not just the core, shapes the end-users' brand perception/experience
As for frontend - you could build reusable components and make possible to use them/build upon them. Microsoft made FluentUI to make consistent and usable components across product line. However each product customizes styling slightly and builds their own components that are not opened up... which is pity.
If you ever plan having different things, better keep them in mind at the beginning - bolting them in afterwards may be cumbersome.
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.