There was some discussion on the Growstuff IRC channel last night, while I was asleep, about the term “spike”. I use it a bit on the Growstuff project but I don’t think everyone knows what I’m getting at, possibly because I picked it up by osmosis from the Extreme Programming community over a decade ago, and the term’s fallen out of favour since then. So here’s a quick definition as I use it:
- A spike is experimental. It’s for writing something you’ve never written before, and don’t quite know how to start.
- A spike is a learning exercise. The goal isn’t to write a new feature. The goal is to get enough knowledge to know that you can write that feature.
- A spike is a conversation-starter. It moves abstract “maybe we could…” conversations into the concrete.
- A spike may not follow coding standards. You don’t even know this thing is possible. It’s pretty hard to write tests first in that situation.
- A spike is thrown away when you’re done. It gives you enough to say “okay, we know this is possible”, and then go and write it properly.