Cách Mình Bắt Đầu Dự Án
Từ yêu cầu đến commit đầu tiên - PRD, setup repo, và lập kế hoạch ban đầu với Claude Code
Mọi dự án đều bắt đầu từ một yêu cầu ở đâu đó trong công ty. Quy trình từ yêu cầu đó đến commit đầu tiên cần chỉn chu -- bỏ qua bước nào thì trả giá bước đó.
Câu hỏi cốt lõi: Mình đang giải quyết vấn đề gì và làm sao biết đã giải quyết xong?
Quy trình
Yêu cầu → Làm rõ → PRD → Setup Repo → Lập kế hoạch với Claude → Sprint đầu tiên
Bước 1: Làm rõ yêu cầu
Yêu cầu đến từ nhiều hình thức: tin nhắn Slack, cuộc họp, email. Trước khi viết bất cứ gì, hỏi cho rõ:
| Câu hỏi | Tại sao |
|---|---|
| Ai sẽ dùng cái này? | Xác định độ phức tạp UX |
| Deadline khi nào? | Giới hạn phạm vi khả thi |
| Thành công trông như thế nào? | Định nghĩa tiêu chí chấp nhận |
| Cần data/API gì? | Phát hiện yêu cầu kỹ thuật |
| Có giải pháp sẵn chưa? | Tránh xây lại từ đầu |
Ví dụ: AI Overviews Checker
Yêu cầu gốc: "Mình cần tool kiểm tra AI Overviews cho keywords của khách hàng"
Sau khi làm rõ:
- Người dùng: Team SEO (5-10 người)
- Deadline: 2 tuần cho MVP
- Thành công: Kiểm tra được 100+ keywords cùng lúc, thấy cái nào có AI Overviews
- API: DataForSEO SERP API
- Hiện tại: Kiểm tra thủ công trên Google (chậm)
Bước 2: Viết PRD
Product Requirements Document ghi lại cái mình đang xây. Không cần dài -- 1-2 trang là đủ. 30 phút viết PRD tiết kiệm hàng giờ sửa lại sau.
Template
# [Tên Dự Án] PRD
## Vấn đề
Đang giải quyết pain point gì? Ai gặp vấn đề này?
## Giải pháp
Mô tả tổng quan cái mình xây.
## Người dùng
Ai sẽ dùng? Bao lâu một lần? Trình độ kỹ thuật?
## Yêu cầu
### Bắt buộc có (MVP)
- [ ] Yêu cầu 1
- [ ] Yêu cầu 2
### Nên có (v1.1)
- [ ] Tính năng phụ 1
### Không làm (loại bỏ rõ ràng)
- Không xây X
- Không hỗ trợ Y
## Ràng buộc kỹ thuật
- Phải dùng Supabase instance hiện có
- Phải tích hợp DataForSEO
- Ngân sách: $X/tháng cho chi phí API
## Chỉ số thành công
- Xử lý được 100 keywords trong dưới 5 phút
- Độ chính xác 90% so với kiểm tra thủ công
## Timeline
- Tuần 1: MVP
- Tuần 2: Polish và deploy
## Câu hỏi còn mở
- [ ] Xử lý rate limit thế nào?
- [ ] Có cần user account không?
| Nên | Không nên |
|---|---|
| Cụ thể về yêu cầu | Viết mục tiêu mơ hồ |
| Ghi rõ những gì không làm | Cố gắng xây hết mọi thứ |
| Liệt kê câu hỏi còn mở | Giả vờ biết hết |
| Định nghĩa chỉ số thành công | Bỏ qua tiêu chí chấp nhận |
| Giữ trong 1-2 trang | Viết tiểu thuyết |
Bước 3: Setup Repository
Tạo GitHub Repo
- Vào GitHub, chọn New Repository
- Đặt tên rõ ràng:
keyword-clustering-toolchứ không phảiproject1 - Thêm README, .gitignore (Node hoặc Python), và MIT license
- Clone về máy
Cấu trúc ban đầu
Với dự án NextJS:
# Tạo NextJS app
bunx create-next-app@latest project-name --typescript --tailwind --eslint --app
# Di chuyển vào thư mục
cd project-name
# Thêm Shadcn UI
bunx shadcn-ui@latest init
# Thêm dependencies thường dùng
bun add @supabase/supabase-js
File cần tạo ngay
project/
├── .env.example # Template cho biến môi trường
├── .env.local # Biến môi trường local (git-ignored)
├── README.md # Tổng quan dự án
├── CHANGELOG.md # Theo dõi thay đổi
├── docs/
│ └── PRD.md # Tài liệu PRD
└── src/
└── ... # Code
Template .env.example
# Database
SUPABASE_URL=
SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
# API bên ngoài
DATAFORSEO_LOGIN=
DATAFORSEO_PASSWORD=
# AI
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
# App
NEXT_PUBLIC_APP_URL=http://localhost:3000
Bước 4: Lập kế hoạch với Claude Code
Trước khi viết code, planning session với Claude Code giúp rất nhiều. Nó sẽ hiểu kế hoạch mà chính nó đề xuất tốt hơn, và tạo code nhất quán hơn.
Prompt lập kế hoạch
I'm starting a new project: [tên dự án]
## Context
[Dán PRD hoặc yêu cầu chính vào đây]
## Tech Stack
- NextJS 14 with App Router
- Supabase for database
- Tailwind CSS + Shadcn UI
- [Công nghệ khác nếu có]
## Questions
1. Cấu trúc thư mục nên như thế nào?
2. Cần những bảng database nào?
3. Những component chính là gì?
4. Cần những API route nào?
5. Thứ tự xây dựng nên thế nào?
Please give me a detailed technical plan before we start coding.
Claude nên đưa ra: cấu trúc thư mục, database schema, phân tách component, API endpoints, và thứ tự build.
Ví dụ: Lập kế hoạch Keyword Clustering
## Folder Structure
src/
├── app/
│ ├── page.tsx # Trang upload keywords
│ ├── results/
│ │ └── [id]/page.tsx # Xem kết quả clustering
│ └── api/
│ ├── upload/route.ts
│ └── cluster/route.ts
├── components/
│ ├── keyword-upload.tsx
│ ├── cluster-view.tsx
│ └── progress-indicator.tsx
└── lib/
├── supabase.ts
└── clustering.ts
## Database Schema
- clustering_jobs: id, user_id, status, created_at
- keywords: id, job_id, text, cluster_id
- clusters: id, job_id, label, keywords_count
## Build Order
1. Setup database + UI cơ bản
2. Upload file + parse keyword
3. FastAPI clustering endpoint
4. Hiển thị kết quả
5. Polish + xử lý lỗi
Trước khi code, check:
- Kế hoạch khớp với PRD?
- Phạm vi thực tế so với timeline?
- Có điểm chưa rõ về kỹ thuật?
- Team đồng ý hướng tiếp cận?
Bước 5: Commit đầu tiên
Nhờ Claude Code setup khung sườn:
Based on the plan we discussed, please:
1. Tạo cấu trúc thư mục
2. Setup database schema (Supabase migration)
3. Tạo placeholder component
4. Setup biến môi trường
Chưa cần implement chức năng - chỉ cần khung sườn thôi.
Commit:
git add .
git commit -m "Initial project structure
- Set up NextJS with Tailwind and Shadcn
- Create folder structure per technical plan
- Add database schema
- Configure environment variables
See docs/PRD.md for project requirements"
git push -u origin main
Những lỗi hay gặp
Code mà không có PRD -- yêu cầu không rõ ràng nhảy ra giữa dự án, phạm vi thay đổi liên tục. Luôn viết PRD dù đơn giản.
Setup quá phức tạp -- tốn cả ngày cho kiến trúc "hoàn hảo" trước khi feature nào hoạt động. Bắt đầu đơn giản nhất có thể, refactor sau khi hiểu vấn đề rõ hơn.
Không cho Claude Code tham gia planning -- tự thiết kế mọi thứ rồi vật lộn truyền đạt cho AI. Để Claude giúp plan từ đầu, nó implement nhất quán hơn.
Bỏ qua skeleton commit -- commit đầu tiên là đống code khổng lồ. Commit cấu trúc trước, dễ review hơn nhiều.
Checklist
Ổn nếu:
- Có PRD rõ ràng với yêu cầu cụ thể
- Repo tồn tại với cấu trúc hợp lý
- .env.example ghi lại tất cả biến cần thiết
- README giải thích dự án là gì
- Có kế hoạch kỹ thuật từ Claude
- Commit đầu tiên sạch và dễ review
Cần sửa nếu:
- Đang code mà không có yêu cầu viết ra
- Không ai biết "hoàn thành" trông như nào
- Cấu trúc thư mục nghĩ tới đâu làm tới đó
- Không có documentation
- Setup môi trường chỉ truyền miệng
Tham khảo nhanh
File mọi dự án cần
| File | Mục đích |
|---|---|
| README.md | Đây là gì, cách chạy |
| .env.example | Cần biến môi trường nào |
| CHANGELOG.md | Thay đổi gì ở mỗi version |
| docs/PRD.md | Đang xây gì và tại sao |
Planning prompts
| Mình cần... | Hỏi Claude... |
|---|---|
| Thiết kế database | "What tables do I need for [feature]?" |
| Cấu trúc code | "What folder structure makes sense for [project type]?" |
| Lập kế hoạch API | "What endpoints do I need for [feature]?" |
| Ưu tiên công việc | "What's the minimum to get [core feature] working?" |