2 điểm bởi GN⁺ 2023-10-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Vào tháng 3/2020, giai đoạn đầu cách ly vì COVID, Stocketa bắt đầu như một dự án cá nhân để học Swift và SwiftUI; nó được phát triển 10–20 giờ mỗi tuần trong hơn 2 năm nhưng chưa từng được phát hành trên App Store
  • Mục tiêu là một trình theo dõi danh mục đầu tư cho nhà đầu tư phổ thông, giúp xem tài sản rải rác ở nhiều công ty chứng khoán và dịch vụ tài chính tại một nơi, đồng thời kiểm tra lãi/lỗ theo từng giao dịch cũng như lãi/lỗ đã thực hiện và chưa thực hiện
  • Ứng dụng tập trung vào các tương tác tự xây dựng hơn là component iOS tiêu chuẩn, triển khai pull-to-search, thẻ cổ phiếu, sheet/menu tùy chỉnh, thao tác vuốt, widget, nhập TSV, v.v.
  • Rào cản thực tế lớn nhất ngăn việc phát hành là API dữ liệu tài chính; các vấn đề về chất lượng/phạm vi của IEX, độ tin cậy của nhà cung cấp $100/tháng, và giá dữ liệu thương mại từ hơn $2.000/tháng đều không phù hợp với một ứng dụng độc lập
  • Dù đã có LLC, backend Node/Express, TestFlight khoảng 1.000 người và danh sách chờ hàng nghìn người, dự án bị dừng vì chi phí dữ liệu, gánh nặng hỗ trợ khách hàng và thiếu thời gian; kinh nghiệm học SwiftUI sau đó trực tiếp nối tiếp vào công việc tại Rewind AI

Vấn đề Stocketa muốn giải quyết

  • Stocketa hướng tới một ứng dụng theo dõi danh mục đầu tư được thiết kế tốt, cho phép xem các tài sản đầu tư rải rác ở nhiều nơi trên một màn hình
    • Xuất phát từ trải nghiệm cá nhân: việc kiểm tra tài sản nằm ở nhiều công ty chứng khoán và dịch vụ tài chính khác nhau rất phiền phức
    • Không chỉ muốn xem giá đơn thuần, mà muốn thấy lãi/lỗ thực tế theo từng giao dịch có phản ánh cơ sở giá vốn của bản thân
  • Các lựa chọn khi đó không đáp ứng nhu cầu
    • Các ứng dụng chứng khoán đơn giản như Apple Stocks cung cấp biểu đồ và tin tức nhưng không có chức năng theo dõi số lượng nắm giữ và lãi/lỗ
    • Ứng dụng của công ty chứng khoán như Robinhood chỉ hiển thị phần nắm giữ trong chính công ty chứng khoán đó
    • Các dịch vụ nâng cao như TradingView không đặt trọng tâm vào mobile hoặc không mang lại trải nghiệm đủ thanh lịch như mong muốn
    • Dịch vụ tư vấn đầu tư như Personal Capital có chức năng liên kết tài khoản, nhưng khó xem sâu từng tài sản riêng lẻ và trọng tâm là bán dịch vụ tư vấn của chính họ
    • Các ứng dụng theo dõi danh mục nhỏ trên App Store có thiết kế và UX không thỏa mãn
  • Các ứng dụng tài chính hiện có nhìn chung ưu tiên mật độ thông tin, khiến người dùng phải liên tục đi từ danh sách vào màn hình chi tiết; Stocketa muốn hiển thị nhiều thông tin hơn ngay trong các thẻ ở màn hình đầu tiên

Cấu trúc ứng dụng được xây bằng UI tùy chỉnh

  • Stocketa được thiết kế xoay quanh một feed duy nhất và thẻ cổ phiếu, đồng thời giảm tối đa phần UI chrome xung quanh
    • Cố gắng không dùng thanh tab hay header điều hướng tiêu chuẩn
    • Cấu trúc đưa hầu hết chức năng vào các thẻ cổ phiếu trong timeline trang chủ
  • Gần như toàn bộ UI được tạo bằng component tùy chỉnh dựa trên SwiftUI
    • Thay vì pull-to-refresh, ứng dụng dùng pull-to-search để tìm và thêm mã mới
    • Thẻ cổ phiếu cung cấp inline hầu hết thông tin như scrub biểu đồ, thao tác vuốt, các thống kê chính
    • Khi chạm vào thẻ, thẻ hiện tại vẫn giữ nguyên vị trí, còn thẻ tin tức/chi tiết nắm giữ xuất hiện bằng animation; phần triển khai cốt lõi dùng overlayPreferenceValueanchorPreference
    • Sheet tùy chỉnh bao gồm bộ chọn ngày, màn hình hướng dẫn, nền sao lấp lánh và nội suy độ trong suốt nền theo thao tác kéo
    • Menu ứng dụng tùy chỉnh cung cấp không gian để hiển thị gói trả phí hoặc trạng thái thành viên, và được thiết kế để có thể đóng bằng cách chạm hoặc cuộn
  • Thao tác vuốt và header cũng được tự triển khai
    • Action di chuyển theo khoảng cách vuốt, và khi vượt một ngưỡng nhất định sẽ animate sang trạng thái được chọn
    • Nút header ban đầu hiển thị không viền ở đầu trang, rồi chuyển thành nút tinh tế khi nằm trên phần nội dung đã cuộn
    • Chữ Stocketa được nội suy để biến mất lên phía trên theo thao tác cuộn

