Làm việc với Claude Fable 5 liên tục dạy tôi một bài học cũ: bản đồ không phải là lãnh thổ.
Bản đồ, một sự thể hiện của công việc cần làm, là các prompt, kỹ năng và ngữ cảnh của tôi, đó là những gì tôi cung cấp cho Claude. Lãnh thổ là nơi công việc cần diễn ra, codebase, thế giới thực, những ràng buộc thực tế của nó.

Sự khác biệt giữa bản đồ và lãnh thổ là thứ tôi gọi là ẩn số (unknowns). Khi Claude gặp phải một ẩn số, nó cần đưa ra quyết định dựa trên phỏng đoán tốt nhất về điều tôi muốn. Càng nhiều công việc được thực hiện, Claude càng có thể gặp nhiều ẩn số.
Fable là mô hình đầu tiên mà tôi thấy chất lượng công việc bị giới hạn bởi khả năng làm rõ các ẩn số của nó của tôi.
Quan trọng là, chỉ lên kế hoạch trước thôi chưa đủ. Bạn có thể tìm thấy các ẩn số sâu trong quá trình triển khai, hoặc các ẩn số của bạn có thể chỉ ra rằng thực ra bạn nên giải quyết vấn đề theo một cách hoàn toàn khác.
Tôi nhận thấy rằng làm việc với Fable là một quá trình lặp đi lặp lại để khám phá các ẩn số của mình trước, trong và sau khi triển khai.
Tôi đã tạo một số artifact mẫu để tìm ẩn số tại đây, nhưng hãy nhớ quay lại để xây dựng trực giác về thời điểm sử dụng chúng.
Biết các ẩn số của bạn
Các ẩn số của bạn là gì? Khi đến với Claude với một vấn đề, tôi thường chia nó ra theo 4 cách:
- Biết là biết (Known Knowns): Về cơ bản, đây là những gì có trong prompt của tôi. Tôi nói với agent rằng tôi muốn gì?
- Biết là không biết (Known Unknowns): Điều gì tôi chưa tìm ra, nhưng tôi nhận thức được là mình chưa tìm ra?
- Không biết là biết (Unknown Knowns): Điều gì hiển nhiên đến mức tôi không bao giờ viết ra, nhưng sẽ nhận ra nếu tôi nhìn thấy nó?
- Không biết là không biết (Unknown Unknowns): Điều gì tôi hoàn toàn chưa xem xét? Kiến thức nào tôi không biết đến? Tôi có biết một thứ có thể tốt đến mức nào không?

Những người viết code bằng agent giỏi nhất là những người có tương đối ít ẩn số. Xem những người như Boris hoặc Jarred prompt, tôi thấy rõ ràng là họ biết chính xác họ muốn gì. Họ ăn ý sâu sắc với cả codebase và hành vi của mô hình.
Nhưng họ cũng giả định có ẩn số. Theo nhiều cách, việc giảm thiểu và lập kế hoạch cho các ẩn số của bạn chính là kỹ năng của việc viết code bằng agent. Nhưng may mắn thay, đây là kỹ năng bạn có thể cải thiện bằng cách làm việc với Claude.
Giúp Claude giúp bạn

Hướng dẫn Claude là một sự cân bằng tinh tế. Nếu bạn quá cụ thể, Claude sẽ làm theo hướng dẫn của bạn ngay cả khi việc chuyển hướng có thể phù hợp hơn. Nếu bạn quá mơ hồ, Claude thường sẽ đưa ra các lựa chọn và giả định dựa trên các phương pháp hay nhất của ngành, những điều có thể không phù hợp với nhiệm vụ của bạn.
Khi bạn không tính đến các ẩn số của mình, bạn sẽ thất bại theo cả hai cách. Bạn không biết khi nào con đường sẽ đầy chướng ngại vật và bạn không biết khi nào con đường sẽ thông thoáng, nhưng bạn vẫn muốn Claude điều chỉnh.
Claude có thể giúp bạn khám phá các ẩn số của mình nhanh hơn. Nó có thể tìm kiếm trong codebase và internet cực kỳ nhanh chóng và nó biết nhiều hơn bạn về chủ đề trung bình. Nó cũng có thể lặp lại từ thất bại nhanh hơn.
Phần quan trọng nhất của quá trình này là cung cấp cho Claude ngữ cảnh về điểm xuất phát của bạn. Ví dụ: hãy cho nó biết bạn đang ở đâu trong quá trình suy nghĩ của mình; tiết lộ kinh nghiệm của bạn với vấn đề và codebase; và để nó làm việc với bạn như một người cộng sự suy nghĩ.
Tôi đã từng viết về việc sử dụng HTML với Claude, trong hầu hết các trường hợp này, một artifact HTML là cách tốt nhất để trực quan hóa và thể hiện nó.
Trong bài viết này, tôi trình bày chi tiết một số mẫu (patterns) tôi sử dụng để khám phá những ẩn số này. Tôi không sử dụng mọi kỹ thuật mỗi lần, nhưng đây là một bộ sưu tập hữu ích các kỹ thuật để có sẵn.

