One way to solve that is with a plugin architecture and categories and a platform. You can create:
- An API that allows to interact and control your software functionality
- An SDK to allow third party development.
- A marketplace where you and third parties can put plugins/applications to your software.
One problem is clutter and trying to cram in too many things for every customer. By customer I also mean an enterprise as a whole. For every customer, only a subset of these functionalities is useful, and the rest is noise. This will be the experience of every customer using your software: mostly noise, some useful features.
The plugin architecture will increase the signal/noise ratio by allowing people to install the extensions that matter to them and only those that matter. Every customer will only have the extensions that are useful to them, and this will be the experience of every user.
Take your computer or phone. We might have the same OS, but we have different applications installed. Imagine if the entity that produced the OS wanted to satisfy us both: they'd cram the union of applications we need, and it would be a nightmare.
Our guiding line for our SDK is "Anything you can do on the platform, you can do with an API call" and "You should be able to reproduce the platform with the SDK and API keys".
Here are a few lines for a recent reply[0] to another question:
>the first few commits in our iko.ai project were to use a plugin architecture so that new features were apps/plugins we could activate/deactivate from a config file.
>These apps live in separate repositories and are loaded by the core. The core is tiny and most of the work is on the extensions. Similar to kernel vs. drivers.
>Why we did that? We've been building custom enterprise data products for almost seven years. Many of these products were so custom we couldn't sell the same product to another client if we wanted. It is not just about code reuse on the function or library level, it's "functionality" refuse as in you plug in a forecast extension, you plug in a sentiment analysis extension, etc.
>A couple of years ago, a college acquaintance came to me and asked if he could hire us to deliver a certain product. We practically had the product ready but the features were baked in the product.
>So, now, we have features as independent applications that get loaded, displayed, and interacted with easily.
[0]: https://news.ycombinator.com/item?id=24503365