Theo dõi giao dịch và tính năng ứng dụng

  • Phần triển khai ban đầu bắt đầu từ scrollview thẻ cổ phiếu, biểu đồ và persistence cơ sở dữ liệu
    • Ban đầu dùng Core Data, sau đó chuyển sang Firebase
    • Thêm gọi và polling nhà cung cấp dữ liệu tài chính, với IEX là nhà cung cấp đầu tiên
  • Stocketa không chỉ lưu số cổ phiếu nắm giữ theo từng mã, mà còn triển khai theo dõi ở cấp giao dịch
    • Ứng dụng muốn hiển thị không chỉ tổng lãi/lỗ theo từng lệnh mua/bán mà cả lãi/lỗ của từng giao dịch
    • Khi bán, cần biết phương pháp cơ sở giá vốn như FIFO, LIFO, v.v., và phải tính xem cổ phiếu được bán từ giao dịch quá khứ nào
    • Với chia tách cổ phiếu, không thể chỉ thay đổi đơn giản các giao dịch cũ; cần hỗ trợ cả tự động áp dụng các đợt chia tách mới và áp dụng thủ công
  • Chức năng được mở rộng ra toàn ứng dụng
    • Onboarding: thay vì carousel thông thường, dùng luồng trong đó các trang được đẩy vào theo trục z, đồng thời giới thiệu các component cốt lõi như thẻ cổ phiếu
    • Nhập TSV: nhập giao dịch bằng file TSV tạo từ spreadsheet, rồi ghi trạng thái nhập trở lại TSV để hỗ trợ nhập lại sau khi đồng bộ iCloud
    • Nhập lệnh mua: cung cấp form chuyên cho cổ phiếu xoay quanh số lượng, giá và ngày; khi đổi ngày, giá lịch sử của ngày đó được đổi thành placeholder
    • Nhập lệnh bán: hỗ trợ FIFO, LIFO, Average cost, Highest cost, Lowest cost và lot cụ thể
    • Màn hình đăng ký: gồm chữ parallax, bỏ mờ theo thao tác cuộn, thẻ tính năng dựa trên chuyển động và hiệu ứng fireworks nhỏ khi tới cuối
    • Thẻ thành viên: hiển thị trạng thái của tài khoản có đăng ký đang hoạt động dưới dạng thẻ tương tác, với hiệu ứng nền starfield và shimmer
    • Thiết lập hiển thị thẻ cổ phiếu: cung cấp nhiều dạng thẻ và thiết lập, kèm micro-animation khi bật/tắt
    • Thẻ tình trạng nắm giữ: hiển thị thông tin tổng hợp dựa trên thiết lập ở đầu phần cuộn chính
    • Widget: cung cấp ba loại — cổ phiếu riêng lẻ, danh mục đầu tư và danh mục đầu tư đơn giản — với màu gradient lớn thay đổi theo hiệu suất
    • Thời gian ân hạn Face ID: cho rằng đây là điều cần thiết với ứng dụng xử lý tài sản tài chính, nên cho phép điều chỉnh thời gian ân hạn trước khi khóa lại trong lúc chuyển ứng dụng
    • Sheet ngày nghỉ thị trường: hiển thị ngày đóng cửa thị trường trong tài khoản nắm giữ cổ phiếu, đồng thời cần mã phía server để xử lý tương tự cho widget
    • Sheet phản hồi: hiển thị các vấn đề đã biết và tính năng dự kiến, đồng thời có thể bao gồm token xác minh tài khoản khi câu hỏi liên quan đến từng tài khoản
    • Xóa tài khoản: theo yêu cầu cập nhật của App Store năm 2021, cho phép xóa hoàn toàn tài khoản trong ứng dụng

