Trong bối cảnh trí tuệ nhân tạo (AI) ngày càng định hình lại cách chúng ta phát triển phần mềm, cộng đồng developer đang sôi nổi thảo luận về những phương pháp làm việc hiệu quả nhất với các công cụ lập trình AI. Liệu chúng ta nên đặt niềm tin vào những quy trình phức tạp, có cấu trúc chặt chẽ, hay một cách tiếp cận đơn giản, linh hoạt mới là chìa khóa mở ra hiệu suất tối ưu?
Trong hơn một năm qua, hai triết lý phát triển phần mềm với AI nổi bật đã hình thành:
- Vibe Coding: Một cách tiếp cận linh hoạt, nơi các nhà phát triển chỉ cần đưa ra các prompt (lệnh) cho AI và nhanh chóng lặp lại quá trình phát triển dựa trên phản hồi tức thì. Phương pháp này nhấn mạnh vào tốc độ và khả năng thích ứng.
- Spec-Driven Development (SDD): Ngược lại, SDD đề cao sự rõ ràng và cấu trúc. Nó cố gắng chính thức hóa quy trình, buộc AI phải hiểu rõ các yêu cầu thông qua các đặc tả chi tiết trước khi thực thi. Các framework như OpenSpec đang dẫn đầu trong việc định hình triết lý này.
Theo lý thuyết, Spec-Driven Development, đặc biệt với sự hỗ trợ của OpenSpec, hứa hẹn sẽ tạo ra mã nguồn chất lượng cao hơn và đáng tin cậy hơn, giảm thiểu rủi ro từ các prompt mơ hồ. Để kiểm chứng điều này, một thử nghiệm thực tế đã được tiến hành, mang lại những kết quả bất ngờ.
Mục lục
Thử Nghiệm Thực Tế: Nâng Cấp Giao Diện Ứng Dụng Web Rao Vặt Ô Tô
Dự án được chọn để thử nghiệm là một ứng dụng web rao vặt ô tô, với phần backend và các chức năng cơ bản đã hoàn thiện. Giao diện người dùng (frontend) được xây dựng bằng .NET Razor Pages, hoạt động tốt nhưng lại mang vẻ cơ bản và thiếu sức sống.
Mục tiêu của thử nghiệm rất rõ ràng:
“Sử dụng các công cụ lập trình AI hiện đại để tạo ra một thiết kế giao diện người dùng (UI) frontend trông cao cấp và hiện đại hơn.”
Đây dường như là một cơ hội hoàn hảo để kiểm tra hiệu quả của Spec-Driven Development với OpenSpec trong một kịch bản thực tế.

Giao diện người dùng ban đầu của ứng dụng rao vặt ô tô, khá đơn giản và chưa thực sự thu hút.
Thất Vọng Với OpenSpec: Thử Nghiệm Đầu Tiên
Thử nghiệm đầu tiên được thực hiện theo đúng quy trình Spec-Driven Development của OpenSpec, kết hợp với GPT-5.3 Codex trong VS Code. Quy trình bao gồm các bước sau:
- Tạo đề xuất (Generate a proposal): AI sẽ tạo ra một đề xuất chi tiết dựa trên yêu cầu ban đầu.
- Xem xét đặc tả (Review the generated specification): Nhà phát triển phải xem xét kỹ lưỡng bản đặc tả do AI tạo ra để đảm bảo nó hiểu đúng yêu cầu.
- Phê duyệt danh sách tác vụ (Approve the list of tasks): Sau khi đặc tả được duyệt, danh sách các tác vụ cụ thể sẽ được phê duyệt.
- Cho phép AI thực thi kế hoạch (Allow the AI agent to execute the plan): Cuối cùng, AI agent sẽ thực hiện các tác vụ theo kế hoạch đã được duyệt.
Chỉ riêng bước xem xét và phê duyệt đã tốn một lượng đáng kể thời gian. Điểm mấu chốt của Spec-Driven Development là nhà phát triển phải xem xét mọi thứ trước khi thực thi, nhằm đảm bảo AI hiểu rõ các yêu cầu. Sau khoảng hai giờ làm việc và tiêu tốn rất nhiều token, kết quả cuối cùng đã được hiển thị.
Thật đáng thất vọng, giao diện frontend mới gần như giống hệt với giao diện ban đầu. Đây không phải là “thiết kế lại UI cao cấp” mà thử nghiệm hy vọng đạt được.

