Bây giờ bỏ qua chuyện kỹ thuật, bàn đến sau khi đã làm rõ: đối tượng khách hàng là như thế nào? Và bạn định làm:
-
Phần mềm dạng đóng gói hoàn chỉnh: khách hàng đơn giản là cài đặt với các nút bấm Next để cài đặt là xong mọi thứ, bạn đóng gói tất cả những gì cần thiết để hoạt động ở mức tốt nhất theo ý đồ của bạn. Trên server không có GUI cũng làm được, dùng text-based giống như khi cài MySQL vậy.
-
Phần mềm dạng phải có triển khai: khách hàng phải đọc tài liệu (và/ hoặc khoá đào tạo cho những ai muốn dùng phần mềm bên bạn) để làm theo, tức là phải có 1 người biết triển khai phần mềm làm hoặc dưới sự hỗ trợ của bạn thì mới hoàn chỉnh được.
-
Phát hành dạng nguồn mở với tài liệu do cộng đồng đóng góp và chỉ bảo nhau, khách hàng muốn sử dụng hoàn hảo thì thuê dịch vụ đào tạo, triển khai, tuỳ chỉnh của bên bạn.
Vì không biết phần mềm bạn viết dạng Desktop Software hay Web App nên không thể nói rõ hơn vì nó có khác biệt chút ít. Tuy nhiên, cứ thử kiếm vài phần mềm nguồn mở giống giống của bạn, viết bằng Python càng tốt, hoặc bằng Java, PHP nếu là chạy trên nền web. Khi cài sẽ luôn có 2 phần: phần xử lý ở dòng lệnh gõ trên server trước, phần cài đặt trên giao diện web sau. Nếu viết được script chạy trên server có đối đáp cho phần cài bên server với các tuỳ chọn thì quá tốt, người cài sẽ có tuỳ chọn tự quyết định là có đóng gói cái pg_dump và pg_restore hay không lúc cài.
Không nên đứng ở tư duy của người làm kỹ thuật đơn thuần rồi lại nghĩ thay khách hàng - dễ dẫn đến “chân đi hai hàng”. Học hỏi cách làm quản lý tính tiền phòng game của VNG, thử tải cái đó về cài đặt và sử dụng như một khách hàng để hình dung một phần mềm có kèm CSDL trong thực tế là như thế nào.
Với khách hàng thì sử dụng được, yêu thích, chọn dùng hoặc sử dụng kém và từ bỏ. Họ không quan tâm kỹ thuật. Ngày trước mình đi triển khai, thấy kể cả mấy ông kỹ sư bên khách hàng cũng chẳng quan tâm phần mềm bên dưới có cái gì hết, miễn nó thân thiện, dễ sử dụng là được, ít các bước lằng ngoằng càng tốt. Cho nên lúc đó toàn viết batch (sau này là PowerShell) để làm các việc liên quan đến backup vì linh hoạt hơn là viết cứng code vô trong phần mềm <- vừa khó, vừa không linh hoạt bởi phần mềm hỗ trợ nhiều loại cơ sở dữ liệu/ phiên bản khác nhau. Khi nâng phiên bản cũng hiếm khi viết lại những file này vì test kỹ.