Side project thường chết không phải vì code khó, mà vì scope phình nhanh hơn motivation. Ngày đầu là một feature; ngày thứ ba đã có microservice, event bus và logo chưa chọn được font.
Một câu problem statement
1 | Giúp [người dùng] làm [công việc] nhanh/rõ/an toàn hơn bằng [cơ chế chính]. |
Nếu chưa viết được một câu, chưa cần tạo repository.
Vertical slice đầu tiên
Chọn một flow end-to-end nhỏ:
- user tạo input;
- hệ thống xử lý core logic;
- user nhận output;
- dữ liệu đủ để quay lại lần sau.
Ship flow này trước authentication phức tạp, dashboard đẹp và abstraction “sau này sẽ dùng”. Sau này thường không đọc tài liệu ta viết hôm nay.
Constraint chủ động
- một codebase;
- một database;
- một deploy target;
- một metric thành công;
- deadline ngắn.
Constraint tạo focus. Architecture không cần giải bài toán chưa tồn tại.
Feedback loop
Mỗi tuần hỏi:
- ai đã dùng;
- họ hoàn thành task nào;
- bước nào bỏ cuộc;
- feature nào không ai chạm;
- assumption nào sai.
Không dùng số dòng code hoặc số đêm thức làm metric. Hai con số đó đo effort, không đo value.
Definition of done
Side project “done” khi một nhóm user nhỏ hoàn thành workflow ổn định và ta biết bước tiếp theo dựa trên evidence. Không cần trở thành startup; một tool tự dùng lâu dài cũng là outcome tốt.
Mục tiêu lần này: ít phông bạt platform hơn, nhiều vòng phản hồi hơn. Nếu project thất bại, ít nhất nó nên thất bại nhanh và để lại dữ liệu—không chỉ để lại sáu container Docker chưa ai hiểu.