Hạt cơ bản trong sản phẩm - What you do is what you think

Welcome back, hôm nay tôi sẽ bàn tiếp về các yếu tố cần chú ý khi làm sản phẩm phần mềm mà nhiều khi chúng ta bỏ qua, kết hợp với mindset tối giản hóa. Như trong bài viết về tối giản, tôi có đề cập rằng đôi khi phần mềm của chúng ta có nhiều yếu tố phức tạp không thể tránh, vì vậy giải pháp của chúng ta là luôn phải đảm bảo được tính dễ sử dụng cho sản phẩm kể cả nó có phức tạp hay nhiều chức năng đến đâu. Vậy đâu là cách làm, các bạn có thể thử thực đơn của tôi dưới đây.

1. UI = Đồng nhất

• Như tôi đã nói, tôi và bạn và tất cả mọi người, chúng ta đều lười. Đừng bắt tôi phải học hay suy nghĩ nhiều. Vì vậy, hãy để những thứ giống nhau là giống nhau, đừng làm khác, hoặc những thứ tôi đã quen thuộc thì đừng bắt tôi suy nghĩ khác đi. Đơn giản là nếu trong sản phẩm của bạn có một màn hình sử dụng button là hình chữ nhật, thì hãy để button ở tất cả màn hình đều là hình chữ nhật, đừng thêm vài cái button hình tròn hay oval làm gì cả, có thể đẹp nhưng who care? • Và, hãy nhìn vào design của sản phẩm dở hơi của bạn, rồi đồng nhất hộ tôi cách design các thành phần trên màn hình: màu sắc, hình dạng, kích thước, căn lề, vị trí, icon, style, font chữ… • Hãy đồng nhất cách hoạt động giữa các màn hình, chức năng: đừng lúc thì dùng popup lúc thì hiển thị thông báo lỗi trực tiếp trên màn hình, đừng lúc thì dùng button X góc trên bên phải cửa sổ lúc thì dùng button Close để tắt màn hình… Hãy đồng nhất cách người dùng hành động, đừng lúc thì phải vuốt trái sang phải, lúc thì phải vuốt từ trên xuống để delete… Đồng nhất, đồng nhất và đồng nhất, bạn sẽ có một sản phẩm 1-minute to use, và điều đó sẽ thỏa mãn tôi One more thing: bạn hãy học hỏi những cái gì đã có sẵn và người dùng đã quen khi sử dụng các phần mềm phổ biến khác, đừng sáng tạo lại bánh xe

2. Sao phải FOCUS

Trí não của bạn và tôi rất lười ghi nhớ, tuy nhiên ấn tượng trong 3s đầu tiên lại là khắc cốt ghi tâm. Vì vậy, hãy tận dụng 3s này để hướng dẫn người dùng phải làm gì, cũng như để người dùng ghi nhớ về chức năng mà bạn muốn họ sử dụng. Một cách hiệu quả là hãy sử dụng các kĩ thuật để focus người dùng vào các phần bạn muốn họ thực hiện ngay. Bạn có thể dùng màu nổi bật hơn (ví dụ cho button, textbox…), dùng con trỏ chuột focus sẵn vào nơi bạn muốn, dùng font size to hơn… One more thing: Việc thực hiện focus này đặc biệt cần thiết trong những trường hợp như màn hình xuất hiện lần đầu tiên, hoặc sau khi tắt các popup thông báo đi, hoặc sau khi hệ thống thực hiện một sự kiện nào đó… Việc focus sẽ có vai trò như một cuốn sách hướng dẫn vô hình để giúp tôi biết phải làm gì tiếp theo để dùng sản phẩm của bạn Yep, tất cả chỉ là 3s, đừng quên điều đó, hãy show mọi điều tốt đẹp trong 3s. Well done, tôi đi xem ảnh của Monica đây, bạn có đang focus vào đâu không

3. LIMIT là cái quái gì

Một vấn đề đau đầu của những người làm sản phẩm như bạn và tôi là làm sao suy nghĩ được như một user bình thường. Trường hợp bạn và tôi hay gặp phải, chính là việc nhập liệu tối đa số ký tự cho phép đối với một thông tin. Trên thực tế thì đây là trường hợp rất hay gặp, tuy nhiên dường như những nhà phát triển lại nghĩ rằng đây là một case abnormal ít gặp, vì vậy thường chúng ta không chú tâm xử lý cho nó hoàn hảo. Do vậy, rất nhiều sản phẩm khi hiển thị cho các trường thông tin nhập tối đa số ký tự cho phép rất hay gặp các lỗi:

  • Không hiển thị đủ thông tin người dùng đã nhập: do giới hạn về kích thước khi design, hoặc do cân đối tính thẩm mỹ với các yếu tố khác
  • Có cơ chế cho phép người dùng có thể xem đầy đủ thông tin: ví dụ sử dụng tooltip để hiển thị đầy đủ thông tin khi người dùng di con trỏ chuột vào, hoặc dùng button/link để khi người dùng click vào, sẽ hiển thị đầy đủ nội dung bằng popup… Vấn đề thiếu sót của giải pháp này là bạn không đưa cho tôi một chỉ dẫn rõ ràng về việc nội dung hiển thị chưa đủ đâu, hãy click cái này, click cái kia hoặc làm như thế này, làm như thế kia để xem đầy đủ nhé. Nothing. Tôi hoặc là phải tự suy ngẫm, hoặc là học hỏi từ nhiều sản phẩm khác để biết Vậy thì, lời khuyên của tôi là, hãy cố gắng giữ những gì như nó vốn có, hãy để tôi thấy đúng những gì mà tôi đã gõ, đừng thay đổi. Trường hợp bạn không thể, hãy chỉ dẫn rõ ràng cho tôi để tôi có thể thấy được chúng
    One more thing: một điều quan trọng không kém là đừng vì để đảm bảo việc này mà bạn làm xô lệch hay thay đổi layout khi tôi edit so với khi tôi chỉ view, tôi ghét điều đó cũng không kém việc bạn không hiển thị đầy đủ lời vàng ý ngọc tôi đã gõ đâu

