Khi define requirement, em hay gặp vấn đề thiếu use case hoặc miss chỗ hiển thị vì có nhiều màn hình dependencies hoặc logic mình chưa nắm được. Có cách nào tránh các trường hợp nà không

Câu hỏi:

“Anh/chị cho em hỏi thăm chút ạ

1. Tools:

Đang học sẵn tiện học tới bài workflow, em muốn tham khảo 1 số tool mn dùng để tạo workflow, activity diagram mà mn thấy UX tốt (và free ::laughing::slight_smile: ạ. Em hay dùng draw.io, miro, nhưng cảm giác vẫn chưa tối ưu lắm ::sob::

2. Viết requirements/ use cases

Ngoài ra, có scope về requirement/use case em nghĩ mình chưa học tới, nhưng em đang bị cấn nên muốn hỏi trước ạ.

Khi define requirement, em hay gặp vấn đề thiếu use case hoặc miss chỗ hiển thị vì có nhiều màn hình dependencies hoặc logic mình chưa nắm được. Có cách nào tránh các trường hợp nà không ạ?

Lần trước trong bài workflow anh Nam có share 1 ý khá hay là “mình có thể xem 1 convention “action” tương tự như 1 use case”. Em cũng có áp dụng thử, nhưng 1 use case cũng có nhiều yếu tố (UI hiển thị chỗ nào, submit rồi thì thông tin hiển thị ở các trang liên quan nào). Nếu chỉ gom trong 1 convention, mình cũng có thể bị miss case đó ạ. Hay là từ 1 use case mình lại vẽ thêm activity diagram để mô tả interaction giữ user và system ạ?”

(tin nhắn của Mỹ Hân, được repost từ Discord community của Khoá học BPM 7 tuần)

4 Likes

“chỗ vẽ flow em thấy có dùng mermaid nó khá là đã :)) chỉ có điều phải làm quen syntax nên lúc onboarding hơi frictional cho non-tech people á”

(tin nhắn của Minh Anh (Bo), được repost từ Discord community của Khoá học BPM 7 tuần)

1 Like

“Đây là quan điểm cá nhân của em khi em làm Product, em cũng newbie nên mong chị Đáp, chị Vân, anh Thành, anh Nam, và mọi người xem thử và góp ý cho em nếu có chỗ nào hong phù hợp hénnn. Về việc define ra được hết các use case để không bỏ sót màn hình hay logic nào, thì em sẽ đi theo 1 system thinking trả lời cho câu hỏi “system thay đổi thế nào và thay đổi đó phản ánh lên những đâu khi người dùng thực hiện 1 điều gì đó”. Nó sẽ bao gồm object oriented requirements, CRUDL+, system context diagram, state transition matrix, và 1 checklist nhỏ cho những điểm UI cần lưu ý.

Object oriented requirements

Thay vì tập trung vào user flow, thì em sẽ tập trung nhìn vào entity lifecycle.

  • Entity là cái quái gì? Là 1 cái object (đối tượng) mà tính năng này động vào. eg: 1 order, 1 bài post, 1 user account, 1 voucher, etc.

Khi định nghĩa 1 action → em sẽ đặt câu hỏi “dữ liệu này còn xuất hiện ở đâu nữa”. Ví dụ:

  • Screen List view: có cần filter trạng thái mới không?
  • Screen Detail view: thông tin mới hiển thị ở đâu?
  • Screen Admin: operation có cần thấy để hỗ trợ không?
  • Screen Log/History: Có cần ghi lại thay đồi không?

Khi tự đặt cảu hỏi như vậy thì kiểu gì mình cũng vẽ ra được tất cả các use case (or at least most of it)

CRUDL+ (bảng nâng cấp của CRUD - hình như học ở Half sau của BPM)

