Tháng 6 là một tháng đặc biệt, càng ý nghĩa hơn nữa khi cách đây 1 năm trước tôi đã phát hành ứng dụng ghi chú OpenNotas. Tại thời điểm đó, nó đã gây được sự chú ý nhất định khi lọt top 2 sản phẩm có lượt bình chọn nhiều nhất trong ngày trên trang ProductHunt - Sân chơi của những người đam mê làm sản phẩm. Cảm giác thật là khó tả vì lần đầu tiên mang sản phẩm Việt đi ra sân chơi Quốc tế mà được nhiều người đón nhận đến vậy. Phải cảm ơn rất nhiều đến những người đã theo dõi và làm theo lời kêu gọi của tôi trên các trang mạng xã hội đã đăng bài viết.
Hiện tại OpenNotas đã thu hút được hơn 3.5 nghìn người dùng, trong đó số lượng người dùng hàng tháng xấp xỉ 300 người. Một con số khiêm tốn nhưng lại có ý nghĩa rất lớn với một ứng dụng ghi chú còn non trẻ giữa hàng chục, thậm chí hàng trăm cái tên đình đám đã có. OpenNotas tập trung vào sự đơn giản, đa nền tảng, nhẹ và bảo mật. Chắc cũng vì thế mà chạm đến trái tim của nhiều người có cùng chí hướng.
Gọi là một năm bảo trì nhưng đúng ra giai đoạn đầu sau khi phát hành, tôi không có nhiều thời gian để phát triển tiếp. Phần vì nó đã đáp ứng được nhu cầu của mình. Cho những ai chưa biết thì OpenNotas được hình thành dựa trên nhu cầu cá nhân: Một nơi nào đó nhanh, nhẹ và hoạt động trên nhiều nền tảng như máy tính lẫn di động, nhưng phải có tính bảo mật cao. Mãi gần đây, tần suất cập nhật ứng dụng mới nhiều hơn và phát hiện ra rằng mình có nhiều bài học rút ra trong quá trình làm.
Vì vậy bài viết này kể lại 5 bài học lớn nhất kể từ khi phát triển ứng dụng dành cho người dùng phổ thông. Đây không phải là sản phẩm đầu tiên vì trang blog này có trước. Nhưng OpenNotas lại đi theo hướng khác, khi nó gần giống với một ứng dụng sử dụng hàng ngày được cài đặt vào trong thiết bị hơn. Hy vọng điều đó sẽ mang đến những góc nhìn mới mẻ hơn cho bạn đọc.
Hãy đến với bài học thứ nhất!
Một ứng dụng ghi chú? Chà, chẳng phải là quá nhiều rồi sao? Rồi làm ra thì ai dùng? Rảnh thật chứ?... - Đó là những suy nghĩ của tôi trước khi bắt tay vào làm. Cũng không thể trách được khi ngoài kia đã có quá nhiều cái tên rồi, chỉ cần tốn ít thời gian tìm kiếm là ra. Nhưng thời điểm đó, các ứng dụng tìm thấy đều không phù hợp với mình cho nên mới nghĩ đến ý tưởng táo bạo như vậy. Vì băn khoăn với ý tưởng nên đã đăng bài viết lên một cộng đồng lớn trên Facebook và nhận được rất nhiều bình luận góp ý. Thật may vì đa số đều ủng hộ quyết định này. Nghĩ lại thì đúng là chẳng có gì khó hết, mình biết lập trình, mình có kiến thức, chỉ cần thời gian thì sẽ làm được tất.
Ấy vậy mà phải mất gần 3 tháng để làm ra một trang tưởng chừng là đơn giản. Có quá nhiều việc cần phải làm, từ khâu thiết kế cho đến lúc viết mã và kiểm tra tính năng xem nó có hoạt động như mong đợi. Chưa dừng lại ở đó, vì xác định là mã nguồn mở cho nên phải nghĩ cách cấu trúc dự án thế nào cho dễ đọc, dễ bảo trì. Rồi còn phải viết tài liệu, mô tả tính năng và cả kiến trúc hệ thống cho người dùng cuối lẫn cho những người là lập trình viên nếu họ muốn tham gia vào dự án này.
Có 2 điều tưởng chừng như đơn giản mà lại tốn nhiều thời gian nhất là điều chỉnh kích thước hiển thị của màn hình và đồng bộ ghi chú. Đúng vậy, tôi đã rất nhiều lần mất ăn mất ngủ chỉ vì không thể điều chỉnh được kích thước hiển thị của các khung nhìn theo ý của mình. Chỉ cần một yếu tố nhỏ thôi là mọi thứ vượt tầm kiểm soát, các thành phần hiển thị một cách khó hiểu trên các kích thước màn hình lẫn trình duyệt khác nhau. Hy hữu hơn khi chạy trên trình duyệt Safari, ứng dụng gần như bị "treo cảm ứng" ở một vài vị trí nào đó, tức là vùng đó không thể tương tác được. Những lúc như thế chỉ muốn xoá thẳng tay những đoạn mã mất nhiều giờ viết ra, không làm nữa cho nhẹ đầu. Những cảm xúc tiêu cực ấy không chỉ một lần mà diễn ra như cơm bữa. Đến giờ thì mọi thứ có vẻ ổn, nếu có thời gian, hy vọng rằng tôi sẽ viết ra những món nợ kỹ thuật này.
Đồng bộ cũng rất là "khoai" trong giai đoạn này, vì phải làm sao vừa lưu trữ dữ liệu trên máy người dùng, vừa phải đồng bộ được dữ liệu lên máy chủ. Có khá nhiều trường hợp cần nghĩ đến. Ví dụ như họ sử dụng ứng dụng khi không có kết nối mạng, và kết nối lại vào lúc nào đó. Chưa kể trên nhiều thiết bị, họ cũng chỉnh sửa một số ghi chú trong cùng thời gian đó thì sao? Nhức nhức cái đầu rồi đúng không? Thú thật nhiều lúc trong giấc mơ còn ám ảnh về nó.
Tóm lại là mọi vấn đề chỉ phát sinh khi bạn bắt tay vào làm. Ai cũng có thể nhìn thấy những công việc cần làm nhưng không thể ước lượng được hết rủi ro. Nếu không tin, hãy thử bắt tay vào làm một ứng dụng ghi chú giống như tôi.
Bắt đầu một dự án, đồng nghĩa với cần bỏ thời gian ra để phát triển. Đối với một nhân viên văn phòng 8 tiếng, cộng thêm 2 giờ di chuyển, bù trừ đi thời gian ngủ nghỉ ăn uống sinh hoạt cá nhân, thì mỗi tối có thêm tối đa 3-4 tiếng rảnh rỗi. Bạn có nghĩ rằng tôi dành trọn 4 tiếng đó để tiếp tục nhìn vào màn hình máy tính?
Công việc của một người phát triển sản phẩm không chỉ dừng lại ở viết mã, mà còn nhiều việc khác quan trọng không kém. Phải lên được danh sách tính năng, tìm cách bố cục sao cho hợp lý, ưu tiên cái nào làm trước cái nào làm sau, thu thập dữ liệu, nghiên cứu hành vi người dùng và cả cách làm thế nào để nhiều người biết đến ứng dụng nhiều hơn... Đó là lúc bạn cần phải trong vai của một người quản lý thực thụ. Quản lý người khác đã khó, quản lý được mình tưởng dễ nhưng lại không dễ chút nào.
Tôi lập ra một cộng đồng nhỏ trên Telegram với hy vọng thu hút được người dùng tham gia. Cũng giống như dự án, một cái mới được thêm vào đồng nghĩa với thời gian phải chia ra. Nhiều lúc muốn làm chỉn chu nhưng năng lực lại không cho phép. Thế mới thấy muốn nhanh thì đi một mình, còn muốn đi xa phải có những người giúp sức. Một mình không thể kham hết tất cả công việc.
Tóm lại là phải biết cách quản lý số thời gian ít ỏi của mình, ưu tiên cho những việc quan trọng hơn. Và một điều quan trọng nữa là tìm cách cân bằng công việc và sức khoẻ - điều tưởng chừng chỉ có trên lý thuyết.
Web có thể nói như là một phát minh vĩ đại của giới công nghệ. Không chỉ để truyền tải thông tin mà nó còn mang đến khả năng tương tác trực tiếp với người dùng. Chỉ cần một thiết bị có hỗ trợ duyệt web, bạn như nắm tất cả tính năng của thế giới. Bất kỳ cái gì đều có thể tìm thấy trên Internet. Nhưng phải thành thật mà nói rằng: làm một ứng dụng trên web không đơn giản.
Android, iOS... "chế" ra một hệ thống các thành phần tương tác như UITextField
, UITextView
, UIButton
... đặt chúng lại với nhau để tạo nên giao diện cho người dùng. Trên một kích thước hiển thị khiêm tốn, các thành phần này không có nhiều cách chọn để bố trí. Thậm chí các ứng dụng giờ đây trở nên giống nhau đến mức không ngờ. Web cũng có các thành phần đó nếu không muốn nói là đa dạng hơn rất nhiều. Lợi thế của web là có nhiều không gian để hiển thị, nhưng nếu không biết tận dụng mà bài trí quá nhiều sẽ gây rối mắt.
Khi bắt tay vào làm ứng dụng ghi chú, tôi mang tư duy của thiết kế một trang web nhiều hơn. Về bố cục, thành phần và cả cách tương tác đều trông giống như một người dùng đang duyệt web. Sự tự do đang thể hiện rất tốt nhưng vô tình lại gây khó hiểu cho người dùng. Thời gian gần đây, tôi đang tích cực cải thiện khả năng hiển thị sao cho đến gần hơn với trải nghiệm như một ứng dụng gốc (native), thân thiện với người dùng nhất có thể.
Dưới đây là hình ảnh hiện tại và đang phát triển của ứng dụng.
Tóm lại là sự phóng khoáng của web đôi khi lại đẩy sự sáng tạo của con người vượt quá mong đợi, khiến họ lúng túng trong việc làm thế nào để mang lại sự thân thuộc với người dùng.
Trước đây khi nói về một tính năng, điều tôi quan tâm đến là logic đằng sau nó, về các thành phần và cách chúng nói chuyện với nhau, được tổ chức theo kiến trúc gì và làm thế nào để tăng hiệu năng. Còn bây giờ suy nghĩ về tính năng đã thay đổi, điều quan trọng nhất là nó giúp ích gì cho người dùng và liệu họ có biết cách dùng nó không. Hãy luôn nhớ rằng một tính năng mới được thêm vào đồng nghĩa với độ phức tạp trong sử dụng sẽ tăng lên tương ứng.
Làm ứng dụng ghi chú như một bài kiểm tra về tất cả những điều mà mình đã học được trong quá trình phát triển sản phẩm. Đặt mình vào vị trí của người dùng mà tìm hiểu xem mình đang muốn điều gì, ứng dụng đã thể hiện tốt điều đó hay chưa. Nhưng không phải lúc nào điều đó cũng tốt vì đáp ứng tiêu chí của bạn nhưng chưa chắc tốt với người khác.
Vì vậy chỉ có thể đạt được sự cân bằng khi trải nghiệm nhiều sản phẩm tương tự, hay kể cả sản phẩm khác. Tìm hiểu lý do đằng sau thiết kế tính năng để rút ra bài học, áp dụng vào quá trình phát triển sản phẩm của mình.
Tóm lại là để phát triển một sản phẩm tốt, hợp với thị hiếu của người dùng thì phải trải nghiệm các sản phẩm đã có trên thị trường.
Không dưới chục lần tôi cảm thấy chán nản, không muốn tiếp tục phát triển ứng dụng ghi chú này nữa. Có quá nhiều điều cần phải học, cần phải làm, cần phải quản lý, mà thời gian thì không cho phép. Nhiều vấn đề ám ảnh đến nỗi trong giấc mơ còn chưa dứt. Rồi tự đặt câu hỏi nhận lại được gì khi tiếp tục phát triển nó?
Đó là trải nghiệm. Con người về cơ bản không khác nhau là mấy, đều được sinh ra, lớn lên, lập gia đình và cho đến lúc về với đất mẹ. Sự khác biệt rõ ràng nhất là ở môi trường sống của họ. Môi trường hình thành nên nề nếp. Nếp sống tạo ra hành động. Hành động tạo nên sự trải nghiệm. Điều đó khiến cho mỗi người không ai giống ai. Lựa chọn của tôi hôm nay rèn luyện tính kiên trì. Ai mà biết được nó mang đến trải nghiệm mới nào trong tương lai?
Chán nản là một cảm xúc tiêu cực, hình thành khi con người ta cảm thấy không kiểm soát được điều gì đó. Tuy vậy, cảm xúc này có thể giải quyết bằng cách thư giãn. Mỗi khi thấy mất bình tĩnh, hãy dừng lại, bỏ đi đâu đó một thời gian rồi quay lại, bạn sẽ thấy năng lượng của mình quay trở lại như ban đầu.
Tóm lại là khi đối mặt với những khó khăn, đừng nản chí, hãy dừng lại nghỉ ngơi rồi quay trở lại. Nó giúp rèn luyện tính kiên trì cho mỗi người để... đến với những trải nghiệm mới hơn.
Sau một năm bảo trì và phát triển OpenNotas, tôi đã học được nhiều điều giá trị không chỉ trong lĩnh vực công nghệ mà còn ở cách quản lý dự án và bản thân. Từ việc nhận ra rằng mọi thứ tưởng chừng đơn giản nhưng lại đầy thách thức khi bắt tay vào làm, đến việc học cách quản lý thời gian, dự án, và cộng đồng một cách hiệu quả dù quỹ thời gian hạn hẹp. Tôi cũng hiểu rõ hơn sự khác biệt giữa phát triển ứng dụng và trang web, khi những chi tiết nhỏ trong giao diện và trải nghiệm người dùng có thể tạo nên sự khác biệt lớn. Đồng thời, tôi nhận ra tầm quan trọng của việc luôn đặt người dùng làm trung tâm và học hỏi từ các sản phẩm khác để nâng cao chất lượng ứng dụng.
Quan trọng hơn cả, sự kiên trì là điều đã giúp tôi vượt qua những cảm giác chán nản và những thách thức lớn trong quá trình phát triển. Những nỗ lực không ngừng nghỉ đã mang lại cho tôi không chỉ một sản phẩm đáp ứng nhu cầu cá nhân mà còn là một môi trường học hỏi đầy ý nghĩa. Dù hành trình này không dễ dàng, tôi tin rằng mỗi trải nghiệm đều góp phần quan trọng vào việc định hình con đường phía trước. OpenNotas không chỉ là một ứng dụng đơn thuần, mà còn là minh chứng cho sự trưởng thành và quyết tâm của tôi trong việc theo đuổi đam mê và chia sẻ giá trị với cộng đồng.
Bí mật ngăn xếp của Blog
Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!
Đăng ký nhận thông báo bài viết mới
Bình luận (0)