Spikes were an interesting idea that have become massively abused and it’s time that we just stop using them.
I can’t find a definitive description of a spike so I have to rely on memories from the early 2000’s in the eXtreme Programming (XP) community. In XP, we would use these spikes as technical experiments that would let us make a decision about future work.
Example: We don’t know if it’s even possible to implement a specific thing in the browser or if we will need to do that on the backend. Let’s allocate a small timebox (ie half a day) so we can hack together a quick test to see if what we need is possible.
The XP community was very clear that spikes were small timeboxes (typically hours) and that any code done during the spike was throwaway. Both of those ideas seem to be lost today. I see teams taking on week long (or longer) spikes and writing production-ready code while doing it. That’s no longer about learning and is now just implementing.
When used according to the original intention, spikes were rare. It’s not often that we have that kind of a technical question that needs investigating. Yet today, they’re being use and abused on a regular basis. I’ve worked with teams where half of the items in the backlog were spikes.
When we split the learning from the delivery, we’re not actually improving our ability to deliver. All we are doing is making a mess of any metrics we might hope to use.
I think it’s long past time to accept that we’ve lost any of the real value that we had hoped to get from spikes and that we should just stop using them.