bullet-tracer
Bullet Tracer Skill
From The Pragmatic Programmer: "Use Tracer Bullets to Find the Target" — build a minimal end-to-end vertical slice that touches all layers first, then expand.
Compatibility Note
Not all tickets/features are fully compatible with the tracer bullet approach (e.g., pure refactors, config changes, single-layer fixes). Be smart: apply tracer bullet concepts to compatible parts, use general best practices for the rest.
Philosophy
- Tracer bullet != prototype: You keep the code, it becomes the foundation
- Vertical slice: Touch ALL layers (UI → API → logic → DB → tests) in one thin path
- Fast feedback: Validate architecture and integration points early
- Hardcoded is OK: Initial tracer can use minimal/fake data
Workflow
Phase 1: Tracer Bullet (MUST DO FIRST)
- Identify all layers the feature touches (e.g., frontend, API, service, DB, config)
- Implement the thinnest possible path through ALL layers:
- One happy path only
- Hardcoded values acceptable
- Skip edge cases, validation, error handling
- Must be runnable/testable end-to-end
- Write one integration test that exercises the full path
- Verify it works — run the test, manually test if needed
Phase 2: Expand
Only after tracer works, expand systematically:
- Replace hardcoded values with real implementations
- Add validation and error handling
- Add edge cases and additional paths
- Add unit tests for individual components
- Refactor for production quality
Example
Feature: "User can save favorite items"
Tracer (Phase 1):
- Frontend: Add button that calls POST /api/favorites with hardcoded itemId
- API: Endpoint that inserts into favorites table
- DB: Create favorites table with user_id, item_id
- Test: Integration test that clicks button, verifies DB row exists
Expand (Phase 2):
- Real item selection UI
- Validation (item exists, not already favorited)
- Error handling and user feedback
- Unfavorite functionality
- List favorites page
- Unit tests for each layer
Rules
- NEVER skip the tracer phase — always build e2e first
- NEVER expand before tracer works — resist the urge to "do it properly"
- Keep tracer minimal — if you're adding "nice to haves", stop
- Tracer must touch ALL layers — if it doesn't, it's not a tracer
- Tracer must be testable — if you can't verify it works, add a test
Anti-patterns
❌ Building the perfect DB schema before any code
❌ Implementing full validation before happy path works
❌ Writing all unit tests before integration test
❌ Building frontend in isolation from backend
❌ "I'll connect it later"
Checklist
Before moving to Phase 2, verify:
- Code touches every layer the feature needs
- Can run/test the feature end-to-end
- At least one integration test passes
More from sebastiaanwouters/dotagents
flyctl
Deploy and manage apps on Fly.io using flyctl CLI. Triggers on: fly deploy, fly.io, flyctl, deploy to fly. Handles launch, deploy, scale, secrets, volumes, databases.
79teacher
Guide learning and deep understanding through proven methodologies (Socratic, Feynman, Problem-Based). Use when user says "help me understand", "teach me", "explain this", "learn about", "socratic", "feynman", "problem-based", "I don't understand", "confused about", "why does", or wants to truly grasp a concept.
77chef
Telegram communication for AI agents. ALL methods are BLOCKING. Use for user interviews, status updates, and feedback collection.
34bitwarden
Retrieves API keys, passwords, secrets from Bitwarden vault using bw CLI. Triggers on missing env variables, missing API keys, missing secrets, "secret not found", "env not set", or "use bw".
29librarian
Use for code research that needs dependency internals, upstream implementation examples, or external prior art. Always delegate to a subagent that investigates with opensrc and web search, then return only distilled findings, versions, paths, and links.
28impeccable-clarify
Skills-only equivalent of impeccable.style /clarify. Improve unclear UX copy, error messages, microcopy, labels, and instructions. Makes interfaces easier to understand and use. Use for frontend and UI design tasks.
20