Mặc dù đã trải qua quy trình SDD chi tiết, giao diện người dùng vẫn giữ nguyên vẻ cơ bản.
Thử Nghiệm Lần Hai: Thay Đổi Công Cụ, Kết Quả Vẫn Vậy
Không nản lòng, thử nghiệm thứ hai đã được tiến hành với một chút thay đổi. Thay vì GPT-5.3 Codex, các công cụ được sử dụng là:
- GitHub Copilot
- Claude Haiku
Ý tưởng là vẫn giữ nguyên quy trình OpenSpec nhưng cố gắng giảm chi phí token. Từ góc độ công cụ, sự tích hợp của Copilot với VS Code thực sự mang lại trải nghiệm làm việc mượt mà hơn. Tuy nhiên, kết quả cuối cùng vẫn không mấy khả quan.
Thêm thời gian để xem xét các tác vụ. Thêm chu kỳ thực thi của agent. Nhưng vẫn không có cải thiện đáng kể nào cho giao diện người dùng. Đến thời điểm này, thử nghiệm đã tiêu tốn vài giờ đồng hồ mà không mang lại hiệu quả mong muốn.
Bất Ngờ Từ Sự Đơn Giản: Sức Mạnh Của Instructions.md
Đối mặt với những thất bại liên tiếp, một cách tiếp cận đơn giản hơn đã được thử nghiệm. OpenSpec bị loại bỏ hoàn toàn, và thay vào đó, một tệp đơn giản có tên Instructions.md được tạo ra.
Không có giai đoạn đề xuất. Không có lập kế hoạch tác vụ. Không có xem xét đặc tả. Chỉ đơn thuần là các hướng dẫn rõ ràng.
Sửa Lỗi Với Instructions.md: Nhanh Chóng và Hiệu Quả
Bài kiểm tra đầu tiên là một lỗi nhỏ: “Chức năng tải ảnh không hoạt động khi cập nhật danh sách sản phẩm.”
Dưới đây là một ví dụ về nội dung tệp Instructions.md cho tác vụ sửa lỗi này:
# Hướng dẫn sửa lỗi tải lên ảnh
## Mô tả lỗi:
Chức năng tải lên hình ảnh không hoạt động khi cập nhật danh sách sản phẩm hiện có.
Khi người dùng chỉnh sửa một danh sách và cố gắng tải lên hình ảnh mới, hình ảnh không được lưu hoặc hiển thị chính xác.
## Yêu cầu:
1. Kiểm tra và xác định nguyên nhân lỗi trong mã xử lý tải lên ảnh cho chức năng cập nhật (ví dụ: thiếu xử lý file, lỗi đường dẫn lưu trữ, vấn đề liên kết cơ sở dữ liệu).
2. Đảm bảo rằng hình ảnh mới được tải lên được lưu trữ đúng cách vào thư mục `wwwroot/images/listings/` và liên kết với danh sách sản phẩm tương ứng trong cơ sở dữ liệu.
3. Cập nhật giao diện người dùng để hiển thị hình ảnh mới sau khi tải lên thành công, bao gồm cả việc cập nhật các thumbnail hoặc preview nếu có.
4. Thêm xử lý lỗi nếu quá trình tải lên thất bại (ví dụ: thông báo cho người dùng, ghi log lỗi).
## Các tệp liên quan có thể cần xem xét:
- `Pages/Listings/Edit.cshtml`: Kiểm tra form tải lên, thuộc tính `enctype="multipart/form-data"`.
- `Pages/Listings/Edit.cshtml.cs`: Xử lý logic tải lên file trong phương thức `OnPostAsync`.
- `wwwroot/js/image-uploader.js` (nếu có): Kiểm tra script JavaScript frontend xử lý tải lên.
- `Models/Listing.cs`: Đảm bảo thuộc tính hình ảnh (ví dụ: `ImageUrl`) được cập nhật.
AI agent đã được thực thi với các hướng dẫn này. Kết quả? Lỗi đã được sửa nhanh chóng. Lượng token sử dụng là tối thiểu. Thời gian thực thi giảm đáng kể.

