Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Atomic Design & Design System

Technical

Năm cấp độ atom, molecule, organism, template, page; design token; kiểm kê giao diện; viết spec và tiêu chí chấp nhận gọi tên thành phần thay vì vẽ lại màn hình; và quản trị một design system — cho PM, PO, BA làm cùng designer và kỹ sư front-end.

Bạn đang ở đâu với kỹ năng này?

Làm bài Đánh giá Kỹ năng Kỹ thuật cho PM/BA — 2 người đã làm. Một lần làm chấm điểm cho tất cả kỹ năng trong nhóm Technical, không chỉ kỹ năng này.

Làm bài đánh giá

Kỹ năng này cho bạn điều gì

Bắt đầu từ đây

Hiểu năm cấp độ của atomic design và gọi đúng tên thành phần trên một màn hình thật. Biết design system gồm thành phần, token, tài liệu và quy trình, và vì sao nó giúp nhất quán, nhanh hơn, dễ tiếp cận hơn.

Khi đã làm được

Chạy được một buổi kiểm kê giao diện và chọn thành phần chuẩn hoá trước bằng số liệu; viết spec và tiêu chí chấp nhận tham chiếu thành phần và token; tham gia quy trình đóng góp, phiên bản và khai tử; đo mức sử dụng hệ thống và tránh các lỗi xây trước khi có sản phẩm, làm một lần rồi bỏ, không có người giữ.

Roadmap — Cách học và đạt kỹ năng

Đã đọc 0/10 mục · còn khoảng 13 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Atomic design là gì — và vì sao người viết yêu cầu cũng cần hiểu nó

Atomic design là một cách chia giao diện thành những phần nhỏ ghép lại được, theo năm cấp độ: atom (nguyên tử), molecule (phân tử), organism (cơ thể), template (khuôn trang) và page (trang thật). Cách gọi này được Brad Frost phổ biến từ khoảng năm 2013, mượn hình ảnh hoá học: thứ phức tạp được ghép từ vài loại hạt cơ bản. Ý tưởng chia giao diện thành component không mới với kỹ sư front-end, nhưng atomic design cho thiết kế, kỹ sư và người làm sản phẩm một bộ từ vựng chung để nói về cùng một thứ.

Vì sao PM, PO, BA cần biết, không chỉ designer? Vì phần lớn chi phí của một giao diện thiếu nhất quán phát sinh từ phía sản phẩm. Mỗi spec vẽ lại một màn hình mới; mỗi màn hình mới sinh thêm một kiểu nút; mỗi kiểu nút là một chỗ phải test, phải sửa khi đổi thương hiệu, và một chỗ người dùng phải học lại. Người viết yêu cầu là người quyết một màn hình được "ghép từ những gì đã có" hay "vẽ từ đầu". Nếu bạn không biết đội đang có những gì, bạn sẽ mặc định chọn vẽ từ đầu.

Kỹ năng này đi tiếp từ Wireframing & Prototyping Basics. Wireframe trả lời "màn hình này có những khối gì, sắp thế nào"; atomic design trả lời "các khối đó lấy từ đâu, và lần sau dùng lại thế nào". Wireframe tốt nhất là wireframe được vẽ bằng chính những thành phần đội đã có.

Atomic design làAtomic design không phải
Một cách nghĩ để chia và đặt tên giao diệnMột thư viện hay công cụ phải mua
Bộ từ vựng chung giữa thiết kế, code và sản phẩmLuật cứng — tranh cãi một thứ là molecule hay organism không đáng một buổi họp
Nền để xây design system: bộ thành phần, token và quy tắc dùng chungBản thân design system — hệ thống còn cần người giữ, tài liệu và quy trình
Áp dụng được cho sản phẩm đang chạy, từng phần mộtMột dự án viết lại toàn bộ giao diện

Năm cấp độ, minh hoạ trên ứng dụng ChợGần (giả định)

Bối cảnh (giả định): ChợGần là sàn thương mại điện tử bán đồ gia dụng và thực phẩm khô cho khoảng 1,2 triệu người mua ở các tỉnh phía Bắc, có ứng dụng iOS, Android và web. Sau bốn năm, 9 người làm sản phẩm và 22 kỹ sư đã xây hơn 180 màn hình. Mọi con số dưới đây là giả định để minh hoạ.

