Checklist bàn giao phần mềm: bạn phải sở hữu những gì khi agency rút đi
Không ít công ty phát hiện sau hoá đơn cuối cùng rằng họ không deploy nổi sản phẩm của chính mình. Đây là toàn bộ những thứ phải đứng tên bạn, và cách kiểm chứng trước khi mối quan hệ kết thúc.
Một mô-típ xuất hiện khi các công ty tìm tới chúng tôi để tiếp quản một sản phẩm có sẵn: về lý thuyết họ sở hữu mã nguồn, mà vẫn không ra bản mới được. Repository thì có. Tài khoản deploy thuộc về một người đã nghỉ việc. Tên miền đăng ký dưới tên agency. Không ai biết production cần những biến môi trường nào.
Chuyện này hiếm khi là ác ý. Thường chỉ là không ai viết lại những gì nằm trong đầu ai. Nhưng hậu quả thì như nhau, và thời điểm để phòng ngừa là trước khi dự án bắt đầu, không phải lúc kết thúc.
Sở hữu thật sự nghĩa là gì
Sở hữu phần mềm gồm năm điều, và mã nguồn chỉ là điều đầu tiên:
- Bạn có mã nguồn, kèm lịch sử của nó.
- Bạn build và chạy được nó từ một máy trắng.
- Bạn deploy được mà không phải hỏi ai.
- Bạn kiểm soát các tài khoản và tên miền mà nó phụ thuộc.
- Bạn hiểu các quyết định đủ để thay đổi nó.
Thiếu bất kỳ điều nào thì bạn không có sản phẩm; bạn có một sự phụ thuộc.
Danh sách kiểm tra
Mã nguồn
- Repository nằm trong tổ chức của bạn, không phải tài khoản cá nhân, không phải của agency.
- Đầy đủ lịch sử, không phải một commit gộp duy nhất. Lịch sử chính là tài liệu.
- Mọi nhánh và tag, gồm cả tag đang chạy trên production.
- File thiết kế gốc (Figma hoặc tương đương) nằm trong workspace của bạn, kèm ghi chú về font và giấy phép.
Build và chạy
- Một README chạy được trên máy trắng. Phép thử rất theo nghĩa đen: một người chưa từng thấy dự án làm theo và chạy được ứng dụng. Nếu nó gãy ở bước bốn thì chưa xong.
- Phiên bản phụ thuộc được ghim, có lockfile trong repo.
.env.exampleliệt kê mọi biến, nó dùng để làm gì, và lấy ở đâu.- Cách chạy test, và một lần chạy thành công trông ra sao.
Deploy
- Bạn deploy được lên production bằng chính tay mình, và đã thật sự làm một lần trước khi bàn giao. Không phải "chúng tôi làm được nếu cần". Đã làm rồi.
- Cấu hình pipeline nằm trong repository, không phải bấm tay vào một dashboard không ai nhìn thấy.
- Bạn biết cách quay lui, và đã thử.
- Migration cơ sở dữ liệu có tài liệu, gồm cả cách chạy lên production.
Tài khoản và tên miền
Đây là nhóm gây đau nhất, vì mỗi mục đều nhỏ và dễ quên:
- Nhà đăng ký tên miền đứng tên bạn, với thẻ gia hạn không hết hiệu lực theo hợp đồng lao động của một cá nhân.
- DNS, kèm ghi chép mỗi bản ghi dùng để làm gì.
- Hosting, cloud, CDN.
- App Store và Play Console thuộc tổ chức của bạn, kèm khoá ký và chứng chỉ. Mất khoá ký Android nghĩa là bạn không bao giờ cập nhật được ứng dụng đó nữa.
- Email, nhà cung cấp email giao dịch, và các bản ghi DNS xác thực nó.
- Theo dõi lỗi, analytics, cổng thanh toán.
- Mọi API key của bên thứ ba, và chúng tính tiền vào tài khoản nào.
Với từng mục: chủ sở hữu có phải một địa chỉ do công ty bạn kiểm soát không? Không phải email công việc của một cá nhân. Một địa chỉ dùng chung hoặc theo vai trò, sống sót khi có người nghỉ.
Sự hiểu biết
- Một ghi chú kiến trúc ngắn: các mảnh là gì và request chạy qua đâu.
- Bản ghi quyết định cho những lựa chọn mà nếu không có thì kỹ sư kế tiếp sẽ khó hiểu. Vì sao chọn cơ sở dữ liệu này. Vì sao không dùng framework kia. Vì sao tồn tại đoạn xử lý kỳ quặc này.
- Một runbook: cái gì hay hỏng, cảnh báo nghĩa là gì, phải làm gì lúc 2 giờ sáng.
- Các vấn đề đã biết và những chỗ cố tình làm tắt, ghi lại một cách trung thực.
Bản ghi quyết định là tài liệu có giá trị cao nhất mà không ai viết. Mã nguồn cho thấy điều gì đã được làm. Chỉ một quyết định được viết ra mới cho thấy điều gì đã bị loại bỏ và vì sao, và đó mới là thứ ngăn đội kế tiếp lặp lại một sai lầm bạn đã trả giá.
Hãy kiểm chứng trước khi mối quan hệ kết thúc
Một tài liệu bàn giao chỉ là lời tuyên bố. Hãy kiểm chứng nó khi những người viết ra vẫn còn liên lạc được.
Hai bài tập, cả hai đều đáng một buổi chiều:
- Bài kiểm tra máy trắng. Một người chưa từng làm dự án lấy một laptop mới tinh, làm theo README, và chạy được ứng dụng ở máy cục bộ. Mỗi chỗ họ bị kẹt là một lỗi tài liệu. Sửa ngay lúc đó.
- Bài kiểm tra deploy. Đội của bạn tạo một thay đổi nhỏ, đưa lên production, xác nhận, rồi quay lui. Nếu bất kỳ bước nào cần tới agency thì việc bàn giao chưa hoàn tất.
Hãy làm những việc này trước lần thanh toán cuối, không phải sau. Đó không phải là thiếu tin tưởng; đó là khoảnh khắc duy nhất mà mọi người còn sẵn sàng và còn động lực.
Hãy thiết lập ngay từ đầu
Gần như toàn bộ những việc trên đều rất nhẹ nhàng ở ngày đầu tiên và rất đắt ở tháng thứ chín. Ngay lúc khởi động:
- Tạo tài khoản trong tổ chức của bạn rồi mời agency vào, chứ không phải ngược lại.
- Tự đăng ký tên miền.
- Dùng địa chỉ theo vai trò để đứng tên tài khoản ngay từ đầu.
- Thống nhất rằng tài liệu là một phần của "đã xong", không phải một việc dọn dẹp lúc kết thúc.
Thiết lập theo cách này thì bàn giao thôi là một sự kiện. Nó trở thành việc thu hồi vài quyền truy cập, vì mọi thứ vốn đã là của bạn.
Nên hỏi gì trước khi ký
Ba câu đáng hỏi mọi agency, kể cả chúng tôi:
- Các tài khoản sẽ đứng tên ai? Tên bạn, ngay từ đầu, là câu trả lời tốt duy nhất.
- Chúng tôi có deploy được mà không cần các bạn không? Và có chứng minh được điều đó trong lúc dự án đang chạy, thay vì sau khi kết thúc, không?
- Điều gì xảy ra nếu chúng ta dừng hợp tác ở tháng thứ ba? Một câu trả lời trung thực sẽ mô tả một quy trình. Một câu trả lời mơ hồ là lời cảnh báo.
Một agency tự tin về công việc của mình không có lý do gì để giữ lại thứ gì. Nếu các câu trả lời khiến bạn thấy khó chịu, thì đó là điều hữu ích nhất bạn học được trong cuộc trò chuyện bán hàng.