Lỗi tải ảnh đã được khắc phục hiệu quả chỉ với các hướng dẫn đơn giản.
Thiết Kế Lại UI Với Instructions.md: Hiệu Quả Bất Ngờ
Tiếp theo, AI được giao thử thách ban đầu: “Tạo một giao diện frontend trông hiện đại và cao cấp hơn.”
Dưới đây là một ví dụ về nội dung tệp `Instructions.md` cho tác vụ này:
# Hướng dẫn thiết kế lại giao diện người dùng cao cấp cho ứng dụng rao vặt ô tô
## Mục tiêu tổng thể:
Biến đổi giao diện người dùng hiện tại từ cơ bản sang hiện đại, tinh tế và cao cấp, mang lại trải nghiệm tốt hơn cho người dùng.
## Các yếu tố thiết kế cần tập trung:
1. **Kiểu chữ (Typography):**
* Chọn một bộ font chữ hiện đại, chuyên nghiệp, dễ đọc (ví dụ: Inter, Montserrat, Lato).
* Sử dụng kích thước và trọng lượng font phù hợp cho các tiêu đề, nội dung và các yếu tố phụ.
* Đảm bảo sự nhất quán trong toàn bộ ứng dụng.
2. **Bảng màu (Color Palette):**
* Áp dụng bảng màu tinh tế, chuyên nghiệp. Có thể sử dụng màu trung tính (xám, trắng, đen) làm chủ đạo kết hợp với một hoặc hai màu nhấn (accent color) để tạo điểm nhấn thị giác (ví dụ: xanh dương đậm, đỏ burgundy, vàng gold).
* Tránh các màu sắc quá rực rỡ hoặc lỗi thời.
3. **Bố cục và khoảng cách (Layout & Spacing):**
* Cải thiện bố cục tổng thể để tạo cảm giác thông thoáng, chuyên nghiệp và có tổ chức.
* Sử dụng khoảng trắng (whitespace) một cách hiệu quả để làm nổi bật các thành phần quan trọng và giảm sự lộn xộn.
* Áp dụng hệ thống grid để đảm bảo sự căn chỉnh và cân bằng.
4. **Hình ảnh và Media (Imagery & Media):**
* Tối ưu hóa cách hiển thị hình ảnh sản phẩm (xe ô tô) để chúng trông chuyên nghiệp và nổi bật.
* Đảm bảo hình ảnh có chất lượng cao và được tải nhanh chóng.
* Có thể cân nhắc thêm hiệu ứng hover hoặc lazy loading cho hình ảnh.
5. **Các yếu tố tương tác (Interactive Elements):**
* Nâng cấp thiết kế của các nút (buttons), thanh tìm kiếm (search bars), trường nhập liệu (input fields) và các yếu tố tương tác khác.
* Đảm bảo chúng trông hiện đại, dễ sử dụng và có phản hồi trực quan (ví dụ: hiệu ứng hover, đổ bóng nhẹ, hiệu ứng chuyển động tinh tế).
* Sử dụng iconography nhất quán và hiện đại.
6. **Thiết kế đáp ứng (Responsive Design):**
* Đảm bảo toàn bộ giao diện hiển thị và hoạt động hoàn hảo trên mọi thiết bị (máy tính để bàn, máy tính bảng, điện thoại di động) với các điểm ngắt (breakpoints) phù hợp.
## Các khu vực cụ thể cần thiết kế lại:
- **Trang chủ (Homepage):** Bố cục hiển thị danh sách xe, thanh tìm kiếm, các bộ lọc.
- **Trang chi tiết sản phẩm (Product Detail Page):** Cách trình bày thông tin xe, thư viện ảnh, thông tin người bán.
- **Thanh điều hướng (Navigation Bar):** Thiết kế menu, logo, các liên kết quan trọng.
- **Chân trang (Footer):** Thông tin liên hệ, các liên kết điều hướng phụ.
## Phong cách tham khảo (Inspiration):
Tìm cảm hứng từ các trang web rao vặt ô tô cao cấp quốc tế (ví dụ: CarGurus, AutoTrader UK) hoặc các trang thương mại điện tử hiện đại có thiết kế UI tối giản, sang trọng.
Kết quả vẫn không hoàn hảo, nhưng sự khác biệt thì rất lớn:
- Quy trình nhanh hơn đáng kể.
- Chi phí thấp hơn nhiều.
- Khả năng lặp lại và tinh chỉnh dễ dàng hơn.
Thay vì chờ đợi các đề xuất và xem xét các tài liệu đặc tả dài dòng, nhà phát triển có thể đơn giản tinh chỉnh các hướng dẫn và thử lại ngay lập tức.
Chi Phí Ẩn Của Spec-Driven Development: Tại Sao Đôi Khi Đắt Đỏ?
Spec-Driven Development thường được giới thiệu là giải pháp cho “sự hỗn loạn của vibe coding” – nơi các mô hình AI dễ dàng hiểu sai các prompt mơ hồ. Điều này có lý. Tuy nhiên, một khía cạnh ít được thảo luận là chi phí thực sự của chính framework đó.
Các quy trình làm việc theo Spec-Driven, dù có ý định tốt, lại tạo ra một loạt các bước bổ sung:
- Tạo đề xuất: AI cần thời gian và token để tạo ra một bản đề xuất chi tiết.
- Xem xét đặc tả: Nhà phát triển phải dành thời gian quý báu để đọc, hiểu và chỉnh sửa các tài liệu đặc tả do AI tạo ra.
- Lập kế hoạch tác vụ: Việc phân chia và sắp xếp các tác vụ cũng đòi hỏi sự can thiệp và phê duyệt của con người.
- Thực thi tác nhân đa bước: Việc AI thực thi theo các bước được quy định cũng có thể tốn thời gian và tài nguyên.
Mỗi bước này đều tiêu tốn:
- Thời gian của nhà phát triển
- Token của AI
- Sự tập trung và chú ý
Nếu đầu ra cuối cùng vẫn kém chất lượng, thì chi phí phát sinh này trở nên khó biện minh. Điều này đặc biệt đúng với các tác vụ nhỏ hoặc các dự án có ngân sách hạn chế. Biểu đồ dưới đây minh họa rõ ràng sự mất cân bằng giữa chi phí và hiệu quả trong thử nghiệm này.

