Đánh giá mức sẵn sàng làm Business Analyst
Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài này
Product Management
Request đi, response về: hiểu ba trạng thái mọi màn hình lấy dữ liệu đều phải có, và đọc được tài liệu API để spec integration mà không cần đợi engineer giải thích.
Đăng nhập để đánh dấu kỹ năng và theo dõi tiến độ.
Hai hệ thống nói chuyện bằng request và response — một bên hỏi, bên kia trả dữ liệu hoặc lỗi. Call có thể chậm hoặc fail; ta chỉ hiển thị được dữ liệu bên kia cung cấp.
Đưa thực tế API vào spec: mỗi mẩu dữ liệu đến từ đâu (đã có trong hệ thống / gọi provider / tính toán), 3 trạng thái mọi call cần (loading / success / failed), và flag design fetch quá thường xuyên.
Màn hình bạn đang thiết kế hầu như không tự có dữ liệu nào. Nó phải đi hỏi một nơi khác — backend của chính công ty, hoặc hệ thống của một nhà cung cấp bên ngoài như đơn vị vận chuyển hay ví điện tử.
API là cái cửa để hỏi đó: một danh sách những câu hỏi mà bên kia chấp nhận trả lời, kèm quy định câu hỏi phải viết thế nào và câu trả lời sẽ có dạng gì. Mỗi lượt trao đổi gồm đúng hai nửa:
Hai hệ quả mà mọi BA/PO cần mang theo suốt phần còn lại của trang này: lượt hỏi đó mất thời gian thật và có thể thất bại, và bạn chỉ hiển thị được đúng những gì bên kia trả về — thiết kế có vẽ số điện thoại người nhận mà response không chứa nó thì màn hình không thể có nó.
| Trạng thái | Đang xảy ra chuyện gì | Màn hình phải có gì |
|---|---|---|
| Đang tải (loading) | Request đã đi, chưa có câu trả lời. | Dấu hiệu đang tải rõ ràng. Không được đứng im, cũng không được hiện "chưa có dữ liệu". |
| Thành công (success) | Bên kia trả về đúng thứ họ có. | Nội dung. Nhớ rằng danh sách rỗng cũng là thành công và cần một màn hình rỗng riêng. |
| Thất bại (failed) | Bên kia bận, mạng rớt, request sai, hoặc chờ quá lâu. | Câu thông báo cho người dùng và một lối đi tiếp: thử lại, dùng dữ liệu cũ, hay liên hệ hỗ trợ. |
Ba trạng thái này không phụ thuộc vào công nghệ, không phụ thuộc vào nhà cung cấp, và không có ngoại lệ. Nếu ticket của bạn chỉ mô tả trạng thái thành công thì bạn mới viết một phần ba màn hình.
Tình huống: bạn mở màn hình lịch sử đơn hàng. Trong khoảng nửa giây đầu màn hình hiện "Đang tải", sau đó danh sách đơn hiện ra.
Điều thật sự xảy ra: app gửi một request — "cho tôi 20 đơn gần nhất của người dùng 8842" — và chờ. Khi response về, app vẽ danh sách. Chữ "Đang tải" chính là khoảng giữa hai nửa đó.
Học được: mỗi khối dữ liệu bạn thấy trên màn hình là kết quả của ít nhất một lượt hỏi. Khi bạn thêm một khối mới vào thiết kế, bạn đang thêm một lượt hỏi — hoặc đang yêu cầu bên kia trả thêm dữ liệu trong lượt hỏi cũ. Cả hai đều là việc phải làm, không phải "chỉ thêm cái ô".
Tình huống: màn hình chi tiết đơn hàng cần hiện trạng thái vận chuyển mới nhất, lấy trực tiếp từ hệ thống của đơn vị vận chuyển.
Việc cần viết ra trong ticket:
| Trạng thái | Người dùng thấy | Quy tắc |
|---|---|---|
| Đang tải | Khối vận chuyển hiện khung xám nhấp nháy; phần còn lại của trang vẫn dùng được bình thường. | Chờ tối đa 5 giây, quá thì chuyển sang trạng thái thất bại. |
| Thành công | Trạng thái mới nhất + thời điểm cập nhật + mã vận đơn. | Ghi rõ thời điểm cập nhật, vì dữ liệu này của bên khác và có thể trễ. |
| Thành công nhưng rỗng | "Đơn vị vận chuyển chưa nhận hàng." | Đây không phải lỗi. Không hiện thông báo lỗi. |
| Thất bại | "Chưa lấy được thông tin vận chuyển." + nút "Thử lại" + đường dẫn tra cứu trên trang của đơn vị vận chuyển. | Không chặn cả trang. Các thông tin khác của đơn vẫn phải hiện. |
Học được: "chờ tối đa bao lâu" và "thất bại thì hiện gì" là quyết định sản phẩm, không phải quyết định kỹ thuật. Không viết ra thì lập trình viên vẫn phải chọn — chỉ là chọn thay bạn.
Tình huống: trang chủ sau đăng nhập hiện năm khối, mỗi khối lấy dữ liệu từ một nơi khác nhau. Thời gian phản hồi đo được:
| Khối | Nguồn | Thời gian phản hồi |
|---|---|---|
| Thông tin tài khoản | nội bộ | 180 ms |
| Đơn hàng gần đây | nội bộ | 240 ms |
| Điểm thưởng | nội bộ | 150 ms |
| Thông báo | nội bộ | 120 ms |
| Gợi ý sản phẩm | nhà cung cấp bên ngoài | 3.000 ms |
Ba cách thiết kế, ba kết quả khác hẳn nhau:
Quyết định bạn phải đưa ra, không phải lập trình viên: khối nào bắt buộc phải có trước khi màn hình được coi là dùng được, và khối nào được phép đến muộn. Với ví dụ này, gợi ý sản phẩm rõ ràng thuộc nhóm được phép đến muộn — và câu đó phải nằm trong ticket.
Và nếu khối gợi ý cũng thất bại? Trang vẫn phải dùng được. Một khối phụ hỏng không được kéo sập cả trang chủ — hãy viết thẳng câu đó vào tiêu chí nghiệm thu.
Với mỗi màn hình có dữ liệu, ticket của bạn nên trả lời được bốn nhóm câu hỏi:
Không cần code, nhưng cần read code + spec integration. Litmus test: bạn đọc API doc Stripe và spec được flow checkout không?
Stripe doc là gold standard. PM nên đọc và identify:
Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài nàyHọc kỹ năng này ở đâu?
Có 3 khóa dạy đúng phần này, miễn phí và bằng tiếng Việt.
Thảo luận & tài liệu thêm 0
Chia sẻ kinh nghiệm, đặt câu hỏi, hoặc đính kèm tài liệu/YouTube giúp người khác học kỹ năng này.