Cấp độLà gìVí dụ ở ChợGầnPM, BA cần để ý gì
AtomPhần nhỏ nhất còn có nghĩa trên giao diện; tách nhỏ hơn thì mất chức năngNút, ô nhập, nhãn, biểu tượng, huy hiệu "Freeship", ô đánh dấu, giá tiền định dạng 129.000đTrạng thái: mặc định, đang bấm, vô hiệu, đang tải, lỗi. Spec thiếu trạng thái là chỗ mỗi kỹ sư tự đoán
MoleculeVài atom ghép lại để làm một việcÔ tìm kiếm (ô nhập, biểu tượng, nút xoá), bộ chọn số lượng (nút trừ, con số, nút cộng), dòng giá (giá bán, giá gốc gạch ngang, phần trăm giảm)Quy tắc nghiệp vụ hay nằm ở đây: số lượng tối đa, cách làm tròn, khi nào hiện giá gốc
OrganismMột khối giao diện hoàn chỉnh, đứng riêng được, thường lặp lại ở nhiều mànThẻ sản phẩm, thanh đầu trang, giỏ hàng thu gọn, khối chọn địa chỉ giao, khối chọn phương thức thanh toánĐơn vị hợp lý để viết yêu cầu và ước lượng; phần lớn thảo luận sản phẩm diễn ra ở cấp này
TemplateBố cục trang với chỗ trống cho nội dung, chưa có dữ liệu thậtKhuôn trang danh mục: thanh lọc bên trái, lưới thẻ sản phẩm, phân trangThứ tự và độ ưu tiên của các khối — đây chính là wireframe
PageTemplate đổ dữ liệu thật vàoTrang "Nồi chiên không dầu" với 340 sản phẩm; trang giỏ hàng có một món vừa hết hàngNơi kiểm trường hợp biên: tên sản phẩm 120 ký tự, danh mục rỗng, giá 0đ

Ranh giới giữa các cấp không cần chính xác. Bộ chọn số lượng là molecule hay organism? Câu trả lời không quan trọng bằng việc cả đội gọi nó cùng một tên và chỉ có một phiên bản. Dùng năm cấp độ như một cái kệ để sắp đồ, không phải như luật.

Cấp page hay bị bỏ qua nhất khi viết yêu cầu, dù đó là nơi lỗi thật xuất hiện. Thẻ sản phẩm đẹp trong bản thiết kế với tên ngắn "Chảo chống dính 26cm" sẽ vỡ dòng khi gặp tên thật "Chảo chống dính đáy từ vân đá 26cm tặng kèm xẻng gỗ, dùng được bếp từ". Template chứng minh bố cục đúng; page chứng minh nó chịu được dữ liệu thật. Tiêu chí chấp nhận nên có ít nhất một dòng cho dữ liệu xấu nhất.

Vì sao đáng đầu tư một design system

Design system là bộ thành phần dùng chung (thường tổ chức theo atomic design), cộng với design token, tài liệu hướng dẫn dùng, và một quy trình để thêm, sửa, bỏ thành phần. Bốn lợi ích dưới đây là lý do bạn nên ủng hộ nó trong buổi lập kế hoạch — và cũng là bốn thứ bạn nên đo.

Lợi íchKhông có hệ thốngCó hệ thốngNgười làm sản phẩm được gì
Nhất quánNgười dùng ChợGần gặp 14 kiểu nút; nút "Mua ngay" màu cam ở trang sản phẩm, xanh lá ở trang khuyến mãiMột nút chính, một màu, một vị trí quenNgười dùng không phải đoán đâu là hành động chính; ít bấm nhầm, ít ticket
Tốc độMỗi màn hình mới mất 3–4 ngày thiết kế và code lại những phần đã cóMàn hình ghép từ thành phần sẵn có mất khoảng một ngày; thời gian dồn vào phần thật sự mớiƯớc lượng nhỏ hơn và dễ đoán hơn; sprint có chỗ cho việc mới
Khả năng tiếp cậnMỗi kỹ sư tự làm ô nhập; một nửa thiếu nhãn cho trình đọc màn hình, chữ xám nhạt không đủ tương phảnSửa một lần ở thành phần, mọi màn hình dùng nó được sửa theoĐạt chuẩn tiếp cận thành mặc định, không phải một dự án riêng
Ít màn hình dùng một lầnMỗi đợt Tết, 11.11 sinh một bộ màn hình riêng, xong rồi không ai dám xoáChiến dịch dùng lại template, chỉ đổi nội dungÍt code chết, ít chỗ phải test hồi quy khi đổi luồng thanh toán

