
technical-spike
by johannesfritz
Autonomous multi-plan orchestration system for Claude Code
SKILL.md
name: technical-spike description: Conduct objective-driven investigation to reduce uncertainty. Use when there's an unknown blocking estimation or implementation, when technical-pm identifies uncertainty, or when someone says "we need to investigate first". allowed-tools: Read, Write, Glob, Grep, Bash, Task, WebSearch, WebFetch
Technical Spike Skill
Purpose: Conduct objective-driven technical investigations to reduce uncertainty before committing to implementation.
Philosophy: A spike is finished when the objective is reached, NOT when a time limit expires. Spikes produce knowledge artifacts, not production code.
When to use:
- Technical feasibility is unknown ("Can this library handle 50MB files in under 200ms?")
- Behavioral requirements are unclear ("Should refunds work for partial orders?")
- Architecture needs validation ("Can we scale this pattern to 10k users?")
- Root cause of complex bug is unknown
- Before making architectural decisions (uncertainty reduction)
Core Principles (Objective-Driven Framework)
1. The Completion Trigger
A spike is finished the moment the specific objective is reached, not when a clock runs out.
- If objective reached in 20 minutes → spike complete in 20 minutes
- If objective reached in 4 hours → spike complete in 4 hours
- If objective cannot be reached → document why, close spike
Anti-pattern: "We have 2 hours for this spike" (time-boxed approach) Correct pattern: "We'll know we're done when we can successfully..." (objective-driven)
2. The "One-Question" Rule
A spike must answer ONE high-level question.
- If second question emerges → create second spike
- Prevents scope creep
- Ensures clear success criteria
Example good question: "Can WebSockets handle our real-time collaboration needs?" Example bad question: "How should we build the entire real-time system?" (too broad, multiple questions)
3. The "Burn After Reading" Mandate
Spike code must NEVER be merged into main branch.
- Spike code is written to be read, learned from, and deleted
- Disposability enables speed
- Knowledge artifact (document) is the deliverable, not code
Enforcement:
- Create spike branches:
spike/topic-name - Never merge spike branches
- Delete branch after knowledge artifact created
- Or work in isolated directory and delete after
4. Zero Polishing
No production quality needed.
- No unit tests (unless testing IS the spike objective)
- No error handling for edge cases (unless that's what you're investigating)
- No styling (unless UI behavior is being spiked)
- Hardcode credentials, use fake data, skip validation
Rationale: Speed over quality. We're learning, not shipping.
Spike Types
Technical Spike (The "How")
Focus: Feasibility, architecture, performance
Trigger phrases:
- "I don't know if the technology CAN do this"
- "Will this approach scale?"
- "Can we integrate X with Y?"
- "Is this library fast enough?"
Example questions:
- "Can the XYZ library process a 50MB JSON file in under 200ms?"
- "Can we run Claude API calls in parallel without hitting rate limits?"
- "Will Qdrant handle 100k vectors with acceptable query time?"
Functional Spike (The "What")
Focus: User flow, logic, requirement clarity
Trigger phrases:
- "I don't know how the system SHOULD behave"
- "What's the right user experience?"
- "How should this edge case work?"
Example questions:
- "Should multi-step vs single-page form feel more intuitive for our users?"
- "How should refund flow behave for partial orders?"
- "What happens when user tries to delete account with active subscription?"
Expected Outcomes (Knowledge Artifacts)
Every spike must produce ONE of these:
1. The Verdict
Format: Definitive "Yes, this works" or "No, this is a dead end"
Example:
"✅ YES - Qdrant can handle 100k vectors with <50ms query time on our VPS specs"
"❌ NO - WebSockets disconnect every 30 seconds behind AWS ALB (need sticky sessions or different approach)"
2. The Proof of Concept (PoC)
Format: Screen recording, demo, or code snippet showing "it works"
Example:
"✅ Working prototype: Users can drag-drop files, see upload progress, get confirmation. See recording: spike-file-upload.mov. Key insight: Need to chunk large files (>10MB) or upload times out."
3. The Architecture Draft
Format: Simple diagram or list of required components
Example:
"✅ Architecture sketch: Need 3 components: (1) Upload service with chunking, (2) Background processor queue, (3) Notification system. Draft in spike-architecture.png"
4. The Bug Root-Cause
Format: Clear explanation of WHY complex error happens
Example:
"✅ Root cause identified: Race condition between React state update and WebSocket message. Happens when user sends message during reconnection. Need mutex or message queue."
Non-Goals (Explicitly Forbidden)
Spikes must NOT attempt to:
- Refine estimates - Spikes remove "I don't know", but don't size work (that's planning)
- Produce production code - If code is good enough to merge, it was a Feature Task in disguise
- Create user documentation - Spikes produce internal knowledge only
- Make final decisions - Spike provides data; team/architect makes decision
Test: If someone asks "Can we ship this?" and answer is yes → it's not a spike, it's a feature.
Spike Protocol Template
Fill in before starting spike (30 seconds):
## Spike: [One-sentence question]
**Question:** [e.g., Can we use WebSockets for real-time updates?]
**Type:** Technical | Functional
**Success Criteria:** [e.g., I have a local script that successfully echoes a message back from the server.]
**Code Strategy:** [e.g., Hardcoding all credentials; no error handling; single file script.]
**Next Step:** [e.g., Share snippet in spike doc and delete throwaway code.]
Example:
## Spike: Can Qdrant handle 100k vectors efficiently?
**Question:** Will Qdrant perform well with 100k atomic notes on our VPS specs?
**Type:** Technical
**Success Criteria:** Query time <50ms for semantic search with 100k points loaded
**Code Strategy:** Load fake data, skip authentication, hardcode config, single Python script
**Next Step:** Document query times in spike doc, delete test data, close spike
Spike Output Format
Location: 00 Inbox/spikes/spike-YYYY-MM-DD-topic.md
Template:
# Technical Spike: [Question]
**Type:** Technical | Functional
**Started:** [timestamp]
**Completed:** [timestamp]
**Duration:** [actual time spent]
**Objective reached:** Yes | No (with explanation)
## Question
[The one question we were trying to answer]
## Success Criteria
[What would prove the answer]
## Findings
[What we discovered - be specific, include numbers/metrics where relevant]
## Knowledge Artifact
**Type:** Verdict | PoC | Architecture Draft | Root Cause
[The concrete output from this spike]
## Recommendation
**Category:** Simple change | Moderate effort | Complex/Architectural | Dead end
[Simple next-step recommendation - NOT a detailed plan]
**If pursuing:** [Suggest creating ADR or development plan]
**If abandoning:** [Explain why, suggest alternative]
## What We Still Don't Know
[Any remaining unknowns - may trigger follow-up spike]
[If empty: "All unknowns resolved for this question."]
## Throwaway Code Location
[One of these:]
- "Deleted"
- "Branch: spike/topic-name (DO NOT MERGE)"
- "Directory: /tmp/spike-name (deleted)"
- "No code (research-only spike)"
Workflow
1. Define Spike Objective
- State as ONE question
- Classify as Technical or Functional
- Define clear success criteria (what proves the answer)
2. Plan Throwaway Code Strategy
- Where will code live? (branch, /tmp, isolated directory)
- What can be hardcoded? (credentials, config, fake data)
- What can be skipped? (tests, error handling, edge cases)
3. Execute Spike
- Build minimum code to answer question
- Take notes as you learn
- Stop immediately when objective reached (or determined unreachable)
4. Document Knowledge Artifact
- Write spike document using template
- Include verdict, metrics, or architecture draft
- State what we now know vs still don't know
5. Clean Up Throwaway Code
- Delete spike branch or temporary files
- Preserve only the knowledge artifact (markdown doc)
- Update spike doc with "Code deleted" confirmation
6. Make Recommendation
- Simple change → implement directly
- Moderate effort → create development plan
- Complex/Architectural → create ADR, then plan
- Dead end → document why, suggest alternatives
Integration with Decision-Making
Typical flow:
Uncertainty Identified
↓
Technical Spike (this skill)
↓
Knowledge Artifact Created
↓
Decision Point
├─→ Simple change? → Implement directly
├─→ Architectural? → Create ADR (write-adr skill)
├─→ Requires plan? → Create plan (create-plan skill)
└─→ Dead end? → Document and move on
Example:
- Technical PM identifies: "We don't know if Qdrant can scale to 100k vectors"
- Spike conducted: Load test with fake data
- Knowledge artifact: "Yes, <50ms query time confirmed"
- Solutions Architect: Create ADR-003 documenting Qdrant choice
- Development: Create PLAN-2025-XXX to implement Qdrant integration
Quality Checklist
Before closing spike, verify:
- One question answered - Not multiple questions
- Success criteria met - Or documented why unreachable
- Knowledge artifact created - Verdict, PoC, draft, or root cause
- Recommendation provided - Clear next step
- Throwaway code deleted - Or clearly marked as disposable
- Unknowns documented - What we still don't know (if anything)
- Spike doc complete - All template sections filled
Examples
Example 1: Performance Spike
Question: Can Qdrant handle 100k atomic notes with <50ms query time?
Type: Technical
Findings:
- Loaded 100k fake notes (3072-dim embeddings)
- Average query time: 23ms (p95: 41ms)
- Memory usage: 2.1GB
- CPU: <5% during queries
Verdict: ✅ YES - Qdrant performs well beyond our needs
Recommendation: Simple - proceed with Qdrant integration. Create ADR-003 to document choice.
Code: Deleted after knowledge artifact created
Example 2: UX Functional Spike
Question: Should account deletion be one-click or require confirmation flow?
Type: Functional
Findings:
- Built both flows in local branch
- One-click: Fast but risky (accidental deletion concern)
- Confirmation flow: Safer, shows what will be deleted
- Tested with 2 users: Both preferred confirmation (clarity on consequences)
Verdict: ✅ Confirmation flow preferred
Recommendation: Moderate - create PLAN-2025-XXX for account deletion flow with confirmation modal showing:
- What data will be deleted
- Irreversibility warning
- Final confirmation button
Code: Branch spike/account-deletion (DO NOT MERGE)
Example 3: Technical Feasibility (Dead End)
Question: Can we use SQLite with async Python for concurrent writes?
Type: Technical
Findings:
- SQLite locks entire database for writes
- Concurrent write attempts fail with "database is locked" error
- Read-heavy workloads OK, write-heavy fails
- Our use case: 50+ concurrent users writing data
Verdict: ❌ NO - SQLite won't work for our multi-user write pattern
Recommendation: Dead end - switch to PostgreSQL (supports concurrent writes). Create ADR-005 to document database choice.
Alternative considered: Use SQLite with write-ahead logging (WAL), but testing showed still not sufficient for 50+ writers.
Code: Deleted
Anti-Patterns to Avoid
-
Time-Boxing Instead of Objective-Driven
- ❌ "We have 2 hours for this spike"
- ✅ "We'll know we're done when we can successfully..."
-
Polishing Spike Code
- ❌ Adding unit tests, error handling, documentation to throwaway code
- ✅ Minimal code to prove the concept
-
Merging Spike Code
- ❌ "This spike code is pretty good, let's just merge it"
- ✅ "Spike proves it works. Now delete and implement properly with tests."
-
Multi-Question Spikes
- ❌ "Let's spike authentication, authorization, and session management"
- ✅ "Let's spike authentication approach" (separate spikes for auth and sessions)
-
Decision-Making in Spike
- ❌ "Spike showed both work, so I chose Option A"
- ✅ "Spike showed both work. Here's data. Solutions Architect will decide."
Integration Points
This skill is used by:
technical-pmagent - Identifies uncertainties blocking estimationsolutions-architectagent - Reduces uncertainty before architectural decisions- Manual
/spikecommand - User-initiated investigation
This skill spawns:
artificial-shadow-dev- For implementation spikeshybrid-db-architect- For database spikes- No agents for research-only spikes
This skill outputs to:
write-adrskill - When spike leads to architectural decisioncreate-planskill - When spike shows moderate/complex work needed
Continuous Improvement
Update this skill when:
- New spike patterns emerge
- Quality issues identified in spike outputs
- Framework principles need refinement
- Integration patterns change
Document significant changes in repository CLAUDE.md.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon