Here is my understanding of your problems:
1. problem #1: on-boarding
2. problem #2: user history in the tool
3. problem #3: allow users convenient access to parallel state machines
[I think that you are generating code from users’ diagrams. I think that you are joining the generated code to the XState library. There are 2 different use-cases: (1) designing your tool, (2) generating code from users’ diagrams. XState can be used for both use-cases (or just one)].
1. problem #1: How to get users to love dealing with details. They don’t. Give them eye-candy until they buy-in.
Problem #1: Yes, designing using StateCharts makes you think about details. Users live in a fictional reality hoping that you will solve all of their detailed problems. That’s why neophytes like to use BASIC and Excel (and JavaScript, Python, etc).
Problem #1: Give them layers, but, don’t make them use layers immediately. Users want “flat”, but that leads to later trouble. Give them flat until they need more. (Also, see Ports, in #3). Don’t mention the fact that the “flat” layers will interconnect, once they need them to.
2. problem #2: History. The UX depends on your users - what do they want to see? Your job boils down into (a) designing a decent UX and (b) hooking what users see, in the UX, into the generated XState code.
3. problem #3: Parallel State Machines. Harel’s notation for Orthogonal States falls short (IMO) here. in StateChart notation, state transitions are explicit (curvy arrows) except when you use Orthogonal States, which can only be implied by reading the code.
How to present this to users?
My suggestion:
Peel orthogonality out of user-level HSM’s and put explicit ports on the user-level HSM’s (HSM === Hierarchical State Machine).
Join ports up using explicit lines (arrows, different color, whatever).
Design it so that the users must (explicitly) wire up output ports to input (watcher) ports.
Design it so that every user-HSM is completely self-contained.
Design it so that a user-HSM can only send “state-changed” events to one of its own output ports. Every user-HSM can observe (listen-to) “state-changed” events from other user-HSMs only-iff their ports are connected in the UX.
Can an HSM send other kinds of events to its output ports? (A: yes. Ask me for more discussion, if this interests you. I am happy to discuss further).
4. problem #0: Go to a whiteboard and draw the design of your tool on the whiteboard. (Use StateChart notation, if you wish). (Most programmers skip this step and go straight to implementation using JS, Python, Rust, etc.)