Skip to content

PRD → Plan → Todo Workflow

Transform product requirements into production-ready code using Claude Code’s powerful planning and execution workflow. This guide teaches you the battle-tested methodology used by Anthropic’s engineering teams to build features systematically and reliably.

Why PRD → Plan → Todo Works

This workflow transforms chaotic development into a predictable process:

  1. PRD (Product Requirements Document) - Define what to build
  2. Plan - Let Claude think through how to build it
  3. Todo - Execute the plan step by step
  4. Iterate - Refine based on feedback

The result? Complex features built right the first time, with clear traceability from requirements to code.

The quality of your output depends on the clarity of your input. Here’s how to structure requirements for Claude:

# Feature: User Wishlist System
## Overview
Users need to save products for later purchase and share collections with friends.
## User Stories
- As a user, I want to create multiple wishlists
- As a user, I want to add/remove products from wishlists
- As a user, I want to share wishlists via public link
- As a visitor, I want to view shared wishlists (read-only)
## Technical Requirements
- Max 50 items per wishlist
- Max 10 wishlists per user
- Public links expire after 90 days
- Track view counts for analytics
## Acceptance Criteria
- [ ] Users can CRUD wishlists
- [ ] Products can be added/removed
- [ ] Share links work without auth
- [ ] View tracking implemented

Once you have a PRD, here’s how to effectively communicate it to Claude:

  1. Start with context

    Terminal window
    > We need to implement a new feature. Here's the PRD:
    [paste PRD content]
    Based on our tech stack (Next.js 15, Postgres, Clerk auth),
    please analyze this and identify any questions or concerns.
  2. Let Claude ask clarifying questions

    Claude: I have a few questions about the wishlist feature:
    1. Should wishlist names be unique per user?
    2. Can products be in multiple wishlists?
    3. What happens if a product is deleted?
    4. Should we track who added each item?
  3. Refine requirements together

    Terminal window
    > Good questions! Let me clarify:
    1. No, users can have duplicate names
    2. Yes, products can be in multiple lists
    3. Keep as "unavailable" with metadata
    4. Yes, track added_by and added_at
  4. Confirm understanding

    Terminal window
    > Please summarize your understanding of the requirements
    and any technical decisions we've made.

Claude Code offers multiple thinking levels for different complexity needs:

Thinking Mode Spectrum

TriggerTokensUse Case
(default)~500Simple tasks, clear path
think~5,000Standard feature planning
think hard~10,000Complex architectures
think harder~20,000Multi-system integration
ultrathink~128,000Major refactoring, migrations

Choose based on complexity, not importance. A critical bug fix might need default mode, while a new microservice needs ultrathink.

For typical features (think mode):

Terminal window
> Based on the wishlist PRD, think about the implementation approach.
Consider database schema, API design, and UI components.

Claude’s response might include:

I'll think through this systematically...
## Database Schema
- wishlists table: id, user_id, name, created_at, is_public
- wishlist_items: id, wishlist_id, product_id, added_by, added_at
- wishlist_views: for analytics tracking
## API Structure
- REST endpoints under /api/wishlists
- GraphQL might be better for nested data
- Need rate limiting for public endpoints
## Implementation Phases
1. Database migrations and models
2. CRUD API with tests
3. Frontend components
4. Sharing mechanism
5. Analytics integration
## Considerations
- Index on user_id for performance
- Redis for view counts (avoid DB writes)
- UUID for share links (not sequential IDs)
- Soft delete for data recovery

Before proceeding to implementation, validate Claude’s plan:

  1. Check completeness

    • Does it address all PRD requirements?
    • Are edge cases considered?
    • Is error handling specified?
  2. Assess feasibility

    • Are time estimates realistic?
    • Do we have required dependencies?
    • Any blocking technical constraints?
  3. Review architecture fit

    • Aligns with existing patterns?
    • Maintains system boundaries?
    • Follows team conventions?
  4. Consider alternatives

    Terminal window
    > What alternative approaches did you consider?
    > Why did you choose this one?

Claude Code excels at breaking plans into executable tasks. This systematic approach ensures nothing falls through the cracks:

## Wishlist Feature Implementation Tasks
### Phase 1: Database Setup ✅
- [x] Create migration for wishlists table
- [x] Create migration for wishlist_items table
- [x] Add indexes for performance
- [x] Create Prisma models
- [x] Seed test data
### Phase 2: Backend API (In Progress)
- [x] POST /api/wishlists - Create wishlist
- [x] GET /api/wishlists - List user wishlists
- [ ] GET /api/wishlists/:id - Get single wishlist
- [ ] PUT /api/wishlists/:id - Update wishlist
- [ ] DELETE /api/wishlists/:id - Delete wishlist
- [ ] POST /api/wishlists/:id/items - Add item
- [ ] DELETE /api/wishlists/:id/items/:itemId - Remove item
- [ ] GET /api/wishlists/shared/:shareId - Public view
### Phase 3: Frontend Components
- [ ] WishlistCard component
- [ ] WishlistGrid layout
- [ ] AddToWishlist button
- [ ] ShareWishlist modal
- [ ] WishlistManager page
### Phase 4: Testing & Polish
- [ ] API integration tests
- [ ] Component unit tests
- [ ] E2E test scenarios
- [ ] Performance optimization
- [ ] Documentation update

