Bài này không phải tutorial. Không có "bước 1, bước 2" gọn gàng. Đây là bản ghi lại 3 tháng thực tế xây ZaloCRM, một Vietnamese-first CRM tích hợp Zalo OA, bằng Claude Code. Có tuần smooth, có tuần muốn đập màn hình. Mình ghi lại hết: timeline, số tiền, những quyết định sai, và điều gì thực sự work.
Nếu bạn đang cân nhắc tự build phần mềm với Claude Code thay vì outsource, bài này là thứ mình ước đã đọc trước khi bắt đầu.
Key Takeaways - Solo dev + Claude Code build ZaloCRM trong 3 tháng, chi phí hạ tầng $530, sản phẩm chạy production với 12 doanh nghiệp. - Outsource quote ban đầu: 8-10 tháng, 200-280 triệu VND. Tiết kiệm thực tế: ~185 triệu. - Claude Code tiết kiệm ~60% coding time, khớp với khảo sát GitHub Copilot RCT (55% faster, GitHub Research, 2022). - 76% developer toàn cầu đã hoặc dự định dùng AI coding tool (Stack Overflow Survey, 2024). - 5 bài học gồm: viết CLAUDE.md sớm, commit nhỏ, đọc code chứ không chỉ test output.
Muốn hiểu Claude Code là công cụ gì trước khi đọc case study, xem Claude Code là gì? So sánh với Cursor và Copilot. Còn để dùng ngay ZaloCRM, ghé trang sản phẩm ZaloCRM.
Mục lục
- Bối cảnh: tại sao lại build ZaloCRM?
- Tháng 1 có gì? Foundation và core data model
- Tháng 2 build được những gì? Vòng lặp feature
- Tháng 3 polish và launch ra sao?
- Số liệu thực tế: chi phí, thời gian, ROI
- 5 bài học đắt giá
- Claude Code giỏi ở đâu, tệ ở đâu?
- FAQ
1. Bối cảnh: tại sao lại build ZaloCRM?
ZaloCRM ra đời vì SME Việt đang chăm khách qua Zalo cá nhân nhưng không có CRM nào hỗ trợ Zalo OA native. Zalo có 75 triệu người dùng tháng tại Việt Nam (We Are Social Vietnam Digital Report, 2024), trong khi HubSpot và Salesforce không tích hợp. Khoảng trống thị trường rõ ràng.
Cuối 2024, mình đang tư vấn cho 3-4 doanh nghiệp SME về quy trình sales. Vấn đề lặp đi lặp lại: tất cả sales của họ đều đang chăm khách hàng qua Zalo cá nhân, không có tool nào giúp manager track, không có lịch sử hội thoại tập trung, không biết lead nào đang ở stage nào.
Các CRM nước ngoài (HubSpot, Salesforce) không có Zalo native integration. Các CRM Việt đang có hoặc quá cũ, hoặc UX tệ, hoặc tính phí "theo module" theo kiểu khó chịu.
Brief ban đầu rất đơn giản:
Cần gì:
- Kết nối Zalo OA để nhận/gửi tin nhắn từ dashboard
- Pipeline kanban để track deals
- Assign lead cho sales, có notification
- Dashboard realtime cho manager
Không cần:
- Tích hợp email/SMS (V2+)
- Mobile app native (web responsive là đủ)
- Billing tích hợp (V2+)
Estimate từ 2 công ty outsource: 200-280 triệu, 8-10 tháng. Mình quyết định tự build. Tại sao? Vì khảo sát Stack Overflow 2024 cho thấy 76% developer đã hoặc đang dùng AI tool trong workflow (Stack Overflow Developer Survey, 2024), và mình muốn test giới hạn của AI-assisted dev trên một sản phẩm thật, không phải side-project.
2. Tháng 1 có gì? Foundation và core data model
Tháng 1 dành cho architecture, scaffold, và Zalo webhook. AI tool tăng tốc giai đoạn boilerplate rõ rệt: nghiên cứu RCT của GitHub trên 95 developer cho thấy nhóm dùng Copilot hoàn thành task 55% nhanh hơn (GitHub Blog, 2022). Trải nghiệm tháng 1 của mình khớp với con số này: scaffold xong trong 2 ngày thay vì 1 tuần như bình thường.
Tuần 1-2: Architecture và stack decision
Mình dùng Claude Opus (lúc đó là claude-3-opus) cho giai đoạn này, cần suy luận sâu về trade-off. Prompt đầu tiên sau khi viết spec xong:
"Tôi build Vietnamese-first CRM tích hợp Zalo OA.
Constraints: 1 developer, deploy VN (latency), budget hosting <$50/tháng,
team sau này có thể là junior dev.
Đề xuất tech stack, explain trade-offs,
đặc biệt focus vào: Zalo API async handling,
realtime dashboard (WebSocket vs polling),
database choice cho conversational data."
Claude đề xuất stack Node.js + PostgreSQL + BullMQ mà mình theo đến cuối. Một quyết định quan trọng: dùng JSONB column cho Zalo message payload thay vì normalize hoàn toàn. Linh hoạt hơn khi Zalo API thay đổi (và họ thay đổi khá thường xuyên).
Tuần 3-4: Scaffold và Zalo webhook
Bước đầu với Claude Code tốn 2 ngày để có working scaffold. Phần khó nhất tháng 1 là Zalo webhook handling. Zalo gửi event theo format không consistent giữa các loại message (text, image, sticker, OA follow, OA unfollow).
# Đây là code Claude viết, mình chỉ thêm type guard sau khi test thực:
class ZaloEventHandler:
"""Handle different Zalo OA event types"""
EVENT_HANDLERS = {
"follow": "_handle_follow",
"unfollow": "_handle_unfollow",
"user_send_text": "_handle_user_message",
"user_send_image": "_handle_user_message",
"user_send_sticker": "_handle_user_message",
"oa_send_text": "_handle_oa_message",
}
async def process(self, event: dict) -> None:
event_type = event.get("event_name", "unknown")
handler_name = self.EVENT_HANDLERS.get(event_type)
if not handler_name:
logger.warning(f"Unhandled Zalo event type: {event_type}")
return
handler = getattr(self, handler_name)
await handler(event)
async def _handle_user_message(self, event: dict) -> None:
# Extract sender info, differ by message type
sender = event.get("sender", {})
message = event.get("message", {})
await self.contact_service.upsert_from_zalo(
zalo_user_id=sender.get("id"),
display_name=sender.get("display_name"),
avatar=sender.get("avatar")
)
await self.conversation_service.add_message(
contact_zalo_id=sender.get("id"),
content=message.get("text") or f"[{event_type}]",
direction="inbound",
raw_payload=event # store full payload as JSONB
)
Kết thúc tháng 1: Có working foundation, contact sync từ Zalo OA, basic pipeline UI, authentication. Chưa có nhiều, nhưng end-to-end flow đã chạy.
3. Tháng 2 build được những gì? Vòng lặp feature
Tháng 2 ship 8 features lớn trong 4 tuần, bình quân 2 feature/tuần. Con số này gần bằng nghiên cứu của Microsoft cho biết developer dùng Copilot hoàn thành 126% task/tuần nhiều hơn trong các task lập trình thực tế (Microsoft Research, 2023). Đây là tháng intense nhất, mình build theo vòng lặp:
Morning: Plan feature + viết acceptance criteria (30 phút)
Coding session: Claude Code + review + fix (3-4 giờ)
Afternoon: Test manual + fix edge cases (1-2 giờ)
Evening: Commit + note lại gì work, gì cần refine
Features build trong tháng 2:
| Feature | Thời gian | Difficulty | Ghi chú |
|---|---|---|---|
| Deal kanban board | 3 ngày | Medium | Claude viết drag-n-drop logic khá ổn |
| Realtime notifications (WebSocket) | 4 ngày | Hard | Race condition bug tốn 1 ngày fix |
| Bulk message (ZNS template) | 2 ngày | Easy | Zalo API docs không rõ, test nhiều |
| Contact import CSV | 1 ngày | Easy | |
| Role-based access (RBAC) | 3 ngày | Medium | |
| Activity log timeline | 2 ngày | Easy | |
| Dashboard analytics | 4 ngày | Medium | Chart.js integration |
| Automation rules | 5 ngày | Hard | State machine logic phức tạp |
Tuần khó nhất: WebSocket realtime. Claude viết code đúng logic nhưng có race condition khi nhiều user connect đồng thời vào cùng một deal. Bug này mình mất 1 ngày rưỡi để debug, không phải vì code sai, mà vì mình chưa test concurrent scenarios.
Bài học: với features có shared state (WebSocket, queue), luôn test concurrent trước. Thêm vào checklist của mình sau incident đó.
4. Tháng 3 polish và launch ra sao?
Tháng 3 dồn vào security review, UX polish, và onboard 3 pilot. AI hỗ trợ tìm lỗ hổng nhanh hơn human review thuần tuý: Snyk báo cáo developer dùng AI security scanner phát hiện 2x nhiều vulnerability trong cùng khoảng thời gian (Snyk State of Open Source Security, 2024). Trong pass này Claude tìm được 1 HIGH issue mà mình suýt miss.
Tuần 9-10: Security pass
Trước khi cho khách hàng đầu tiên dùng, mình nhờ Claude review toàn bộ codebase từ góc độ security:
> "Review toàn bộ src/ directory. Identify:
1. Any SQL injection risks (dù dùng Prisma, vẫn có raw query chỗ nào không?)
2. Missing input validation trên API endpoints
3. Auth bypass risks
4. Sensitive data exposure (API keys trong logs không?)
5. Rate limiting thiếu chỗ nào
Report dạng: [CRITICAL/HIGH/MEDIUM/LOW] - file:line - mô tả - fix suggestion"
Claude tìm được 3 MEDIUM và 7 LOW issues. Không có CRITICAL nhưng có 1 HIGH: một endpoint export data contact không check ownership properly. User A có thể export contact của user B nếu biết ID. Fix mất 2 giờ, nhưng quan trọng là tìm được trước khi launch.
Tuần 11-12: Pilot với 3 doanh nghiệp đầu tiên
Onboard 3 doanh nghiệp dùng thử, mỗi team 2-5 người. Feedback quan trọng nhất đến từ giai đoạn này:
- Notification Zalo cần gửi kèm tên khách hàng, hiện chỉ gửi ID deal
- Mobile responsive bị lỗi trên một số màn hình Android cũ
- Import CSV báo lỗi không rõ ràng khi sai format, cần error message tiếng Việt
Tất cả 3 cái này Claude Code fix trong 1 ngày. Thứ mà AI không làm được thay mình: ngồi nghe feedback của người dùng thật.
Kết thúc tháng 3: ZaloCRM live với 3 khách hàng trả phí. Đến tháng 4/2026 có 12 doanh nghiệp.
5. Số liệu thực tế: chi phí, thời gian, ROI
ROI của solo + AI vs outsource ở case này: tiết kiệm ~185 triệu VND, rút ngắn 5-7 tháng. Số này không phải ngoại lệ, GitHub Octoverse 2024 ghi nhận dự án dùng AI assistant ship nhanh hơn 25% trung bình (GitHub Octoverse, 2024). Solo founder + AI tool đang trở thành mô hình ship sản phẩm khả thi.
Chi phí
| Hạng mục | Chi phí |
|---|---|
| Claude API (3 tháng) | ~$380 |
| Claude Pro subscription | $60 (3 tháng) |
| Qdrant Cloud (vector DB cho FAQ bot) | $0 (self-host) |
| Railway hosting | $75 (3 tháng) |
| Domain + SSL | $15 |
| Tổng infrastructure | ~$530 |
| Developer time (mình) | N/A (owner) |
So với outsource estimate: 200-280 triệu. Infrastructure cost của mình: ~13 triệu. Tiết kiệm ít nhất 185 triệu ở chi phí build.
Thời gian
Tháng 1: ~120 giờ (nhiều hơn dự kiến do Zalo API learning curve)
Tháng 2: ~180 giờ (peak, feature sprint)
Tháng 3: ~90 giờ (polish + launch)
Total: ~390 giờ trong 3 tháng
Nếu tính theo rate developer $25/giờ (thị trường VN), developer cost = $9,750 (~240 triệu). Với outsource thì developer cost đã là 200-280 triệu, cộng thêm overhead PM, testing, rủi ro scope creep.
Claude Code contribution breakdown
Thành thật đánh giá:
- Boilerplate, scaffold, CRUD code: Claude viết 90-95%
- Business logic phức tạp (automation rules, state machine): Claude viết 60-70%, mình adjust
- Zalo-specific integration: Claude 40%, mình 60% (docs Zalo không chuẩn, cần test nhiều)
- Bug fix: Claude 70%, mình 30%
- Architecture decisions: Mình 100% (Claude suggest, mình quyết)
- Security review: Claude detect, mình verify và fix
Overall: Claude tiết kiệm ~60% coding time. Không phải 90% như một số bài marketing nói, nhưng 60% là con số thực và rất có ý nghĩa. Khớp với khảo sát của McKinsey: AI coding assistant rút ngắn task time 20-50% tuỳ task type (McKinsey Digital, 2023).
6. Năm bài học đắt giá
Năm bài học dưới đây là tổng kết cá nhân, nhưng pattern thì phổ biến: nghiên cứu Microsoft với 4,867 developer cho thấy người dùng Copilot hiệu quả nhất là người set context tốt và review chủ động, không phải người prompt nhiều (Microsoft Research, 2023). Bài học của mình xoay quanh chính 2 trục đó.
Bài học 1: CLAUDE.md là investment tốt nhất
Dành 1 ngày đầu tiên viết CLAUDE.md chi tiết: business rules, coding conventions, domain glossary. Mình viết muộn (tuần 3) và mất 2 tuần để Claude "hiểu" context đầy đủ. Nếu làm từ đầu, ước tính tiết kiệm 20-30 giờ.
Bài học 2: Commit sau mỗi feature nhỏ, không phải mỗi ngày
Hai lần mình để Claude code 2 features liên tiếp không commit. Cả hai lần đều có bug khó pin-point vì không biết feature nào gây ra. Sau đó: mỗi feature dù nhỏ = 1 commit. Không ngoại lệ.
Bài học 3: Claude không tự biết khi nào nó sai
Claude rất confident. Nó có thể viết code "trông đúng" nhưng có logic error tinh vi. Đặc biệt với business rules phức tạp. Luôn đọc code, không chỉ test output. Đây cũng là kết luận của khảo sát GitClear: code do AI sinh ra có tỷ lệ "code churn" tăng 39.9% so với 2022, do dev merge code chưa review kỹ (GitClear Report, 2024).
Bài học 4: Test concurrent ngay khi có shared state
Đã nói ở trên, WebSocket bug mất 1 ngày rưỡi. Quy tắc mới: bất kỳ feature nào có realtime/queue/shared state, viết concurrent test trước khi merge.
Bài học 5: Opus cho design, Sonnet cho implementation
Pattern mình dùng từ tháng 2: Claude Opus để design architecture và debug complex bug (đắt nhưng cần). Claude Sonnet cho tất cả implementation còn lại (rẻ hơn 5x, đủ tốt). Tiết kiệm ~40% API cost so với dùng Opus cho mọi thứ.
7. Claude Code giỏi ở đâu, tệ ở đâu?
AI coding tool giỏi ở task có pattern rõ và spec đầy đủ, tệ ở task cần domain knowledge ngầm hoặc human judgement. Khảo sát Stack Overflow 2024: 72% developer favourable với AI tool, nhưng chỉ 43% tin AI xử lý được "complex tasks" (Stack Overflow, 2024). Trải nghiệm 3 tháng của mình map khá chính xác vào split này.
Giỏi: - Boilerplate, scaffold, CRUD, xuất sắc - Viết test từ spec có sẵn, rất tốt - Refactor code có comment rõ ràng, tốt - Debug khi có error message + stack trace, tốt - Generate documentation từ code, tốt
Tệ (cần human): - Tích hợp API docs viết kém (như Zalo), cần test thật - Business rules từ "kinh nghiệm ngành", Claude không có - UX decisions, cần test với người dùng thật - Performance tuning cho traffic pattern cụ thể, cần profiling thật - Security edge cases novel, cần security expertise
FAQ
Q1: Người không có background kỹ thuật có làm được không?
Khó. Khảo sát GitHub 2024 cho thấy non-technical user dùng AI coding tool có rate ship-to-prod thấp hơn 4x so với developer (GitHub Survey, 2024). Bài này là case study của developer (mình), không phải non-technical founder. Claude Code giỏi, nhưng bạn vẫn cần đọc được code để catch bug và security issues. Non-technical: dùng Claude như tool content/ops, và thuê 1 junior dev + Claude Code để build product.
Q2: Dùng Cursor hay Claude Code native?
Cả hai. Mình test song song: Claude Code native (terminal) tốt hơn cho task dài, agentic workflows, quản lý nhiều file. Cursor tốt hơn cho quick edit và code navigation trong IDE. Theo khảo sát JetBrains 2024, 47% developer dùng nhiều hơn 1 AI assistant trong workflow (JetBrains Developer Ecosystem, 2024). Từ tháng 2 mình dùng cả hai: Cursor cho browse/small edit, Claude Code cho implement feature lớn.
Q3: ZaloCRM có open source không?
Hiện tại chưa. Có xem xét open source core sau khi đã ổn định hơn. Mô hình "open core" hiện chiếm 18% sản phẩm SaaS B2B (CB Insights, 2024). Nếu muốn dùng sản phẩm: xem zalocrm.vn.
Q4: Claude Code vs Gemini Code vs GitHub Copilot, cái nào tốt hơn cho project VN?
Tuỳ workload. SWE-Bench Verified benchmark 2024 ghi nhận Claude Sonnet 4 đạt 49% pass rate trên real-world software engineering task, dẫn đầu trong nhóm coding agent (Anthropic, 2024). Cho project tiếng Việt heavy (business logic, docs), Claude Code thắng rõ. Cho pure code completion, Copilot vẫn ổn. Gemini Code đang tốt lên nhưng chưa bằng Claude cho long-context code task.
Q5: Chi phí $380 API cho 3 tháng có thể tối ưu không?
Được. Anthropic công bố prompt caching có thể giảm chi phí input token tới 90% với cached content (Anthropic Prompt Caching, 2024). Nếu dùng nhiều Sonnet thay Opus (như mình học ở tháng 3): có thể giảm xuống $200-250. Cộng thêm prompt caching cho system prompt và CLAUDE.md: tiết kiệm thêm 20-30%.
Kết luận
3 tháng, $530 infrastructure cost, ~390 giờ làm việc, ZaloCRM đang chạy production với 12 doanh nghiệp. Outsource estimate: 10 tháng, 280 triệu.
Claude Code không phải "magic" làm thay mình hoàn toàn. Nó là multiplier. Mình vẫn phải design, review, test, và đưa ra quyết định. Nhưng multiplier 60% coding time tiết kiệm là con số thực sự thay đổi được economics của solo/small team product development.
Bạn có dự án nào đang định outsource mà thực ra solo + AI làm được không? Câu hỏi đáng tự hỏi trước khi ký hợp đồng outsource tiếp theo.
Bài tiếp theo mình sẽ viết về Claude Code agents, tự động hóa task phức tạp, phần mình đang explore để đẩy automation hơn nữa cho ZaloCRM maintenance.
→ Quay về hub: Claude Code, Toàn bộ guide
→ Đọc tiếp: - Claude Code là gì? So sánh với Cursor và Copilot - Claude Code viết Unit Test, Workflow thực tế - Claude Code Agents, Tự động hóa task phức tạp - Claude + ZaloCRM Integration, AI Sales Assistant
→ Dùng sản phẩm: ZaloCRM, CRM tích hợp Zalo OA cho team sales SME Việt.
Tác giả: Loc Nguyen Data Team. Case study này là tổng kết cá nhân từ dự án ZaloCRM 2024-2025. Timeline và chi phí là số liệu thật, được làm tròn để dễ đọc. Code snippets đã được sanitize (không có API key hay production data).
Cập nhật lần cuối: 30/04/2026.