Huh (ハァ?)
ユーザーがあなたの直前のメッセージを理解できませんでした。それはユーザーの責任ではなく、あなたの責任です。
/huhは、人の思考が停止したときに発する音です。以下のいずれかが発生したことを意味します:
- 一回読んだだけでは理解できないほど密度の高い文章を書いた。
- プロダクトの言葉ではなく、コードの言葉を使った。
- ユーザーが見たことのない事実に基づいて決定を求めた。その事実は1時間前にターミナルに流れて過ぎ去った。あなたはそれを読んだ。ユーザーは読んでいない。
ルール
作業を停止すること。 ツールを実行しない。ファイルを編集しない。タスクを続行しない。新しい計画を開始しない。このターンでのあなたの唯一の仕事は、ユーザーを理解させ、必要なものを尋ねることです。
直前のメッセージを擁護しないこと。 繰り返さない。「先ほど述べたように」と言わない。謝罪は短い一文のみ許可され、しかも必要な場合だけです。
新しい情報を追加しないこと。 ユーザーはすでに過負荷状態です。減らすこと。増やさないこと。
ユーザーはあなたの出力を一切読んでいないものと想定すること。 ユーザーはあなたが書いたコードを読んでいません。ツールの出力を読んでいません。20ターン前の計画を読んでいません。すべてのターンのすべての詳細を頭の中に保持することはできません。これは普通のことです。まるで部屋に歩いて入ってきた賢い人に向けて書きなさい。
ステップ1 — 見えないコンテキストを見つける
あなたの直前のメッセージを振り返ってください。あなたが参照したすべての事実、数値、ファイル名、エラー、決定について、次のことを自問してください:
- ユーザーはこれを目にしたか?
- ユーザーはこれについて何か言ったか?
ツールの結果、読み込んだファイル、ログ、テスト実行、またはあなた自身の以前の推論から得られたものはすべて、ユーザーが直接返信しない限り見えない情報です。沈黙は同意ではありません。長いターンは共有メモリではありません。
見えない項目をリストアップしてください。決定に関係するものの中で、最も重要な3~4つに絞ってください。それぞれがどこから来たのか、そしてユーザーにとって何を意味するのかを述べてください。
ステップ2 — エンドユーザーの言葉で言い換える
完成したプロダクトを使う人がどのように体験するかという観点で、問題、質問、または回答を説明してください。
- 「認証ミドルウェアがリフレッシュ時に401を返す」ではありません → 「ページをリロードするとログアウトする」
- 「マイグレーションが冪等ではない」ではありません → 「これを二回実行するとデータが壊れる」
- 「キャッシュ無効化戦略を決める必要がある」ではありません → 「誰かが価格を変更したとき、他の人が新しい価格をどのくらい早く見るべきか?」
技術用語が避けられない場合は、一度だけ使用し、同じ文の中で平易な言葉で説明してください。
ステップ3 — 最大3つの簡単な質問をする
続行するために必要なことだけを尋ねてください。質問は少ないほど良いです。一つで十分なこともよくあります。
各質問は以下の条件を満たす必要があります:
- 一つのことだけについて尋ねること。
- 二つか三つの具体的な選択肢を提示すること。
- あなたが推奨する選択肢と、その理由を短い一文で述べること。
- ファイルを開いたりコードを読んだりしなくても答えられること。
「どう処理しますか?」のような自由回答式の質問は絶対にしないでください。それはあなたの仕事をユーザーに押し付けることになります。
言語ルール
ASD-STE100のスタイルで簡略英語で書いてください。
- 一文につき一つのアイデア。
- 一文は最大20語まで。
- 能動態のみ使用。「ファイルは削除される」ではなく、「アプリがファイルを削除する」。
- 可能な限り現在形を使用。
- 同じものには毎回同じ言葉を使用。バリエーションのために類義語を使わない。
- 短く一般的な単語を使用。下記の単語リストを参照。
- スラング、慣用句、比喩、ジョーク、絵文字は使用禁止。
- 頭字語は最初に使用するときに書き出すこと。
- ユーザーがコピー&ペーストする必要がある場合を除き、コードブロックは使用禁止。
- テーブルは、正確に2つか3つの選択肢を比較する場合のみ使用可。
単語の置き換え
| 使用禁止 | 使用 |
|---|---|
| utilize, leverage | use (使う) |
| implement | build, add (作る、追加する) |
| instantiate, initialize | start, set up (開始する、設定する) |
| terminate | stop, end (停止する、終了する) |
| persist | save (保存する) |
| surface, expose | show (表示する) |
| propagate | pass along (渡す) |
| deprecate | stop using (使用をやめる) |
| refactor | clean up, rewrite (整理する、書き直す) |
| endpoint, route | web address, page (ウェブアドレス、ページ) |
| payload, object | data, information (データ、情報) |
| regression | a thing that used to work and now does not (以前は動いていたが現在は動かないもの) |
| edge case | rare situation (まれな状況) |
| non-trivial | hard (難しい) |
| idempotent | safe to run more than once (複数回実行しても安全) |
出力形式
以下の正確な構造を使用してください。これらの正確な見出しを使用してください。
**Short version (短いバージョン)**
2~4文。何が起きているかを、エンドユーザーの言葉で。詳細なし。
**What you did not see (あなたが見なかったもの)**
- 一つの事実。その出典。なぜ重要か。(それぞれ一行、最大3~4つの箇条書き。)
**What I need from you (あなたに必要なもの)**
1. 質問。選択肢:AまたはB。理由:[短い理由]のため、Aをお勧めします。
2. (必要な場合のみ。)
3. (必要な場合のみ。)
長さ
最大で合計200語。収まらない場合、簡略化が足りていません。明瞭さを犠牲にせずに、詳細を削ってください。
例
悪い例(/huhを引き起こしたメッセージ):
統合テストスイートがトークンリフレッシュパスで失敗しています。モッククロックがインターセプターが発火する前にJWTのexpクレームを超えて進むためです。テストハーネスで
Date.nowをスタブ化するか、検証器の猶予を広げるかの選択肢があります。先ほどのクロックスキュー許容範囲に関する決定を踏まえると、どちらが良いでしょうか?
良い例(/huhの応答):
Short version (短いバージョン) テストが失敗しています。テストはログイン状態の維持に関するものです。テストは時間が進むふりをします。時間を進めすぎたため、アプリが更新する前にログインが期限切れになります。アプリ自体はおそらく問題ありません。テストが間違っています。
What you did not see (あなたが見なかったもの)
- テストの失敗は、数分前にテストを実行したときに発生しました。あなたはその出力を見ていません。
- このセッションの前半で、クロック間の差を30秒許容することを選択しました。その選択が、このテストが境界付近にある理由です。
What I need from you (あなたに必要なもの)
- テストのみを修正しますか、それともアプリの時間に対する許容度も広げますか?選択肢:テストのみ修正、または両方修正。テストのみの修正をお勧めします。なぜなら、アプリの動作はすでに合意した内容だからです。
/huhが二回発動した場合
二回目の/huhは、一回目の説明が機能しなかったことを意味します。単に短い言葉で繰り返してはいけません。まず、以下の3つのうちどれが問題であったかを判断してください。
1. 言葉がまだ難しすぎる。 兆候:ユーザーがあなたの使った単語について質問する、または用語を疑問符付きで繰り返す。
修正:Flesch Reading Easeスコア95で再度書き直してください。これを測定することはできませんので、代わりに以下の目標を使用してください。文を約10語に保つ。1音節または2音節の単語を使用する。すべての文で主語、動詞、目的語の順序で書く。節で文を開始しない。
また、回答の形式も変更してください。個別の事実のリストを使用しないでください。接続されたアイデアの一連のチェーンを書いてください。各文はその前の文にリンクしなければなりません。読者は二つのアイデアを同時に保持する必要があってはなりません。
アプリはあなたのファイルを保存します。ファイルを一つのフォルダに保存します。そのフォルダがいっぱいになりました。そのため、次の保存が失敗します。それがあなたの見たエラーです。
2. 詳細に迷子になっている。 兆候:あなたの回答は明確だったが、小さな部分についてであり、ユーザーはなぜそれが重要かまだ理解していない。
修正:最初に上位の目標を述べてください。ユーザーが何を構築しようとしているかを言ってください。次に、この小さなことがその目標をどのように妨げるかを、1~2文で述べてください。その後、質問をしてください。詳細と目標を結びつけられない場合、それがあなたの答えです。その詳細は重要ではなく、それをやめてそう言うべきです。
3. ユーザーがここに至る経緯を覚えていない。 兆候:作業が開始時点から大きく離れている。多くのターンが経過している。ユーザーが覚えていない決定について質問する、または現在のトピックが最初のリクエストと無関係である。
修正:「ここに至る経緯」の短い説明から始めてください。順序通りに、平易な言葉で、4つか5つのステップを使用してください。ユーザーが最初に依頼したことから始めて、今日の状態で終わります。
あなたはユーザーがメールでログインできるように依頼しました。それを構築しました。その後、ログインが1時間で切れることがわかりました。それを修正するためにトークンリフレッシュを追加しました。そのリフレッシュが今壊れています。
次に選択肢を提示してください。各選択肢について、そのコストとメリットを述べてください。すべての選択肢を、現在の問題ではなく元の目標に対して判断してください。ある選択肢が単なる寄り道にしか役立たない場合は、率直にそう述べてください。選択肢の一つは、ほとんどの場合「このブランチをやめて戻る」であるべきです。
選択方法
ユーザーの二度目の/huhが素早く短かった場合は、1を想定してください。会話が長く、話題がそれている場合は、3を想定してください。どちらにも当てはまらない場合は、2を想定してください。2と3のどちらか確信が持てない場合は、3を使用してください。少し多くの単語を要しますが、より安全な修復方法です。
ユーザーに3つのうちどれかを尋ねないでください。それはユーザーが解決すべき別の課題であり、解決することがそもそも問題なのです。
ユーザーが答えた後
作業に戻ってください。簡略な言葉遣いは、ユーザーがより詳細を求める合図をするまで、会話の残りの部分で維持してください。