If we knew what we were doing it wouldn’t be research.
Spikes are a special type of story are used for activities such as research, design, exploration and prototyping. The purpose of a spike is to gain the knowledge necessary to reduce the risk of a technical approach, better understand a requirement, or increase the reliability of a story estimate. Originally defined within XP, spikes primarily come in two forms, technical and functional. Functional spikes are used to analyze aggregate functional behavior and to determine how to break it down, how it might be organized and where risk and complexity exists, in turn influencing implementation decisions. Technical spikes are used to determine feasibility and impact of design strategies. Like other stories, spikes are estimated, owned by a team member, and are demonstrated at the end of the iteration. Spikes also provide an agreed to protocol and workflow that Agile Release Trains use to help establish viability of upcoming portfolio and program epics.
Spikes, an invention of XP, are a special type of Story used to drive out risk and uncertainty in a user story or other project aspect. Spikes may be used for a number of reasons:
- Spikes may be used for estimating upcoming Features
- Spikes may be used to perform feasibility analysis, and other activities which help determine the viability of Epics in the business and architecture portfolio kanban systems
- Spikes may be used for basic research to familiarize the team with a new technology or domain.
- Some features and stories contain significant technical or functional risk, spikes can be used to gain confidence in an approach
- When a Feature or story is be too big to be estimated confidently, spikes can be used to analyze the implied behavior so they can split the story into estimable pieces
Technical and Functional Spikes
When a feature or story is too complex to estimate, or simply needs additional research and understanding before it enters a sprint, teams use spikes to further understand the solution.
Technical spikes are used to research various technical approaches in the solution domain. For example, a technical spike may be used to determine a build-versus-buy decision, to evaluate potential performance or load impact of a new user story, to evaluate specific implementation technologies that can be applied to a solution, or for any reason when the team needs to develop a more confident understanding of a desired approach.
Functional spikes are used whenever there is significant uncertainty as to how a user might interact with the system. Functional spikes are often best evaluated through some level of prototyping, whether it be user interface mock-ups, wireframes, page flows, or whatever techniques are best suited to get feedback from the customer or stakeholders.
Some features and user stories may require both types of spikes. Here’s an example:
As a consumer, I want to see my daily energy use in a histogram so that I can quickly understand my past, current, and projected energy consumption.
In this case, a team might create two spikes:
- Technical spike: Research how long it takes to update a customer display to current usage, determining communication requirements, bandwidth, and whether to push or pull the data.
- Functional spike: Prototype a histogram in the web portal and get some user feedback on presentation size, style, and charting
Guidelines for Spikes
Since spikes do not directly deliver user value, they should be used sparingly. The following guidelines apply:
Estimable, Demonstrable, and Acceptable
Like other stories, spikes are put in the backlog, estimated, and sized to fit in an iteration. Spike results are different from a story, because they generally produce information, rather than working code. In any case, the spike should develop just the information sufficient to resolve the uncertainty in being able to identify and size the stories hidden beneath the spike. The output of a spike is demonstrable, both to the team and to any other stakeholders. This brings visibility to the research and architectural efforts and also helps build collective ownership and shared responsibility for the key decisions that are being taken. And, like any other story, spikes are accepted by the Product Owner when the acceptance criteria for the spike have been fulfilled.
The Exception, Not the Rule
Every user story has uncertainty and risk—this is the nature of Agile development. The team discovers the right solution through discussion, collaboration, experimentation, and negotiation. Thus, in one sense, every user story contains spike-level activities to flush out the technical and functional risk. The goal of an agile team is to learn how to embrace and effectively address this uncertainty in each iteration. A spike story, on the other hand, should be reserved for the more critical and larger unknowns.
Implement the Spike in a Separate Iteration from the Resulting Stories
Since a spike represents uncertainty in one or more potential stories, planning for both the spike and the resultant stories in the same iteration is risky. However, if the spike is small and straightforward and a quick solution is likely to be found, then it can be quite efficient to do the spike and complete the stories in the same iteration.
 Leffingwell, Dean. Agile Software Requirements: Lean Requirements Practices for Teams, Programs and the Enterprise. Addison Wesley. 2011.
Last update 15 July, 2014
This information on this page is © 2010-2014 Leffingwell, LLC. and is protected by US and International copyright laws. Neither images nor text can be copied from this site without the express written permission of the copyright holder. For permissions, please contact permissions@ScaledAgile.com.