The test driven development guys refer to a quick, exploratory, investigation that involves coding something up to see if it works, a spike.
An
I always considered it to be a mountain climber analogy. Where you put a spike in the mountain on your way up. If the spike sticks, then it's ok to go that way.
I believe it is an engineering expression. A spike is a temporary solution, something you try out to see if it works, before you make the permanent solution. Railroad engineers talk about spiking a track switch: inserting a rail spike into the switch, so it cannot be moved.
Ward Cunningham writes on WardsWiki (referring to Kent Beck):
I would often ask Kent, "What is the simplest thing we can program that will convince us we are on the right track?" Such stepping outside the difficulties at hand often led us to simpler and more compelling solutions. Kent dubbed this a Spike. I found the practice particularly useful while maintaining large frameworks.
Kent Beck writes in Guide to Better Smalltalk:
Sometimes I call this a "spike," because we are driving a spike through the entire design. [...] Because people variously associate "spike" with volleyball, railroads, or dogs, I have begun using "architectural prototype" to describe this implementation.
IMHO the term spike relates to driving a nail through a plank. Yup.. here it is
"Spike" is an Extreme Programming term meaning "experiment". We use the word because we think of a spike has a quick, almost brute-force experiment aimed at learning just one thing. think of driving a big nail through a board.
-- Extreme Programming Adventures in C# - Ron Jeffries
It is called Spiking because it slices through all layers of the system. That's what he means when he says Architectural Prototype.
Because it's out of the ordinary, like a spike in a graph. E.g. A spike in CPU usage.