The methodology
A builder’s playbook.
Everyone is using AI to write code faster. Almost no one is using it to tell them they’re building the wrong thing. That’s the gap — and this is the method I used to close it. Six phases, run in order, on a real product with real users. Not a demo. I’m honest about where it worked and where it didn’t, because a playbook that hides its failures is just marketing.
I used to think the value of AI on a codebase was speed. Generate the boilerplate. Autocomplete the function. Ship faster. All true. All beside the point.
The expensive mistakes in software were never typing speed. They’re building the wrong feature, on a shaky foundation, behind a moat that isn’t one. AI is most useful exactly there — as the senior partner who reads everything, argues back with research, and tells you the thing you don’t want to hear. But only if you make it. Ask “does this look good?” and you’ll get a yes. Ask “what’s wrong with this?” and you’ll get the truth.
So the whole method is one move, repeated six times: point the model at the uncomfortable question, demand evidence, then verify the answer actually ran. The order is the product. Each phase changes what the next one is even worth doing — which is why doing them out of order is wasted work, not a shortcut.
When this applies
- A real project — code, users (or planned users), a strategy narrative
- Multi-session work, not one-shot prompts
- You want AI to push back, not just defer
- You care about maintainability, not just shipping speed
When it doesn’t
- Prototyping for fun — the overhead isn’t worth it
- You only want code generation, not strategy
- No willingness for honest critique cycles
- Too early for architecture work (no users, no real code yet)
The core insight
Each phase makes the next more valuable. Doing them out of order wastes work; skipping one leaves a gap that compounds later. You don’t have to do all six in one stretch — but do them in order when you do.
- 01Honest strategy audit→ changes what’s worth doing next
- 02Architecture critique→ changes what’s worth doing next
- 03Foundation fixes (Batch A)→ changes what’s worth doing next
- 04Visual + UX polish→ changes what’s worth doing next
- 05Workflow cohesion audit→ changes what’s worth doing next
- 06Methodology consolidation
Honest strategy audit
Before you build anything new, find out if the thing underneath it is real. Most moats don't survive ten minutes of honest research. Better you find that out than your customer does.
When to run it
- ·At the start of a project, before architecture decisions
- ·When you haven't compared yourself to competitors in 6+ months
- ·Before fundraising, demoing to customers, or writing marketing copy
- ·Whenever your moat narrative has "we're the only one who…" in it
Deliverable
- ·Rewritten "What we ARE / are NOT" section
- ·Verified competitive landscape table, with citations
- ·A defensibility roadmap — 3 features by quarter that compound the wedge
Technique
- Invite skepticism explicitly. Say "Review this and tell me what's wrong" — not "Does this look good?" One invites critique, the other invites validation.
- Demand research, not opinion. Have Claude web-search the actual competitive landscape. Verify with URLs and dates. Specific pushback creates decisions; vague pushback is useless.
- Distinguish commodity from defensible. For each claimed differentiator, ask for a real competitor with similar features, pricing, and customers. If it exists at the top of the market, that feature is commodity, not a moat.
- Make trade-offs explicit. When you choose A over B, get Claude to name the new constraints that creates (e.g. closed-source removes the self-host moat and forces vertical depth as the only differentiator).
Anti-patterns
- ·"Are you sure this moat is good?" — Claude will say yes
- ·Asking only what's right with your strategy, not what's wrong
- ·Accepting "your differentiators are unique" without verification
- ·Polishing the rewritten copy until it sounds aspirational again
Example prompts
"Review this README and tell me which differentiators are actually commodity features at the top of the market. Web-research the top 3 competitors and verify." "Here's my plan to compete with [X]. Where does this strategy break under realistic adversarial conditions?"
Architecture critique
Green CI is not the same as good code. The bugs that hurt you don't throw exceptions — they wait. Read every line first, then rank what's actually fragile. A flat list of "improvements" is noise.
When to run it
- ·After strategy is honest, before building new features
- ·When code-review tools find nothing but your gut says something's off
- ·Before scaling, hiring engineers, or open-sourcing
- ·Once a quarter, prophylactically
Deliverable
- ·Ranked issue list (🔴 critical / 🟡 high-leverage / 🟢 polish)
- ·For each: file:line, what's wrong, what's right, code example
- ·A "Batch A" subset — the top 3–5 with the best impact ÷ effort
Technique
- Read everything first. Don't spot-check. Have Claude read full files end-to-end before critiquing. The 15-issue critique only worked because all 1,594 lines were traced first.
- Rank by impact ÷ effort. A flat list of "things to improve" is useless. Top-3 critical + 5–8 high-leverage + a few polish items is actionable.
- Demand file:line references. "Your error handling is fragile" is useless. "base_agent.py:206 swallows all errors silently" is fixable.
- Calibrate with credible praise. Open with what's specifically correct about the code. The credibility of the praise makes the criticism land.
- Each issue gets a fix sketch. A critique without "here's what right looks like" is just complaining.
Anti-patterns
- ·Critiquing without reading the actual implementation
- ·Listing issues without ranking
- ·"Improve this" without saying to what
- ·Skipping the praise — pure criticism reads as unmoored
Example prompts
"Read every file in [directory]. Don't spot-check. Then produce a ranked critique with file:line references. For each issue: what's wrong, what would be right, code sketch." "Open with what this codebase gets right before listing what's broken. Be specific in both directions."
Foundation fixes (Batch A)
Fix the things that compound. Then — the part everyone skips — prove they ran. "I wrote a fix" and "I shipped a fix" are separated entirely by verification.
When to run it
- ·Immediately after Phase 2
- ·Pick fixes where the same change benefits every future feature
Deliverable
- ·A small PR (typically <100 lines net) shipping the critical fixes
- ·A verification script or test demonstrating the new behavior
- ·Updated docs/comments where behavior changed
Technique
- Verify what you wrote runs. Run it, write a verification script, or load it in the actual app. The difference between "I wrote a fix" and "I shipped a fix" is verification.
- Tool calls > prompt engineering for structured output. If your code regex-parses an LLM's prose, you have a bug waiting. Replace with tool_choice so Claude must return schema-validated data.
- Don't lie in code. Dead branches that look alive, fallbacks pretending to be primary paths, try/except-pass — all worse than missing functionality. If a feature doesn't exist, the code should say so.
- Per-call kwargs > instance mutation. Request-scoped state should be a parameter, not an instance attribute. The shared-state bug is invisible until you load-test, then catastrophic.
- Commit small, focused changes. Three small commits that each fix one thing beat one large commit that fixes three.
Anti-patterns
- ·Shipping code without verifying it runs in the real environment
- ·Mixing critical fixes with refactors or new features
- ·"I'll verify in production" — verification is the work
- ·Skipping docs because "the code is self-documenting"
Example prompts
"Implement the top 3 fixes from the critique. Write a verification script that proves each works. Don't just write the code — run it." "Any place in this codebase where state is mutated on a shared instance per-request? List them with file:line."
Visual + UX polish
Most "wow" isn't new features. It's the data you already have, rendered like someone cared. Wire up the design tokens you already defined before you invent new ones.
When to run it
- ·After the foundation is clean (Phase 3 done)
- ·When the product works but feels "developer-grade"
- ·Before customer demos, screenshots, or marketing pages
Deliverable
- ·3–5 wow moments shipped, each replacing an existing element
- ·Smart defaults applied to every form
- ·Empty states converted to CTAs
Technique
- Read the design system before adding effects. There's almost always unused inventory — CSS classes, animation keyframes, color tokens defined and never wired up. Use what's there first.
- Replacement beats addition. Most "wow" moments are existing data rendered better: "82%" → an animated ring; static avatars → glowing during streaming; an approved pill → an emerald gradient with a checkmark.
- Empty states are entry points, not error states. Every if (items.length === 0) is an opportunity for a CTA into the next part of the product.
- Defaults do more work than perfect UI. A schedule modal prefilled with "tomorrow 9am" beats an empty one. Pre-fill wherever the user would say "yes, that works."
- Animate from zero on mount. Numbers, rings, bars — animate to value on first render. ~900ms cubic ease-out is the right feel for most cases.
Anti-patterns
- ·Decorative animations that don't reflect state
- ·Polishing UI before the foundation is honest (you'll polish things you later remove)
- ·"Add a loader" instead of optimistic UI
- ·Empty states that just say "No items"
Example prompts
"Walk this codebase's design-system tokens. Which CSS classes, animations, or colors are defined but unused? List opportunities to wire them up." "Find every empty state. For each, write the copy + CTA that converts it from a dead zone into an onboarding moment."
Workflow cohesion audit
Every page can pass its test and the product can still feel broken. The bugs live in the handoffs — the "done" screen with nowhere to go next. Walk the journey, not the pages.
When to run it
- ·After UX polish, when individual pages feel right
- ·Before a real customer or investor demo
- ·Whenever someone says "the product works but feels disjointed"
Deliverable
- ·Audit doc listing each dead-end handoff with file:line
- ·5–10 surgical fixes (most <20 lines each)
- ·A re-walk of the journey after fixes to verify cohesion
Technique
- Test journeys, not pages. Walk the primary flows (create → review → approve → schedule; signup → onboard → first action). Each transition is the test surface.
- Every "done" state must answer "what next?" Empty states, confirmations, end-of-flow screens — each needs a forward CTA or visible next state.
- Query params should deep-link. If /content?status=approved doesn't pre-select that tab, every notification and cross-page link using it is a broken handoff.
- Notifications should navigate. A notification you click and nothing happens is worse than no notification.
- Be suspicious of obvious diagnoses. A CORS error might be a backend 500. A "no suggestions" card might be a JSON parse failure. Follow the chain.
Anti-patterns
- ·Assuming green CI = working product
- ·Page-level tests as your only test surface
- ·Cosmetic fixes when the real problem is a missing CTA
- ·Leaving deep-linking broken because "everyone navigates manually"
Example prompts
"Walk every primary user journey via Playwright. At each step, note: where does the user go next, and is that path visible? List every dead-end handoff." "Find every /page?param=value URL that should deep-link. Verify the page honors the param on mount. List any that don't."
Methodology consolidation
Write down the method, not the product. And keep the failures in. The unpolished version is the one people trust — the moment it reads like a press release, the credibility is gone.
When to run it
- ·After a meaningful multi-session arc of work
- ·Before starting your next project
- ·When you want to share what you learned without ghostwriting marketing
Deliverable
- ·A playbook doc capturing the methodology (this page)
- ·An update to working memory pointing future sessions at it
- ·Optional: a workshop deck, blog post, or thread from the same source
Technique
- Distill techniques, not the product. "I used a tool-call schema to enforce structured output" transfers. "I built a dashboard card for CommsCrew" doesn't.
- Acknowledge what's still broken. A playbook that hides its incomplete sections reads like marketing. The "still open" notes are the most credible part.
- Educational artifacts over case studies. A guide explaining how you'd do it beats a case study showing that you did it.
- Templates and prompts make it usable. Pure prose principles ("be honest") are too vague. The actual copy-pasteable prompts make a methodology usable.
- Don't ghostwrite the consolidation. Keep the voice you used during the work. If it suddenly reads polished, the credibility evaporates.
Anti-patterns
- ·"Polish this for publication" — the messy version is the useful version
- ·Hiding the unsolved problems
- ·Making it about the product instead of the technique
- ·Length without density
Example prompts
"Distill the techniques (not the product context) from this session arc into a playbook another builder could apply. Include templates, anti-patterns, and what's still broken."
Cross-cutting principles
The meta-rules that apply across every phase — working with Claude as a senior partner.
Let AI argue with you, not just agree
The highest-leverage moments are when Claude pushes back with research and you change your mind. If every interaction ends in agreement, you're using the tool wrong.
Read everything before critiquing or implementing
Spot-checks miss the patterns that emerge from the full picture. The 15-issue critique only worked because every file was read end-to-end first.
Verify what you wrote ran the way you claimed
Write the script, run the test, load it in the actual app. Don't trust "looks right."
Be suspicious of obvious diagnoses
CORS errors are often 500s. Empty cards are often parse failures. Slow APIs are often missing indexes. The first explanation is usually wrong.
Calibrate criticism with credible praise
Critique that opens with specific praise lands. Pure negative critique reads as unmoored — and the praise has to be specific or the criticism gets dismissed.
Sequencing matters more than effort
Strategy → architecture → foundation → polish → flow → docs. Any other order wastes work: the moat review changes what's worth building; the code critique changes what's worth fixing.
Reusable prompts by phase
01 · Honest strategy audit
"Review this README and tell me which differentiators are actually commodity features at the top of the market. Web-research the top 3 competitors and verify."
02 · Architecture critique
"Read every file in [directory]. Don't spot-check. Then produce a ranked critique with file:line references. For each issue: what's wrong, what would be right, code sketch."
03 · Foundation fixes (Batch A)
"Implement the top 3 fixes from the critique. Write a verification script that proves each works. Don't just write the code — run it."
04 · Visual + UX polish
"Walk this codebase's design-system tokens. Which CSS classes, animations, or colors are defined but unused? List opportunities to wire them up."
05 · Workflow cohesion audit
"Walk every primary user journey via Playwright. At each step, note: where does the user go next, and is that path visible? List every dead-end handoff."
06 · Methodology consolidation
"Distill the techniques (not the product context) from this session arc into a playbook another builder could apply. Include templates, anti-patterns, and what's still broken."
The tools behind it
This playbook wasn’t just written with Claude — it was executed through Claude Skills and a few connected tools, all driven by one operator from a single chat. Same brand kit feeds every surface.
Claude Skills — the method, executed
Not just chat — reusable skills did the repeatable work:
render-plan— every design doc shipped as a styled HTML artifact, not loose markdownsuperpowers(brainstorming → writing-plans → TDD → verification) — idea → spec → plan → verified codeagent-architect/agent-evaluator— designing and grading the agent fleet/code-review+pr-review-toolkit— the adversarial review gates before anything merged
Gamma — the decks
Driven through an MCP connector: a product pitch deck, an 18-slide architecture walkthrough, and a 20-slide lessons-learned critique — all from one dark-and-amber CommsCrew theme.
Canva — the illustration
Also via MCP: the flat-vector crew you see across this site, plus social posts — generated against the CommsCrew brand kit, not pulled from stock art.
Honest limit: the connectors can use a brand kit but can’t write the palette into Canva’s Brand Hub or a Gamma theme — those stay one-time manual pastes. One brand kit is the single source of truth that feeds the app, the decks, the social, and this page.
The honest part
Honest limits of this playbook.
None of this is free. Done properly it’s a week of work, the hardest phase is the one most people skip, and a third of your time goes to verification that feels like overhead until the day it saves you. That’s the trade. The cost went up. So did the floor under everything I shipped.
- 1It's slow. All six phases properly is at least a week of focused work. Need to ship in two days? Skip Phase 1 and most of Phase 4.
- 2It assumes a real codebase. None of this applies to "I have an idea" — that needs brainstorming → spec → prototype → user test.
- 3The hardest part is Phase 1. Most builders skip it because honest moat critique is uncomfortable — and the whole playbook collapses without it.
- 4AI critique has limits. Claude won't catch org issues, team dynamics, or market timing. Those need human judgment.
- 5Verification is the bottleneck. Budget at least 30% of session time for "did this actually run."