Skills for Real Engineers: Matt Pocock's Antidote to 'Vibe Coding' in AI Agents Skills for Real Engineers: Vũ Khí Của Matt Pocock Chống Lại 'Vibe Coding' Trong Kỷ Nguyên AI
Explore Matt Pocock's 'Skills for Real Engineers'—a composable framework featuring Socratic grilling, automated ADR generation, ubiquitous language mapping, and issue state-machine triage. Khám phá bộ kỹ năng 'Skills for Real Engineers' của Matt Pocock—phương pháp phỏng vấn Socratic (Grilling), tự động sinh tài liệu ADR, đồng bộ ngôn ngữ nghiệp vụ và quy trình triage lỗi chuyên nghiệp.
1. 🌟 The Crisis of “Vibe Coding” vs. Real Engineering
The developer community has recently been swept by the trend of “Vibe Coding”—prompting an AI agent with a casual, high-level idea, letting it churn out dozens of files, and hoping the application miraculously works.
While vibe coding feels exhilarating for prototypes, it quickly disintegrates in production systems. When coding agents (like Claude Code, Codex, or Cursor) operate without structured guidance, three fatal failure modes inevitably emerge:
- The Alignment Failure: The agent builds what it assumes you want, not what you actually need.
- Context Bloat & Jargon Confusion: The agent uses 30 verbose words where 2 domain terms would suffice because it lacks a shared project glossary.
- Architectural Amnesia: Critical, hard-to-reverse design decisions evaporate between conversation turns because they were never recorded in Architecture Decision Records (ADRs).
Matt Pocock—the creator of Total TypeScript and one of the most respected educators in modern software development—released mattpocock/skills as the definitive antidote: a lean, composable, model-agnostic collection of agent skills designed for real software engineering.
“My agent skills that I use every day to do real engineering — not vibe coding. Developing real applications is hard. Approaches that try to own the whole process take away your control and make bugs in the process hard to resolve. These skills are small, easy to adapt, and composable.” — Matt Pocock
2. 🥊 The Alignment Problem & The Power of “Grilling”
“No-one knows exactly what they want.” — David Thomas & Andrew Hunt, The Pragmatic Programmer
The most common point of failure in software engineering is communication breakdown. Developers often hold vague mental models, and AI agents amplify that vagueness by hallucinating confident but misaligned implementations.
Matt Pocock resolves this through a mandatory Grilling Session:
flowchart TD
User(["👤 Developer has a raw idea"]) --> Grill["🔥 /grill-me (Relentless Socratic Interview)"]
subgraph InterviewTree ["Walking the Design Tree (One Question at a Time)"]
Q1["❓ Who is this feature for?"] --> Q2["❓ What are the failure modes & boundary cases?"]
Q2 --> Q3["❓ Which architectural trade-offs are acceptable?"]
end
Grill --> InterviewTree
InterviewTree --> Conf{"Confidence >= 95%?"}
Conf -->|No| Grill
Conf -->|Yes| Plan["📋 Concrete, Crystal-Clear Implementation Plan"]
The Two Grilling Flavors:
/grill-me: A general-purpose Socratic questioning skill. The agent refuses to write code until it has grilled you on edge cases, user personas, and constraints, asking exactly one focused question at a time./grill-with-docs: An advanced engineering variant that conducts the same rigorous interview while automatically producing permanent project documentation and ADRs.
3. 📑 Ubiquitous Language & Automated ADRs
“With a ubiquitous language, conversations among developers and expressions of the code are all derived from the same domain model.” — Eric Evans, Domain-Driven Design
When an AI agent joins a project, it doesn’t know your domain terminology. It wastes thousands of tokens describing concepts clumsily:
| Without Shared Language (Verbose Token Waste) | With Ubiquitous Language (CONTEXT.md) |
|---|---|
| “There’s an issue when a lesson inside a section of an online course is made real on disk…" | "There’s a problem with the materialization cascade." |
| "When a token payload expires after sixty minutes and the proxy fails to request a new token…" | "Token refresh lease timeout.” |
Through /grill-with-docs, the agent maintains a live CONTEXT.md glossary and generates lightweight ADRs (Architecture Decision Records):
📑 Sample Auto-Generated ADR (
docs/adr/0004-video-queue.md):Title:
ADR 0004: Event-Driven Queue for Video Rendering
- Context: Video rendering jobs frequently exceed API gateway timeouts (30s) during peak load.
- Decision: Adopt BullMQ with Redis streams rather than synchronous HTTP invocation.
- Consequences:
- Requires Redis instance in production.
- Decouples API response latency from transcoding duration.
Whenever future agent sessions touch that subsystem, they load the ADR and understand the rationale immediately without second-guessing or reverting decisions.
4. 🚦 The Issue Triage State Machine
Handling bug reports and feature tickets with AI is often chaotic. Matt Pocock’s /triage skill connects directly to your issue tracker (GitHub Issues, Linear, Jira, or local Markdown files) and routes items through an explicit state machine:
stateDiagram-v2
[*] --> TriageRequested: New Ticket Filed
TriageRequested --> Categorize: Apply Domain & Severity Labels
Categorize --> VerifyRepro: Check Reproduction Steps
VerifyRepro --> GrillDetails: Needs Clarification (/grill-me)
GrillDetails --> InPlanning: Acceptance Criteria Locked
InPlanning --> ReadyForCode: Spec & Test Plan Approved
Key Triage Capabilities:
- Tracker-Agnostic Setup: Configured via
/setup-matt-pocock-skillsto bind to GitHub labels, Linear teams, or local.tickets/folders. - Deterministic Labeling: Applies consistent severity and domain tags so backlogs remain organized.
- Automated Reproduction Checks: Verifies whether an issue contains a reproducible test case before any agent touches application code.
5. 📦 Distribution Philosophy: Composable vs. Monolithic
A major architectural insight of mattpocock/skills is its critique of “all-in-one” agent frameworks (like GSD or Spec-Kit). When a framework attempts to monopolize the entire development lifecycle, developers lose control, and diagnosing bugs in the prompt pipeline becomes impossible.
Matt Pocock adopts the Unix Philosophy of AI Skills:
| Core Philosophy | Architectural Principle | Practical Developer Benefit |
|---|---|---|
| 🧩 Small & Composable | Unix Philosophy: Each skill does one thing well | Combine and remix skills without vendor lock-in |
| 🛠️ Hackable in Repo | Standard Markdown committed in .skills/ | Fully editable, version-controlled by your team |
| 🌐 Model-Agnostic | Prompt-driven without hardcoded models | Runs across Claude Code, Cursor, Codex & Gemini |
| ⚖️ Opt-In Friction | Introduce structure only where failure happens | Fast prototyping with optional rigorous checkpoints |
Two Installation Models:
| Approach | Command | Best Used When |
|---|---|---|
| Managed Claude Plugin | claude plugins install mattpocock-skills | You want automatic upstream updates in Claude Code without managing local files. |
| Repo-Local (skills.sh) | npx skills@latest add mattpocock/skills | You want editable, version-controlled markdown skill files committed directly to your repository. |
6. 🚀 Quickstart: Installing mattpocock/skills
Step 1: Install the Skills
For Claude Code:
claude plugins install mattpocock-skills
For Codex, Cursor, Antigravity, or other agents:
npx skills@latest add mattpocock/skills
Step 2: Initialize Your Repository
Run the interactive configuration command inside your agent:
/setup-matt-pocock-skills
The agent will configure:
- Your issue tracker (GitHub, Linear, or local files).
- Your triage label schema.
- Your project documentation directory (e.g.,
docs/adr/).
7. 💡 4 Timeless Lessons for AI-Native Engineers
- Slow Down to Speed Up: 5 minutes of intensive Socratic grilling (
/grill-me) eliminates 3 hours of debugging misaligned code. - Capture Decision Rationale (ADRs): Code shows how a system works; ADRs explain why it was built that way. Agents need the why to avoid architectural drift.
- Build Ubiquitous Language: A shared 1-page glossary (
CONTEXT.md) saves thousands of tokens per session and eliminates communication ambiguities. - Choose Composable Tools Over Monoliths: Avoid rigid frameworks that force an entire lifecycle onto your workflow. Choose modular skills that you can inspect, adapt, and version in Git.
1. 🌟 Cuộc Khủng Hoảng Của ‘Vibe Coding’ & Nhu Cầu Kỹ Thuật Thực Thụ
Cộng đồng lập trình viên thời gian gần đây đang phát sốt với trào lưu “Vibe Coding”—chỉ cần đưa ra một ý tưởng mơ hồ cho AI agent, để nó tự sinh ra hàng chục file mã nguồn, và hy vọng ứng dụng sẽ chạy một cách thần kỳ.
Mặc dù vibe coding mang lại cảm giác phấn khích khi làm prototype nhanh, nó nhanh chóng sụp đổ trong các dự án thực tế. Khi các coding agent (như Claude Code, Codex hay Cursor) hoạt động mà không có kỷ luật quy trình, 3 vấn nạn nghiêm trọng sẽ xuất hiện:
- Lệch pha ý đồ (The Alignment Failure): Agent xây dựng những gì nó tự suy diễn, chứ không phải những gì bạn thực sự cần.
- Loãng ngữ cảnh & Rối loạn thuật ngữ: Agent phải dùng 30 từ dài dòng để giải thích một khái niệm mà đúng ra chỉ cần 2 từ chuyên ngành, do thiếu một bảng chú giải thuật ngữ chung.
- Mất trí nhớ kiến trúc (Architectural Amnesia): Các quyết định thiết kế quan trọng và khó đảo ngược bị biến mất sau mỗi phiên hội thoại vì không được ghi chép vào Hồ sơ Quyết định Kiến trúc (ADRs).
Matt Pocock—nhà sáng lập Total TypeScript và là một trong những chuyên gia đào tạo kỹ thuật uy tín nhất hiện nay—đã ra mắt kho mã nguồn mattpocock/skills như một vũ khí đặc trị: một bộ kỹ năng tinh gọn, có thể tùy biến, độc lập với mô hình và sinh ra cho kỹ thuật phần mềm thực thụ.
“Bộ kỹ năng agent mà tôi sử dụng mỗi ngày để làm kỹ thuật thực chiến — không phải vibe coding. Phát triển ứng dụng thực tế rất phức tạp. Các phương pháp cố gắng ôm đồm toàn bộ quy trình sẽ tước đi quyền kiểm soát của bạn và khiến việc sửa lỗi trở nên bế tắc. Những kỹ năng này nhỏ gọn, dễ thích ứng và có thể lắp ghép linh hoạt.” — Matt Pocock
2. 🥊 Vấn Nạn Lệch Pha Ý Đồ & Sức Mạnh Của Phương Pháp “Grilling”
“Không ai biết chính xác mình thực sự muốn gì.” — David Thomas & Andrew Hunt, cuốn sách The Pragmatic Programmer
Điểm gãy phổ biến nhất trong phát triển phần mềm là sự đứt gãy trong giao tiếp. Lập trình viên thường có những mô hình tư duy chưa hoàn chỉnh, và AI agent khuếch đại sự mơ hồ đó bằng cách tự ý sinh mã nguồn sai hướng.
Matt Pocock giải quyết triệt để vấn đề này bằng Phiên phỏng vấn “Grilling”:
flowchart TD
User(["👤 Developer đưa ra ý tưởng sơ khai"]) --> Grill["🔥 /grill-me (Phỏng vấn Socratic liên tục)"]
subgraph InterviewTree ["Khám Phá Cây Thiết Kế (Từng Câu Hỏi Một)"]
Q1["❓ Tính năng này phục vụ cho đối tượng nào?"] --> Q2["❓ Các ca biên (edge cases) và lỗi có thể xảy ra là gì?"]
Q2 --> Q3["❓ Đánh đổi kiến trúc nào là chấp nhận được?"]
end
Grill --> InterviewTree
InterviewTree --> Conf{"Độ tự tin >= 95%?"}
Conf -->|Chưa đạt| Grill
Conf -->|Đã đạt| Plan["📋 Bản Kế Hoạch Triển Khai Rõ Ràng, Chặt Chẽ"]
2 Kỹ năng phỏng vấn cốt lõi:
/grill-me: Kỹ năng phỏng vấn Socratic đa mục đích. Agent từ chối viết code cho đến khi hỏi bạn cặn kẽ về các ca biên, ràng buộc và mục tiêu, với quy tắc vàng: chỉ hỏi duy nhất 1 câu hỏi trọng tâm tại một thời điểm./grill-with-docs: Phiên bản nâng cao chuyên sâu cho kỹ thuật phần mềm, vừa phỏng vấn làm rõ yêu cầu, vừa tự động cập nhật tài liệu dự án và sinh các bản ghi quyết định kiến trúc ADR.
3. 📑 Ngôn Ngữ Nghiệp Vụ Chung & Tự Động Hóa ADRs
“Với một ngôn ngữ nghiệp vụ chung (Ubiquitous Language), mọi cuộc hội thoại giữa các kỹ sư và cách biểu đạt trong mã nguồn đều bắt nguồn từ cùng một mô hình domain.” — Eric Evans, cuốn sách Domain-Driven Design
Khi AI agent bước vào một dự án, nó hoàn toàn xa lạ với các thuật ngữ nội bộ. Nó sẽ tiêu tốn hàng nghìn token để diễn giải vòng vo:
| Khi thiếu Ngôn ngữ chung (Lãng phí Token) | Khi có Ngôn ngữ chung (CONTEXT.md) |
|---|---|
| “Có vấn đề khi một bài học bên trong một phần của khóa học được tạo thành file thực tế trên ổ cứng…" | "Có vấn đề với chuỗi materialization cascade." |
| "Khi token xác thực hết hạn sau 60 phút và proxy không xin được token mới…" | "Lỗi timeout cấp phát token (token refresh lease timeout).” |
Thông qua /grill-with-docs, agent liên tục cập nhật file CONTEXT.md để đồng bộ từ điển thuật ngữ và tự động ghi chép các tài liệu ADR (Architecture Decision Record):
📑 Mẫu tài liệu ADR được tạo tự động (
docs/adr/0004-hang-doi-video.md):Tiêu đề:
ADR 0004: Hàng Đợi Bất Đồng Bộ Cho Tác Vụ Render Video
- Bối cảnh: Các tác vụ render video thường xuyên vượt quá thời gian timeout của API Gateway (30 giây) trong giờ cao điểm.
- Quyết định: Sử dụng BullMQ kết hợp Redis Streams thay vì gọi HTTP đồng bộ.
- Hệ quả:
- Yêu cầu duy trì một instance Redis trên môi trường Production.
- Tách rời độ trễ phản hồi của API khỏi thời gian xử lý video.
Ở các phiên làm việc sau, bất kỳ agent nào tiếp quản module này đều có thể đọc ADR và nắm bắt ngay lý do đằng sau kiến trúc mà không xóa nhầm hoặc đi ngược lại quyết định ban đầu.
4. 🚦 Cỗ Máy Trạng Thái Triage Lỗi Chuyên Nghiệp
Xử lý các báo cáo lỗi và yêu cầu tính năng bằng AI thường rất lộn xộn. Kỹ năng /triage của Matt Pocock kết nối trực tiếp với hệ thống quản lý công việc (GitHub Issues, Linear, Jira hoặc file Markdown) để điều phối ticket qua một máy trạng thái chặt chẽ:
stateDiagram-v2
[*] --> TriageRequested: Ticket Mới Được Tạo
TriageRequested --> Categorize: Gán Nhãn Domain & Mức Độ Nghiêm Trọng
Categorize --> VerifyRepro: Kiểm Tra Các Bước Tái Hiện Lỗi
VerifyRepro --> GrillDetails: Yêu Cầu Làm Rõ (/grill-me)
GrillDetails --> InPlanning: Khóa Tiêu Chí Nghiệm Thu (Acceptance Criteria)
InPlanning --> ReadyForCode: Duyệt Kế Hoạch & Bộ Test Trước Khi Code
Tính năng nổi bật của /triage:
- Độc lập với nền tảng: Cấu hình linh hoạt qua
/setup-matt-pocock-skillsđể gắn kết với nhãn GitHub, nhóm Linear hoặc thư mục.tickets/. - Quy chuẩn hóa nhãn: Tự động phân loại mức độ ưu tiên và phạm vi ảnh hưởng của lỗi.
- Kiểm tra tái hiện lỗi tự động: Đảm bảo lỗi có đầy đủ các bước tái hiện và test case kiểm chứng trước khi chuyển cho agent sửa mã nguồn.
5. 📦 Triết Lý Phân Phối: Kỹ Năng Tinh Gọn Thay Vì ‘Hộp Đen’
Một đóng góp quan trọng của mattpocock/skills là phản biện các bộ khung agent nguyên khối (như GSD hay Spec-Kit). Khi một framework cố gắng kiểm soát toàn bộ vòng đời phát triển, lập trình viên sẽ mất quyền kiểm soát và việc sửa lỗi trong prompt trở nên vô cùng khó khăn.
Matt Pocock áp dụng Triết lý Unix cho AI Skills:
| Tiêu Chí | Phương Pháp Nguyên Khối (Monolithic) | Triết Lý Của Matt Pocock (skills.sh) |
|---|---|---|
| Quy mô | Cồng kềnh, cố gắng bao quát mọi khâu | Tinh gọn, mỗi kỹ năng giải quyết đúng 1 việc |
| Khả năng chỉnh sửa | Khó can thiệp, nằm sâu trong package | File Markdown thuần ngay trong repo, tùy biến 100% |
| Tương thích mô hình | Thường gắn chặt với một số model cụ thể | Hoạt động tốt với mọi LLM (Claude, GPT, Gemini) |
| Kiểm soát quy trình | Bắt buộc tuân theo luồng cứng nhắc | Tùy chọn kích hoạt linh hoạt khi cần kỷ luật |
6. 🚀 Hướng Dẫn Cài Đặt & Sử Dụng Nhanh
Bước 1: Cài đặt bộ kỹ năng
Dành cho Claude Code (Plugin tự động cập nhật):
claude plugins install mattpocock-skills
Dành cho Codex, Cursor, Antigravity hoặc các agent khác:
npx skills@latest add mattpocock/skills
Bước 2: Khởi tạo cấu hình dự án
Chạy lệnh thiết lập tương tác ngay trong agent của bạn:
/setup-matt-pocock-skills
Agent sẽ hỏi bạn 3 câu hỏi nhanh:
- Hệ thống quản lý ticket bạn muốn dùng (GitHub, Linear hay file cục bộ).
- Bộ quy tắc gán nhãn khi triage lỗi.
- Thư mục bạn muốn lưu trữ tài liệu kiến trúc (ví dụ:
docs/adr/).
7. 💡 4 Bài Học Kinh Điển Cho Kỹ Sư Thời Đại AI
- Chậm Lại Để Đi Nhanh Hơn: Dành 5 phút phỏng vấn làm rõ yêu cầu (
/grill-me) sẽ giúp bạn tiết kiệm 3 tiếng debug mã nguồn bị lệch pha. - Ghi Lại Lý Do Đằng Sau Quyết Định (ADRs): Mã nguồn thể hiện hệ thống đang chạy như thế nào, còn ADR giải thích tại sao nó được thiết kế như vậy. Agent rất cần cái “tại sao” để không phá vỡ kiến trúc.
- Xây Dựng Ngôn Ngữ Nghiệp Vụ Chung: Một trang thuật ngữ ngắn gọn (
CONTEXT.md) giúp tiết kiệm hàng nghìn token mỗi phiên làm việc và xóa bỏ hoàn toàn sự hiểu nhầm. - Ưu Tiên Công Cụ Lắp Ghép Thay Vì Hộp Đen: Tránh các framework nguyên khối gò bó. Hãy chọn những kỹ năng module hóa bằng Markdown mà bạn có thể trực tiếp đọc, sửa và quản lý phiên bản trong Git.