Em hay dùng cái này để check logic cho any tính năng:

  • C = Create: Tạo mới ở đâu? Ai tạo được?
  • R = Read: Xem ở đâu? User thấy gì? Admin thấy gì?
  • U = Update: Khi nào thông tin bị thay đổi? Ai sửa được? Sửa xong thì các màn hình hiển thị thông tin cũ có update real time không? Thông tin cũ sẽ đi về đâu?
  • D = Delete: Xóa đi khi nào? Ai xóa được? Có xóa permanent không hay chỉ tạm ẩn? Các liên kết cũ sẽ ảnh hưởng như thế nào khi xóa?
  • L = List: Hiển thị trong danh sách nào? Sorting ra sao?

System Context Diagram

Có thể là do em làm technical nhiều nhưng em hay vẽ ra 1 cái sơ đồ mô tả relationship và interaction giữa các thành phần với nhau để tránh khả năng miss logic do không nắm được dependencies đang ở đâu.

  • Muốn show UI phải link tới BE, BE phải check với DB → Ví dụ như vậy xong mình vẽ ra connect chúng lại với nhau
  • Mỗi mũi tên interaction/relationship hãy đặt câu hỏi “cái gì sẽ xảy ra khi chỗ này bị lỗi/ timeout” =)) Em hứa chắc chắn là kiểu gì cũng đẻ ra 101 tình huống mà có thể mình không bao giờ nghĩ tới khi chỉ vẽ happy case

State Transition Matrix

Có thể lập 1 cái bảng với 4 cột: Trạng thái hiện tại | Action | Trạng thái tiếp theo | Thay đổi ở đâu (Có thể để UI thay đổi ở đâu)

  • Vậy để vẽ ra được cái bảng này thì mình phải xác định được các trạng thái mà 1 tính năng mình có sẽ là gì. e.g. Thanh toán order thì sẽ có các trạng thái: chờ xác nhận giao dịch, xác nhận giao dịch, xử lý giao dịch, thanh toán giao dịch thành công/ thất bại → Map xuống thành từng các database value như pending, fail, success

Góc khuất của UI

Nếu là em thì em sẽ check qua 4 trạng thái hiển thị của 1 cái màn hình với 4 cái checkpoints này:

  • Empty State: Khi chưa có dữ liệu thì màn hình hiện gì?
  • Loading State: Khi mạng chậm/ hệ thống đang xử lý thì hiện gì?
  • Error State: Khi API lỗi, mất mạng, hoặc không có quyền truy cập thì hiện gì?
  • Partial State: Khi có 1 phần dữ liệu thì hiện gì?

Disclaimer: Đây là dưới góc nhìn của em (1 người có technical background) và đang làm Technical Product nên sẽ có những thứ khá theo hướng của mấy anh Dev → Nếu mình hong clear thì có thể hỏi lại elm để em giải thích lại rõ hơn nhaaa. Và em mới là newbie thôi nên em xin mở rộng lòng mình đón nhận các góp ý và các ý kiến khác cho việc nì.

(tin nhắn của Minh Anh (Bo), được repost từ Discord community của Khoá học BPM 7 tuần)

3 Likes

:one: Nếu mà tool có freemium thì:

  • trước kia chị xài Lucidchart chắc ngon nhất trong đám về vẽ diagram :))) nhưng cons là không free hẳn nên vẽ được tí tẹo cái bị limit objects
  • Figjam nếu xài solo thì free á, còn nếu share cho ai khác thì bị limit 3 files ::smiling_face_with_tear::
  • Excalidraw thì dòm nét vẽ doodle dễ thương :))) nhưng không pay thì cũng bị limit vô 1 file
  • draw.io từ ngày về với Google thì chê rất là chê luôn chứ hồi xưa dùng thay Lucidchart vì nó tạm đủ và free
  • Miro thì làm được nhiều trò và có nhiều template sẵn nhưng mà nó không chuyên diagram lém

cái rá phải trả …

:two: Còn xài free hoàn toàn thì dùng Mermaid open source như Bo suggest

1 Like

