Phát triển theo đặc tả · với AI

Chốt chỗ trống
trước khi AI điền hộ

Một câu ngắn trao cho AI quyền tự điền mọi chỗ trống. Đặc tả là cách chốt chúng trước. Nhưng như Martin Fowler chỉ ra, đừng dùng búa tạ cho việc nhỏ.

Ba mức độKiro, Spec Kit, TesslKhi nào không đángMẫu năm mục
spec.md: vì sao, hành vi, không làm
mỗi chỗ trống là một lần AI đoán
Ba ý chính

Phát triển theo đặc tả, nói gọn

1Viết điều cần làm trước. Đặc tả là nguồn chân lý cho cả người và AI, thay cho một lời nhắc dài.
2Ba mức: spec-first, spec-anchored, spec-as-source. Hầu hết cách làm hiện nay mới ở mức đầu.
3Có hạn chế thật. Quy trình nặng cho việc nhỏ, nhiều tệp khó duyệt, tác nhân vẫn có lúc bỏ qua đặc tả.

Tóm lại: đặc tả nhẹ cho việc vừa và lớn, bỏ qua cho việc nhỏ.
Lưu ý: phần lớn bằng chứng là bài phân tích của một người (Martin Fowler). Mẫu năm mục là gợi ý của tác giả. Ví dụ hoàn tiền là minh họa.

Từ khó, nói dễ

Sáu từ để theo dõi bài

Thuật ngữNói dễ hiểu
Đặc tả (spec)Mô tả có cấu trúc về hành vi mong muốn, bằng ngôn ngữ thường
Tác nhân lập trìnhAI tự đọc, sửa tệp và chạy lệnh để làm việc
Tiêu chí chấp nhậnĐiều phải đúng để coi là xong, thường là ví dụ cụ thể
Bộ nhớ chungTệp ngữ cảnh cho mọi lần làm việc, như AGENTS.md
Mã có sẵnDự án đã chạy lâu, khác dự án mới
Không xác địnhCùng đầu vào, mỗi lần ra hơi khác
Vì sao

Chỗ trống nào cũng là một lần AI đoán

Người dùngTính năng tìm kiếm không hoạt động.
AgentKiểm tra logic: đúng, không lỗi.
Người dùngGõ xong màn hình đứng yên.
Một dòng đặc tả

"Gõ xong, kết quả hiện ra mà không phải cuộn." Có thể đã bắt sớm. Đây là suy luận sau sự việc.

Ba mức độ

Theo Martin Fowler

MứcÝ nghĩaĐặc tả sau khi làm
Spec-firstViết trước, dùng để hướng dẫnCó thể bỏ
Spec-anchoredGiữ lại để phát triển và bảo trìGiữ và cập nhật
Spec-as-sourceĐặc tả là sản phẩm chính, chỉ sửa đặc tảLà nguồn, mã được sinh ra
Ba công cụ

Mô tả theo bài của Fowler

Công cụQuy trìnhGhi chú
KiroYêu cầu, thiết kế, việc cần làmNhẹ hơn, chủ yếu spec-first
Spec KitNguyên tắc, đặc tả, kế hoạch, việc, triển khaiNhiều tệp Markdown, mỗi đặc tả một nhánh
Tessl (bản thử)Nhắm spec-anchored, thử spec-as-sourceCùng đặc tả, kết quả hơi khác
Lời phê bình

Fowler không chỉ ca ngợi

1

Một quy trình cho mọi cỡ

Kiro: một lỗi nhỏ thành 4 câu chuyện, 16 tiêu chí.

2

Gánh nặng duyệt

Nhiều tệp lặp lại, mệt hơn duyệt mã.

3

Cảm giác kiểm soát giả

Tác nhân có lúc bỏ qua nội dung đặc tả.

4

Mã có sẵn khó hơn

Hai trong ba công cụ khó đưa vào dự án đã chạy.

5

"Spec" bị dùng lỏng

Nguy cơ thành đồng nghĩa với lời nhắc chi tiết.

6

Bài học từ MDD

Lo kế thừa cả sự cứng nhắc lẫn tính không xác định.

Khi nào đáng

Bảng dựa trên lời Fowler và suy luận của tác giả

Tình huốngĐặc tảVì sao
Sửa lỗi nhỏKhôngCông viết vượt công làm
Thay đổi vừa trong mã có sẵnNhẹ hoặc khôngDuyệt tài liệu có thể tốn hơn
Tính năng mới vừa đến lớnCó, nhẹNhiều chỗ trống để AI đoán
Rủi ro cao (tiền, quyền, dữ liệu)Có, kèm tiêu chí rõPhải viết ra điều không được xảy ra
Vấn đề lớn, chưa rõChưaCần hiểu người dùng trước
Mẫu của tác giả

Đặc tả nhẹ năm mục

1

Vì sao

Vấn đề và người dùng, không phải giải pháp.

2

Hành vi

Người dùng thấy và làm gì.

3

Không làm

Chặn AI "làm thêm".

4

Ví dụ chấp nhận

Ba đến sáu ví dụ, kể cả ca lạ.

5

Câu hỏi mở

Bắt AI hỏi lại thay vì đoán.

Ví dụ minh họa

Tính năng hoàn tiền, dựng lại

MụcNội dung
Vì saoKhách hủy đơn muốn nhận lại tiền mà không gọi hỗ trợ
Hành viĐơn chưa giao có nút "Hủy và hoàn tiền"; bấm xong thấy "đang hoàn tiền"
Không làmHoàn một phần, đơn đã giao, đổi phương thức
Ví dụ chấp nhậnBấm hai lần: hoàn một lần. Cổng lỗi: báo lỗi, không đổi trạng thái
Câu hỏi mởThẻ hết hạn hoàn về đâu? Ai duyệt trên một triệu?
Quy trình

Bốn bước dùng được ngay

1
Viết đặc tả nhẹ10 đến 20 phút
2
Kế hoạch ngắnAI lập, bạn đọc
3
Từng bước nhỏĐối chiếu ví dụ
4
Cập nhật hoặc bỏĐừng để đặc tả cũ

Giữ bước nhỏ và nhớ rằng đặc tả cũng có thể cũ, đúng như lo ngại của Fowler.

Cân bằng

Bài này cũng có giới hạn

Điều nên nhớ
  • Chủ yếu là phân tích của một người
  • Chưa thấy nghiên cứu độc lập
  • Mẫu năm mục là gợi ý
Đừng hiểu nhầm
  • Công cụ đổi rất nhanh
  • "Spec" có nhiều nghĩa
  • Đặc tả không thay việc hiểu người dùng

Số sao và ngày ra mắt ghi khác nhau giữa các blog, nên mình không trích.

Việc làm ngay

Chọn một tính năng định nhờ AI tuần này, viết năm mục trong mười phút.

Rồi so với cách bạn vẫn làm.