Spec, plan, then build: Harper Reed's LLM coding workflow
Harper Reed, personal blog
Developer Harper Reed builds new software by splitting the job between three kinds of AI: ChatGPT interviews him to write a spec, a reasoning model turns the spec into a queue of small coding prompts, and claude.ai or aider writes and tests the code one prompt at a time.

Story written by: the person who did it
The problem
Starting a software project inside one long AI chat often turns muddled: the chat loses track of decisions and dumps big jumps of code that are hard to check. Harper Reed wanted a repeatable way to get from a rough idea to working, tested code while staying in control of what the AI builds.
How it was built
- 1Hone the idea into a specChatGPT
- 2Compile the specChatGPT
- 3Turn the spec into a plan of promptsReasoning LLM
- 4Make a checklistReasoning LLM
- 5Set up the project himselfPerson
- 6Run the plan one prompt at a timeClaude or aider
- 7Debug with the whole codebaserepomix
Tool step Person step
1. Hone the idea into a spec
He asks ChatGPT 4o or o3 to interview him one question at a time about the idea, digging into every detail until the questions run out.
ToolChatGPT
Check: He answers every question himself, so the spec reflects what he actually wants built.
2. Compile the spec
He asks ChatGPT to compile the answers into a developer-ready specification covering requirements, data handling, error handling and a testing plan, and saves it as spec.md.
ToolChatGPT
3. Turn the spec into a plan of prompts
He pastes the spec into a reasoning model (o1, o3 or r1), which breaks the build into small steps and writes one code-generation prompt per step, saved as prompt_plan.md.
ToolReasoning LLM
4. Make a checklist
He asks the reasoning model for a todo.md checklist of the plan, so progress can be ticked off and survives across sessions.
ToolReasoning LLM
5. Set up the project himself
He creates the project skeleton and tooling by hand in his chosen language first, because Claude tends to output React code if the foundation is not set.
Check: He is in charge of the boilerplate code and makes sure the tooling is set up correctly before any AI-written code goes in.
6. Run the plan one prompt at a time
He pastes each prompt from prompt_plan.md into claude.ai and copies the code into his editor, or pastes it into aider, then runs the code and its tests before taking the next prompt.
ToolClaude or aider
Check: He runs the code and the tests after every prompt and only moves on when they pass.
7. Debug with the whole codebase
When something breaks, he packs the codebase into one file with repomix and passes it to Claude to debug, then repeats the loop until the step works.
Toolrepomix
Check: He re-runs the code and tests after each fix to confirm the step now works.
What made it work
- Plan first: he says the planning step keeps the work under control and leaves a document he can check the build against.
- Small steps: the plan is broken into pieces small enough to build and test safely, with no big jumps in complexity.
- Tests at every step: he runs the code and its tests after each prompt, which keeps the work good and tight.
- He sets the foundation himself: writing the boilerplate first keeps the project in his language and style and stops Claude defaulting to React.
- A checklist that survives sessions: the coding tool can tick off todo.md, so state is kept between sessions.
Follow along
Practice steps suggested by Ai Siftly, based on the account above. We have not run them ourselves.
Describe the result before asking for code
Work in a new scratch folder, away from your real work. Have ready: three empty files named b.txt, a.txt and c.txt. Paste the example prompt into your AI chat, answer its questions, then ask it to combine your answers into one requirements document. Save that document as spec.md (a plain-text file).
Example to copy: Ask me one question at a time about a filename-listing tool. Never rename/delete/upload files. Produce requirements, errors and tests before code.
You should get: Save the accepted specification as spec.md.
Check: Spec defines output a.txt,b.txt,c.txt and missing-folder behaviour.
Turn the requirements into a checklist
Paste your spec.md into the same chat in place of [spec]. Ask for one small change at a time, each with a test and an expected result. Save the plan as prompt_plan.md and a checkbox copy as todo.md.
Example to copy: Break this spec into small changes. For each: files, goal, test and expected result. Do not add features. [spec]
You should get: A plan and checklist.
Check: No step requires a large unexplained change.
Check that you can run the project
In the scratch folder, set up the smallest program and test you can run in a language you already know, and write down the exact commands that work. If you cannot run a program or a test yet, stop here and do a beginner lesson for that language first.
You should get: A runnable scratch project.
Check: The empty build/test command completes.
Build and test one change
Give the chat only the next checklist item, the requirements and the relevant sample code. Read the proposed changes before putting them in your editor, then run your saved test command. Keep a copy of the last working version so you can undo a bad change.
Example to copy: Implement only step [number]. Explain changes and give tests. Preserve the no-write rule. [spec and files]
You should get: One small tested change.
Check: Expected sample order is correct and no file was modified.
Check the whole program
Work through the list one item at a time, ticking an item only after its test passes. Ask for a README (a short text file explaining how to run the program), then follow it in a new terminal and test both the three-file folder and a folder that does not exist.
You should get: Code, tests, spec.md, prompt_plan.md, todo.md and README.
Check: Test missing-folder handling. Passing tests are not a security review.
Try it yourself
Find a matching workflow in the workflow finder. Search words: L L M s p e c p l a n c o d e w o r k f l o w.
Sources and notes
- My LLM codegen workflow atm (Harper Reed's Blog, 2025-02-16)
- Every result in this story is self-reported by Harper Reed on his personal blog; nobody else measured them, and there are no before/after figures.
- The model names (ChatGPT 4o/o3, o1, o3, r1) and tool behaviour come from his February 2025 post; current versions may differ.
- The follow-along is Ai Siftly's suggested practice based on his story, not his exact process. His full prompts are in the source post.
- He notes this way of working is solo: the tools are single-player and hard to use as a team.
Independent first-person writeup. No external checking. Full prompts are in the source; quote sparingly and link, reuse licence not checked. Historical tool behaviour and commands are as documented at the source date; current versions may differ. Record dated 2026-10-27.