Every Freshservice metric (MTTR, first-response, SLA attainment) is derived from status transitions. A messy status flow makes every metric meaningless. Design the lifecycle once and protect it.
Default vs custom statuses
Freshservice ships with: Open, Pending, Resolved, Closed. That is the minimum viable flow. Add custom statuses only when each represents a distinct workflow state with its own assignment, SLA behavior, or notification.
Common useful additions:
- “In Progress” (separate from Open to track when work actually starts).
- “Waiting on Customer” (pauses SLA clock).
- “Waiting on Vendor” (pauses SLA, different from customer wait for reporting).
- “On Hold - CAB Review” (specific to changes).
Avoid adding “Almost Resolved,” “Nearly Done,” or workflow-stage labels. Those are activities, not states.
Allowed transitions
By default any status can move to any other. Lock this down via workflow. The valid transitions:
- Open to In Progress to Resolved to Closed.
- Any status to Waiting (paused).
- Waiting back to In Progress.
- Resolved to Open (reopen).
Block direct Open to Closed (skips the work). Block Closed to anything other than Reopen (immutability).
SLA pause behavior
Configure under Admin, SLA Policies, which statuses pause the clock. Standard:
- Open, In Progress: clock running.
- Waiting on Customer: paused.
- Waiting on Vendor: paused.
- Resolved: clock stopped, resolution timestamp set.
- Closed: terminal.
If you do not pause on Waiting on Customer, your SLA breach rate inflates by 30-40 percent on average across teams I have audited.
Resolution vs closure
Resolved is the agent saying “I fixed it.” Closed is the customer (or a workflow) confirming. The gap matters for compliance: tickets resolved but not closed indicate either a confirmation gap or an agent gaming the metric.
Set auto-close: Resolved tickets auto-close after 7 days of no customer reply. Below 7 days customers complain about lost feedback windows; above 14 days, agents get scored on tickets that should have been done weeks ago.
Reopen behavior
A reopened ticket should not reset the clock entirely. Default Freshservice keeps the original creation timestamp but starts a new resolution clock. Configure your reports to count reopens separately and surface “ticket reopened within 7 days” as a quality metric.
Frequent reopens by one agent indicate either premature closure or bad fix quality. Coach.
Audit log
Every status change writes to the ticket activity log with timestamp, actor, old value, new value. For SOX or ISO 27001 audits, configure the activity log export to ship daily to your SIEM. Native Freshservice retains the log indefinitely but does not ship it externally without configuration.
Bulk status changes
Bulk closing 200 stale tickets at quarter-end is tempting and creates an audit anomaly. Do it via a clearly named workflow (“Q4 Stale Cleanup”) with dry-run preview, not via the bulk action button. The workflow signature in the audit log explains the change.
API consistency
Status changes via API trigger the same workflows as UI changes. Webhooks fire, automations run, SLA clocks update. If your integration sets status directly in the database via a sync tool, you bypass all of that and create silent data corruption. Always go through the API.
What to do this week
Diagram your current ticket lifecycle on a whiteboard. Mark which transitions are allowed and which pause SLA. Compare to your actual configuration; fix any drift.