Khi nào nên viết riêng thay vì mua sẵn
Phần lớn doanh nghiệp nên mua phần mềm đóng gói. Kế toán, chấm công, email — những bài toán này giống nhau ở mọi công ty, và một sản phẩm phục vụ mười nghìn khách hàng luôn hoàn thiện hơn thứ bạn tự xây cho riêng mình.
Viết riêng chỉ đáng khi quy trình đó là lợi thế cạnh tranh của bạn, hoặc khi nó đặc thù tới mức không sản phẩm nào trên thị trường mô tả đúng. Một đại lý vé máy bay cần tra giá đồng thời từ nhiều hãng rồi gộp kết quả theo logic riêng — đó là bài toán không mua được. Một nhà sản xuất cần theo dõi bảo hành qua mạng lưới thợ và đại lý bằng Zalo — cũng vậy.
Phép thử đơn giản: nếu bạn đang phải xuất dữ liệu ra Excel để làm nốt phần việc mà phần mềm hiện tại không làm được, và việc đó lặp lại hàng ngày, thì đó là dấu hiệu quy trình của bạn đã vượt ra ngoài thứ có sẵn.
Cách chúng tôi làm
Bắt đầu bằng business analysis — phân tích nghiệp vụ — chứ không bắt đầu bằng code. Giai đoạn này thường mất hai tới bốn tuần và tạo ra ba thứ: bản mô tả quy trình hiện tại, danh sách yêu cầu được xếp theo mức độ ưu tiên, và một bản phác kiến trúc hệ thống.
Phần lớn dự án phần mềm thất bại không phải vì code sai mà vì xây nhầm thứ. Chi phí sửa một hiểu lầm ở giai đoạn phân tích là vài buổi họp; sửa cùng hiểu lầm đó sau khi đã code xong là vài tháng.
Sau đó phát triển theo từng sprint — chu kỳ hai tuần — với một bản chạy được ở cuối mỗi chu kỳ. Bản chạy được không phải bản demo: nó deploy lên môi trường staging và người của bạn bấm thử được. Điều này giữ cho việc phát hiện sai lệch xảy ra sớm, khi sửa còn rẻ.
Công nghệ
Chọn stack theo bài toán chứ không theo thói quen. Nhưng cũng không chọn thứ chỉ có một người trong đội biết dùng — hệ thống sẽ sống lâu hơn dự án, và người bảo trì nó thường không phải người viết ra nó.
| Tầng | Công nghệ thường dùng |
|---|---|
| Front-end web | React, Next.js, Vue, Angular |
| Mobile | Flutter, React Native |
| Back-end | Node.js, Laravel, Django, Ruby, .NET |
| Database | PostgreSQL, MongoDB, vector database cho bài toán AI |
| Hạ tầng | AWS, Google Cloud, Azure, Docker, Kubernetes |
Danh sách này rộng vì các dự án đã làm rất khác nhau: một nền tảng đặt vé B2B, một ứng dụng y tế, một website thương mại điện tử có cấu hình sản phẩm 3D, và một Zalo Mini App. Không có một stack nào đúng cho cả bốn.
Bàn giao những gì
Source code thuộc về bạn, đặt trong repository của bạn, kèm quyền truy cập đầy đủ. Đây là điều khoản được ghi rõ trong hợp đồng chứ không phải thoả thuận miệng.
Ngoài code còn có: tài liệu kiến trúc và tài liệu API, hướng dẫn cài đặt để dựng lại hệ thống từ đầu, script migration cho database, và cấu hình CI/CD. Mục đích của bộ tài liệu này là để một đội khác — kể cả đội nội bộ của bạn — tiếp quản được mà không cần hỏi lại chúng tôi.
Sau khi go-live có giai đoạn bảo hành, và nếu bạn muốn, hợp đồng bảo trì riêng. Nhưng bảo trì phải là lựa chọn, không phải sự phụ thuộc.