Spike

A task aimed at answering a question or gathering information, rather than at producing shippable product. Sometimes a user story is generated that cannot be well estimated until the development team does some actual work to resolve a technical question or a design problem. The solution is to create a “spike,” which is some work whose purpose is to provide the answer or solution.

Etymology

The term spike comes from Extreme Programming (XP), where “A spike solution is a very simple program to explore potential solutions.” XP guru Ward Cunningham describes how the term was coined on the C2.com wiki: “I would often ask Kent [Beck], ‘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.”

This entry was posted in s. Bookmark the permalink.

27 Responses to Spike

  1. Al says:

    We “point” spikes and include them in our team velocity. This helps us be realistic about iteration capacity. My concern is that the spikes that occur after the first few iterations of a release are seldom anticipated and are not included in initial release planning. This means our claimed velocity is distorted when it is applied to release planning. (Spike points seldom equate directly to initial MMFs) What is the best way to estimate and incorporate spikes? I can, of course, point spikes for iteration capacity planning but then not include them in velocity calculations, but, silly as this may sound, I think that will discourage my teams from accepting spikes. They seem to like consistent velocities. And unpointed timeboxing is likely to have the same result.

  2. Gary says:

    The “etymology” here is basically a non-etymology. It does nothing to explain the origin of the term “spike”. I understand the concept of the effort so named, but want to know where the word came from. “Kent dubbed it a ‘spike’” says nothing. *Why* did he dub it a “spike” as opposed to an “auger” or a “spear” or a “fruit salad”??? I have issue with this as many programmers I work with hear the term and chuckle (in a bad way… as do I).

  3. Paul says:

    My recollection from the early XP Universe conferences in 2001/2002, is that the term “spike” comes from an analogy to rock climbing. When climbing, we might stop to drive a spike into the rock face. Driving the spike is not actual climbing — it does not move us closer to the top — but rather it enables future climbing.

    Similarly, a spike in XP does not produce production code — it does not develop an actual story in the backlog — but rather it enables future story development. I was taught in the XP Immersion workshop (given by Robert Martin, Ron Jeffries & Kent Beck in 2000), that spikes are not given story point estimates because they do not contribute to forward velocity on completing the backlog — they are in essence, research overhead and absorbed into the team’s ongoing story velocity. XP was never as obsessed with “precision” in release planning as Scrum has become.

    It would be interesting to ask someone like Ron Jeffries, who was no doubt very close to the creation of the spike concept, where the inspiration for the term really came from.

    • Keith Patton says:

      Paul: Thanks, that sounds very plausable, considering I was thinking it alluded to an “anchor” of some sort, not in the nautical sense, but as in climbing, a jumping off point.

    • David Patrick says:

      That’s a good analogy. I was asked the same thing this morning and I likened the spike to a pin bursting open a balloon (User Story) so that it can be looked at in more detail.

      • Jon Jorgensen says:

        Like Paul, I was taught or just imagined that the spike refers to a rock-climber’s spike. However, leaving the idea that it does not actually get us forward, I have often thought that it MAY help them team move forward, much like spiked tires on icy roads.
        There is the chance that it is throw-away work/code…much like the rock-climbers spike, if it only demonstrates what doesn’t work. But, if the prototype, or mock up is successful, or leads the team to direct learning, then we’ve made traction and have forward progress. So, it like studded or spike tires to the team and throws us forward. -Just a concept to consider to help the team visualize the ‘why’ behind the term.

  4. Pingback: Retrospiketives | Rob Aston

  5. Pingback: Retrospiketives | SoftDevine

  6. Pingback: Get started write code – Vikram Shetty

  7. Pingback: PEARL V : Scaled Agile Framework® pronounced SAFe™ | Pearls of Wisdom

  8. Pingback: ¿Qué son las historias de usuario y por qué “invertir” en ellas? - Agiland, expertos en Metodologías Ágiles

  9. Pingback: Yikes! Spikes! | My Agile journey

  10. Pingback: Spike Time « Stok Footage

  11. Bob F says:

    As I write this, I’m wondering when I turned into the old guy who says “Yeah, we did that all 20 years ago!”, but…
    The term spike predates Agile and XP. The idea, IIRC, was that rather than designing/developing top-down or bottom-up, you started with a narrow “spike” that went all the way from UI (if appropriate) to low-level, in order to mitigate risk, and act as a proof of concept. So, essentially the same purpose as used for later. I’m trying to find a reference, but of course the Google hits are now all for agile :-)

    • Lisa says:

      (“… everything that’s old is new again”"

    • Graham P says:

      +1
      Yes. For example sending a String end to end from the user to the backend server. That would validate that they were not missing or unconsidered pieces and lower the risk of the “horizontal” work of making the system work for all data types and use cases.
      I am doing one now!
      We have dozens of AI features recognizing distracted driving, but I am doing a spike to determine if we can send a boolean end to end when the user hits a button on the device.
      So spikes also help to avoid blocking exercising all elements of a system, when part of product functionality takes longer to develop than others.

  12. Pingback: Why Software Engineering Isn’t Engineering, and the Implications – Ian Cackett

  13. Ken says:

    Funny, we used to simply call this type of activity “research” or “prototyping” or “risk analysis”. Very much like the self appointed “gang of four” and their “design patterns” some of this agile terminology obfuscates or creates vagueness of purpose. It’s really okay to use multisyllabic words or complete phrases to describe something to make the goal completely clear.

  14. Pingback: The power of POC in agile projects | Soft Exploration Blog | IT, Software Development, Java, Technology

  15. Razvan Grigorescu says:

    “… Like any other story or task, the spike is then given an estimate and included in the sprint backlog”, but should not be taken into consideration when calculating the velocity of the team (see dictionary term “velocity”)

  16. Steve Wehba says:

    Seems to me that “spike” could potentially have two meanings: (a) a thin, pointed piece of metal, wood, or another rigid material (which, BTW, says nothing about it serving as an anchor); and (b) a sharp increase in the magnitude or concentration of something. Given that the two meanings are so divergent, why not use a different term that is more precise. I find it “funny” that methodologists — who should, if anything, be clear in the terms they use — persist in using words that are unclear. Why not call it “research”, “prerequisite”, or something like that?

  17. Pingback: Product Backlog Refinement Explained (2/3) | The Agile People Developer

  18. Pingback: Product Backlog Refinement explained (2/3) - Scrum.org Community Blog

  19. Pingback: Enhanced Scrum Guide | enhancedscrumguidedotcom

  20. Pingback: Exiling a legacy COM component | Schneide Blog

  21. Pingback: The Ultimate Introduction To Agile Project Management | Thoughts on Software design and development

  22. Pingback: Yanado - Task management inside Gmail.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>