Vừa học vừa làm lại với SwiftUI

  • Stocketa được thực hiện song song với quá trình học Swift và SwiftUI, nên nhiều màn hình và một số phần của ứng dụng liên tục được thiết kế lại và triển khai lại
  • SwiftUI đã tiến bộ về hiệu năng, component và tính năng kể từ iOS 13; đến iOS 17 còn cung cấp các tính năng như shaders, keyframes và scroll transitions
  • SwiftUI hữu ích không chỉ như công cụ code mà còn là công cụ thiết kế
    • Designer có thể nhanh chóng tạo layout
    • Dễ gắn tương tác
    • Có thể kiểm chứng cảm giác thiết kế thực tế bằng công cụ native
  • Các trường hợp cần UIKit khá hạn chế
    • Text field tùy chỉnh để kiểm soát nhập liệu, style và định dạng chi tiết hơn
    • CollectionView để kéo đổi thứ tự mã cổ phiếu
    • Particle emitter như confetti hoặc sao trời đêm
    • UILongPressGestureRecognizer để lấy vị trí bắt đầu của thao tác nhấn giữ

Backend và vận hành TestFlight

  • Ban đầu ý tưởng là một ứng dụng đơn giản không có backend hay tài khoản người dùng, nhưng nhanh chóng cần backend riêng
    • Tạo backend proxy để không đặt khóa API dữ liệu tài chính trong ứng dụng
    • Thêm rate-limiting và throttling để tránh chi phí tăng do lạm dụng API
    • Thêm Sign In With Apple
    • Cache thống kê theo từng mã trong một khoảng thời gian để dù nhiều tài khoản yêu cầu cùng dữ liệu, chỉ cần lấy một lần
  • Backend dựa trên Node/Express và tăng lên quy mô khoảng 13.000 LOC
    • Chạy trên Cloud Run
    • Phụ trách xác thực, caching, tin tức, logic nghiệp vụ cốt lõi, dọn dẹp dữ liệu, thông báo, widget, tích hợp nhiều API và một phần scraping
  • Quản lý công việc bằng Linear
    • Quản lý task, ý tưởng, tính năng, phản hồi khách hàng và milestone
  • TestFlight bắt đầu bằng một bản alpha nhỏ cho bạn bè thân thiết rồi dần mở rộng
    • Có thời điểm mời khoảng 1.000 người
    • Danh sách chờ có hàng nghìn người, nhưng không mở rộng thêm vì chi phí API/hosting và gánh nặng hỗ trợ/phản hồi
    • Phản hồi là sự pha trộn giữa ấn tượng ban đầu tốt, yêu cầu tính năng và báo cáo lỗi

Thiết kế và triển khai website

  • Website ban đầu là một landing page đơn giản để thu hút sự quan tâm và thu thập email danh sách chờ
  • Thiết kế ban đầu có các phần tử dạng sóng tham chiếu lỏng lẻo tới sự lên xuống của biểu đồ thị trường chứng khoán, cùng các thẻ cổ phiếu mini nổi
    • Thẻ mini có line chart SVG và được animate khi trang tải
    • Hiệu ứng chuyển động nhẹ nhàng trong nền được triển khai bằng CSS offset-path và 2 keyframe animation
  • Homepage v1.0 hoàn thành vào đầu năm 2021
    • Khi cho rằng phần triển khai đã đủ để thể hiện tính năng ứng dụng, tác giả tạo một homepage hoàn thiện hơn
    • Thay vì cấu trúc phổ biến của homepage ứng dụng với khung điện thoại + headline, tác giả thử cấu trúc trong đó khung điện thoại 3D di chuyển theo cuộn và phát video teaser của ứng dụng
    • Thay vì Lottie, chọn cách JavaScript vẽ chuỗi frame lên canvasoffscreenCanvas
    • Dùng Rotato để tạo screencast Stocketa ngắn thành video điện thoại 3D và chuỗi frame PNG
    • Về sau, quy trình tạo, tối ưu và cập nhật chuỗi frame trở thành một phiền toái lớn
  • Homepage v2.0 được thiết kế lại sau đó 1 năm
    • Muốn có danh sách tính năng dễ lướt hơn thay vì các module dài lặp lại, nhằm thể hiện nhiều tính năng và cải tiến hơn
    • Chọn cấu trúc 2 panel: bên phải là khung thiết bị cố định, bên trái là danh sách tính năng có thể cuộn
    • Khi rê chuột lên một mục tính năng, ảnh chụp màn hình trong khung thiết bị sẽ thay đổi
    • Trên mobile, header được đổi thành carousel khung thiết bị có thể cuộn
    • Thêm gradient chữ hero theo cuộn, thay đổi màu icon, gradient nền khi hover và particle emitter cho icon