Cái giá cần nói thẳng: design system tốn người. Ở ChợGần, ước tính ban đầu là một designer và hai kỹ sư front-end dành khoảng nửa thời gian trong hai quý, sau đó một người giữ thường trực. Nếu sản phẩm còn đang tìm thị trường, tuần nào cũng xoay hướng, chi phí đó thường chưa đáng — một bộ thành phần nhỏ và một file màu dùng chung là đủ. Hệ thống đáng đầu tư khi bạn đã có nhiều màn hình, nhiều đội cùng sửa giao diện, và thấy rõ chi phí của sự trùng lặp bằng số.

Từ bản thiết kế đến code: component và design token

Mỗi thành phần trong file thiết kế nên có đúng một component tương ứng trong code, cùng tên, cùng các biến thể. Khi tên khác nhau — designer gọi là "Thẻ sản phẩm nhỏ", code gọi là ItemCardV2 — mỗi lần trao đổi lại mất một bước dịch, và sớm muộn sẽ có người dịch sai. PM và BA hưởng lợi trực tiếp: một tên dùng được trong spec, trong ticket, trong buổi review và trong báo lỗi.

Design token là những giá trị thiết kế nhỏ nhất được đặt tên: màu, khoảng cách, cỡ chữ, bo góc, đổ bóng. Thay vì viết thẳng mã màu #F26B1D ở 60 chỗ, mọi chỗ dùng tên color.action.primary. Đổi màu thương hiệu thì đổi một dòng. Token thường chia ba lớp:

LớpVí dụAi dùngVì sao tách lớp
Giá trị gốcorange.500 = #F26B1D; space.4 = 16px; font.size.300 = 16pxNgười giữ hệ thốngBảng màu và thang đo đầy đủ, chưa mang nghĩa sử dụng
Token theo ý nghĩacolor.action.primary = orange.500; color.text.danger = red.600; space.inset.card = space.4Designer và kỹ sư khi dựng thành phầnLàm giao diện tối hay đổi thương hiệu chỉ cần trỏ lại lớp này
Token của thành phầnbutton.primary.background = color.action.primaryKỹ sư dựng thành phầnChỉnh riêng một thành phần mà không ảnh hưởng chỗ khác

Ba nhóm token người làm sản phẩm nên đọc được:

  • Màu — đặt theo ý nghĩa (hành động chính, nguy hiểm, thành công, chữ phụ), không theo tên màu. "Dùng màu cam" là chỉ dẫn yếu; "dùng màu cảnh báo" vẫn đúng khi thương hiệu đổi sang xanh.
  • Khoảng cách — một thang cố định, thường là bội số của 4 hoặc 8 (4, 8, 12, 16, 24, 32). Khi khoảng cách chỉ được chọn trong thang, giao diện tự thẳng hàng và kỹ sư không phải hỏi "cách 14 hay 15 pixel".
  • Chữ — vài kiểu chữ đặt tên theo vai trò: tiêu đề trang, tiêu đề khối, nội dung, chú thích, giá tiền. Tiếng Việt có dấu chồng nhiều tầng, nên chiều cao dòng phải được thử với chữ như "Ưu đãi Tết" và "HỖ TRỢ KHÁCH HÀNG", không chỉ với chữ Latin không dấu.

Bạn không cần tự viết token. Bạn cần đọc được chúng trong spec và trong thảo luận, và nhận ra khi một yêu cầu đòi một giá trị nằm ngoài hệ thống — "chữ đỏ đậm hơn một chút cho dòng khuyến mãi" — để hỏi: đây là token mới cho cả hệ thống, hay một ngoại lệ chúng ta không cần?

Kiểm kê giao diện: bắt đầu từ những gì đang có