Trước khi triển khai (Pre-implementation)
Khảo sát điểm mù (Blind Spot Pass)
Khi bắt đầu công việc, một trong những điều hữu ích nhất bạn có thể làm là hiểu các điểm mù của mình. Ví dụ: nếu bạn đang viết một tính năng trong một phần mới của codebase hoặc sử dụng Claude để giúp bạn thực hiện công việc không quen thuộc như lặp lại thiết kế, bạn có khả năng sẽ có rất nhiều ẩn số không biết là không biết (unknown unknowns) .
Bạn có thể không biết những câu hỏi cần đặt ra, một kết quả tốt trông như thế nào, công việc lịch sử nào đã được thực hiện hoặc những cạm bẫy nào cần tránh.
Để làm điều này, bạn có thể yêu cầu Claude giúp bạn tìm ra những ẩn số không biết là không biết và giải thích chúng cho bạn. Tôi thích sử dụng các từ "blindspot pass" và "unknown unknowns" theo nghĩa đen. Cung cấp cho nó ngữ cảnh về bạn là ai và bạn biết gì thường rất quan trọng.
Ví dụ Prompt:
- "Tôi đang làm việc để thêm một nhà cung cấp xác thực mới nhưng tôi không biết gì về các module xác thực trong codebase này. Bạn có thể thực hiện khảo sát điểm mù (blindspot pass) để giúp tôi tìm ra các ẩn số không biết là không biết có liên quan và giúp tôi prompt bạn tốt hơn không."
- "Tôi không biết color grading là gì nhưng tôi cần phân loại màu cho video này. Bạn có thể dạy tôi hiểu các ẩn số không biết là không biết của tôi về color grading, để tôi có thể prompt tốt hơn không?"
Động não và tạo mẫu thử (Brainstorms and prototypes)
Khi tôi làm việc trong một lĩnh vực có nhiều ẩn số không biết là biết (unknown knowns), liên quan đến các tiêu chí tôi chỉ biết định nghĩa khi tôi nhìn thấy chúng, tôi thích yêu cầu Claude động não và tạo mẫu thử cùng tôi.
Việc xác định và diễn đạt bằng lời các ẩn số không biết là biết sớm trong quá trình tạo mẫu thử là cực kỳ giá trị, bởi vì việc phát hiện ra chúng trong quá trình triển khai có thể (tương đối) tốn kém. Những thay đổi nhỏ trong một tính năng hoặc thông số kỹ thuật có thể gây ra các triển khai mã hoàn toàn khác nhau và agent của bạn có thể khó khăn hơn để hoàn tác các thay đổi trước đó.
Ví dụ: bạn có thể chỉ muốn xem một nút được thêm vào một frame trông như thế nào mà không cần phải kết nối một route backend hoặc duy trì trạng thái bổ sung ở frontend.
Thiết kế trực quan là thứ mà đối với tôi rất khó diễn tả, nhưng tôi biết mình muốn gì khi nhìn thấy nó. Trong những trường hợp này, tôi sẽ yêu cầu một vài cách tiếp cận thiết kế cho một artifact.
Tôi cũng bắt đầu hầu hết mọi phiên coding bằng một giai đoạn khám phá hoặc động não. Điều này giúp tôi bắt đầu với ý định xác định phạm vi của dự án. Claude thường tìm ra các cách tiếp cận giá trị cao mà tôi có thể đã bỏ lỡ và đôi khi không thấy được bức tranh tổng thể. Động não giúp tôi tránh đặt ra một phạm vi quá hẹp hoặc quá rộng.
Ví dụ Prompt:
- "Tôi muốn một dashboard cho dữ liệu này nhưng tôi không có gu thẩm mỹ và không biết điều gì là khả thi. Hãy tạo cho tôi một trang HTML với 4 hướng thiết kế hoàn toàn khác nhau để tôi có thể phản hồi."
- "Trước khi kết nối bất cứ thứ gì, hãy tạo một tệp HTML duy nhất mô phỏng thanh công cụ editor mới với dữ liệu giả. Tôi muốn phản hồi về bố cục trước khi bạn chạm vào ứng dụng thực."
- "Đây là vấn đề sơ bộ của tôi: người dùng rời bỏ sau khi onboarding. Hãy tìm kiếm codebase và động não 10 điểm chúng ta có thể can thiệp, từ rẻ nhất đến tham vọng nhất. Tôi sẽ cho bạn biết cái nào phù hợp."
Phỏng vấn (Interviews)
Sau khi tôi đã động não đủ, tôi vẫn có thể có những ẩn số.
Trong trường hợp này, tôi yêu cầu Claude phỏng vấn tôi về bất kỳ ẩn số hoặc điểm mơ hồ nào. Khi yêu cầu Claude phỏng vấn bạn, hãy cố gắng cung cấp cho nó ngữ cảnh về vấn đề của bạn để định hướng các câu hỏi của nó. Dưới đây là một số ví dụ.
Ví dụ Prompt:
- "Hãy phỏng vấn tôi từng câu một về bất cứ điều gì mơ hồ, ưu tiên những câu hỏi mà câu trả lời của tôi sẽ thay đổi kiến trúc."
Tham khảo (References)
Đôi khi bạn không thể mô tả chi tiết những gì bạn muốn. Ví dụ, bạn có thể không có ngôn ngữ diễn đạt hoặc nó quá phức tạp đến nỗi bạn sẽ mất khá nhiều thời gian.
Trong trường hợp này, giải pháp tốt nhất là một tham chiếu. Mặc dù bạn có thể bao gồm sơ đồ, tài liệu hoặc hình ảnh, nhưng tham chiếu tốt nhất tuyệt đối là mã nguồn.
Nếu bạn có một thư viện triển khai một thứ gì đó theo một cách nhất định hoặc một thành phần thiết kế bạn thực sự thích, chỉ cần trỏ Fable vào thư mục và bảo nó tìm gì, ngay cả khi nó ở một ngôn ngữ khác.
Đây cũng là cách Claude Design hoạt động. Bạn không cần phải đưa cho nó một tệp (mặc dù bạn cũng có thể làm điều đó). Bạn có thể trỏ nó vào một module trên một trang web bạn thích, và nó đọc mã nguồn bên dưới, không chỉ là ảnh chụp màn hình. Điều này cung cấp nhiều chi tiết phong phú hơn về markup, cấu trúc và cách thành phần thực sự được xây dựng.
Ví dụ Prompt:
- "Thư viện Rust này trong vendor/rate-limiter triển khai chính xác hành vi backoff mà tôi muốn. Hãy đọc nó và triển khai lại cùng một ngữ nghĩa trong client TypeScript API của chúng ta."
Kế hoạch triển khai (Implementation Plans)
Khi tôi nghĩ mình đã sẵn sàng để triển khai, tôi thường yêu cầu Claude tổng hợp một kế hoạch triển khai để tôi xem xét, tập trung vào những phần có khả năng thay đổi nhiều nhất, ví dụ: xem xét các mô hình dữ liệu, giao diện kiểu (type interfaces) hoặc luồng UX. Điều này cho phép Claude phơi bày những thứ tôi thực sự có thể cần thay đổi.
Ví dụ Prompt:
- "Viết một kế hoạch triển khai bằng HTML, nhưng hãy bắt đầu bằng những quyết định tôi có khả năng điều chỉnh nhất: thay đổi mô hình dữ liệu, giao diện kiểu mới và bất cứ thứ gì hướng tới người dùng. Hãy chôn các phần tái cấu trúc máy móc ở cuối, tôi tin tưởng bạn ở phần đó."
Trong quá trình triển khai (During implementation)
Ghi chú triển khai (Implementation notes)
Khi tôi đã hài lòng với kế hoạch của mình, tôi tạo một phiên làm việc mới và chuyển bất kỳ artifact nào vào prompt. Ví dụ: tôi có thể chuyển một tệp spec và một prototype và yêu cầu một agent triển khai nó.
Nhưng sự thật là cho dù bạn có lên kế hoạch bao nhiêu đi chăng nữa, thì vẫn luôn có những ẩn số không biết là không biết ẩn nấp. Agent có thể phát hiện trong quá trình làm việc rằng nó cần một hướng tiếp cận khác do một trường hợp ngoại lệ (edge case) mà nó tìm thấy trong code.
Tôi yêu cầu Claude Code giữ một tệp tạm thời 'implementation-notes.md' (hoặc .html) nơi nó theo dõi các quyết định mình đưa ra để chúng ta có thể học hỏi từ lần thử tiếp theo.
Ví dụ Prompt:
- "Giữ một tệp implementation-notes.md. Nếu bạn gặp một trường hợp ngoại lệ buộc bạn phải đi chệch khỏi kế hoạch, hãy chọn phương án thận trọng, ghi lại nó trong mục 'Điều chỉnh (Deviations)', và tiếp tục."
Sau khi triển khai (Post implementation)
Bài thuyết trình và giải thích (Pitches and explainers)