Giới hạn do API dữ liệu tài chính tạo ra

  • Chất lượng dữ liệu tài chính mà Stocketa phụ thuộc vào không đạt mức có thể phát hành
  • Nhà cung cấp đầu tiên là IEX có nhiều vấn đề
    • Biểu đồ đôi khi cũ hoặc giá không chính xác
    • Đặc biệt nghiêm trọng với tài sản có ít giao dịch trên sàn IEX
    • Không có dữ liệu thị trường OTC, và phải ký license đắt đỏ trực tiếp với OTC
    • Dữ liệu cổ phiếu niêm yết Nasdaq cũng bị hạn chế lớn, và thiếu cả dữ liệu cơ bản như pre-market/after-hours
    • Ngừng hoàn toàn dữ liệu quỹ tương hỗ mà không thông báo trước
  • Một nhà cung cấp khác có thể dùng thương mại sau đó có giá $100/tháng, nhưng vấn đề về dữ liệu và độ tin cậy còn lớn hơn
    • Endpoint trả về dữ liệu cũ hoặc sai
    • Khi báo vấn đề, họ phớt lờ bug hoặc trả lời rằng bug không tồn tại
  • Một số dữ liệu khó lấy ngay cả bằng API trả phí, nên phải tạo scraping engine ở backend
    • dividend yield
    • earnings dates
    • dữ liệu OEF
  • Dữ liệu thị trường chất lượng cao có cấu trúc giá không phù hợp với nhà phát triển ứng dụng độc lập
    • Giá dữ liệu thương mại của vài nhà cung cấp dữ liệu thị trường lớn ở Mỹ bắt đầu từ $2.000/tháng
    • Dữ liệu chỉ số hoặc dữ liệu quyền chọn cần trả thêm phí
    • Một nhà cung cấp đưa ra gói startup giá $499/tháng cộng phí theo MAU, nhưng tác giả vẫn đánh giá là quá đắt so với nhu cầu
  • Dự án phụ thuộc vào API dữ liệu tài chính mang rủi ro xây dựng business trên API của công ty bên ngoài, và được xem là vấn đề tương tự các thay đổi API của Twitter và Reddit

Vì sao việc phát hành bị dừng lại

  • Ngay từ đầu, Stocketa là side project, không phải một business thực sự
    • Để biến thành business thật, cần nhiều tính năng và cách kiếm tiền hơn
    • Có thể phải bước vào các lĩnh vực như dịch vụ tư vấn tài chính hoặc giao dịch cổ phiếu, vốn là không gian đông đúc nơi các công ty lớn cạnh tranh
    • Hướng đó không phù hợp với điểm xuất phát là muốn tạo một ứng dụng đơn giản, thanh lịch
  • Lý do dừng lại có thể tóm gọn thành ba điểm
    • Dữ liệu: để phát hành với giá đăng ký hợp lý, cần dữ liệu tài chính đáng tin cậy, rẻ và chất lượng cao, nhưng chi phí và độ khó để có được đều lớn
    • Hỗ trợ: nhìn vào cách sử dụng trên TestFlight, cần đầu tư đáng kể vào hỗ trợ khách hàng, email, bảo trì và phát triển tính năng liên tục
    • Thời gian: tác giả chọn Rewind AI làm nơi tập trung hơn, còn Stocketa đã chiếm các buổi tối, cuối tuần và cả thời gian viết blog trong nhiều năm
  • Mục tiêu ban đầu là học Swift và SwiftUI đã đạt được
    • Dù không được phát hành, tác giả đã học được rất nhiều về phát triển iOS native
    • Kiến thức SwiftUI có được từ Stocketa đã giúp ích rất nhiều cho công việc tại Rewind AI

