nWave/skills/nw-spike-methodology/SKILL.md
Teaches agents how to run a timeboxed spike - throwaway code that validates one assumption before DESIGN
npx skillsauth add nwave-ai/nwave nw-spike-methodologyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Throwaway code that validates exactly one assumption. Max 1 hour. Binary outcome: works or doesn't work. Code is deleted after validation; only findings persist.
| Not This | Why | |----------|-----| | Prototype | Prototypes evolve into production code. Spikes are deleted. | | MVP | MVPs ship to users. Spikes never leave the developer's machine. | | Walking Skeleton | Skeletons wire end-to-end architecture. Spikes test one mechanism. | | POC | POCs demonstrate feasibility to stakeholders. Spikes answer a developer question. |
Every spike answers exactly these:
/tmp/spike_{feature_id}/ or a scratch directory. Never in src/.time.perf_counter() for timing, not time.time().#!/usr/bin/env python3
"""SPIKE: {feature} -- {one-line question being validated}
Throwaway code. Not production. Will be deleted after validation.
"""
import time
# 1. Setup (minimal, no frameworks)
# ...
# 2. Core mechanism attempt
start = time.perf_counter()
# ... the thing you're testing ...
elapsed = time.perf_counter() - start
# 3. Print findings
print(f"Mechanism: {'WORKS' if success else 'FAILS'}")
print(f"Timing: {elapsed*1000:.1f}ms (budget: {budget}ms)")
print(f"Edge cases: {edge_cases}")
Output goes to docs/feature/{feature-id}/spike/findings.md:
# Spike Findings -- {feature-id}
## Verdict: WORKS / DOESN'T WORK
## Question tested
{the one assumption being validated}
## Core mechanism
- Tested: {what was tested}
- Result: {what happened}
## Timing
- {operation}: {time}ms
- Total: {time}ms (budget: {budget}ms) -- PASS / FAIL
## Edge cases discovered
1. {edge case}: {what happened}
2. {edge case}: {what happened}
## Design implications
- {assumption that was wrong}: {correct reality}
- {approach the spike validated or invalidated}
## Spike code
Deleted. Was at /tmp/spike_{feature_id}/
If the spike reveals the problem is fundamentally different from what was assumed:
testing
Scala 3 language-specific patterns with ZIO, Cats Effect, and opaque types
testing
Kotlin language-specific patterns with Arrow, Raise DSL, and coroutine-based effects
testing
Haskell language-specific patterns, GADTs, type classes, and effect systems
testing
F# language-specific patterns, Railway-Oriented Programming, and Computation Expressions