Câu hỏi không phải có hay không, mà là sản phẩm của Anh Chị đã đủ phức tạp để cần chưa.
Cần pattern library khi sản phẩm có những tình huống giao diện phức tạp lặp lại: biểu mẫu nhiều bước, bảng dữ liệu, luồng tìm kiếm và lọc. Lúc đó vấn đề không nằm ở từng nút đơn lẻ, mà ở cách các component ghép lại để giải một bài toán trải nghiệm. Nếu sản phẩm còn đơn giản và chỉ một đội đang làm, thư viện component lõi là đủ, thêm pattern library sớm chỉ tốn công duy trì.
Trong nhiều dự án design system (hệ thống thiết kế), Sinh Vũ nhận được câu hỏi này khá muộn, sau khi đội đã xây xong component library (thư viện thành phần giao diện) và bắt đầu nhận ra có những tình huống không biết xếp vào đâu. Câu trả lời không phải lúc nào cũng là "có" hoặc "không", mà phụ thuộc vào mức độ phức tạp thực của sản phẩm và số đội đang cùng làm.
Đây là điểm phân biệt quan trọng nhất, và cũng là nơi nhiều đội nhầm nhất.
Component là viên gạch: nút bấm, ô nhập liệu, thẻ thông tin, huy hiệu trạng thái. Mỗi component hoạt động độc lập và có thể tái dùng ở nhiều chỗ. Pattern (tình huống giao diện) là cách ghép những viên gạch đó lại để giải một bài toán trải nghiệm cụ thể, ví dụ: luồng đặt hàng nhiều bước, bảng dữ liệu có lọc và phân trang, biểu mẫu đăng ký có xác thực theo thời gian thực.
Component trả lời câu hỏi "Đây là cái gì?" Pattern trả lời câu hỏi "Làm thế này thế nào?"
Nathan Curtis, EightShapes
Theo khung Atomic Design của Brad Frost, component tương ứng với tầng atom và molecule. Pattern tương ứng với organism và template, là nơi các phần nhỏ được ghép lại có mục đích. Hai tầng này bổ sung cho nhau và không thể thay thế nhau.
Nên làm pattern library khi: Sản phẩm có biểu mẫu nhiều bước, bảng dữ liệu với lọc và phân trang, hoặc các luồng phức tạp lặp lại ở nhiều nơi. Có từ hai đội trở lên cùng làm trên cùng một sản phẩm. Đội đang phát hiện mỗi sprint lại có người tự giải lại cùng một bài toán giao diện theo một cách khác. Có người sẵn sàng duy trì và cập nhật tài liệu pattern.
Chưa cần pattern library khi: Sản phẩm còn ít màn hình và luồng đơn giản. Chỉ một đội làm và có thể thống nhất trực tiếp. Component lõi đã phủ hết những gì cần thiết. Đội chưa có bandwidth để duy trì thêm một tầng tài liệu.
Trong bàn giao A3 cho các sản phẩm có độ phức tạp trung bình trở lên, Sinh Vũ tách rõ thư viện component lõi và pattern library thành hai tầng riêng. Những tình huống giao diện phức tạp đã có lời giải chuẩn sẵn, đội không phải nghĩ lại mỗi lần gặp cùng một bài toán.
Với sản phẩm còn đơn giản, Sinh Vũ tư vấn khoan làm pattern library. Không phải vì không có giá trị, mà vì làm sớm khi chưa đủ tình huống thực tế dễ dẫn đến pattern xây trên giả định, không khớp với cách sản phẩm thực sự vận hành sau này. Tốt hơn là để pattern nảy sinh từ những tình huống lặp lại thật, sau đó chuẩn hóa.
Nguyên tắc Sinh Vũ theo: pattern library phục vụ đội, không phải ngược lại. Nếu Anh Chị phải thuyết phục đội dùng nó, có thể làm sớm hơn nhu cầu thực.
Chủ đề: Có cần pattern library trong design system không. Cẩm nang Sinh Vũ, sinhvu.com
Bấm chọn từng mục Anh / Chị thấy đúng, rồi bấm in hoặc lưu thành PDF để mang theo.
Nếu Anh / Chị đánh dấu phần lớn ở nhóm dấu hiệu trên, đây là lúc nên trao đổi kỹ hơn. Sinh Vũ có thể cùng Anh / Chị soi lại và đề xuất hướng đi.
Nathan Curtis, EightShapes: UX Patterns không phải UI Components. Brad Frost: Atomic Design, Chương 2. Kinh nghiệm thực hành trong bàn giao A3 tại Sinh Vũ Studio.
Component library chứa các viên gạch riêng lẻ: nút, ô nhập liệu, thẻ thông tin. Pattern library chứa cách ghép những viên gạch đó lại để giải một tình huống cụ thể, ví dụ luồng đặt hàng nhiều bước hay bảng lọc dữ liệu. Nói theo khung Atomic Design của Brad Frost: component là atom và molecule, còn pattern là organism và template. Hai cái này bổ sung cho nhau, không thay thế nhau.
Dấu hiệu rõ nhất là khi nhiều đội hoặc nhiều sprint khác nhau phải giải cùng một bài toán giao diện mà mỗi lần ra một kiểu khác nhau. Hoặc khi review thiết kế mà câu hỏi không còn là nút này đúng màu chưa, mà là luồng này nên hoạt động thế nào. Lúc đó pattern library giúp chốt lời giải chuẩn một lần, dùng lại nhiều lần.
Được về mặt kỹ thuật, nhưng dễ gây lộn xộn khi kho lớn dần. Trộn hai tầng vào một chỗ khiến người dùng khó biết đang tìm viên gạch hay đang tìm cách xây. Sinh Vũ khuyến nghị tách rõ hai tầng khi kho bắt đầu có cả component đơn lẻ lẫn những cấu hình ghép phức tạp, để mỗi thứ nằm đúng chỗ và dễ duy trì hơn.