Customer Support Builder
Build scalable customer support systems that grow with your product without requiring linear hiring increases.
Core Principle
Support should scale sub-linearly with users. As you grow from 100 to 10,000 users, support volume shouldn't increase 100x. Good self-service systems can keep support needs growing at only 10-20x while user base grows 100x.
Support Maturity Model
Stage 1: Founder-Led (0-100 users)
- Founders answer every question personally
- Learn what users actually struggle with
- Document FAQs manually
- Key Metric: Response time < 2 hours
Stage 2: Documented (100-1,000 users)
- Comprehensive knowledge base
- Email support with templates
- Basic FAQ section
- Key Metric: 30% self-service rate
Stage 3: Self-Service (1,000-10,000 users)
- Searchable help center
- Contextual in-app help
- Automated responses for common issues
- Key Metric: 60% self-service rate
Stage 4: Scaled (10,000+ users)
- AI-powered chatbots
- Community forums
- Video tutorials
- Proactive support (detect issues before tickets)
- Key Metric: 80% self-service rate
Knowledge Base Architecture
Content Structure
Help Center
โโโ Getting Started
โ โโโ Quick Start Guide (< 5 min)
โ โโโ Account Setup
โ โโโ First Steps Tutorial
โโโ Core Features
โ โโโ Feature A Guide
โ โโโ Feature B Guide
โ โโโ Feature C Guide
โโโ Troubleshooting
โ โโโ Common Errors
โ โโโ Performance Issues
โ โโโ Integration Problems
โโโ Account & Billing
โ โโโ Pricing Plans
โ โโโ Billing Issues
โ โโโ Account Management
โโโ API & Integrations
โโโ API Documentation
โโโ Webhooks
โโโ Integration Guides
Article Template
# [Clear, Searchable Title]
**Time to complete**: 3 minutes
**Difficulty**: Beginner/Intermediate/Advanced
## Problem
One-sentence description of what this solves.
## Solution
Step-by-step instructions with screenshots.
1. **Step 1**: Clear action
- Screenshot/GIF
- Expected result
2. **Step 2**: Next action
- Screenshot/GIF
- Expected result
## Troubleshooting
- Problem: X โ Solution: Y
- Problem: A โ Solution: B
## Related Articles
- [Article 1](#)
- [Article 2](#)
Support Channels
Email Support
Setup:
Primary: [email protected]
Routing:
- [email protected] โ Billing team
- [email protected] โ Engineering
- [email protected] โ General inquiries
SLA:
- Critical: 2 hours
- High: 8 hours
- Normal: 24 hours
- Low: 48 hours
Email Templates:
# Welcome Email
Subject: Welcome to [Product]! Here's how to get started
Hi [Name],
Welcome! Here's what to do first:
1. Complete setup: [Link]
2. Try this tutorial: [Link]
3. Join our community: [Link]
Need help? Reply to this email or check our help center: [Link]
[Your Name]
# Issue Resolved
Subject: [Ticket #123] Resolved - [Issue Title]
Hi [Name],
Good news! Your issue is resolved.
**What we did**:
[Clear explanation]
**What you should see**:
[Expected result]
**If the problem returns**:
[Troubleshooting steps]
Was this helpful? [Yes] [No]
[Your Name]
Chat Support
In-App Chat Widget:
<script>
window.intercomSettings = {
app_id: "YOUR_APP_ID",
email: user.email,
user_id: user.id,
created_at: user.createdAt,
plan: user.plan,
help_center: {
search_enabled: true
}
};
</script>
Chat SLA:
- Business hours: 5-minute response
- After hours: Email auto-response
- Expected resolution: 1-3 messages
Chatbot (AI-Powered)
Decision Tree:
User message โ
โโโ Can answer with KB article? โ Send article
โโโ Simple factual question? โ AI answers
โโโ Complex issue? โ Route to human
โโโ Angry/escalated? โ Priority human routing
Implementation:
def handle_support_message(message, user_context):
kb_results = search_kb(message, top_k=3)
if kb_results[0].score > 0.85:
return {
'type': 'article',
'article': kb_results[0],
'confidence': 'high'
}
ai_response = generate_response(
message=message,
kb_context=kb_results,
user_history=user_context
)
if ai_response.confidence > 0.8:
return {
'type': 'ai_response',
'response': ai_response.text,
'sources': kb_results
}
return {
'type': 'human_handoff',
'priority': calculate_priority(message, user_context),
'suggested_agent': route_to_specialist(message)
}
Ticket Management
Ticketing System Schema
interface Ticket {
id: string
status: 'new' | 'open' | 'pending' | 'resolved' | 'closed'
priority: 'low' | 'normal' | 'high' | 'critical'
category: string
subject: string
description: string
requester: User
assignee?: Agent
tags: string[]
created_at: Date
updated_at: Date
resolved_at?: Date
first_response_at?: Date
satisfaction_rating?: 1 | 2 | 3 | 4 | 5
}
Auto-Routing Rules
Routing Rules:
- Condition: subject contains "billing" OR "payment"
Action: Assign to billing-team
Priority: high
- Condition: user.plan == "enterprise"
Action: Assign to enterprise-team
Priority: high
SLA: 2 hours
- Condition: subject contains "API" OR "webhook"
Action: Assign to engineering
Tag: 'api-issue'
- Condition: sentiment == "angry"
Action: Priority routing
Priority: