Skip to main content
A spike is a short, time-boxed investigation to answer a specific question before you commit to building something. The name comes from XP (Extreme Programming) - the idea of driving a spike all the way through a problem to see what’s on the other side 🔍

What they’re for

Spikes exist because uncertainty is expensive. When you don’t know how long something will take, whether a third-party API will do what you need, or if a technical approach is even feasible - you’re guessing. Guessing leads to wildly inaccurate estimates, blown sprints, and rework. A spike trades a small, bounded investment of time for a concrete answer. Instead of estimating a feature you don’t fully understand, you spend two days finding out what you’re dealing with.

Two types

Technical spikes - used when the engineering path is unclear. Can we integrate with this payment provider? Will this approach handle the data volume we need? How long would it actually take to migrate the database? Functional spikes - used when the product direction needs more clarity before development starts. Which of these three approaches would users actually understand? Is the workflow we’re designing feasible given the user’s mental model? The second type is underused. Most teams treat spikes as an engineering tool, but they’re just as valuable for feasibility prototyping and de-risking product decisions 💡

Running one well

A spike needs a clear question and a fixed timebox - usually one to three days. At the end, the output is an answer (or at least a much better question), not a deliverable. Spikes don’t ship; they inform. The failure mode is a spike that expands indefinitely because the question wasn’t tight enough. “Investigate the reporting infrastructure” is not a spike. “Determine whether we can add custom date ranges to the existing reporting pipeline within the current architecture” is. Lesson learned: the best time to run a spike is when an engineer says “I’m not sure how long this will take.” That’s the signal you’re about to estimate something you don’t understand yet 👀