Biểu đồ so sánh chi phí và hiệu quả của các phương pháp, cho thấy sự tăng vọt về chi phí nhưng không tỷ lệ thuận với cải thiện chất lượng khi sử dụng SDD.
So Sánh Hiệu Suất: Con Người Hay AI Phức Tạp Sẽ Thắng Thế?
Để có cái nhìn toàn diện hơn, một mô hình AI đã được hỏi về thời gian mà một nhà phát triển có thể mất để tự xây dựng lại giao diện người dùng đã được thiết kế lại. Ước tính là 2-3 tuần. Cá nhân tôi cho rằng một nhà phát triển có năng lực có thể hoàn thành nó trong khoảng năm ngày.
Điều này đặt ra một câu hỏi thú vị: Nếu một nhà phát triển có thể xây dựng tính năng này trong vòng chưa đầy một tuần, liệu việc dành hàng giờ để điều phối các quy trình làm việc AI phức tạp có thực sự hợp lý không? Đôi khi, giải pháp trực tiếp và đơn giản từ con người vẫn có thể vượt trội hơn các hệ thống AI phức tạp, ít nhất là ở thời điểm hiện tại.
Tương Lai Của Phát Triển Hỗ Trợ AI: Đơn Giản Là Vàng
Thử nghiệm này đã khiến nhiều người phải suy nghĩ lại về hướng đi của phát triển phần mềm hỗ trợ AI. Có lẽ tương lai không nằm ở các framework nặng nề, cồng kềnh, mà ở các quy trình làm việc nhẹ nhàng hơn với hướng dẫn tốt hơn. Một cách tiếp cận hiệu quả có thể bao gồm:
- Các tác vụ nhỏ: Chia nhỏ các yêu cầu lớn thành các phần nhỏ, dễ quản lý hơn.
- Hướng dẫn rõ ràng: Cung cấp các chỉ dẫn cụ thể, không mơ hồ cho AI.
- Lặp lại nhanh chóng: Khả năng nhanh chóng điều chỉnh và thử lại khi cần thiết.
- Sự giám sát của nhà phát triển: Con người vẫn đóng vai trò quan trọng trong việc định hướng và kiểm soát chất lượng.
Thay vì các đường ống điều phối dài và phức tạp, một phương pháp tập trung vào sự linh hoạt và phản hồi nhanh có thể mang lại hiệu quả cao hơn, đặc biệt cho các dự án quy mô nhỏ và trung bình.
Lời Kết: Tìm Kiếm Cân Bằng Trong Kỷ Nguyên AI
Các framework như OpenSpec đang khám phá một ý tưởng quan trọng: làm thế nào để quản lý các tác nhân AI trong các dự án phần mềm lớn? Đây là một vấn đề thực sự cần có giải pháp trong tương lai. Tuy nhiên, trong thử nghiệm nhỏ này, kết quả rất rõ ràng: quy trình Spec-Driven Development có cấu trúc đã tạo ra rất nhiều chi phí bổ sung mà không mang lại kết quả tốt hơn. Một cách tiếp cận Instructions.md đơn giản hơn đã nhanh hơn, rẻ hơn và dễ lặp lại hơn.
Khi các công cụ phát triển AI tiếp tục phát triển, sẽ rất thú vị để xem các nhà phát triển sẽ hướng tới đâu:
- Các framework có cấu trúc chặt chẽ, được quy chuẩn hóa cao, hay
- Các quy trình làm việc nhẹ nhàng dựa trên hướng dẫn.
Rất có thể, câu trả lời cuối cùng sẽ nằm ở một điểm cân bằng giữa hai thái cực này, tận dụng sức mạnh của AI một cách thông minh và hiệu quả nhất.
Series video liên quan đến thử nghiệm này:



