Think Like a Developer #1: Decomposition — "Mọi thứ lớn đều bắt đầu từ việc chia nhỏ"
Bạn bảo AI "làm cho tôi app giống Grab". Và mọi thứ bắt đầu sụp đổ.
Bạn mở Lovable, Bolt, hoặc Cursor lên. Gõ vào: "Tạo cho tôi một app đặt xe giống Grab".
AI chạy. Code bay ra. Bạn hào hứng.
Rồi bạn nhìn kết quả. Một cái app nửa vời. Map thì load sai. Nút đặt xe không hoạt động. Phần thanh toán thì không có. Danh sách tài xế thì hiện ra mấy cái tên hardcode. Bạn bảo AI sửa, nó sửa chỗ này hỏng chỗ kia. Sửa tiếp, hỏng tiếp. Bạn frustration, đóng laptop, nghĩ "chắc AI chưa đủ giỏi".
Nhưng vấn đề không phải AI. Vấn đề là cách bạn ra đề cho nó.
Và đây chính xác là chỗ mà tư duy developer khác với tư duy thông thường.
Developer không bao giờ nghĩ về "cả app"
Khi một developer nhận yêu cầu "làm app giống Grab", đầu họ không nghĩ "okay, làm app Grab". Đầu họ lập tức bắt đầu chia nhỏ:
Phần đăng nhập/đăng ký
Phần bản đồ hiển thị vị trí
Phần tìm tài xế gần nhất
Phần đặt xe và xác nhận
Phần theo dõi tài xế đang đến
Phần thanh toán
Phần đánh giá sau chuyến đi
Mỗi phần này lại chia nhỏ tiếp. "Phần đăng nhập" thì có: đăng nhập bằng số điện thoại, gửi OTP, xác thực OTP, lưu session. "Phần bản đồ" thì có: hiển thị map, lấy vị trí hiện tại, cho người dùng chọn điểm đến.
Đây gọi là Decomposition: kỹ thuật chia một vấn đề lớn thành nhiều phần nhỏ, mỗi phần đủ đơn giản để xử lý được.
Đây không phải kỹ năng code. Đây là kỹ năng tư duy. Và bạn hoàn toàn có thể học được.
Ví dụ đời thường: Nấu bữa tiệc
Hãy tưởng tượng bạn cần nấu bữa tiệc sinh nhật cho 20 người.
Nếu bạn nghĩ "nấu bữa tiệc" rồi lao vào bếp, chuyện gì sẽ xảy ra? Hỗn loạn. Thiếu nguyên liệu, món này chưa xong đã phải làm món kia, khách đến mà bàn chưa dọn.
Nhưng nếu bạn chia nhỏ:
Lên menu (món chính, món phụ, tráng miệng, đồ uống)
Liệt kê nguyên liệu cần mua
Đi chợ
Chuẩn bị bàn ghế, chén đĩa
Sơ chế nguyên liệu (rửa rau, ướp thịt, cắt hành)
Nấu món cần thời gian lâu trước (hầm, nướng)
Nấu món nhanh gần giờ ăn (xào, chiên)
Trang trí bàn tiệc
Mỗi bước đều rõ ràng, có thể làm được, và bạn biết chính xác mình đang ở đâu trong tiến trình.
Vibe code cũng y chang vậy.
Tại sao AI cần bạn chia nhỏ?
AI rất giỏi trong việc xử lý một nhiệm vụ cụ thể, rõ ràng. Nhưng AI rất dở khi bạn đưa cho nó một yêu cầu mơ hồ, quá lớn.
Khi bạn nói "làm app giống Grab", AI phải tự đoán:
Bạn muốn tính năng nào?
Ưu tiên cái gì trước?
Phạm vi đến đâu?
Data structure như thế nào?
Nó đoán sai là chuyện bình thường. Vì chính bạn cũng chưa rõ bạn muốn gì.
Nhưng khi bạn nói: "Tạo trang đăng nhập bằng số điện thoại, gửi OTP 6 số, xác thực OTP, nếu đúng thì chuyển sang trang chính" thì sao? AI làm chính xác. Vì yêu cầu đủ nhỏ, đủ rõ.
Nguyên tắc: Yêu cầu càng nhỏ và cụ thể, AI càng làm đúng.
Công thức chia nhỏ cho người No-Code
Bạn không cần biết code để chia nhỏ. Chỉ cần hỏi 3 câu hỏi:
Câu 1: "App này có mấy màn hình?"
Mở app bất kỳ trên điện thoại lên đếm. Grab có: màn hình chính (bản đồ), màn hình chọn điểm đến, màn hình xác nhận đặt xe, màn hình theo dõi, màn hình thanh toán, màn hình đánh giá. Mỗi màn hình = 1 phần.
Câu 2: "Trên mỗi màn hình, người dùng làm gì?"
Ví dụ màn hình đăng nhập: nhập số điện thoại → bấm gửi OTP → nhập OTP → bấm xác nhận. Mỗi hành động = 1 bước cần AI xử lý.
Câu 3: "Phần nào QUAN TRỌNG NHẤT, làm cái đó trước?"
Không build cả app 1 lần. Chọn 1 màn hình, 1 tính năng, build xong rồi mới qua cái tiếp theo.
Thực hành: Chia nhỏ ý tưởng "App đặt lịch cắt tóc"
Thử cùng mình chia nhỏ nhé. Giả sử bạn muốn build "app đặt lịch cắt tóc".
Thay vì bảo AI "làm app đặt lịch cắt tóc", hãy chia:
Các màn hình chính:
Trang chủ: hiển thị danh sách tiệm gần bạn
Trang tiệm: thông tin tiệm, dịch vụ, giá, đánh giá
Trang đặt lịch: chọn dịch vụ, chọn ngày giờ, xác nhận
Trang lịch hẹn: xem các lịch hẹn đã đặt
Trang cá nhân: thông tin user, lịch sử
Ưu tiên build trước: Trang đặt lịch. Vì đó là core feature, không có nó thì app vô nghĩa.
Chia nhỏ trang đặt lịch:
Hiển thị danh sách dịch vụ (cắt tóc, gội đầu, nhuộm...)
Cho người dùng chọn 1 dịch vụ
Hiển thị lịch trống (calendar picker)
Cho người dùng chọn ngày giờ
Nút xác nhận đặt lịch
Hiển thị thông báo đặt thành công
Bây giờ bạn có 6 yêu cầu nhỏ, rõ ràng. Nhờ AI làm từng cái một. Kết quả sẽ tốt hơn rất nhiều so với "làm app đặt lịch cắt tóc".
Template Prompt: Copy-paste ngay
Khi bạn có ý tưởng app, dùng prompt này trước khi bắt tay vào build:
Tôi muốn build [mô tả app ngắn gọn].
Trước khi code, hãy giúp tôi chia ý tưởng này thành các phần nhỏ (components).
Với mỗi phần, cho tôi biết:
1. Tên phần
2. Chức năng chính (1-2 câu)
3. Nó kết nối với phần nào khác
Chưa cần code, chỉ cần sơ đồ.Sau khi có sơ đồ, chọn phần quan trọng nhất rồi dùng prompt tiếp:
Bây giờ hãy build phần [tên phần] trước.
Yêu cầu cụ thể:
- [liệt kê những gì bạn muốn trên màn hình này]
- [hành động người dùng cần làm]
- [kết quả mong đợi khi hoàn thành]
Chỉ build phần này thôi, chưa đụng phần khác.Trước và sau khi áp dụng Decomposition
TRƯỚC:
Prompt: "Tạo app quản lý chi tiêu cá nhân"
Kết quả: AI tạo ra 1 file dài, lẫn lộn giữa form nhập, dashboard, biểu đồ, settings. Không biết sửa từ đâu.
SAU:
Prompt 1: "Tạo form nhập chi tiêu: có ô nhập số tiền, dropdown chọn danh mục (ăn uống, đi lại, mua sắm, khác), nút lưu. Khi bấm lưu thì thêm vào danh sách bên dưới."
Kết quả: Form chạy ngon.
Prompt 2: "Thêm phần tổng kết: hiển thị tổng chi tiêu hôm nay, tuần này, tháng này bên trên form."
Kết quả: Tổng kết hiện đúng.
Prompt 3: "Thêm biểu đồ tròn hiển thị tỷ lệ chi tiêu theo danh mục."
Kết quả: Biểu đồ chạy đúng.
Cùng một app, nhưng cách tiếp cận khác nhau cho ra kết quả hoàn toàn khác.
Bài tập thực hành (15 phút)
Chọn 1 trong các ý tưởng sau (hoặc dùng ý tưởng của bạn):
App ghi chú công thức nấu ăn
App theo dõi thói quen hàng ngày (habit tracker)
Landing page cho quán cà phê
Làm theo 3 bước:
Bước 1 (5 phút): Liệt kê tất cả các màn hình/trang mà app cần có.
Bước 2 (5 phút): Chọn 1 màn hình quan trọng nhất. Liệt kê từng thứ trên màn hình đó (nút gì, form gì, hiển thị gì).
Bước 3 (5 phút): Viết 1 prompt cụ thể cho AI để build màn hình đó. Dùng template ở trên.
Làm xong share kết quả trong comment cho mình xem nhé.
Tuần sau: Bài 2 — Pattern Recognition: "Đừng phát minh lại bánh xe". Tại sao app đặt lịch khám bác sĩ thực ra giống 90% app đặt lịch cắt tóc, và cách nhận diện pattern giúp bạn mô tả cho AI chính xác hơn gấp mấy lần.