Cách chúng ta xây dựng phần mềm đang thay đổi một cách căn bản. Nhờ có các AI agents (tác tử trí tuệ nhân tạo), việc viết và review code không còn là phần khó nhất trong công việc của một lập trình viên nữa. Thay vào đó, thách thức mới là làm thế nào để giao tiếp hiệu quả những gì bạn muốn AI xây dựng.
Nhiều lập trình viên hiện đang sử dụng phương pháp thử-và-sai (trial-and-error) khi lập trình với AI, điều này thường dẫn đến việc phải tinh chỉnh (tweaking) không hồi kết và gây thất vọng. Nhưng có một cách tốt hơn. Trong bài viết này, bạn sẽ tìm hiểu về Spec-Driven Development (SDD), một phương pháp tiếp cận có cấu trúc giúp thay thế sự phỏng đoán hỗn loạn của AI bằng các bản thiết kế rõ ràng và "sống động".
Bạn cũng sẽ được đi sâu vào GitHub Spec Kit, một dự án mã nguồn mở được thiết kế để tích hợp liền mạch phương pháp này vào workflow (quy trình làm việc) của bạn, cho phép bạn tận dụng các AI coding assistant (trợ lý lập trình AI) với sự chặt chẽ của kỹ thuật phần mềm chuyên nghiệp.
I. Cạm bẫy của "Vibe Coding"
Hiện tại, cách phổ biến nhất mà mọi người tương tác với các trợ lý lập trình AI là thông qua một quá trình được gọi là "Vibe Coding."
Dưới đây là cách nó thường diễn ra:
- Bạn viết một prompt nhanh (ví dụ: "Build me a login page for my app" - Xây dựng cho tôi một trang đăng nhập).
- AI tạo ra một đoạn code dựa trên những gì nó nghĩ là bạn muốn.
- Kết quả không hoàn toàn chính xác, vì vậy bạn chỉnh sửa prompt và yêu cầu AI thử lại.
- Bạn lặp đi lặp lại quá trình này, tinh chỉnh prompt cho đến khi code cuối cùng cũng chạy được.
Mặc dù Vibe Coding ban đầu mang lại cảm giác kỳ diệu, nhưng nó hoàn toàn bỏ qua Vòng đời Phát triển Phần mềm (SDLC) truyền thống. Vì AI chỉ đang phỏng đoán dựa trên một prompt ngắn, nó đưa ra các quyết định kiến trúc có thể không phù hợp với mục tiêu dài hạn của bạn. Nếu bạn cần thay đổi hướng đi sau này, bạn sẽ mắc kẹt trong việc gỡ rối một mớ code hỗn độn.
II. Spec-Driven Development (SDD) là gì?
Spec-Driven Development (SDD) lật ngược mô hình Vibe Coding. Thay vì lao ngay vào việc viết code, SDD sử dụng AI để tạo ra một bộ yêu cầu (requirements) và kế hoạch kỹ thuật (technical plans) rõ ràng trước.
Hãy coi SDD như là version control (kiểm soát phiên bản) cho tư duy của bạn. Nó không phải là việc tạo ra các tài liệu cứng nhắc, nhàm chán mà không ai đọc. Thay vào đó, nó tạo ra một specification (đặc tả) "sống động", phác thảo cái gì (what), tại sao (why), và như thế nào (how) của dự án trước khi một dòng code nào được tạo ra. Bằng cách xác định các quy tắc ngay từ đầu, bạn tạo ra một bối cảnh chung (shared context). Điều này đảm bảo rằng khi AI cuối cùng viết code, nó sẽ xây dựng chính xác những gì bạn cần ngay trong lần thử đầu tiên.
3 Trụ cột của SDD là:
- Spec (Đặc tả): Xác định What và Why (nhu cầu của người dùng).
- Plan (Kế hoạch): Xác định How (kiến trúc kỹ thuật).
- Tasks (Nhiệm vụ): Xác định Steps (lộ trình các bước có thể thực hiện).
III. Tìm hiểu sâu về GitHub Spec Kit
Để thực sự đưa Spec-Driven Development vào thực tế, các lập trình viên có thể sử dụng GitHub Spec Kit.
Điều quan trọng cần hiểu là Spec Kit không phải là một mô hình AI độc lập. Thay vào đó, nó là một bộ công cụ (toolkit) mã nguồn mở giúp đưa các workflow kỹ thuật phần mềm chuyên nghiệp, nghiêm ngặt vào AI assistant mà bạn đang sử dụng—cho dù đó là GitHub Copilot, Claude Code, Cursor hay Gemini.
Dự án bao gồm hai thành phần cốt lõi hoạt động cùng nhau ở hậu trường:
1. Specify CLI
Nền tảng của dự án là một Command Line Interface (CLI) viết bằng Python có tên là specify. Bằng cách chạy một lệnh setup đơn giản trong terminal của bạn, CLI sẽ xem xét dự án của bạn, hỏi xem bạn đang sử dụng AI assistant nào, và tải xuống các template (mẫu) cụ thể cần thiết cho agent đó. Nó tự động thiết lập thư mục .specify của bạn và tích hợp an toàn với kho lưu trữ Git (Git repository) của bạn.
uvx specify-cli.py init <project-name>2. Templates và Helper Scripts
Khi CLI thiết lập xong dự án của bạn, nó sẽ để lại một bộ sưu tập các file Markdown và script được thiết kế kỹ lưỡng. Đây thực chất là các "meta-prompts". Khi bạn yêu cầu AI làm điều gì đó, nó sẽ bí mật đọc các template này trước để hiểu các quy tắc của Spec-Driven Development.
- The Constitution (
constitution.md): Đây là một file thiết lập các quy tắc không thể thương lượng trên toàn bộ dự án. Ví dụ: bạn có thể viết: "Mọi tính năng phải sử dụng Test-Driven Development" hoặc "Chúng ta luôn sử dụng Python 3.11." AI sẽ đọc bản "hiến pháp" này và thực thi các quy tắc đó trên mọi đoạn code mà nó tạo ra. - Helper Scripts: Toolkit bao gồm các bash hoặc PowerShell scripts nhỏ mà AI có thể thay mặt bạn chạy. Các script này giúp AI làm những việc như checkout an toàn một Git branch mới cho tính năng của bạn, đảm bảo nó không vô tình ghi đè lên codebase chính của bạn.
IV. Ứng dụng thực tế: Workflow hoạt động như thế nào
Khi Spec Kit được cài đặt trong repository của bạn, nó mang lại cho AI assistant "siêu năng lực" thông qua các slash commands (lệnh bắt đầu bằng dấu gạch chéo) tùy chỉnh. Dưới đây là cách một lập trình viên sử dụng chúng để xây dựng một tính năng:
1. Cái "What" và "Why"
Bạn bắt đầu quá trình tạo specification bằng cách gõ lệnh sau vào giao diện chat của AI:
/speckit.specify Add a secure user login featureAI sẽ đọc Spec Kit template, điều này buộc nó phải hành xử như một Product Manager (Quản lý Sản phẩm). Nó sẽ không viết code. Thay vào đó, nó tạo ra một file spec.md nêu chi tiết về user journeys (hành trình người dùng), success criteria (tiêu chí thành công) và các edge cases (trường hợp ngoại lệ). Nếu yêu cầu của bạn quá mơ hồ, prompt sẽ hướng dẫn AI tạm dừng và đưa ra các câu hỏi trắc nghiệm để làm rõ với bạn.
2. Cái "How"
Tiếp theo, bạn thực thi lệnh lập kế hoạch:
/speckit.planAI lúc này hành xử như một Software Architect (Kiến trúc sư Phần mềm). Nó đọc file spec đã được phê duyệt của bạn, kiểm tra Constitution của dự án và tạo ra một file plan.md. Nó quyết định tech stack (công nghệ sử dụng), tạo database models (mô hình cơ sở dữ liệu) và vạch ra các API contracts.
3. Phân chia công việc (The Breakdown)
Sau đó, bạn yêu cầu AI tạo một checklist:
/speckit.tasksAI chia nhỏ technical plan thành các task (nhiệm vụ) cực kỳ cụ thể, dễ quản lý và được sắp xếp theo trình tự phụ thuộc (ví dụ: "Làm Task A trước, sau đó Task B và C có thể được làm song song (in parallel)"), xuất ra một checklist trong file tasks.md.
4. Thực thi (The Execution)
Cuối cùng, bạn chỉ thị cho AI xây dựng dự án:
/speckit.implementBạn để AI làm theo chính xác checklist mà nó vừa tạo ra để viết code, test (kiểm thử) và deploy (triển khai) code. Bằng cách tách biệt quy trình thành các giai đoạn rõ ràng này, Spec Kit cho phép bạn dễ dàng khám phá các lựa chọn thay thế. Ví dụ: bạn có thể yêu cầu AI tạo ra hai implementations (bản triển khai) khác nhau của cùng một specification (một bằng Rust và một bằng Go) chỉ để so sánh hiệu năng của chúng!
V. Kết luận và Những điểm chính yếu
Code vốn dĩ có tính ràng buộc; một khi đã được viết ra, nó rất khó và tốn kém để thay đổi. SDD nhận ra rằng code không phải là phương tiện tốt nhất để tìm ra những gì một ứng dụng nên làm. Bằng cách chuyển từ "Vibe Coding" sang Spec-Driven Development sử dụng các công cụ như GitHub Spec Kit, bạn giành lại quyền kiểm soát. Bạn hướng dẫn các AI agents hiện có của mình bằng các yêu cầu rõ ràng, technical plans thấu đáo và các tasks có thể thực thi được, đảm bảo chúng xây dựng phần mềm mạnh mẽ, có khả năng mở rộng (scalable) ngay từ lúc bắt đầu.
- Vibe Coding có nhiều hạn chế: Việc dựa vào các prompt AI theo kiểu thử-và-sai dẫn đến code không thể đoán trước và bỏ qua các giai đoạn lập kế hoạch quan trọng.
- SDD là version control cho tư duy: Nó ghi lại các yêu cầu và quyết định kỹ thuật của bạn trong các file tài liệu "sống động" trước khi quá trình code bắt đầu.
- GitHub Spec Kit trao quyền cho AI của bạn: Nó là một Python CLI và một hệ thống template cung cấp cho các AI agents yêu thích của bạn (Claude, Cursor, Copilot) một framework (khung làm việc) có cấu trúc để tuân theo.