Centralizing support and building a scalable intake workflow
At Empowerly, an online college counseling company, support requests from families and counselors arrived in five different places. I moved all of it into one Zendesk system with tags, owners, templates and routing rules, then rolled the change out across Sales, Customer Success and the counselors.
Support lived in five places and none of them talked
Five inboxes
Shared Gmail inboxes (support@ and info@), HubSpot threads, Slack DMs, employees' own inboxes, and counselors going straight to Sales with student issues.
Nothing was logged
Follow-up depended on memory and Slack scrollback. There was no way to know what was open, who owned it, or what was stuck.
Four questions nobody could answer
Who is handling the Chen scheduling issue? Did anyone reply to the billing thread? Was the portal request resolved? Was that urgent match change escalated, or forgotten?
| Channel | From | Message | Age |
|---|---|---|---|
| Slack | Counselor Kim | hey can you check on the Chen family scheduling? | 2d |
| Gmail | Parent (info@) | My daughter's counselor hasn't responded in a week | 3d |
| DM | Counselor Lopez | Can someone reset my student's portal access? | 1d |
| HubSpot | Billing thread | Re: Invoice question, forwarded from Sales | 4d |
| Student (direct) | I need my transcript sent by Friday | 1d |
Tags and SLA
Actions taken
Internal notes
Linked history
Left: a normal morning before. Right: one request as a Zendesk ticket after. Sample data, fictional names.
One address, one system, regardless of origin
Four channels in, one system out
The shared Gmail inboxes auto-forwarded to Zendesk. Slack DMs were converted to tickets. Support threads were routed out of the HubSpot sales CRM. Counselors were redirected to the support address.
Six tags
Scheduling, billing, counselor match, account access, program questions, urgent or escalation. Every ticket got one before any work started.
Five statuses
New, Open, Pending, On-hold, Solved. Each one meant something specific, so anyone could read the queue without asking.
Where requests came from, and what every one of them had once it was inside.
The five statuses. Pending and On-hold were kept apart on purpose: one meant we were waiting on the family, the other meant we were waiting on ourselves.
Consistent replies. Zero guesswork.
One macro per request type
Scheduling, billing, account access, counselor match and escalation. Tested wording, and every first reply told the requester exactly what would happen next.
Filled in from the ticket
Names, dates and context came from the ticket fields. The highlighted blanks were the only thing left to check.
Response time
Same day when possible, one business day by default. Urgent tickets got a first response within 4 hours and a resolution target of one business day.
Ticket events
Pick a macro, then press Apply. The suggested one matches the ticket's tag. Sample wording, not the real templates.
Automations that prevented tickets from getting lost
Every ticket got three things
A tag, an owner, and a first reply with a clear next step, before any deep work began. That was the triage rule, and it had no exceptions.
Timers caught the stalls
Pending for 3 business days: reminder to the owner. On hold for 5: escalate. Urgent and unresolved after 4 hours: escalate. Solved with no reply for 48 hours: close.
Off-channel became on-channel
Slack DMs, direct emails and requests routed through Sales were converted into tickets, and the requester got a friendly redirect to the support address.
Sample ticket. The guardrails are the part people never see until something would have been forgotten.
| When | What happened |
|---|---|
| A ticket arrived | Auto-acknowledgment to the requester, source channel logged, ticket into the New queue |
| Triage was done | Category tag, owner and first reply with a next step, before any deep work |
| Pending for 3+ business days | Reminder to the ticket owner to follow up or close |
| The urgent tag was added | Ticket jumped to the top of the daily view; escalated if unresolved after 4 hours |
| A request came in off-channel | Converted to a ticket; requester redirected to the support address |
| A ticket was solved | Resolution summary written so it stays searchable; auto-closed after 48 hours with no reply |
| Response rules | Target |
|---|---|
| Standard ticket, first reply | Same day when possible, 1 business day by default |
| Urgent ticket, first reply | Within 4 hours |
| Urgent ticket, resolution | 1 business day |
| Pending with no reply | Reminder at 3 business days, closed at 5 |
| On hold with no update | Escalated at 5 business days |
| Solved with no reply | Closed after 48 hours |
Open it, work the queue, go home
One queue
Every morning: open the triage queue, see what needed attention, work through it. No Slack digging, no checking five inboxes, no wondering who dropped the ball.
Flags
Escalations, follow-ups overdue, and tickets converted from DMs showed on the row, so the exceptions were the first thing I saw.
Age and targets up front
How long each ticket had been in the system, and whether its first-response target was met, sat on the row next to the status.
Ticket
Next steps
Ticket
Status
Ticket
Action needed
Ticket
Status
Ticket
Closeout
Ticket
Status
Click a ticket to open it. Sample tickets, fictional names.
Tool change fails if people keep DM-ing Sales
Internal first
I met with Sales and agreed the routing rules, so support requests stopped arriving through the sales team.
Then the families, then the habit
Families and counselors got clear guidance on where to send requests. For a while every off-channel request was converted and redirected, every time, until the new path was the default.
Tracking beyond tickets
Counselor tracker
A shared Google Sheet I built and maintained: coverage, student load, responsiveness, quality signals and onboarding stage for every counselor.
Onboarding tracker and training manual
Standard steps for every new hire so nobody slipped through, plus a manual documenting procedures, tools and expectations.
Reported to the team
Tracker stats were presented in team meetings, so coverage gaps and heavy loads were discussed before they became problems.
| Counselor | Focus | Load | Status | Response | Quality |
|---|---|---|---|---|---|
| Sarah Kim | College admissions | 18 students | Active | < 24 hr | ★★★★★ |
| David Chen | Essay review | 22 students | Heavy | < 24 hr | ★★★★ |
| Priya Patel | College admissions | 12 students | Onboarding | 48 hr | New |
| James Wright | Extracurriculars | 15 students | Active | < 12 hr | ★★★★★ |
| Maria Santos | Financial aid | 20 students | Active | < 24 hr | ★★★★ |
| Tom Bradley | Test prep | 9 students | Onboarding | 36 hr | New |
| Lisa Park | College admissions | 16 students | Active | < 24 hr | ★★★★★ |
| Kevin Nguyen | Essay review | 14 students | Active | < 12 hr | ★★★★★ |
The counselor tracker. Sample rows, fictional names.
Results
How I think about operations
Friction > Firefighting
Notice the friction early and fix it before it becomes standard practice.
Structure > Heroics
Build structure people will follow, matching how the work really moves.
One source > Five half-systems
One clear place for the truth instead of scattered channels.
People > Process
Design for the people doing the work. Fewer interruptions, clearer expectations.