Appearance
📝 Sprint, Scope Creep, và bài học Focus
Mở đầu — "Em sẽ làm capstone HOÀNH TRÁNG nhất lớp!"
Mai, 24 tuổi, sinh viên năm cuối ngành Hệ thống Thông tin Quản lý tại ĐH Kinh tế TP.HCM. Mai đăng ký khóa Data Analytics vì muốn bổ sung portfolio trước khi apply vị trí Junior DA. Background: Excel thành thạo, SQL ổn, Python mới học được 3 tháng, Power BI vừa xong tutorial. Tính cách: cầu toàn, hay so sánh bản thân với người khác, và có xu hướng ôm đồm quá nhiều thứ cùng lúc.
Buổi 18 — chọn đề bài capstone. Trong khi các bạn chọn dataset đơn giản (e-commerce 5,000 rows, HR turnover 1,470 rows), Mai chọn dataset phức tạp nhất: dữ liệu subscription của một SaaS platform — 85,000 rows, 42 columns, 3 bảng cần JOIN, data từ 2020 đến 2025.
"Của khó mới quý," Mai nghĩ. "Dataset lớn → analysis sâu hơn → điểm cao hơn → CV đẹp hơn."
Thầy Khoa — giảng viên — nhìn data audit của Mai rồi hỏi: "Em plan trả lời bao nhiêu business questions?"
"Dạ 10 questions thầy! Em muốn cover hết: churn prediction, revenue forecasting, customer segmentation, cohort analysis, funnel optimization, pricing analysis, feature usage analysis, NPS correlation, upsell prediction, và seasonal patterns."
Thầy nhíu mày: "10 questions trong 1 sprint? Mai ơi, industry standard là 3-5 questions cho một analysis project. Google Data team cũng chỉ focus 2-3 key questions mỗi sprint."
"Dạ em cố gắng được ạ!"
Thầy lắc đầu nhẹ nhưng để Mai thử.
Phần 1: Ngày 1 — "Everything everywhere all at once"
8:00 AM — Sprint begins
Mai mở Jupyter Notebook, gõ dòng đầu tiên:
python
import pandas as pd
df_users = pd.read_csv('users.csv') # 85,000 rows
df_events = pd.read_csv('events.csv') # 1.2 million rows (!)
df_subscriptions = pd.read_csv('subs.csv') # 95,000 rows"1.2 triệu rows events data?" Mai nuốt nước bọt. Không sao, laptop 16GB RAM, chắc chạy được.
9:00 AM — Data Cleaning
Mai bắt đầu cleaning. df_users có 12% missing ở company_size, 8% missing ở industry. df_events có timestamp cần parse. df_subscriptions có plan_name viết hoa/thường lộn xộn: "Professional", "PROFESSIONAL", "professional", "Prof".
Cleaning 3 bảng mất... 2.5 tiếng. Notebook đã 45 cells mà chưa có 1 chart nào.
11:30 AM — Bắt đầu EDA
Mai vẽ distribution cho TẤT CẢ 42 columns. Mỗi column: histogram + boxplot + value counts. Thêm 30 cells nữa. Notebook bây giờ 75 cells.
"Đợi đã, em vẫn chưa answer business question nào..." Mai nhận ra.
2:00 PM — Bắt đầu answer Q1: Churn Prediction
Mai merge 3 bảng lại:
python
df = df_users.merge(df_subscriptions, on='user_id')
df = df.merge(df_events.groupby('user_id').agg({
'event_type': 'count',
'timestamp': ['min', 'max']
}).reset_index(), on='user_id')Laptop đứng 3 phút. Events data 1.2 triệu rows × 85,000 users = memory overflow. Kernel crash.
"Không..."
3:30 PM — Restart, optimize
Mai restart kernel, sample events data xuống 200,000 rows. Merge lại. Chạy được. Bắt đầu Logistic Regression cho churn prediction...
Nhưng chợt Mai nhớ: "Đợi đã, em còn 9 questions nữa và chưa bắt đầu dashboard."
6:00 PM — Panic
Progress cuối ngày 1:
- ✅ Data cleaning: 70% (3 bảng, nhiều edge cases)
- ⚠️ EDA: 40% (vẽ nhiều chart nhưng không focused)
- ❌ Business questions answered: 0/10
- ❌ Dashboard: chưa bắt đầu
- ❌ Executive summary: chưa bắt đầu
Mai nhìn lại notebook: 137 cells. Nhiều cell chạy lỗi, nhiều cell duplicate, không có structure rõ ràng. Mai cảm thấy overwhelmed.
Phần 2: Peer Review — "Bạn ơi, em đang đi lạc"
Feedback Loop cứu mạng
Sáng ngày 2, thầy Khoa tổ chức peer review session. Mỗi người present progress 3 phút, nhận feedback 5 phút.
Mai present: "Em đã clean 3 bảng, 85,000 users, vẽ distribution cho 42 columns, bắt đầu churn prediction model..."
Hùng — bạn cùng nhóm, background kế toán, chọn dataset HR turnover 1,470 rows — hỏi: "Mai ơi, dashboard đâu?"
"Chưa có..."
"Business questions đã answer chưa?"
"Chưa..."
"Vậy em có 137 cells notebook nhưng chưa trả lời được câu hỏi nào? Em analyze ĐỂ LÀM GÌ?"
Im lặng.
Phương — bạn khác, background marketing, dataset e-commerce 5,000 rows — chia sẻ: "Mai, mình cũng từng như vậy. Ngày đầu mình cũng muốn analyze hết. Nhưng sau đó mình nhận ra: analysis phải phục vụ câu hỏi, không phải ngược lại. Mình chỉ focus 5 questions, mỗi question 1 section trong notebook, và dashboard 3 pages. Hôm qua mình xong 3/5 questions rồi."
Thầy Khoa tổng kết: "Mai, em đang bị scope creep — kẻ thù số 1 của mọi project. Em cố gắng làm 10 thứ cùng lúc, kết quả là 0 thứ hoàn chỉnh. Thà 5 questions answer TỐT hơn 10 questions answer dở."
Bài học scope creep
Mai ghi vào sổ:
❌ Scope Creep = làm nhiều hơn scope ban đầu
→ 10 questions thay vì 5
→ Analyze 42 columns thay vì 10 key columns
→ 3 datasets thay vì 1 optimized merge
→ Churn prediction + forecast + segmentation + ... cùng lúc
✅ Focus = chọn ít, làm sâu
→ 5 questions, mỗi question có clear answer
→ 10 key columns, correlation với business outcome
→ 1 cleaned dataset, optimized
→ Churn analysis sâu, RỒI mới mở rộngPhần 3: Ngày 2 — "Less is more"
Replan: từ 10 xuống 5
Mai ngồi lại, thở sâu, và viết lại plan:
📋 REVISED SPRINT PLAN
━━━━━━━━━━━━━━━━━━━━━━
SCOPE: SaaS Churn Analysis — 5 Questions
Q1: Churn rate trend theo tháng? (Descriptive)
Q2: Segment nào churn cao nhất? (Diagnostic)
Q3: Users churn có pattern gì khác? (Comparative)
Q4: Top factors ảnh hưởng churn? (Diagnostic)
Q5: Recommendations giảm churn? (Prescriptive)
THỜI GIAN:
- Morning: Finish cleaning + Answer Q1-Q3
- Afternoon: Answer Q4-Q5 + Start dashboard
- Evening: Dashboard v1 + Draft summaryCleanup notebook
Mai tạo notebook MỚI — structure rõ ràng:
python
# ============================================
# CAPSTONE: SaaS Churn Analysis
# Author: Mai Nguyen
# Date: 2026-02-18
# ============================================
#
# Table of Contents:
# 1. Setup & Load Data
# 2. Data Cleaning
# 3. Q1: Churn Rate Trend
# 4. Q2: Churn by Segment
# 5. Q3: Churn User Patterns
# 6. Q4: Key Churn Factors
# 7. Q5: Recommendations
# 8. Summary of FindingsCũ: 137 cells, messy. Mới: 42 cells, clean, mỗi section rõ ràng.
Focus vào key variables
Thay vì 42 columns, Mai chọn 10:
| Variable | Lý do | Liên quan đến churn? |
|---|---|---|
tenure_months | Thời gian sử dụng | Rất có — short tenure = high churn |
plan_type | Free / Basic / Pro / Enterprise | Có — plan rẻ churn nhiều hơn |
monthly_revenue | Revenue per user | Có — low revenue users less engaged |
login_frequency | Tần suất đăng nhập/tuần | Rất có — ít login = ít giá trị |
feature_adoption | % features đã dùng | Rất có — dùng ít feature = chưa thấy value |
support_tickets | Số lần contact support | Có — nhiều ticket = frustration |
contract_type | Monthly / Annual | Có — monthly dễ churn hơn |
company_size | Số nhân viên | Có thể — SMB vs Enterprise khác behavior |
onboarding_complete | Đã hoàn thành onboarding? | Có — skip onboarding = không biết dùng |
churned | Target variable | Target |
Kết quả bất ngờ
Đến 4 PM, Mai đã answer 4/5 questions. Notebook gọn gàng, mỗi question có:
- SQL/Python analysis
- 1-2 charts
- Finding box (What → So What → Now What)
Finding quan trọng nhất:
"Users không hoàn thành onboarding churn gấp 4.2x so với users hoàn thành. 68% churned users chưa dùng quá 3/12 core features. Vấn đề không phải product kém — mà users CHƯA BIẾT DÙNG."
Mai nhận ra: 1 finding sâu > 10 findings nông. Nếu Mai cố làm 10 questions, sẽ không bao giờ tìm được insight này.
Phần 4: Dashboard & Summary — "Done is better than perfect"
Dashboard 3 pages
Mai mở Power BI, import cleaned data:
Page 1: Churn Overview
- KPI cards: Total users, Churn rate, MRR, Avg tenure
- Line chart: Monthly churn rate trend
- Donut: Churn by plan type
Page 2: Churn Deep Dive
- Bar chart: Churn rate by segment (plan × contract type)
- Scatter: Feature adoption vs Churn probability
- Table: Top 10 churn factors (từ analysis)
Page 3: Recommendations
- Annotated chart: Onboarding completion vs Churn rate (key finding)
- Summary table: 5 findings + recommendations
3 pages. Không fancy. Không 10 pages. Nhưng mỗi page trả lời câu hỏi rõ ràng.
Peer review lần 2
Hùng review dashboard Mai: "Page 1 clear rồi. Page 2 scatter plot cần label rõ hơn — em không biết trục X là gì. Page 3 recommendation hay — nhưng thêm estimated impact sẽ powerful hơn."
Mai fix 2 điểm trong 15 phút. Dashboard v1 done.
Executive Summary draft
Mai viết 1 trang:
📝 EXECUTIVE SUMMARY — SaaS Churn Analysis
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OBJECTIVE: Phân tích nguyên nhân churn trên platform SaaS 85,000
users (2020-2025) để đề xuất giải pháp giảm churn rate
TOP 3 FINDINGS:
1. Churn rate tăng từ 3.2% → 5.8% trong 6 tháng qua
→ Mất ~400 users/tháng × $50 MRR = $20,000/tháng revenue loss
→ Focus retention cho Monthly plan users
2. 68% churned users chưa hoàn thành onboarding
→ Users không thấy value → rời đi
→ Redesign onboarding: guided tour + in-app tips
3. Feature adoption < 25% → churn probability tăng 4.2x
→ Users chỉ dùng 2-3/12 features
→ Feature discovery campaign: email + in-app notifications
TOP RECOMMENDATION:
Invest vào onboarding redesign — expected impact:
giảm churn 20-30% → save $4,000-6,000 MRR/thángPhần 5: Reflection — "Nhỏ mà chất, hơn to mà rỗng"
Comparison
| Ngày 1 (Before) | Ngày 2 (After) | |
|---|---|---|
| Questions | 10 planned, 0 answered | 5 planned, 5 answered |
| Notebook | 137 cells, messy | 42 cells, structured |
| Dashboard | 0 pages | 3 pages, peer-reviewed |
| Summary | 0 | 1-page draft |
| Feeling | Overwhelmed, panic | Tired but proud |
5 bài học Mai rút ra
1. SCOPE ít hơn bạn nghĩ
→ Planned 10, realistic là 5, excellent ở 3
2. STRUCTURE trước khi CODE
→ Viết outline trước, code sau
→ Table of Contents = roadmap
3. PEER REVIEW sớm
→ Feedback ngày 1 cứu ngày 2
→ Không ai đánh giá bạn khi bạn nhờ giúp
4. FOCUS > BREADTH
→ 1 finding sâu > 10 findings nông
→ Stakeholder nhớ 1 insight powerful, không nhớ 10 charts
5. DONE > PERFECT
→ Dashboard v1 xấu > Dashboard v10 trong đầu
→ Ship first, iterate laterKết quả cuối cùng
Buổi 20, Mai present capstone. Slide 1: "SaaS Churn Analysis — Tại sao users rời đi và làm sao giữ họ lại." Không phải project hoành tráng nhất lớp. Nhưng clear nhất — 5 questions, 5 answers, 3 dashboard pages, 1-page summary. Thầy Khoa comment: "Mai làm đúng điều mà nhiều DA senior vẫn chưa học được: biết khi nào dừng lại và focus."
Hùng — bạn kế toán, dataset 1,470 rows — được điểm cao nhất lớp. Project đơn giản nhưng mỗi chi tiết polish. Mai hạng 3. Không có gì phải buồn.
Lời nhắn của Mai
"Trước đây mình nghĩ capstone = càng phức tạp càng giỏi. Sai. Capstone = càng clear càng giỏi. Scope creep không phải vì bạn tham lam — mà vì bạn chưa biết cái gì quan trọng nhất. Và cách tìm ra cái quan trọng nhất? Bắt đầu, vấp, nhờ feedback, và focus lại. Mình mất 1 ngày để học bài này. Hy vọng bạn không cần mất 1 ngày."
💡 Takeaway cho bạn
| Situation | Scope Creep Approach ❌ | Focus Approach ✅ |
|---|---|---|
| Chọn dataset | Lớn nhất, nhiều bảng nhất | Vừa đủ cho 5 questions |
| Business questions | 10 questions "cho chắc" | 5 questions, mỗi cái sâu |
| EDA | Vẽ chart cho mọi column | Focus key variables liên quan đến question |
| Dashboard | 10 pages, mỗi page 8 charts | 3-5 pages, mỗi page 1-2 insight |
| Timeline | "Làm xong rồi tính" | Time-box: 2h cleaning, 3h analysis, 2h dashboard |
| Peer review | "Để xong rồi show" | Review sớm → fix sớm → kết quả tốt hơn |
"The art of being wise is the art of knowing what to overlook." — William James