Một data team làm việc với nhau như thế nào?
Sơ đồ tổ chức thường vẽ mỗi vai trò trong một ô riêng. Công việc thật lại diễn ra ở những chỗ các ô nối với nhau.
Giả sử đội vận hành nhận thấy số đơn bị huỷ tăng trong tuần vừa rồi. Họ muốn biết nguyên nhân để quyết định nên làm việc với nhà hàng, cải thiện việc tìm tài xế hay sửa application.
Để đi từ câu hỏi đến hành động, nhiều team phải cùng góp một phần:
flowchart TD
A["Business team<br/>Đặt câu hỏi"]
B["Backend Engineer<br/>Giải thích data ở hệ thống nguồn"]
C["Data Engineer<br/>Kỹ sư chuẩn bị data đáng tin"]
D["Data Analyst<br/>Chuyên viên phân tích data"]
E["Business team<br/>Đưa ra hành động"]
A --> B --> C --> D --> E
Đây không phải quy trình cứng. Mọi người có thể trao đổi qua lại nhiều lần khi phát hiện câu hỏi hoặc data chưa rõ.
Business team đặt đúng câu hỏi
Business team (team hiểu hoạt động kinh doanh) có thể là đội vận hành, tài chính, marketing hoặc sản phẩm. Trong ví dụ này, đội vận hành biết một đơn bị huỷ có nhiều nguyên nhân:
| cancellation_reason | Ý nghĩa |
|---|---|
customer_cancelled |
Khách hàng tự huỷ |
restaurant_rejected |
Nhà hàng từ chối đơn |
no_driver_found |
Không tìm được tài xế |
system_cancelled |
Hệ thống tự đóng đơn |
Nếu chỉ hỏi “Tại sao đơn bị huỷ nhiều?”, mỗi người có thể hiểu theo một cách. Một câu hỏi rõ hơn là:
Trong bảy ngày vừa rồi, Cancellation Rate (tỷ lệ đơn bị huỷ) tăng ở khu vực nào và nguyên nhân nào đóng góp nhiều nhất?
Cancellation Rate cũng cần được định nghĩa: số đơn bị huỷ chia cho tất cả đơn đã tạo, hay chỉ chia cho những đơn nhà hàng đã nhận? Business team và Data Analyst phải thống nhất điều này trước khi tính.
Backend Engineer giải thích data ở nguồn
Backend Engineer (kỹ sư xây phần xử lý phía sau application) biết trạng thái đơn hàng được ghi vào MySQL lúc nào và application cho phép chuyển trạng thái ra sao.
Một row trong bảng orders có thể trông như sau:
| order_id | area | status | cancellation_reason | updated_at |
|---|---|---|---|---|
| CANCEL-2001 | Tampines | cancelled | no_driver_found | 2026-09-06 12:20:00+08:00 |
Data Engineer cần hỏi Backend Engineer những điều không thể nhìn ra chỉ từ tên field:
cancellation_reasoncó luôn được điền khistatuslàcancelledkhông?- Một đơn đã huỷ có thể được mở lại không?
updated_atdùng timezone nào?- Team sẽ báo cho ai nếu đổi tên hoặc xoá một field?
Những thống nhất về cấu trúc, ý nghĩa và cách thay đổi data thường được gọi là Data Contract (cam kết giữa bên tạo và bên sử dụng data). Với người mới, chỉ cần hiểu rằng hai team phải thống nhất trước khi âm thầm thay đổi data của nhau.
Data Engineer chuẩn bị data đáng tin
Data Engineer (kỹ sư dữ liệu) đưa bảng đơn hàng về Data Warehouse (kho dữ liệu), kiểm tra data rồi tạo một bảng phù hợp cho việc phân tích.
Ví dụ, Source System chứa từng đơn hàng, còn bảng đầu ra tổng hợp theo ngày, khu vực và nguyên nhân:
| order_date | area | cancellation_reason | total_orders | cancelled_orders |
|---|---|---|---|---|
| 2026-09-06 | Tampines | no_driver_found | 1,240 | 96 |
| 2026-09-06 | Tampines | restaurant_rejected | 1,240 | 31 |
Có một chỗ dễ nhầm trong bảng này: hai số 1,240 là cùng một tổng đơn của Tampines ngày 6, được lặp lại ở mỗi nguyên nhân. Nếu cộng chúng, mình sẽ vô tình nhân đôi mẫu số.
Riêng nguyên nhân không tìm được tài xế chiếm 96 / 1,240 × 100 ≈ 7.74%. Nếu hai dòng trên là toàn bộ đơn huỷ, và mỗi đơn chỉ có một nguyên nhân, tỷ lệ huỷ chung là (96 + 31) / 1,240 × 100 ≈ 10.24%.
Khi gộp nhiều ngày hoặc khu vực, mình cũng cần lấy tổng đơn đúng một lần cho mỗi cặp ngày/khu vực. Ở đây, ngày được tính từ lúc tạo đơn theo giờ Singapore. Bảng nguồn có một row mỗi đơn, còn bảng tổng hợp có một row mỗi ngày, khu vực và nguyên nhân; vì vậy cách kiểm tra trùng ở hai bảng sẽ khác nhau.
Trước khi giao bảng cho Analyst, Data Engineer có thể kiểm tra:
| Kiểm tra | Nếu không đạt thì sao? |
|---|---|
order_id không bị trùng |
Số đơn có thể bị tính hai lần |
| Đơn bị huỷ phải có nguyên nhân | Không thể giải thích vì sao đơn bị huỷ |
| Data hôm nay đã về đủ | Kết quả không so sánh được với ngày trước |
| Tổng số đơn khớp với Source System | Pipeline có thể làm thiếu hoặc thêm row |
Nếu pipeline mới chạy được một nửa, Data Engineer cần báo rõ data chưa sẵn sàng thay vì để dashboard hiển thị một con số sai.
Ghi lại điều đã thống nhất
Sau buổi trao đổi, một ghi chú ngắn sẽ giúp mọi người không phải nhớ xem hôm trước đã thống nhất gì. Với report này, yêu cầu có thể viết như sau:
Mình cần bảng tỷ lệ huỷ theo khu vực và nguyên nhân trước 8 giờ sáng ngày 7/9, giờ Singapore. Lấy các đơn tạo trong ngày 6/9, từ 00:00 đến trước 00:00 ngày 7/9, và dùng trạng thái ghi nhận đến 7 giờ sáng ngày 7/9.
Tỷ lệ huỷ là số đơn có trạng thái
cancelledchia cho tất cả đơn đã tạo, bỏ đơn test. Mỗi đơn huỷ chỉ tính một nguyên nhân. Nhờ giữ riêng bảng tổng đơn theo ngày và khu vực để tránh cộng lặp mẫu số.Trước khi bàn giao, cần đối chiếu số đơn với nguồn, kiểm tra không trùng mã đơn và không thiếu nguyên nhân huỷ. Với mẫu Tampines, 96 và 31 đơn huỷ trên 1,240 đơn phải ra khoảng 10.24%. Nếu nguồn chưa về đủ đến mốc chốt, báo Analyst trước giờ giao report.
Operations xác nhận định nghĩa, DE chuẩn bị bảng cùng kết quả kiểm tra, rồi Analyst đối chiếu cách tính. Ghi rõ như vậy giúp cả ba bên biết khi nào có thể dùng report.
Data Analyst biến data thành câu trả lời
Data Analyst (chuyên viên phân tích data) dùng bảng đã chuẩn bị để tính cancellation rate, so sánh với tuần trước và tìm nơi thay đổi lớn nhất.
Để hình dung bước so sánh, mình dùng một bộ số liệu tuần riêng dưới đây. Hai dòng của ngày 6 phía trên chưa đủ để tính ra các tỷ lệ này:
| Khu vực | Tuần trước | Tuần này | Thay đổi lớn nhất |
|---|---|---|---|
| Tampines | 5.1% | 9.8% | Không tìm được tài xế |
| Bedok | 4.9% | 5.2% | Không đáng kể |
| Jurong | 5.4% | 5.5% | Không đáng kể |
Analyst không chỉ đưa ra chart. Họ kiểm tra xem thay đổi có thật sự đáng chú ý, tìm bối cảnh và giải thích giới hạn của kết quả. Trong ví dụ này, kết luận có thể là phần lớn mức tăng đến từ việc thiếu tài xế ở Tampines vào giờ tối.
Business team đưa ra hành động
Data chỉ có giá trị khi kết quả dẫn đến một quyết định hoặc giúp team hiểu vấn đề rõ hơn. Đội vận hành có thể thử tăng số tài xế ở Tampines trong giờ cao điểm rồi theo dõi cancellation rate trong tuần tiếp theo.
Lúc này một vòng làm việc mới bắt đầu:
flowchart TD
A["Phân tích<br/>Thiếu tài xế ở Tampines"]
B["Hành động<br/>Tăng tài xế giờ cao điểm"]
C["Đo lại<br/>Cancellation rate có giảm không?"]
A --> B --> C
Nếu chỉ dừng ở dashboard, data team chưa biết hành động đó có tạo ra thay đổi hay không.
Những team nào thường phối hợp với data team?
Ngoài Business, Backend, Data Engineer và Data Analyst, một công ty có thể có thêm các vai trò sau:
| Vai trò | Khi nào họ tham gia? |
|---|---|
| Data Scientist (nhà khoa học dữ liệu) | Khi cần thử nghiệm hoặc dự đoán từ data |
| Machine Learning Engineer (kỹ sư Machine Learning) | Khi cần đưa model vào application và vận hành nó |
| Platform hoặc DevOps Engineer (kỹ sư nền tảng hoặc vận hành) | Khi cần hạ tầng, triển khai và monitoring |
| Security hoặc Privacy team | Khi data có thông tin nhạy cảm hoặc bị giới hạn truy cập |
Không phải công ty nào cũng có đủ những chức danh này. Ở team nhỏ, một người có thể làm nhiều phần. Tên chức danh ít quan trọng hơn việc mọi người biết ai đang chịu trách nhiệm cho việc gì.
Ai sở hữu phần nào?
Một cách phân chia thực tế cho ví dụ đơn hàng là:
| Phần việc | Người chịu trách nhiệm chính | Người cần phối hợp |
|---|---|---|
| Ý nghĩa của “đơn bị huỷ” | Operations team | Data Analyst |
| Cách trạng thái được ghi trong application | Backend team | Data Engineer |
| Pipeline và bảng phân tích | Data Engineer | Backend, Data Analyst |
| Cách tính cancellation rate | Data Analyst | Operations, Data Engineer |
| Quyền truy cập data khách hàng | Security hoặc Privacy team | Backend, Data team |
“Chịu trách nhiệm chính” không có nghĩa là làm một mình. Nó cho biết phải tìm ai khi định nghĩa thay đổi hoặc data gặp vấn đề.
Tóm lại
Một data team làm việc tốt khi câu hỏi business rõ ràng, data ở nguồn được giải thích, pipeline tạo ra đầu ra đáng tin và kết quả dẫn đến hành động có thể đo lại.
Mỗi team nhìn một phần khác nhau của vấn đề. Việc quan trọng không phải là đẩy task từ người này sang người khác, mà là giữ nguyên ý nghĩa của câu hỏi và data trong suốt đường đi.
Khi đã hiểu phần việc của con người, mình thử xem AI giúp được gì và vì sao vẫn cần kiến thức nền tảng.