Một trong những phần quan trọng nhất của việc ship một thứ gì đó là nhận được sự đồng thuận và phê duyệt. Xây dựng các artifact thuyết trình và giải thích trong tài liệu cuối cùng giúp:
- Tăng tốc độ hiểu khi người đánh giá bắt đầu với cùng những ẩn số như bạn
- Tăng tốc độ phê duyệt khi các chuyên gia muốn thấy bạn đã tính đến các ẩn số và điểm thất bại phổ biến mà họ có thể đã dự đoán
Ví dụ Prompt:
- "Đóng gói prototype, spec và các ghi chú triển khai vào một tài liệu duy nhất mà tôi có thể thả vào Slack để nhận được sự đồng thuận. Hãy bắt đầu bằng GIF demo."
Câu đố (Quizzes)
Sau một phiên làm việc dài, Claude có thể đã hoàn thành nhiều hơn tôi nhận ra. Đọc các diff code chỉ có thể cho tôi một hiểu biết nhẹ về những gì đã xảy ra, vì phần lớn hành vi sẽ phụ thuộc vào các đường dẫn code hiện có.
Yêu cầu Claude kiểm tra tôi về sự thay đổi sau khi cung cấp cho tôi một loạt ngữ cảnh giúp tôi hiểu chuyện gì đã xảy ra. Tôi chỉ merge sau khi tôi vượt qua bài kiểm tra một cách hoàn hảo.
Ví dụ Prompt:
- "Tôi muốn chắc chắn rằng tôi hiểu mọi thứ đã xảy ra trong sự thay đổi này. Hãy cung cấp cho tôi một báo cáo HTML về các thay đổi để tôi đọc và hiểu với ngữ cảnh, trực giác, những gì đã được thực hiện, v.v. và một bài kiểm tra ở cuối về các thay đổi mà tôi phải vượt qua."
Mọi thứ kết hợp như thế nào: ra mắt Fable
Video ra mắt cho Fable đã được chỉnh sửa hoàn toàn bởi Claude Code. Đây là một lĩnh vực mới đối với tôi và tôi chắc chắn không phải là một chuyên gia.
Vì vậy, tôi bắt đầu với những gì tôi biết. Tôi biết rằng Claude có thể sử dụng code để chỉnh sửa video và phiên âm chúng, nhưng tôi không chắc liệu nó có đủ chính xác hay không. Sau đó, tôi yêu cầu Claude giải thích cho tôi cách phiên âm như Whisper hoạt động, và liệu tôi có thể cắt chính xác những thứ như "ừm" hoặc khoảng dừng lớn bằng ffmpeg hay không.
Tôi muốn Claude tạo một UI đồng bộ với những từ tôi đang nói, nhưng không chắc liệu nó có làm được không, vì vậy tôi đã yêu cầu Claude tạo một video prototype sử dụng Remotion và bản phiên âm để xem nó có hoạt động không.
Cuối cùng, bản thân video trông hơi trầm, mà tôi biết là kết quả của color grading nhưng tôi không thực sự biết color grading là gì. Nỗ lực đầu tiên của tôi là cố gắng để Claude thực hiện một vài biến thể để chọn, nhưng tôi nhận ra rằng tôi không biết "tốt" trông như thế nào khi nói đến color grading. Vì vậy, thay vào đó, tôi yêu cầu Claude dạy tôi về color grading để khám phá những ẩn số của mình.
Bạn có thể xem một lời giải thích chi tiết hơn về điều đó tại đây.
Kết hợp Bản đồ và Lãnh thổ (Matching the Map and Territory)
Các mô hình càng tốt, bạn càng có thể đạt được nhiều hơn với cách tiếp cận phù hợp. Khi một tác vụ dài hạn quay trở lại sai, có khả năng bạn cần dành nhiều thời gian hơn để xác định các ẩn số của mình hoặc tạo một kế hoạch triển khai cho phép Claude ứng biến vượt qua chúng.
Mỗi bài giải thích, động não, phỏng vấn, prototype và tham khảo là một cách rẻ tiền để tìm ra những gì bạn chưa biết trước khi nó trở nên đắt đỏ để sửa chữa.
Vì vậy, hãy bắt đầu dự án tiếp theo của bạn bằng cách yêu cầu Claude giúp bạn tìm ra các ẩn số của mình.





