Finding Spikes in Your Plans

Spikes are for research, design, investigation, exploration. The purpose is to gain necessary knowledge to better understand a task and to work on that.

Word definition

The word spike comes from rock climbing activities. While climbing, we might stop to force a spike into the rock face, which is not actual climbing but by doing this we are making sure that future climbing will be smooth and easy. 

Spikes as the Solution

Problem: We have a lot of uncertainties in our plans

  • It's demotivating when we're doing our tasks and we don't even understand why we're demotivated before doing it
  • We can't see the risks earlier, we can't say how long something will take
  • We don't know if we should spend time on something, what happens if we won't need it at the end?

Solution: Let's use Spikes!

  • We do the initial research early and our expectation is actually to "Learn" and "Understand" before we "Do" something
  • Spikes allow us to focus on analyzing the risks, do exploration. The purpose of a spike is not "Doing" but Enabling doing
  • Work for researching is never lost, outcome of a research is knowledge 🧠. After the research we can say that we shouldn't do the task now, and we're still staying with knowledge.

Let's say there's a task Make a slideshow with taking 10 photos, how you can plan this? How long this will take? You can say taking photos will take ~2 hours, making slideshow ~5 / ~10 / ~15 hours? If you don't know which tool to use, if you know the tool but you never used it, how you can plan working with that tool? In these cases, we create a Spike and we call this as an Enabler. You first do your Spike: "Research and make a slideshow with a few photos to decide which tool to use" and you timebox it for 2 hours. After 2 hours, you have the enough knowledge of slideshow tools and enough understanding of your task. After your spike, it's better to refine your task once again as you know more now.

KelebekLabs is doing R&D, it's likely to happen that we'll have a lot of Spikes. 
If we knew what we were doing, it wouldn’t be called research. — Albert Einstein

Best practices of a Spike

  • Spike to represent uncertainty
  • Planning for both the spike and the resulting stories in the same iteration is sometimes risky
  • Better to plan the spike first and then take the decisions on actual story
  • Treat spike as a problem to be fixed, ideally shouldn't stay in the backlog for long
  • Spikes are only used with research(or exploration and other activities above) and documentation of it

Spikes can be technical or functional;

Functional spikes – They are used to analyze overall solution behavior and determine:

How to break it down
How to organize the work
Where risk and complexity exist
How to use insights to influence implementation decisions

Technical spikes – They are used to research various approaches in the solution domain. For example:

Determine a build-versus-buy decision
Evaluate the potential performance or load impact of a new user story
Evaluate specific technical implementation approaches
Develop confidence about the desired solution path

Reference links

https://www.slideshare.net/GoAtlassian/spiking-your-way-to-improved-agile-development-anatoli-kazatchkov

https://www.scaledagileframework.com/spikes/

https://www.c-sharpcorner.com/article/what-is-spike-in-agile-software-development2/

https://en.wikipedia.org/wiki/Spike_(software_development)

https://www.leadingagile.com/2014/04/dont-estimate-spikes/

https://t2informatik.de/en/smartpedia/spike-story/

https://youtu.be/zOIQjluFQZ4?t=203

https://blogs.starcio.com/2019/11/spikes-agile-poc.html

https://rgalen.com/agile-training-news/2018/12/7/12-considerations-for-user-story-spikes

https://spin.atomicobject.com/2017/05/23/spikes-for-problem-solving/

https://community.atlassian.com/t5/Jira-questions/How-do-you-use-Spikes-in-Jira/qaq-p/492960

https://www.leadingagile.com/2016/09/whats-a-spike-who-should-enter-it-how-to-word-it/


Popular posts from this blog

Linode, Firewall, Cloudflare Full (Strict) with Terraform Cloud

How to Communicate Your Process Visually using BPMN as Code

Load Testing with Ruby-JMeter