4. SEARCH gì đây?

Tôi lười, điều đó đúng, nhưng tôi luôn muốn có được câu trả lời một cách nhanh nhất, điều đó cũng đúng. Cung cấp chức năng Search là một cách cơ bản nhưng vô cùng hiệu quả để bạn làm thỏa mãn tôi. Đó là cách mà Google chinh phục thế giới. Tuy nhiên, điều tôi muốn nói ở đây là bạn phải làm thế nào để việc tìm kiếm của tôi dễ dàng nhất, cũng như mang đến cho tôi những câu trả lời hợp với tôi nhất. Không hề đơn giản đúng không, thế giới đã có nhiều kẻ thất bại vĩ đại rồi: Yahoo, Bing, Ask.com,… Vì vậy, tôi nghĩ là bạn có thể tham khảo một vài nhu cầu cơ bản của tôi để thỏa mãn trước hết

  • Đa phần các trường hợp khi bắt đầu tìm kiếm thì tôi cũng chưa chắc chắn về việc tôi cần tìm chính xác những thứ như từ khóa của tôi không, vì vậy tốt nhất là bạn nên đưa cho tôi cả những kết quả tương tự nữa. Hãy sử dụng “LIKE” thay vì “=“ khi trả tôi kết quả
  • Nên cố gắng trả về kết quả Full text search cho tôi, đừng bắt tôi nghĩ nhiều về từ khóa tìm kiếm
  • Tốc độ, tốc độ và tốc độ. Tôi cần có kết quả trong BINGO, đừng để tôi chờ quá 3s thần thánh. Để giải quyết vấn đề này, tôi nghĩ bạn cần cải tiến các kĩ thuật tìm kiếm của bạn bằng cách đánh index trong DB, thực hiện phân trang, hiển thị từng phần kết quả, lưu cache… One more thing: hãy làm nổi bật chức năng Search này cho tôi thấy trên màn hình của bạn, và cố gắng biến nó thành một Google thu nhỏ, để tôi có thể tìm kiếm tất cả mọi thứ trong sản phẩm của bạn bất kể tôi đang ở ngóc ngách nào. Đừng bắt tôi quay về những năm 60, khi muốn có một đĩa nhạc của Pink Floyd phải đến tận London để tìm.

5. DATA TYPE thế nào đây?

Sản phẩm của bạn dù được làm ra để rất nhiều người có thể sử dụng, nhưng nếu nó càng hướng tới cá nhân càng nhiều càng tốt. Do đó, hãy cố gắng đem những gì quen thuộc trong đời sống thực tế của tôi vào sản phẩm càng nhiều càng tốt, vì nó sẽ giúp tôi 1) không phải học cái mới và 2) cảm thấy thân quen và muốn gắn bó. Yep, tôi đã có gợi ý nho nhỏ rồi đó, hãy bắt đầu từ những thứ cơ bản và quen thuộc: kiểu data. Đơn giản, đó chính là:

  • Hãy hiển thị những kiểu data thông thường như chữ cái, số, tiền tệ, thời gian… đúng như những gì tôi đã thấy trong cuộc sống hàng ngày. Đừng sử dụng 10102016 thay vì 10/10/2016, 00000002 thay vì 2, hay -> thay vì To
  • Hãy sử dụng kiểu data theo thói quen địa phương, đừng sử dụng dạng MM/DD/YYYY nếu tôi là người Việt Nam… One more thing: hãy cố gắng validate sai sót khi tôi nhập liệu và tự động sửa lại để hiển thị cho đúng hoặc thông báo lỗi một cách realtime để tôi có thể verify ngay lúc đấy. Đừng chỉ đưa ra thông báo lỗi sau khi tôi đã điền rất nhiều thông tin và bắt tôi sửa lại toàn bộ.

6. BACK về đâu?