1 bình luận

 
GN⁺ 2023-10-17
Ý kiến trên Hacker News
  • Việc một dự án kéo dài nhiều năm rốt cuộc không được dùng thật sự đôi khi giống như một huân chương danh dự. Không phải một huân chương khôn ngoan, nhưng với những lập trình viên như tôi, kiểu người dễ bị cuốn vào theo nghĩa tích cực và hoàn toàn đắm chìm, đó gần như là một bài học cần thiết
    Khi kể về trải nghiệm cũ và nỗi đau từ đó, tôi có cảm giác mọi người đờ ra. Nếu chưa từng bám lấy một thứ gì đó hơn 10 giờ mỗi ngày trong hơn 1 năm, có lẽ khó mà hiểu được cảm giác đổ hàng nghìn giờ vào mà không có kết quả gì
    Tôi cũng có nhiều dự án thành công và hiện vẫn đang ổn, nhưng những dự án kéo dài nhiều năm đó thì không thể lấy lại được. Có lẽ chúng cần thiết cho việc học, nhưng nghĩ lại vẫn thấy buồn và cô quạnh

    • Tôi cũng từng trải qua chuyện tương tự năm 2016, khi tự học Swift và UIKit để làm một ứng dụng iOS. Trong 2 năm, mỗi tuần 5 ngày, mỗi ngày khoảng 2 giờ, tôi đã bỏ vào hơn 1.000 giờ, nhưng ứng dụng đó cuối cùng vẫn không được công bố
      Đổi lại, tôi có được kỹ năng để trở thành một lập trình viên giỏi hơn nhiều và bắt đầu yêu thích Swift. Nếu là bây giờ, nhờ các công cụ phát triển và API của Apple đã tiến bộ trong 7 năm qua, tôi nghĩ mình có thể làm lại toàn bộ ứng dụng đó từ đầu chỉ trong một cuối tuần
      Những dự án như vậy đáng được kỷ niệm. Lập trình có thể là nghệ thuật, và nghệ thuật, với tư cách một lối thoát sáng tạo, cũng có thể được tạo ra chỉ cho chính bản thân mình
    • Sự hối tiếc về những chuyện như vậy chỉ có ý nghĩa khi vào thời điểm đó ta đã biết là sẽ không ổn nhưng vẫn bất chấp phán đoán tốt hơn để đẩy tiếp. Nếu với những thông tin có trong tay lúc ấy ta đã đưa ra quyết định tốt nhất, thì đó là tất cả những gì có thể làm, phần còn lại phụ thuộc vào may rủi
      Kiểu tư duy dựa trên kết quả khiến ta dằn vặt về các dự án trong quá khứ bằng kiến thức biết được về sau không mấy hữu ích. Phần lớn dự án và doanh nghiệp đều thất bại, đó là thực tế
      Tôi nhớ có một cựu nhân viên tài chính từng viết rằng “không ai bị sa thải vì tình cờ kiếm được tiền từ một giao dịch tệ”. Trong một nền văn hóa tập trung vào kết quả, ta dễ quên rằng thứ ta thật sự kiểm soát được chỉ là quy trình
    • Tôi đã dành 10 năm cho một dự án phần mềm, hoàn thành được 6 tháng rồi mà vẫn chưa kiếm được một xu nào :(
      Tôi đã học được những bài học quý giá như biết khi nào nên dừng lại, nhưng đó là một khóa học quá dài. Đến giờ tôi vẫn chưa thể nghĩ lại về nó một cách đúng nghĩa
    • Không có gì làm nản hơn việc đổ nhiều năm vào một dự án, rồi ngay khi đưa cho ai đó xem thì họ gạt đi rằng “không hay lắm”, hoặc chỉ bảo hãy làm X đi
    • Có lẽ đau hơn vì mục tiêu là thành công, tức lượng sử dụng ứng dụng hay doanh thu. Nếu lý do chính là niềm vui hoặc học hỏi thì có thể cảm giác đã khác
      Tôi tự hỏi liệu có nên khuyên rằng đừng bắt đầu một dự án kéo dài hơn 1 năm nếu không chắc mình sẽ không hối tiếc ngay cả khi chẳng ai dùng nó hay không
  • Bài viết rất hay nhưng phần kết khiến tôi thấy buồn. Có quá nhiều ứng dụng mà tôi ước có một phiên bản “không có thứ thừa thãi” như thế này, và lượng công sức đổ vào đây thật đáng kinh ngạc
    Tôi từng phát hành một ứng dụng iOS đơn giản hơn và nhờ tăng trưởng tự nhiên đạt khoảng 1.000 người dùng hoạt động hằng ngày, nhưng cuối cùng đã đóng nó. Tôi gắn một khoản mua trong ứng dụng giá $1.99 hoặc $2.99 để gỡ quảng cáo, kiếm khoảng $70 mỗi tháng trong khi xử lý báo cáo lỗi
    Khi đó SwiftUI vẫn chưa trưởng thành nên phải dùng UIKit, và tôi liên tục gặp các trường hợp biên khó sửa
    Cú đánh quyết định là việc Google tuyên bố tôi đã nhấp vào quảng cáo của chính mình và ngừng phân phối quảng cáo. Trên thực tế toàn bộ doanh thu bị cắt, và tôi nhận ra rằng dù có chăm chỉ làm đến đâu thì cuối cùng vẫn phụ thuộc vào sự thất thường của các gã khổng lồ công nghệ
    Apple lấy 30% từ mọi khoản mua trong ứng dụng, doanh thu quảng cáo thì chỉ là tiền lẻ, còn Google có thể tắt không lý do và cũng không có cách kháng cáo. Tôi không định kiếm nhiều tiền, nhưng vẫn cần một lý do để bỏ thời gian và năng lượng, và tôi không còn có thể biện minh cho việc đó nữa

    • Việc Google cắt quảng cáo với lý do tự nhấp vào quảng cáo của mình nghe như một thứ nhảm nhí quá hà khắc
      Tôi không hiểu vì sao họ không cho nhà phát triển đăng ký thiết bị loại trừ khỏi doanh thu, dải IP, danh sách vị trí. Dù sao ta cũng sẽ dùng chính ứng dụng của mình, và trong nhiều trường hợp khi cuộn thì gần như không thể tránh khỏi việc vô tình chạm vào quảng cáo
      Kiểm thử trong môi trường thực cũng quan trọng, và cũng có một khả năng nhỏ là quảng cáo thật sự thú vị nên ta nhấp vào một cách hợp lệ như một khách hàng tiềm năng. Nhưng cách làm hiện tại về cơ bản có nghĩa là đừng dùng ứng dụng của chính mình
      Tôi không biết chính sách ngu ngốc từ gốc rễ này có lợi cho ai ngoài các lập trình viên hay quản lý Google cứ khăng khăng giữ nó. Thật sự khó đến vậy sao để xử lý tử tế dù chỉ một chút
  • Có thể nghĩ tương tự về nhạc sĩ phòng ngủ không biểu diễn hay phát hành album suốt 20 năm, vận động viên thời thơ ấu không chạm bóng nữa sau tuổi 18, runner không tham gia giải, hay trí thức không giảng dạy
    Nếu cùng tiền đề “đầu ra bên ngoài = giá trị”, nó thậm chí có thể được mở rộng đến cả những con người sống hàng chục năm mà không sinh con. Đó không phải niềm tin của tôi, chỉ là theo dòng logic thì như vậy
    Nhưng những phán xét như thế là cấu trúc do con người tạo ra, và giống như tấm gương phản chiếu mệnh lệnh sinh học muốn đưa “đứa con của chúng ta” đã ấp ủ lâu ngày ra thế giới. Chúng ta hỏi vì sao chúng không được có đời sống riêng, và mong chúng tự tiếp tục tạo ra thành quả, góp thêm sợi chỉ vào tương lai
    Việc tuân theo mệnh lệnh đó có phải là đỉnh cao của đạo đức, luân lý và niềm vui hay không thì với một số người là vậy, và tôi không muốn phán xét. Nhưng với một số người khác, lạ thay, lại không phải vậy

  • Tôi tò mò liệu có ý định bán dự án này không. Tôi thích khái niệm này và có vẻ cũng có khách hàng quan tâm, nhưng có vẻ bạn không muốn gánh phần hỗ trợ và thương mại hóa
    Tôi đã làm một trình theo dõi tài sản (https://jch.app) được khoảng 1 năm, nhưng về tính năng hay trải nghiệm người dùng thì vẫn còn kém xa
    Đây là một khối lượng công việc khổng lồ, và phần ghi chép sâu về hành trình cũng rất hay. Tôi cũng mong chờ xem điều gì sẽ tiếp theo từ rewind.ai

  • Không khác mấy với việc vô số người đổ vô tận thời gian vào vô số dự án chẳng có nhiều ý nghĩa với ai khác. Giống như độ xe đạp hay nghịch mô hình tàu hỏa vậy
    Chỉ khác là ứng dụng thì có thể dễ dàng công khai, ghi chép và lưu trữ như thế này, còn “thời gian bỏ ra để cắt và hàn những linh kiện xe đạp kỳ quặc” thì khó làm vậy nếu không đăng toàn bộ lên YouTube
    Tất nhiên nhiều người vẫn làm như thế, và ở một mức độ nào đó cũng có ý nghĩa, nhưng khi cố biến sở thích và theo đuổi cá nhân thành một sản phẩm có mục tiêu khác ngoài chính nó, ta cũng hơi đánh mất điểm cốt lõi
    Không có nghĩa là bài viết này sai. Nó không có vẻ than phiền hay tức giận, mà như đã nói lúc đầu, là cảm giác “muốn ghi lại bằng cách nào đó ở đâu đó”. Phần lớn GitHub của tôi cũng vậy

    • Câu nói rằng những gì lẽ ra đã có thể xảy ra lại trở thành mốc tham chiếu để đánh giá những gì thực sự đã xảy ra rất sâu sắc
      Việc điều chỉnh tiêu chuẩn đánh giá một cách vội vàng như vậy có thể không hữu ích lắm, vì nó làm mờ đi kết quả thực tế. Trong trường hợp này, tác giả dễ cảm thấy xấu hổ về công sức “lãng phí”, nhưng phản ứng phù hợp hơn có lẽ là biết ơn những gì đã học được
      Những bài học rút ra từ các dự án như thế này là rất lớn
  • Điều đáng sợ ở bài này là tôi thấy quá nhiều hình ảnh của mình trong đó. Đắm chìm vào việc tạo ra một sản phẩm xuất sắc, nhập tâm vào bản sắc của một người thợ lành nghề, và cảm thấy phản cảm với cách tiếp cận “vô hồn” kiểu MVP nhanh, bẩn và thử nghiệm thị trường lặp đi lặp lại
    Nếu từng vào subreddit r/SaaS, bạn sẽ thấy nó là thứ hoàn toàn trái ngược với những gì tôi thích với tư cách là một lập trình viên phần mềm
    Nhưng tôi cũng biết rằng nếu có thể thay đổi cách nghĩ về thử nghiệm thị trường và các vòng lặp nhanh, bẩn, thì ngược lại nó sẽ tạo nền tảng tốt hơn để yên tâm tập trung vào tay nghề thủ công

  • Tôi hiểu. Tôi cũng vẫn đang xây dựng backend ngân hàng. Đã 5 năm rồi, gồm core, kế toán, khách hàng, tài khoản, thanh toán (SEPA và thẻ), thông báo (kiểu ServiceNow), sàng lọc cấm vận, engine rủi ro/giám sát, luồng sự kiện, báo cáo
    Tôi bắt đầu nghi ngờ không biết mình điên hay ngốc khi ôm một việc khổng lồ như vậy. Tôi còn chưa thiết kế landing page, và mã nguồn thì khoảng 150.000 dòng

    • Với tư cách là người trong lĩnh vực này, tôi thực sự khuyên bạn nên tiếp xúc với khách hàng tiềm năng và bắt đầu xây dựng niềm tin càng sớm càng tốt
      Dù nền tảng cũ có rất nhiều lỗi, hạn chế và vấn đề bảo mật, chúng tôi vẫn mất lâu hơn 5 năm rất nhiều mới xây dựng đủ niềm tin để thuyết phục khách hàng chuyển sang nền tảng core banking của mình
    • Tôi cũng từng xây một giải pháp thương mại điện tử bao gồm thanh toán, nhắn tin REST, máy chủ email (IMAP/SMTP), quảng cáo liên kết cùng hệ thống thanh toán/báo cáo/kiểm soát truy cập riêng. Tôi đã đưa toàn bộ giải pháp, gồm cả frontend web desktop và mobile, đến trạng thái alpha
      Nhưng khi ứng dụng di động trở nên quan trọng, tôi bắt đầu làm cả app native nữa, và thế là quá sức. Cuối cùng tôi burnout rồi còn phá sản, nên không muốn khuyên ai làm siêu dự án
      Tôi học được rất nhiều, nhưng sự lãng phí không xứng đáng. Thời gian quá quý để dựng lại nhiều thứ đến vậy. Giờ tôi chỉ làm các dự án “nhỏ” tối đa 6–12 tháng
    • Bạn đang làm backend ngân hàng như một dự án phụ à? Thú vị đấy. Tôi tò mò không biết nó gần với dự án làm cho vui hơn, hay có mục tiêu thương mại
      Cũng tò mò liệu có khả năng open source không
    • Bạn nên ra mắt. Chỉ cần đăng ảnh chụp màn hình, danh sách tính năng, tách riêng danh sách tính năng dự kiến, rồi tạo form đăng ký beta trước
      Nếu không thể phát hành một phiên bản cơ bản sau khi bỏ hết mọi thứ bạn muốn thêm vào, bạn nên cân nhắc gác lại một thời gian
      Hơn 20 năm qua tôi đã làm nhiều dự án và sản phẩm, trong đó 2–3 cái tăng trưởng mạnh. Những cái khác có hàng nghìn người dùng nhưng không có nguồn doanh thu bền vững
      Một sản phẩm trở thành doanh nghiệp có lãi đã được ra mắt dưới dạng bản “build cuối tuần”, rồi được xây tiếp trong 7 năm sau đó
    • Bạn cũng nên tự hỏi “nếu thành công thì nó trông như thế nào”. Nếu 5 năm rồi chưa có doanh thu, có lẽ bạn đã quen với giai đoạn hiện tại
      Trạng thái quen thuộc có thể trở thành cái bẫy khiến bạn liên tục tìm thêm việc trước khi ra mắt. Vì vậy có thể sẽ tốt nếu bạn tái định khung trong đầu
  • Gần đây tôi đọc được rằng Leonardo DaVinci là một người cực kỳ hay trì hoãn, và có rất nhiều dự án không bao giờ hoàn thành
    Tôi luôn ngưỡng mộ ông vì đã thành công trong nhiều lĩnh vực, nhưng biết điều đó xong thì góc nhìn của tôi đổi sang việc trì hoãn là một phần của chúng ta, những người sáng tạo
    Có thể xem đó là thất bại, nhưng cũng có thể diễn giải lại như một phần của quá trình. Sau cùng thì chúng ta thích tạo ra thứ gì đó

  • Về cơ bản, anh ấy đã tiếp nhận lời khuyên thông thường “làm MVP, ra mắt nhanh, lặp lại”, rồi làm đúng điều ngược lại

    • Sau 10 năm ở các công ty công nghệ lớn chỉ phát hành những trải nghiệm dưới chuẩn, việc tập trung vào chất lượng theo hướng hoàn toàn ngược lại là điều có thể kỳ vọng. https://paulstamatiou.com/craft/
    • Tôi không biết lời khuyên đó có áp dụng cho lập trình viên một người hay không. Với một sản phẩm tất yếu mang tính tối đa hóa như ứng dụng này, bạn phải tự mình chịu trách nhiệm đến từng chi tiết rất nhỏ, nên chẳng có chuyện di chuyển nhanh
  • Một bài viết tuyệt vời về một side project trông rất ấn tượng. Tôi đọc rất hứng thú rồi phát hiện ra rewind.ai, cái này cũng có vẻ hay
    Với những thứ có khả năng xâm phạm như ghi màn hình và âm thanh tự động liên tục, quyền riêng tư là yếu tố then chốt, nên khi xem phần “Privacy first” tôi nảy sinh thắc mắc
    Có đoạn viết: “Hãy mã hóa dữ liệu bằng FileVault. Apple FileVault hoạt động cùng Rewind. Khi bật tính năng này, dữ liệu của bạn sẽ được mã hóa” — vậy Rewind có làm gì đó để Apple FileVault “hoạt động cùng Rewind” không?
    Hay chỉ là nói đến mã hóa ổ đĩa nói chung, áp dụng cho mọi thứ? Tôi hỏi nghiêm túc. Tôi muốn dùng Rewind, nhưng cách diễn đạt này có thể bị hiểu như một lớp bao bọc không cần thiết
    Câu “chỉ dữ liệu dạng văn bản có liên quan được gửi lên đám mây và được mã hóa khi truyền” cũng cho cảm giác tương tự. “Mã hóa khi truyền” có nghĩa là mã hóa TLS tiêu chuẩn không? Rewind trông có vẻ tốt, nhưng phải đáng tin cậy

    • Trên website Rewind có viết như sau
      “Không cần tích hợp đám mây. Mọi thứ hoạt động tự động mà không cần kết nối với nhiều dịch vụ như Gmail, Dropbox, Slack”
      Nhưng xem chi tiết chính sách quyền riêng tư chính thức tại https://www.rewind.ai/privacy thì có đoạn như sau
      “[Các mục thu thập:] Thông tin do OpenAI tạo ra. Là một phần trong tích hợp OpenAI của Rewind AI, chúng tôi cũng có thể thu thập đầu ra do OpenAI tạo ra, bao gồm bản tóm tắt phiên âm của bản ghi âm và các dữ liệu khác do tích hợp OpenAI tạo ra”
      Vậy dù “không cần tích hợp đám mây”, âm thanh của tôi có được chia sẻ với OpenAI không?
      Ngoài ra, tại https://www.rewind.ai/privacy-first có viết: “Điều gì xảy ra khi bạn tìm kiếm trong Rewind? Tất cả dữ liệu ghi lại vẫn nằm cục bộ”
      Tôi không biết rốt cuộc là bên nào đúng. Tôi muốn tin Rewind, nhưng sự không nhất quán trong cách giải thích dữ liệu người dùng được xử lý khiến tôi do dự
    • Cảm ơn đã cho biết. Có vẻ chúng tôi cần cập nhật trang đó, và chúng tôi cũng có mã hóa riêng. Chi tiết ở đây: https://help.rewind.ai/en/articles/7242593-is-the-rewind-dat...