Interface inventory (kiểm kê giao diện) là bước đầu tiên khi áp dụng atomic design cho một sản phẩm đã chạy: chụp lại mọi thành phần đang có, gom theo loại, xếp theo cấp độ, và đếm số biến thể. Mục đích không phải làm tài liệu đẹp, mà là cho mọi người cùng nhìn thấy mức trùng lặp. Một slide ghi "giao diện chưa nhất quán" không thuyết phục được ai; một trang đặt 14 kiểu nút cạnh nhau thì có.

Khi ChợGần kiểm kê lần đầu hai luồng mua hàng và sau mua, đội đếm được 14 kiểu nút, 9 bộ chọn ngày khác nhau (ngày giao hàng, lọc đơn theo ngày, ngày sinh, lịch lắp đặt, kỳ hạn trả góp...), 6 kiểu thông báo lỗi và 4 cách viết giá. Không ai cố ý thiết kế 9 bộ chọn ngày; mỗi cái ra đời hợp lý trong một sprint riêng, vì người viết spec không biết cái trước đã tồn tại.

Kết quả không phải một bản tài liệu mà là một danh sách việc: mỗi biến thể được quyết giữ, gộp hay bỏ, và năm đến bảy thành phần được chọn chuẩn hoá trước, có chủ. Làm theo từng bước trong hướng dẫn Kiểm kê giao diện theo atomic design, và ghi kết quả vào mẫu Bảng kiểm kê giao diện.

Viết spec và tiêu chí chấp nhận bằng tên thành phần

Khi đã có hệ thống, cách viết yêu cầu nên đổi theo. Thay vì đính kèm một màn hình vẽ lại từ đầu và mô tả từng chi tiết nhìn thấy, spec gọi tên thành phần đã có, chỉ ra biến thể, và chỉ mô tả kỹ phần thật sự mới. Spec ngắn hơn; kỹ sư biết ngay phần nào có sẵn; QA biết phần nào đã được test ở cấp thành phần; designer không phải vẽ lại thứ đã vẽ.

TRƯỚC — spec vẽ lại màn hình
Màn hình Đổi trả: xem ảnh đính kèm (thiết kế mới).
Nút gửi màu cam, bo góc, cao 48px. Có ô chọn ngày lấy hàng.
Hiện chữ đỏ nếu chưa chọn lý do.

SAU — spec tham chiếu thành phần
Màn hình Đổi trả, ghép từ template "Biểu mẫu một cột".
- Organism: Thẻ đơn hàng (biến thể rút gọn), chỉ đọc
- Molecule: Nhóm lựa chọn (Radio group) cho lý do, bắt buộc
- Molecule: Bộ chọn ngày (Date picker), chế độ một ngày;
  chỉ cho chọn từ ngày mai đến 7 ngày sau, bỏ Chủ nhật
- Atom: Nút chính (Button primary, full-width): "Gửi yêu cầu"
- Lỗi: dùng Field error chuẩn, không tạo kiểu mới
PHẦN MỚI (cần thiết kế): khối tải ảnh sản phẩm lỗi, tối đa 4 ảnh,
  mỗi ảnh dưới 5 MB.

Dòng "phần mới" cho mọi người biết công sức thiết kế thật sự nằm ở đâu. Tiêu chí chấp nhận cũng nên viết theo cách đó, để kiểm mà không phải so pixel với ảnh:

  • Nút "Gửi yêu cầu" là Button primary của hệ thống, ở trạng thái vô hiệu cho đến khi đã chọn lý do và ngày lấy hàng.
  • Bộ chọn ngày là Date picker chuẩn; Chủ nhật và các ngày ngoài khoảng 1–7 ngày hiển thị ở trạng thái không chọn được.
  • Khi gửi thất bại do mất mạng, hiển thị Toast lỗi chuẩn với nội dung "Chưa gửi được, vui lòng thử lại"; dữ liệu đã nhập được giữ nguyên.
  • Không có giá trị màu, khoảng cách hay cỡ chữ nào ngoài token của hệ thống (kiểm khi review code hoặc bằng công cụ soát token).

Khi thành phần có sẵn không đủ: đừng viết "giống bộ chọn ngày nhưng thêm chọn giờ". Ghi rõ cần một biến thể mới hay thành phần mới, và đưa nó vào quy trình đóng góp ở phần dưới. Nếu không, đó chính là cách bộ chọn ngày thứ mười ra đời.

Quản trị: ai được thêm, đánh số phiên bản, đóng góp và khai tử

