1 Start from a real, painful problem
Goal: Know who has the problem, how they solve it today, and the hard limits any solution has to live with.
What to do
- Write down one real person who has the problem and watch how they handle it today.
- Count the cost of today's way: hours, steps, money, frustration.
- List the hard limits: file sizes, formats, what the tools can and can't do.
- Write the problem in two sentences. If you can't, it isn't clear yet.
Checklist
- One real person with this problem
- Today's workaround, measured
- The hard limits, written down
Common mistakes
- Starting from a technology ("let's use AI for video") instead of a person's pain.
- Ignoring the limits until the code hits them.
2 Find the key idea before writing code
Goal: One idea that gets around the hard limits, and a sketch of how data flows.
What to do
- Ask what the AI actually needs to decide, not what you have.
- Look for an existing pattern in other fields that solves a similar shape of problem.
- Draw the data flow in one line, with sizes.
VOD (6 GB) ──► pack (~15 MB) ──► claude.ai ──► cut list (JSON) ──► clips from the originalChecklist
- The idea in one sentence
- A data-flow line with sizes
- Why it beats the obvious approach
Common mistakes
- Building around the limit (compressing the video until it fits) instead of changing the question.
3 Write a one-page spec
Goal: A single page that you and the assistant can both work from.
What to do
- Problem and idea, in a few lines each.
- Inputs and outputs, with real sizes.
- Architecture and stack, with one reason per choice.
- What's in the first version and, just as important, what isn't.
- The contract between the parts (a JSON format, an API).
- The demo you want to be able to give.
{"clips": [{"id": "c1", "start": "00:41:10", "end": "00:41:52",
"title": "The comeback", "reason": "Chat explodes, laughter"}]}Checklist
- Fits on one page
- Has a "not in v1" list
- Defines the contract between parts
- Describes the demo
Common mistakes
- A spec that lists features but no contract: every part then guesses the format.
4 Build the thinnest end-to-end version first
Goal: Something ugly that goes all the way from input to output, with tests.
What to do
- Wire every stage with the simplest thing that works.
- Test with real tools on generated material (not mocks of the hard part).
- Only then make each stage good.
Checklist
- One command runs input → output
- Tests use the real tools
- No polish yet
Common mistakes
- Perfecting the first stage (a great transcriber) before the last stage exists.
5 Direct the assistant with instruction files
Goal: Each piece of work described well enough that the assistant can do it without asking.
What to do
- One Markdown file per task: context, what to read first, the exact behaviour, tests, and a "Done when" list.
- A start file with the rules for every run: don't ask, decide and log; commit small steps; never push; never touch the user's data; write what needs you.
- Tell it to check what already exists before building.
Checklist
- Every task has "Done when"
- The rules live in one start file
- "Check what exists first" in each task
Common mistakes
- Vague tasks ("make it nicer"): the assistant guesses, and you can't tell when it's done.
- Rules repeated differently in every file.
6 Keep a progress log the assistant writes
Goal: Any run can stop (usage limits, a crash) and the next one picks up exactly where it was.
What to do
- A PROGRESS.md with "Resume here" at the top, always current.
- Per task: decisions and why, test results, what's left.
- A "Needs you" section at the end for anything only you can do.
Checklist
- "Resume here" is never stale
- Decisions have reasons
- Everything for you is in one list
Common mistakes
- A log written only at the end: when the run stops early, it doesn't exist.
7 Test with real material, then listen
Goal: Find what only real use shows, and turn each finding into the next instruction file.
What to do
- Run it on real inputs, end to end, on the target hardware.
- Watch someone else use it without help.
- Write each finding as a task with "Done when".
Checklist
- Ran on real hardware and files
- Someone else tried it
- Findings became tasks
Common mistakes
- Trusting green tests as "it works".
- Fixing findings ad hoc instead of writing them down.
8 Make it trustworthy
Goal: Privacy, security and licences that hold up to someone reading the code.
What to do
- Privacy by design: keep data local unless sending it is the point.
- Do a security review of every local server and file operation.
- List every third-party component and its licence; follow the GPL if you ship GPL code.
- Use only synthetic or your own material in anything public.
Checklist
- A list of everything that goes online
- Local servers checked for other origins
- THIRD_PARTY list with licences
- No real people in public material
Common mistakes
- Assuming "it only listens on localhost" means safe.
- Committing test footage of real people, then having to rewrite git history.
9 Package it like a product
Goal: Someone who isn't you can install it, start it and recover from errors.
What to do
- A real installer for the platform people use.
- A first run that explains itself: empty states, progress, what to do next.
- An About screen, logs, and an "Open logs folder" button on errors.
- Test the installed app, not just the dev build.
Checklist
- Installs without admin
- First run explained
- Logs reachable from the UI
- Installed-app test
Common mistakes
- Deciding on packaging at the end: it shapes paths, settings and the server.
10 Publish
Goal: A clean public repo, builds anyone can trace to the code, and a page that makes people download.
What to do
- Scan everything git would publish for secrets, personal paths and names.
- Add LICENSE, README, CONTRIBUTING, SECURITY and a code of conduct.
- Build releases in CI from a tag; publish checksums.
- A fast landing page with the download in the first screen.
Get-FileHash .\VOD-Clipper-Setup.exe -Algorithm SHA256Checklist
- Repo scan clean
- Release built by CI
- Checksums published
- Landing page fast and accessible
Common mistakes
- Uploading an installer built on your own PC: nobody can check what's in it.
11 Keep improving
Goal: The app gets better from use, and you know what's next.
What to do
- Put feedback inside the product, right after each result.
- Let the product learn from that feedback where it can.
- Keep a short public roadmap.
Checklist
- Feedback one click from every result
- Feedback changes the next run
- A roadmap people can see
Common mistakes
- Feedback that goes nowhere: people stop giving it.
Tools used
Claude Code (writing the code from instruction files), Claude.ai (choosing the moments), Python with FastAPI, ffmpeg, faster-whisper, OpenCV, Next.js, Electron, Playwright (screenshots and end-to-end tests), PyInstaller and electron-builder (packaging), GitHub Actions (releases).
What I'd do differently
- Decide on packaging early. The Windows app came in task 3; data paths, settings and the local server all had to be reworked for it.
- Keep test footage synthetic from day one. Screenshots with real people got into git history, and cleaning that is a history rewrite.
- Put the main use first. The highlight video was the reason for the app but sat behind "clips" until real use showed it.
- Build the feedback loop in version one. Ratings, notes and revisions came in task 7; earlier results taught the app nothing.
- Security-review the local server before the first installer, not before publishing.