"Prompt engineering" is mostly iterating, not writing the perfect prompt the first time.
Start with a vague prompt. Read what came back. Identify the specific thing that's wrong with it. Adjust the prompt to address that one thing. Re-run.
# v1 — vague
p = "Suggest a name for a productivity app"
# Output: "FocusFlow" ← single name, but no rationale, no alternatives
# v2 — request structure
p = "Suggest 3 names for a productivity app, one per line"
# Output: 3 names ← better, but no rationale
# v3 — request rationale
p = "Suggest 3 names for a productivity app. For each, give a one-sentence rationale. Format: 'Name: rationale'"
# Output: 3 named pairs with reasoningThree iterations. Each one fixes a specific gap.
When do I stop iterating?
When the output is good enough for the use case. Diminishing returns are real — past three or four iterations, you're often making it worse, not better.
Key discipline: change ONE thing per iteration. Otherwise you can't tell which change helped.
| Gap | Fix |
|---|---|
| Output too long | "in N sentences" / "in under N words" |
| Output too short | "give 3 examples" / "include rationale" |
| Wrong format | "as a JSON object with keys X, Y" |
| Wrong tone | "formal" / "casual" / "as if to a child" |
| Missing rationale | "for each, give a one-sentence reason" |
| Hallucinated facts | "only use information from the text I provided" |
Create a free account to get started. Paid plans unlock all tracks.
"Prompt engineering" is mostly iterating, not writing the perfect prompt the first time.
Start with a vague prompt. Read what came back. Identify the specific thing that's wrong with it. Adjust the prompt to address that one thing. Re-run.
# v1 — vague
p = "Suggest a name for a productivity app"
# Output: "FocusFlow" ← single name, but no rationale, no alternatives
# v2 — request structure
p = "Suggest 3 names for a productivity app, one per line"
# Output: 3 names ← better, but no rationale
# v3 — request rationale
p = "Suggest 3 names for a productivity app. For each, give a one-sentence rationale. Format: 'Name: rationale'"
# Output: 3 named pairs with reasoningThree iterations. Each one fixes a specific gap.
When do I stop iterating?
When the output is good enough for the use case. Diminishing returns are real — past three or four iterations, you're often making it worse, not better.
Key discipline: change ONE thing per iteration. Otherwise you can't tell which change helped.
| Gap | Fix |
|---|---|
| Output too long | "in N sentences" / "in under N words" |
| Output too short | "give 3 examples" / "include rationale" |
| Wrong format | "as a JSON object with keys X, Y" |
| Wrong tone | "formal" / "casual" / "as if to a child" |
| Missing rationale | "for each, give a one-sentence reason" |
| Hallucinated facts | "only use information from the text I provided" |