Design system ít khi hỏng vì thiết kế xấu; nó hỏng vì không ai quyết được ai được thêm gì. Có ba mô hình phổ biến:

Mô hìnhCách chạyHợp khiRủi ro
Đội trung tâmMột nhóm nhỏ sở hữu và tự xây mọi thành phầnCông ty lớn, nhiều đội sản phẩm, cần nhất quán caoĐội trung tâm thành nút thắt; đội sản phẩm chờ không nổi rồi tự làm bên ngoài
Phân tánMỗi đội sản phẩm tự thêm vào thư viện chungCông ty nhỏ, ít đội, tin nhauKhông ai giữ chất lượng; một năm sau lại có 9 bộ chọn ngày, lần này nằm ngay trong thư viện
LaiMột người hoặc nhóm nhỏ giữ chuẩn và duyệt; các đội đề xuất và đóng gópPhần lớn công ty cỡ vừaCần quy trình đóng góp rõ; nếu không sẽ trượt về một trong hai mô hình trên

Quy trình đóng góp gợi ý cho mô hình lai:

  • Kiểm trước. Người cần thành phần mới tìm trong thư viện và hỏi kênh chung. Nhiều yêu cầu "mới" thật ra là một biến thể của thứ đã có.
  • Đề xuất. Một trang ngắn: vấn đề, màn hình sẽ dùng, vì sao thành phần có sẵn không đủ, và ít nhất hai nơi sẽ dùng lại. Thứ chỉ dùng ở một chỗ thì để ở cấp sản phẩm, chưa đưa vào hệ thống.
  • Duyệt. Người giữ hệ thống trả lời trong thời hạn đã hẹn, ví dụ 3 ngày làm việc: chấp nhận, gộp vào thành phần có sẵn, hoặc để ở cấp sản phẩm.
  • Xây và ghi tài liệu. Thiết kế, code, đủ trạng thái, hướng dẫn dùng, kiểm tra tiếp cận — đủ năm thứ mới tính là xong.
  • Công bố. Ghi vào nhật ký thay đổi và báo các đội; thành phần không ai biết là thành phần không ai dùng.

Phiên bản. Thư viện code nên đánh số kiểu major.minor.patch (semantic versioning): sửa lỗi tăng số cuối, thêm biến thể tăng số giữa, thay đổi làm vỡ chỗ đang dùng — đổi tên, bỏ thuộc tính — tăng số đầu. Với PM, nghĩa thực tế là: nâng một bản major là một việc có ước lượng, phải nằm trong kế hoạch sprint, không phải "cập nhật thư viện tiện tay".

Khai tử. Bỏ một thành phần theo ba bước: đánh dấu không khuyến khích dùng và chỉ ra thành phần thay thế; đặt hạn, ví dụ một quý; xoá khi số chỗ dùng về 0. Không xoá đột ngột — đội đang chạy chiến dịch sẽ phát hiện vào đúng ngày ra mắt.

Đo mức sử dụng hệ thống

Hệ thống không ai dùng là chi phí không có lợi ích. Đo để biết nó có được dùng thật không, và để có bằng chứng khi xin tiếp nguồn lực.

Chỉ sốĐo thế nàoChợGần sau hai quý (giả định)
Tỉ lệ phủSố chỗ dùng thành phần hệ thống / tổng số chỗ dùng loại thành phần đó, quét code tự độngNút: 81%; bộ chọn ngày: 15/17 chỗ đã chuyển
Số biến thể còn lạiĐếm lại theo bảng kiểm kê mỗi quý, cùng phạm viNút từ 14 xuống 5; bộ chọn ngày từ 9 xuống 3
Giá trị ngoài tokenSố mã màu, khoảng cách viết thẳng trong codeTừ 1.240 xuống 410
Thời gian làm màn hình mớiTừ thiết kế đến code xong, với màn hình chủ yếu ghép từ thành phần có sẵnTrung bình từ 6 xuống 3,5 ngày
Lỗi giao diệnTicket lỗi hiển thị và lỗi tiếp cận mỗi thángTừ 38 xuống 21
Sức khoẻ đóng gópSố đề xuất mới, thời gian duyệt trung bình11 đề xuất, duyệt trung bình 2,5 ngày

