Mermaid code
stateDiagram-v2
state "In progress" as InProgress
state "Waiting on customer" as Waiting
[*] --> New
New --> Triaged : agent reviews
Triaged --> InProgress : assigned
InProgress --> Waiting : question sent
Waiting --> InProgress : customer replies
Waiting --> Closed : no reply in 7 days
InProgress --> Resolved : fix confirmed
Resolved --> Closed : customer accepts
Resolved --> InProgress : customer reopens
Closed --> [*] Paste this into any tool that renders Mermaid, or into the editor to change the theme and export PNG or SVG. Syntax reference: State Diagram guide.
What this diagram shows
The two states with spaces in their names, In progress and Waiting on customer, are declared first with state "..." as Alias so the transitions below can use short identifiers. Waiting has two exits: the customer replies and work resumes, or seven days pass and the ticket auto-closes. The Resolved --> InProgress edge is the reopen path that most teams forget to document.
How to adapt it
- Add an
Escalatedstate betweenInProgressandResolvedif tier-2 handoffs need their own SLA clock. - Change
no reply in 7 daysto your actual auto-close window, or remove that edge if tickets never close without a human. - Use
note right of Waitingto spell out which timers pause while a ticket waits on the customer. - Group
Triaged,InProgress, andWaitinginside a composite state calledOpento show which statuses count toward open-ticket metrics.
FAQ
Why declare aliases instead of writing the full state name everywhere?
State names with spaces cannot appear directly in a transition line. The state "Waiting on customer" as Waiting form gives the diagram a readable label while the transitions use the alias.
Should "Closed" be a terminal state or can it go back to "In progress"?
Most help desks treat closed as final and ask the customer to open a new ticket. If yours allows reopening after close, add Closed --> InProgress : reopened and remove the Closed --> [*] edge.