Tôi là một con người và tôi luôn luôn có thể gặp sai lầm. Nếu như trong đời sống thực, tôi không thể quay ngược thời gian để tránh sai lầm thì đối với sản phẩm phần mềm, tôi hy vọng sẽ làm được điều đó. Vì vậy, hãy giúp tôi bằng cách phát triển các chức năng BACK hay UNDO để tôi có thể quay trở về tình trạng y hệt trước đó. Cũng như mong muốn của tôi là tất cả các thao tác đều có thể BACK được. Điều đó có quá khó? One more thing: trong nhiều trường hợp sử dụng BACK, bạn sẽ phải chú ý việc khi BACK lại màn hình trước đó thì có hiển thị dữ liệu như cũ không, hay là hiển thị dữ liệu đúng với trạng thái database hiện tại. Theo tôi tốt nhất bạn nên có cả hai chức năng BACK + UNDO, và phân biệt rõ cho tôi hiểu BACK sẽ quay về màn hình cũ với data ở thì hiện tại, còn UNDO sẽ quay về màn hình cũ với data ở thì quá khứ. Và có thể dùng luôn các chức năng BACK có sẵn, ví dụ BACK trên trình duyệt

7. EVENT nào

Sản phẩm của bạn là một chuỗi các sự kiện và hành động để giúp tôi đạt được kết quả mong muốn. Và wtf, sao tôi đã thực hiện như hướng dẫn nhưng hệ thống không thay đổi gì thế này? Tôi đã làm gì sai, hay chương trình bị lỗi, blabla…Yup, sản phẩm bỏ đi. Tôi đã gặp nhiều trường hợp như vậy khi sử dụng các sản phẩm phần mềm, bởi nhiều khi bạn đã gặp phải sai lầm rất cơ bản: không phản hồi lại thao tác người dùng, đặc biệt là trong các trường hợp bị lỗi, làm người dùng không biết làm gì tiếp theo. Vì vậy, lời khuyên của tôi trong trường hợp này là các bạn hay luôn chú ý 2 quy tắc dưới:

  • Một khi đã có một control cho người dùng tương tác trên màn hình (ví dụ button, đường link, combobox,…), thì bắt buộc khi người dùng tương tác với control đó, hệ thống phải thực hiện một hành động nào đó
  • Sau khi hệ thống thực hiện xong hành động thì cần phải hiển thị kết quả cho người dùng bằng cách phải thay đổi cái gì đấy trên màn hình, và focus vào cái đối tượng cần làm tiếp theo để hướng dẫn người dùng (ví dụ sau khi tắt popup thông báo lỗi thì focus vào chỗ bị lỗi để sửa) (bạn có thể liên tưởng tới định luật III Newton) One more thing: tôi đã gặp nhiều sản phẩm cho hiển thị các button nhưng luôn luôn ở trạng thái disable và người dùng không thể dùng được (vì không có quyền, hoặc chức năng chưa được làm…). Trong trường hợp này, tốt nhất bạn nên vứt bỏ button đấy đi, vì nếu để lại thì tôi luôn có suy nghĩ rằng tôi sẽ sử dụng được button đấy, chỉ là do điều kiện nào đấy chưa đúng nên nó chưa được active để sử dụng.

8. HOT KEYS nhé

Một trong những điều tuyệt vời của con người là luôn tìm cách lách luật để sáng tạo ra các cách làm tắt nhằm giải quyết nhanh chóng công việc. Và các sản phẩm phần mềm cũng vậy, hãy tận dụng kĩ thuật để tạo ra các cách đi tắt như dùng Hot keys, đánh Tab index cho các trường nhập liệu để công việc được tiến hành nhanh hơn One more thing: Hãy chú ý dùng các Hot keys quen thuộc với chức năng tương tự của Windows/MacOS như Enter, Shift Enter, Esc, Tab, F1…F12,… để giúp tôi có thể dùng ngay mà không phải học

9. MESSAGE đây

Đây là một trong những thành phần mà tôi sẽ gặp nhiều nhất trong các sản phẩm của bạn. Và tôi rất hy vọng là những message này sẽ hướng dẫn tôi rất nhiều trong việc sử dụng. Vì vậy, lời khuyên của tôi là bạn cần đưa ra các thông tin hết sức rõ ràng, chi tiết, ngắn gọn và dễ hiểu trong các thông báo, đừng bắt tôi phải suy nghĩ. Ở đây, tôi có một chia sẻ từ một người bạn khi mô tả các thông tin cần có của một thông báo lỗi như sau:

  • Lỗi ở đâu (trường dữ liệu nào sai, vị trí nào trong đó bị sai…)
  • Lí do bị sai (nhập sai format, nhập quá số kí tự,…)
  • Cách sửa cho đúng Đừng bao giờ show cho tôi xem những lỗi ngớ ngẩn do trình biên dịch code gửi ra. One more thing: Mặc dù Message là phương án hiệu quả trong giao tiếp với người dùng, nhưng bạn đừng bao giờ lạm dụng nó. Nên cố gắng việc hạn chế người dùng có thể gây ra lỗi hơn là việc để cho người dùng gây ra lỗi và đưa ra message cảnh báo

Well, tôi đã giới thiệu cho các bạn thực đơn cơ bản của tôi, các bạn có thể thêm thắt gia vị và nguyên liệu tùy thích, tuy nhiên cố gắng đừng cho nhiều quá, bạn sẽ không follow nổi đâu. Tin tôi đi. Keep moving \m/