Best practices to design a process that can be driven/triggered by a customer or an administrator

Hello,
I Want to get some thoughts about how to design processes that can be triggered by a customer but at the same time, an agent would be able to do it from another app.
The same applies to intermediate tasks.

The forms might be slightly different since for customers we might read some fields from the session meanwhile the agent has to do it otherwise.

Based on your experience what is the best approach to model such scenarios?