Câu hỏi rất thực tế nha Hân ơi, tool thì anh nghĩ draw.io hay miro thì anh đều dùng và thấy vẫn ổn nha Về phần requirement bị miss nhiều case thì anh phải nói trước là rất khó để mình cover được hết tất cả các case ngay từ giai đoạn đầu nhen. Có một câu mà chị sếp anh ở Fsoft từng nói mà a thấy khá đúng “Code còn có bug thì làm sao mà requirement tránh được bug”, nên mình tiếp cận với tâm thế là có thể cover được nhiều case nhất có thể thui nhen, sau đây là mấy cách tiếp cận có cả những cái BPM mình đã cóa và những cái practice khá xịn của các bạn BA nếu em muốn xử lý vấn đề này:

  1. Học cách phân tích góc nhìn từ Data Object: Nó không chỉ giúp em ước lượng sơ qua độ phức tạp vấn đề mà giúp em áng chừng feature mới của em liệu có ảnh hưởng lên các feature khác không. Ví dụ như hồi trước có bảng Transactions trong lúc mượn sách thì mình cần check xem nó sử dụng thông tin của BookBorrower như nào

  2. Đặt reference cẩn thận trong các User story: Đối những user story có liên quan đến nhau thì đặt một đường link dẫn trực tiếp tới US đó thay vì chỉ để text, thường là US này được trigger từ US kia (Trên màn hình View books thì mới Edit a book được

  3. Decoupling: Này mượn văn trong code một tí, nhưng logic nào mà lặp lại ở trên code thì cũng nên được tách riêng và refer từ các tài liệu khác. Ví dụ như behavior nếu người dùng điền thiếu field thì cẩn hiển thị message: “Fill up that field mf!!!” thì đặt chun trong một doc là “Common FE requirements” rùi khi cần sử dụng trong một pop-up nào đó thì refer tới

Dù cái này mình không chắc chắn được 100% nhưng 95% là mọi người rất appreciate rùi nhen, hồi anh mới vào K thì tester với developer khá relief khi không phải dành nhiều thời gian challenge nhưng logic thiếu chặt chẽ mà các bạn product trước đó thường viết ra :)))

Anh nghĩ cũng giống ý a @EtonNg nói, là mình chắc chắn ko thể define dc requirement cover được hết những edge cases đâu, nên anh nghĩ nên reframe lại thành “Làm thế nào để phát hiện ra cases/dependencies gì mình đang thiếu với chi phí thấp nhất?”, và rộng hơn nữa là “Làm thế nào để mình iterate ra dc 1 hình thái solution tốt?” Ngoài những practice mà mn có nói ở trên ra, thì giờ AI coding tool nó khá advanced, nên một pattern anh thấy là PM họ cắm thẳng Claude code vào codebase của product + generate thử 1 cái prototype feature từ PRD hiện tại của mình. Không cần code đẹp hay maintainable gì mà chỉ cần có hình thái cụ thể để mình nhìn vô đó đánh giá xem có yếu tố gì mình chưa cover (concept này chưa link dc với 1 concept gì đó ở hiện tại, userflow chỗ này bị gãy mà mình chưa define dc, etc). Prototype nó cũng có thể đc dùng để trao đổi align với engineers/design để refine ra 1 bản PRD tốt hơn. Có 1 số notes:

  • Trong thực tế tricky nhất là chỗ làm sao setup dc những môi trường hay tools + lấy cái codebase/repo của sản phẩm và chạy nó dc ở local, cái này thì chắc nhờ AI agent hoặc bạn dev nào chỉ 1 buổi thì cũng sẽ làm dc
  • A cũng đang assume là công ty có cung cấp tool AI coding như Claude Code hay Copilot, còn ko có thì mình lấy cái của mình xài chui cũng dc ($20 cho Claude rất đáng tiền =))) nhưng với các công ty nhà nước thì có thể họ sẽ ko open cho mấy cái này.
  • Nếu mà công ty có design system thì có khi cắm vào đó để gen ra prototype trên frontend cũng dc chứ ko cần có database (mà cái này tùy vào feature mình mún prototype là gì).

Chắc tóm lại là vẫn làm sao để mình iterate dc 1 hình thái solution nó tốt , và chuyện cố gắng define requirement nó cũng bổ trợ chuyện đó, nhưng ngoài ra giờ công nghệ nó mở ra mấy hướng khác nữa mình cũng có thể cân nhắc