We once did something similar, where we had a rather large user interface, in which there were heaps and heaps and heaps of different functions. Our solution was as follows:
We distracted all the actions on the team. All of them were implemented in such a way that they can be cascaded, canceled, redone, etc. See, for example, IUndoableOperation.
The teams had conditions that made it easy to decide whether these teams could be combined.
All teams have an identifier and can be easily identified.
Then we continued to integrate our own launch configurations. We added a user interface that gave the user the ability to cascade multiple commands into one large one. For example, the user wanted to create a new file, apply a template, generate some graphs, export them to a specified location, etc., the user will create a launch configuration by adding these commands together.
Thus, we maintained a universal interface, but provided the expert with the opportunity to create his own workflow based on what they do every day.
Our users really liked it.
source share