Đừng biến tỉ lệ phủ thành chỉ tiêu ép 100%. Một số màn hình — trang chiến dịch dùng một lần, công cụ nội bộ ít người dùng — không đáng chuyển. Đặt mục tiêu cho những luồng quan trọng nhất (tìm kiếm, giỏ hàng, thanh toán) trước.

Lỗi thường gặp

LỗiVì sao xảy raLàm thay bằng
Xây hệ thống trước khi có sản phẩmMuốn "làm đúng ngay từ đầu"Xây màn hình thật trước; rút thành phần từ những gì đã lặp lại ít nhất hai, ba lần
Coi design system là dự án một lầnĐược giao như một đầu việc có ngày kết thúcCoi nó là sản phẩm nội bộ: có người giữ, có backlog, có người dùng là các đội sản phẩm
Chia atom quá nhỏ, quá trừu tượngMuốn mọi thứ đều tái sử dụng đượcChỉ tách khi có ít nhất hai nơi dùng; một nút có 25 thuộc tính khó dùng hơn ba nút rõ ràng
Không có người chịu trách nhiệm"Ai cũng dùng thì ai cũng giữ"Một người có tên, có thời gian được cấp, quyết việc duyệt và khai tử
Thiết kế và code lệch nhauHai thư viện, hai nhóm cập nhật riêngCùng tên, cùng biến thể; một thay đổi chỉ xong khi cả hai phía đã cập nhật
Spec vẫn vẽ lại màn hình từ đầuThói quen, hoặc không biết thư viện có gìPM, BA mở thư viện trước khi viết; spec gọi tên thành phần, chỉ mô tả kỹ phần mới
Tranh cãi molecule hay organismHiểu năm cấp độ như luậtDùng cấp độ để sắp xếp; thứ cần thống nhất là tên và phiên bản

Luyện kỹ năng này trong tuần này

  • Chọn một luồng quan trọng — ví dụ thanh toán — và chụp mọi màn hình của nó, kể cả trạng thái lỗi và trống. Đếm có bao nhiêu kiểu nút, ô nhập, thông báo lỗi khác nhau.
  • Hỏi designer và một kỹ sư front-end: thư viện thành phần đang ở đâu, ai giữ, có bao nhiêu thành phần. Nếu hai người trả lời hai kiểu, đó là phát hiện đầu tiên của bạn.
  • Viết lại spec của một tính năng gần đây theo cách tham chiếu thành phần: liệt kê thành phần có sẵn và biến thể, chỉ mô tả kỹ phần mới. So với bản cũ xem phần nào trước đây bị vẽ lại không cần thiết.
  • Viết ba tiêu chí chấp nhận gọi tên thành phần và trạng thái, thay cho mô tả màu và kích thước.
  • Chạy thử hướng dẫn Kiểm kê giao diện cho một luồng, ghi vào mẫu Bảng kiểm kê, và mang ba thành phần nên chuẩn hoá trước tới buổi lập kế hoạch.

Khóa học liên quan (1)

Sử dụng trong vai trò

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.

Hãy là người đầu tiên chia sẻ kinh nghiệm cho kỹ năng này.

Kiểm tra kỹ năng này

Bài kiểm tra của các khóa dạy kỹ năng này
1 Quiz

Kiểm tra bài 1: Vì sao giao diện cứ rối dần — chi phí của những màn hình làm một lần

Bài kiểm tra của một khóa dạy kỹ năng này.

1 người đã làm
Làm bài này
2 Quiz

Kiểm tra bài 6: PM và BA viết spec dựa trên component — không vẽ lại màn hình

Bài kiểm tra của một khóa dạy kỹ năng này.

chưa ai làm
Làm bài này
3 Quiz

Kiểm tra bài 4: Kiểm kê giao diện — đếm những gì đang có trước khi xây cái mới

Bài kiểm tra của một khóa dạy kỹ năng này.

chưa ai làm
Làm bài này
4 Quiz

Kiểm tra bài 2: Năm tầng của atomic design — nguyên tử, phân tử, sinh vật, khuôn, trang

Bài kiểm tra của một khóa dạy kỹ năng này.

chưa ai làm
Làm bài này

Học kỹ năng này ở đâu?

Có 1 khóa dạy đúng phần này, miễn phí và bằng tiếng Việt.

Bắt đầu học