Phần hai trong loạt bài phát triển sản phẩm độc lập của tôi
Bài trước mô tả các tài nguyên để xác định nhu cầu, phát triển một ứng dụng độc lập và phát hành nó từ góc nhìn của một lập trình viên iOS. Với nguồn lực hạn chế, tôi chỉ có thể hoàn thành các ứng dụng tiện ích được đưa lên App Store của Apple.
Bài này bàn về việc phát triển một sản phẩm đầy đủ tính năng trên nhiều nền tảng, những vấn đề gặp phải và cách giải quyết. Tôi sẽ chia sẻ cách mình từng bước xây dựng một hệ sinh thái sản phẩm hoàn chỉnh gồm tài khoản WeChat chính thức, mini program và ứng dụng.
1. Mục tiêu sản phẩm
Nói rộng ra, mục tiêu sản phẩm là giá trị mà sản phẩm mang lại. Ngay cả khi có tình huống sử dụng, một sản phẩm không tạo ra giá trị, không thể kiếm tiền và chỉ có rất ít người dùng thì gần như không có lý do để tồn tại.
Hoặc ta có thể bắt đầu còn rộng hơn, từ tầm nhìn sản phẩm…
Dừng ở đó. Đừng nghĩ đến tất cả những điều ấy lúc này, nếu không sản phẩm có thể chẳng bao giờ vượt khỏi trí tưởng tượng bất tận của bạn.
Khi tài nguyên, con người và vốn đầu tư đều hạn chế, mục tiêu trở nên rõ ràng: sản phẩm cần giải quyết vấn đề gì, hoặc phải cung cấp chức năng nào?
Ví dụ, khi làm File Manager, MVP của tôi có mục tiêu rõ ràng: truyền tệp giữa điện thoại và máy tính.
Hoàn thành MVP tự nhiên dẫn đến những yêu cầu khác. Một số đến từ kế hoạch sản phẩm của tôi, nhưng phần lớn đến từ phản hồi của người dùng:
- 1.0.0 Truyền tệp giữa điện thoại và máy tính
- 1.1.0 Xem trước hoặc phát tệp hình ảnh, video và âm thanh
- 1.2.0 Nhóm, di chuyển, xóa, nén và chia sẻ tệp
- 1.3.0 Cải thiện trình phát
- 1.4.0 Thêm xác minh bảo mật: mật mã cử chỉ và sinh trắc học
- 2.0.0 Thêm mua hàng trong ứng dụng
- 2.1.0 Thêm quét tài liệu
- …


Hãy chọn một mục tiêu. Nó không cần lớn, nhưng phải có thể thực hiện. Tập trung vào một việc mỗi lần và tiếp tục ngay cả khi có vẻ sai—không hoàn thành thì sao bạn biết nó sai ◔ ‸◔? Hoàn thành rồi nhìn lại.
2. Nguyên mẫu sản phẩm
Trong bài trước, tôi đã nói rằng mình thử nhiều công cụ nguyên mẫu rồi kết luận thời gian thiết kế nguyên mẫu đã đủ để tự dựng màn hình bằng xib.
Ở đây cho phép tôi tự mâu thuẫn ,,Ծ‸Ծ,,
Suy nghĩ ấy cũng dễ hiểu khi làm một ứng dụng tiện ích cá nhân không có kế hoạch tiếp theo và chỉ nhằm hoàn thành rồi phát hành.
Khi sản phẩm phát triển, cách làm từng bước mà không có nguyên mẫu hay kế hoạch sẽ gây vấn đề nghiêm trọng cho việc phát triển sau này. Thiết kế nguyên mẫu thực chất là quá trình sắp xếp logic của sản phẩm.
Đây là một số công cụ tạo nguyên mẫu. Công cụ tôi dùng nhiều nhất hiện nay là MockingBot.
3. Quản lý dự án
Sau khi tự phát triển và phát hành một ứng dụng iOS, tôi nhận ra một vấn đề nghiêm trọng: tôi không hề có khái niệm quản lý dự án. Có thời gian hoặc nhớ ra thì làm, còn lười thì không làm gì.
Đó là sản phẩm của tôi, do tôi thiết kế và phát triển. Bản MVP có lẽ chưa có người dùng trả tiền nên tôi cũng không cảm thấy phải chịu trách nhiệm với họ.
Điều này làm dự án chậm đi nghiêm trọng. Làm việc không kế hoạch quá lâu thậm chí có thể giết chết dự án.
Sau vài năm quản lý các vòng lặp ở công ty, tôi nhận thấy công cụ quản lý dự án cũng rất hiệu quả cho dự án cá nhân. Khi đã có mục tiêu sản phẩm rõ ràng và nguyên mẫu nhất quán về logic, việc chia nhỏ công việc thành nhiệm vụ diễn ra tự nhiên.
Tôi dùng coding.net để quản lý dự án; nền tảng này cũng có thể lưu trữ mã nguồn.