Most efficient for standard features:

Terminal window
> Implement the wishlist feature based on our plan.
> Work through the tasks systematically, testing each phase
> before moving to the next.
[Claude starts with Phase 1, creates migrations, runs them,
confirms success, then moves to Phase 2...]

Claude will:

  • Execute tasks in order
  • Run tests after each step
  • Ask for confirmation at phase boundaries
  • Update the todo list as it progresses

Claude can maintain a progress log as it works:

# Wishlist Implementation Progress
## Completed Today
- ✅ Database schema created and migrated
- ✅ Prisma models generated
- ✅ Basic CRUD API (6/8 endpoints)
- ✅ Input validation middleware
- ✅ Rate limiting added
## Currently Working On
- 🔄 Share link generation logic
- 🔄 Public view authorization
## Blockers
- ❌ Redis not configured for view counts
- Solution: Use DB for now, migrate later
## Next Steps
- Complete remaining API endpoints
- Start frontend components
- Add comprehensive tests
## Notes
- Decided to use UUIDs for share links
- Added soft delete for recovery
- Rate limit: 100 requests/minute for public endpoints

As you review Claude’s work, provide feedback effectively:

  1. Be specific about issues

    Terminal window
    "The API doesn't work right"
    "The API returns 500 when wishlist name is empty.
    Add validation to return 400 with clear error message."
  2. Provide examples

    Terminal window
    > The share link should look like: myapp.com/wishlist/share/abc123
    > Not: myapp.com/api/wishlists/123/public
  3. Reference best practices

    Terminal window
    > Follow our API error format from CLAUDE.md:
    > { error: { code: "VALIDATION_ERROR", message: "..." } }
  4. Iterate quickly

    Terminal window
    > Fix the validation issue, then continue with the next endpoint.
    > Don't refactor everything yet.
Terminal window
> The wishlist creation is failing. Write a failing test
> that reproduces the issue first.
[Claude writes test]
> Now fix the implementation to make the test pass.
[Claude fixes code]
> Add edge case tests for empty names and special characters.

Here’s how a senior developer uses the PRD → Plan → Todo workflow:

Terminal window
> I need to implement a notification system. Here's the PRD:
> [pastes 200-line PRD about email/push/in-app notifications]
Claude: I'll analyze this PRD. I notice it mentions three notification
channels but doesn't specify priority. Should all three be implemented
together or can we phase them?
> Let's phase it: email first, then in-app, push last.
> Based on this, think hard about the implementation approach.
> Consider scalability for 100k daily notifications.
Claude: [Extended thinking about architecture, queue systems,
delivery tracking, template management, user preferences...]
Here's my implementation plan:
1. Message queue with Redis/BullMQ for reliability
2. Template system using Handlebars
3. Provider abstraction for easy switching
4. Delivery status tracking in Postgres
5. User preferences with channel-level opt-out
> Excellent plan. Create a detailed todo list for phase 1 (email only).
Claude: [Generates 25-task todo list organized by component]
> Let's start. Work through the infrastructure tasks first.
[Claude implements Redis setup, queue configuration, worker process...]
> The queue is processing too slowly. We need 10k/hour throughput.
Claude: I'll add concurrent workers. Currently single-threaded...
[Updates to use 5 concurrent workers, adds batching]
> Much better. Continue with the email templates.
[Session continues for 2 hours, feature ships same day]

PRD → Plan → Todo Success Factors

DO:

  • Start with clear, detailed requirements
  • Let Claude think before implementing
  • Break work into verifiable chunks
  • Test each phase before proceeding
  • Keep progress logs for complex features
  • Iterate based on concrete feedback

DON’T:

  • Jump straight to coding
  • Give vague requirements
  • Try to build everything at once
  • Skip the planning phase
  • Ignore Claude’s clarifying questions
  • Refactor while implementing
  1. “Think of Claude as a junior architect” - It can create solid plans but needs your expertise to validate architectural decisions.

  2. “Requirements are prompts” - The clearer your PRD, the better Claude’s output. Invest time upfront.

  3. “Plans are living documents” - Update them as you learn. Claude can revise plans based on implementation discoveries.

  4. “Todo lists prevent drift” - They keep Claude focused and prevent it from over-engineering or going off track.

  5. “Phase boundaries matter” - Complete and test each phase. This provides natural checkpoints for review.

Now that you understand the PRD → Plan → Todo workflow:

Remember: Great software isn’t built by accident. The PRD → Plan → Todo workflow ensures every feature is thoughtfully designed, carefully implemented, and thoroughly tested. Master this methodology and watch your productivity soar!