Câu hỏi không phải 'có nên làm không' mà là 'làm lúc nào thì không lãng phí'.
Trong hầu hết trường hợp, nên chờ sản phẩm ổn định trước khi xây design system. Xây sớm khi UX còn xoay vòng sẽ dẫn đến refactor (làm lại) toàn bộ hệ thống, tốn nhiều hơn là tiết kiệm. Ngưỡng hợp lý để bắt đầu: sản phẩm đã có người dùng thực, UX cốt lõi không thay đổi lớn qua ít nhất hai đến ba sprint liên tiếp, và đội ngũ đã nhận ra các mẫu giao diện lặp lại.
Quyết định này không phải về việc design system có giá trị hay không. Design system có giá trị rõ ràng. Câu hỏi đúng là: làm ở thời điểm nào thì công sức bỏ ra không bị đổ đi khi sản phẩm thay đổi hướng. Sinh Vũ sẽ đi thẳng vào logic đó.
Design system là một trong những lớp trừu tượng (abstraction) lớn nhất của giao diện. Nguyên tắc YAGNI (You Aren't Gonna Need It, tạm dịch: đừng xây thứ chưa cần) trong Extreme Programming nói rõ: không xây abstraction trước khi có nhu cầu cụ thể xảy ra ít nhất hai lần. Áp dụng vào đây: nếu Anh/Chị chưa thấy cùng một mẫu giao diện lặp lại nhiều lần trong thực tế, chưa biết mình đang chuẩn hóa cái gì.
Lean Startup của Eric Ries cũng khuyến khích trì hoãn đầu tư vào cơ sở hạ tầng cho đến khi học được điều gì đó từ người dùng thực. Xây design system trước khi có bài học đó là đầu tư vào cấu trúc dựa trên giả định, không phải dựa trên thực tế.
Hậu quả thực tế: khi sản phẩm pivot (chuyển hướng), cả hệ thống component phải viết lại. Chi phí refactor lúc đó cao hơn nhiều so với việc chưa có design system ngay từ đầu.
Không phải "chờ đến khi xong xuôi", mà là chờ đến khi đủ tín hiệu. Ba tín hiệu Sinh Vũ dùng để đánh giá:
Ba tín hiệu này có thể đến sớm hoặc muộn tùy sản phẩm. Điều Anh/Chị cần tránh là nhầm "có nhiều tính năng" với "UX đã ổn định". Sản phẩm nhiều màn hình không đồng nghĩa với UX pattern đã chín.
Nên chờ thêm khi: sản phẩm chưa có người dùng thực, đang trong giai đoạn thay đổi lớn về định hướng, hoặc ngân sách cần ưu tiên cho tính năng tăng trưởng hơn là hạ tầng giao diện.
Nên bắt đầu sớm hơn khi: sắp tuyển thêm designer hoặc developer mới và cần tài liệu chuẩn ngay từ ngày đầu, khi nợ thiết kế (design debt) đang gây ra lỗi thực tế cho người dùng, hoặc khi có yêu cầu tuân thủ WCAG (tiêu chuẩn tiếp cận web cho người khuyết tật) bắt buộc phải kiểm toán giao diện.
Chi phí nợ thiết kế tăng theo thời gian. Nếu đã có quá nhiều inconsistency và đang gây ra friction (ma sát) cho người dùng, chờ thêm sẽ đắt hơn là làm ngay.
Ward Cunningham, khái niệm Technical Debt, áp dụng tương tự với Design Debt
Với khách hàng đến gặp Sinh Vũ trước khi có người dùng thực, lời khuyên nhất quán là: tập trung vào MVP trước, design system sau. Đây là lời khuyên bảo vệ ngân sách và công sức của Anh/Chị, không phải vì design system không quan trọng.
Khi Anh/Chị đã vượt ngưỡng và sẵn sàng bắt đầu, Sinh Vũ thường đề xuất lộ trình từ nhỏ đến lớn: xây phần token trước, tức là hệ thống màu sắc, kiểu chữ, khoảng cách. Chi phí thấp, dễ điều chỉnh, và ngay lập tức tạo ra sự nhất quán có thể thấy được. Component library đầy đủ đến sau, khi đội ngũ và sản phẩm đã đủ chín để biết cần gì.
Milestone cụ thể Anh/Chị nên tự đặt: "Nếu sau sprint tiếp theo UX luồng chính vẫn không thay đổi cấu trúc, chúng tôi bắt đầu làm token." Có mốc rõ thì không chờ mãi, cũng không làm vội.
Eric Ries, The Lean Startup (2011). Martin Fowler và Kent Beck, nguyên tắc YAGNI trong Extreme Programming Explained. Ward Cunningham, khái niệm Technical Debt (áp dụng tương tự với Design Debt). Kinh nghiệm thực hành Sinh Vũ Studio.
Chưa nên. Sự thay đổi thường xuyên là dấu hiệu UX chưa ổn định. Nếu làm ngay, mỗi lần đổi hướng sẽ kéo theo refactor cả hệ thống component. Hãy đợi ít nhất hai đến ba sprint liên tiếp không có thay đổi cấu trúc lớn trước khi đầu tư.
Được, và đây thường là lộ trình Sinh Vũ khuyến nghị. Bắt đầu bằng phần token (màu sắc, kiểu chữ, khoảng cách) có chi phí thấp và dễ điều chỉnh sau. Chưa cần xây đủ 80 đến 120 component ngay từ đầu, vì phần lớn component chỉ lộ ra nhu cầu thực khi sản phẩm scale.
Đây là một trong những lý do hợp lệ để làm sớm hơn ngưỡng thông thường. Người mới cần tài liệu chuẩn để làm việc nhất quán ngay từ ngày đầu. Tuy nhiên nên ưu tiên làm phần hướng dẫn và token trước, component library sau khi đội đã quen với sản phẩm.