Chia nhiệm vụ thành các đơn vị tính bằng giờ. Cách này giúp quản lý dễ hơn và hỗ trợ viết ca kiểm thử. Thói quen hiện tại của tôi là hoàn thành ca kiểm thử trước khi viết mã. Điều này rất cần thiết.
Nguyên mẫu sắp xếp logic sản phẩm; ca kiểm thử sắp xếp chi tiết triển khai. Những ca kiểm thử đầy đủ dẫn chúng ta đến logic nghiệp vụ đúng ✅ và ngăn nhiều lỗi nghiệp vụ ❌.
4. Lựa chọn công nghệ
Đến đây, tất cả mới chỉ là chuẩn bị; chúng ta chưa bắt đầu phát triển. Khó khăn chính là chỉ có một mình tôi làm lập trình viên, nhưng lại muốn xây dựng hệ sinh thái hoàn chỉnh gồm tài khoản WeChat chính thức, mini program và ứng dụng.
Ta sẽ cần kỹ năng về mini program, iOS và Android. Học một ngôn ngữ lập trình không quá khó, nhưng triển khai cùng logic nghiệp vụ ba lần sẽ tốn gấp ba công sức. Điều đó rõ ràng không thực tế.
Thông thường ta có thể dùng web để phục vụ nhiều nền tảng, thậm chí bỏ ứng dụng và tập trung vào tài khoản chính thức cùng mini program. Ở giai đoạn đầu, khi nhu cầu sản phẩm cần được xác thực nhanh, đây là cách tiếp cận rất hợp lý.
Tìm kiếm một chút sẽ thấy nhiều công nghệ đa nền tảng. Để xây dựng ứng dụng và mini program bằng một cơ sở mã cho ba nền tảng, ta có thể dùng Uni-App. Nó sử dụng framework frontend Vue.js, còn iOS và Android được hỗ trợ qua Weex.
Như vậy là đủ cho sản phẩm cá nhân hoặc sản phẩm thương mại nhỏ.
5. Quản lý dữ liệu
Khi cách làm mini program và ứng dụng đã được quyết định, vẫn còn một câu hỏi then chốt: dữ liệu nên nằm ở đâu?
Với một tiện ích, lưu dữ liệu cục bộ trong ứng dụng là đủ. Nhưng nếu mục tiêu là nền tảng thông tin có hệ thống người dùng hoàn chỉnh, thậm chí một cộng đồng nội dung do người dùng tạo phức tạp hơn thì sao?
Uni-App cung cấp dịch vụ uniCloud riêng. Việc phát triển máy chủ có thể thực hiện bằng JavaScript, và mini program cùng ứng dụng có thể dùng máy chủ mà không cần tên miền.
Tôi chọn một cách khác: lưu trữ dữ liệu trên nền tảng serverless LeanCloud. Mini program và ứng dụng truy cập cơ sở dữ liệu được lưu trữ qua SDK JavaScript của LeanCloud.
Gói phát triển hỗ trợ miễn phí 30.000 yêu cầu API mỗi ngày và còn cung cấp dịch vụ SMS. Như vậy đủ để xây dựng hệ thống người dùng, tải dữ liệu người dùng lên và lấy dữ liệu nền tảng.
Khi số yêu cầu vượt hạn mức gói phát triển, sản phẩm đã có một quy mô người dùng nhất định. Tôi tin doanh thu từ lưu lượng đó khi ấy đủ để chi trả cho gói thương mại tính phí theo mức sử dụng.
Một cách tinh nghịch để tìm nguồn dữ liệu
Nếu muốn làm ứng dụng thời tiết hoặc thông tin nhưng không có dữ liệu thời tiết hay tin tức thì sao?
Ở Trung Quốc có nhiều chợ API, bao gồm:
và những nơi khác.
Các chợ này cung cấp cả API trả phí và miễn phí.
Nếu sản phẩm có cách kiếm tiền tốt từ lưu lượng, hãy cân nhắc API trả phí.
Nếu không, hãy cân nhắc hạn mức miễn phí. Nhưng 100 yêu cầu dùng thử có thể hết ngay trong giai đoạn kiểm thử. Vậy phải làm sao?
Bạn có thể kết hợp cơ sở dữ liệu serverless LeanCloud với một chợ API. Ví dụ với thời tiết hằng ngày, trước tiên truy vấn cơ sở dữ liệu. Nếu chưa có dữ liệu, hãy yêu cầu từ chợ rồi lưu vào cơ sở dữ liệu.
Nhưng nếu 100 yêu cầu vẫn không đủ bao phủ mọi thành phố thì sao? Hãy tiếp tục tinh thần tận dụng miễn phí và đăng ký ở vài nền tảng.
6. Ra mắt và vận hành
Đến lúc này, chúng ta đã phát triển xong mini program, ứng dụng và máy chủ. Ra mắt thế nào?
Mini program tương đối đơn giản: trên Nền tảng Tài khoản WeChat Chính thức, làm theo hướng dẫn để đăng ký mini program.
Phát hành trên iOS cần tài khoản nhà phát triển trả phí. Đây là một rào cản, nhưng nếu vận hành lâu dài, tôi khuyên đăng ký trên trang web nhà phát triển của Apple. Giờ việc đăng ký khá đơn giản: tải ứng dụng Developer trên iPhone rồi thanh toán tại đó.
Để phân phối trên Android, bạn cần đăng ký bản quyền phần mềm. Hồ sơ thông thường có thể mất 1–2 tháng, hoặc bạn có thể trả phí cho đơn vị trung gian xử lý.
Tiếp tục tinh thần tận dụng miễn phí: ta có thể lưu hình ảnh, âm thanh và video dùng cho các vị trí quảng bá trong ứng dụng và mini program ở đâu?
Thư viện phương tiện của tài khoản chính thức có thể giải quyết vấn đề. Lưu hình ảnh, âm thanh và video tại đó, lấy URL gốc, rồi ứng dụng và mini program có thể truy cập.
7. Tạo doanh thu
Một cách đơn giản để kiếm tiền từ lưu lượng là quảng cáo.
Tuy nhiên, yêu cầu đủ điều kiện của các nền tảng dành cho nhà xuất bản ngày càng cao, khiến nhà phát triển độc lập khó tích hợp quảng cáo.
Uni-App cung cấp tích hợp một chạm; xem tài liệu.
Khi tài khoản chính thức đã có lượng người theo dõi, nó có thể bật vị trí quảng cáo trong bài viết.
Mini program có thể bật quyền kiếm tiền cho nhà xuất bản sau khi đạt 1.000 khách truy cập duy nhất.
8. Lời kết
Giờ chúng ta đã hoàn thành hệ sinh thái gồm tài khoản WeChat chính thức, mini program và ứng dụng được mô tả ở đầu bài.
Theo các bước này, tôi đã hoàn thành quy trình cho ba sản phẩm. Hãy quét mã để dùng thử:
