<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Managing · Jared Lynskey</title>
    <link>https://jared.lynskey.co.nz/en/tags/managing/</link>
    <description>Short stories of value on software engineering and engineering leadership — performance reviews, hiring and scaling teams, CI/CD, DevOps monitoring and agentic AI. Written from Seoul.</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© 2026 Jared Lynskey</copyright>
    <lastBuildDate>Thu, 22 Oct 2026 00:00:00 +1200</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/en/tags/managing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Is a Spike in Agile? When Your Team Can&#39;t Estimate a Story</title>
      <link>https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/</guid>
      <pubDate>Wed, 18 Oct 2023 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Managing</category>
      <category>Spikes</category>
      <category>Agile</category>
      <category>Development</category>
      <category>Scrum</category>
      <category>Technical Debt</category>
      <category>XP</category>
      <category>Sprint Planning</category>
      <category>Risk Management</category>
      <description>In agile and Scrum, a spike is a short, time-boxed investigation that answers one specific question, so a story nobody could estimate can be. When one is worth running, technical vs functional spikes, how I structure one, and the template I use.</description>
      <content:encoded><![CDATA[<p>In agile and Scrum teams, a spike is a short, time-boxed investigation, usually one to three days, that answers one specific question so the story that was stuck on it can be estimated. You come out of it with findings and a recommendation, not code you&rsquo;d ship. Run one instead of estimating when it&rsquo;s the unknowns, not the size of the work, that stop the team putting a number on a story.</p>
<p>Every so often in sprint planning, a story lands that nobody can point. Estimates range from a 2 to a 13, someone says &ldquo;well, it depends&rdquo;, and the discussion goes in circles. <em>Should we use GraphQL or REST? Can the system actually handle 10,000 concurrent users? Is this third-party library production-ready?</em> You can&rsquo;t estimate your way out of questions like that. You have to go and find out. That&rsquo;s what a spike is for.</p>
<figure><video
    class="my-0 rounded-md"
    controls playsinline preload="none"
    poster="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film-poster.jpg" style="background:url('data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAAAQBQCdASogABIAPw1qpkemIyGYBABjEMT0gAA1cWIXGJs2LD6BmCYzHU6rXeJ2rfBgAP7ueaFWdAS7Wg/a9Absx0adTGm5KJURtiYmXfxVcs0TIltNDc4MndOlEAAA') center/cover no-repeat"
    width="1280"
    height="720"
    aria-label="A short narrated film of this post">
    <source src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film.webm" type="video/webm">
    <track kind="subtitles" src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film_en.vtt" srclang="en" label="English">
    <track kind="subtitles" src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film_ja.vtt" srclang="ja" label="日本語">
    <track kind="subtitles" src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film_ko.vtt" srclang="ko" label="한국어">
    <track kind="subtitles" src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film_vi.vtt" srclang="vi" label="Tiếng Việt">
    <track kind="subtitles" src="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/spike-film_zh-cn.vtt" srclang="zh-cn" label="简体中文">
  </video><figcaption>This post as an eight-minute film, if you&rsquo;d rather watch than read.</figcaption>
</figure>


<h4 class="relative group">Where spikes come from
    <div id="where-spikes-come-from" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#where-spikes-come-from" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>The term is from Extreme Programming, where it meant a &ldquo;very simple program to explore potential solutions&rdquo; — driving a spike through the problem. The modern version is a short, time-boxed research task whose output is knowledge, not working software. A spike isn&rsquo;t a user story and delivers no customer value on its own, and that&rsquo;s fine. Its job is to answer one specific question so the real work can be estimated and planned honestly.</p>
<p>In practice they come in two flavours. Technical spikes explore the how: evaluating a framework or library, prototyping an architectural pattern, performance-testing under realistic conditions, or finding out how painful an integration will really be. Functional spikes explore the what: clarifying an ambiguous story, testing a UI idea with a throwaway prototype, or poking at domain complexity until it makes sense.</p>

<h4 class="relative group">Why they&rsquo;re worth the time
    <div id="why-theyre-worth-the-time" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-theyre-worth-the-time" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Trying to estimate work with big unknowns gives you one of two things: padded estimates or missed deadlines. A spike converts &ldquo;no idea&rdquo; into actual data, so the team can commit to something with a straight face. It also replaces opinion wars with evidence — instead of arguing about which database is better, you spend two days measuring, and the findings feed straight into your <a href="https://jared.lynskey.co.nz/en/posts/2024/2024-12-03-decision-docs/" >decision documents</a>.</p>
<p>Mostly, though, it&rsquo;s cheap insurance. A two-day spike that reveals a library&rsquo;s limitations costs far less than discovering the same limitation three sprints into development.</p>

<h4 class="relative group">When a spike is (and isn&rsquo;t) the right call
    <div id="when-a-spike-is-and-isnt-the-right-call" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#when-a-spike-is-and-isnt-the-right-call" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Reach for a spike when the team can&rsquo;t confidently estimate a story because of technical unknowns, when several viable options exist and you need data to pick one, when you&rsquo;re considering a new technology or integration, when performance is both uncertain and critical, or when requirements stay ambiguous no matter how many stakeholder meetings you sit through.</p>
<p>Don&rsquo;t use one for work the team already knows how to do, or as a way to delay a decision you could make with the information you have. And a spike is not a substitute for proper requirements gathering or <a href="https://jared.lynskey.co.nz/en/posts/2023/2023-08-27-user-acceptance-testing/" >user acceptance testing</a> — it answers a question, it doesn&rsquo;t validate a product.</p>

<h4 class="relative group">How I run one
    <div id="how-i-run-one" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-i-run-one" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Start by writing down the question. Not &ldquo;research caching&rdquo; but &ldquo;can a Redis cluster meet our 50ms latency requirement?&rdquo; Give it explicit scope — what&rsquo;s in, what&rsquo;s out — a time-box of one to three days (if it needs more, the question is too broad), and success criteria so you&rsquo;ll know when you&rsquo;re done.</p>
<p>Then investigate: read the docs and case studies, build a minimal proof of concept, talk to people who&rsquo;ve done it before, and measure things with real code. Spike code is disposable by design.</p>
<p>When the time-box ends, write up findings, a recommendation with the reasoning, and any risks you uncovered, with links to the prototype clearly marked as spike output. Present it to the team, take questions, and adjust the backlog — create, refine, or kill stories based on what you learned. It&rsquo;s also worth reflecting on how the spike itself went in your next <a href="https://jared.lynskey.co.nz/en/posts/2023/2023-09-01-retrospecs/" >retrospective</a>; teams get noticeably better at spiking with practice.</p>

<h4 class="relative group">The template I use
    <div id="the-template-i-use" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-template-i-use" aria-label="Anchor">#</a>
    </span>
    
</h4>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## Spike: [Title]
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Time-box**</span>: [X days]
</span></span><span class="line"><span class="cl"><span class="gs">**Owner**</span>: [Name]
</span></span><span class="line"><span class="cl"><span class="gs">**Sprint**</span>: [Sprint number/name]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Question to Answer
</span></span></span><span class="line"><span class="cl">[Single, focused question this spike will answer]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Background
</span></span></span><span class="line"><span class="cl">[Why this spike is needed; what triggered the uncertainty]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Assumptions
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> [Assumption 1]
</span></span><span class="line"><span class="cl"><span class="k">-</span> [Assumption 2]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Scope
</span></span></span><span class="line"><span class="cl">**In Scope**:
</span></span><span class="line"><span class="cl"><span class="k">-</span> [Item 1]
</span></span><span class="line"><span class="cl"><span class="k">-</span> [Item 2]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**Out of Scope**</span>:
</span></span><span class="line"><span class="cl"><span class="k">-</span> [Item 1]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Success Criteria
</span></span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> [Criterion 1]
</span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> [Criterion 2]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Findings
</span></span></span><span class="line"><span class="cl">[To be completed during spike]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Recommendation
</span></span></span><span class="line"><span class="cl">[To be completed after spike]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Follow-up Stories
</span></span></span><span class="line"><span class="cl"><span class="k">- [ ]</span> [Story 1]
</span></span><span class="line"><span class="cl">- [ ] [Story 2]</span></span></code></pre></div></div>
<p>The assumptions section earns its place. Writing down &ldquo;our data model is primarily relational&rdquo; and &ldquo;reads will outnumber writes 10:1&rdquo; before you start does two things: it lets people challenge your framing before you burn the time-box, and it means that if an assumption turns out to be wrong mid-spike, you&rsquo;ve learned something valuable rather than wasted two days.</p>

<h4 class="relative group">Ways spikes go wrong
    <div id="ways-spikes-go-wrong" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ways-spikes-go-wrong" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>The classic failure is scope creep — the spike quietly becomes an open-ended research project. When new questions appear (they will), write them down as candidate spikes rather than expanding the current one. The second failure is goldplating: the moment you catch yourself adding error handling or tests to spike code, you&rsquo;ve crossed from exploration into implementation. Third, skipping the write-up — six months later someone will face the same question, and your two days of learning will be gone. And finally, treating the spike as a commitment to a predetermined answer. A spike that proves an approach won&rsquo;t work has done its job perfectly.</p>

<h4 class="relative group">Fitting them into sprint planning
    <div id="fitting-them-into-sprint-planning" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fitting-them-into-sprint-planning" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>A few habits that have worked when <a href="https://jared.lynskey.co.nz/en/posts/2023/2023-10-08-planning-an-api/" >planning sprints</a>: if a story has real unknowns, spike it this sprint and schedule the actual work for a later one. Keep it to one or two spikes per sprint — more than that and focus evaporates. Don&rsquo;t put story points on spikes; they produce knowledge, not software, so track them by their time-box. And present spike findings during refinement, before the team estimates the related stories, not after.</p>
<p>The next time a story generates more questions than answers, consider that a spike might be the most useful work in the sprint. Sometimes the fastest way forward is to stop and learn.</p>

<h4 class="relative group">The short version
    <div id="the-short-version" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-short-version" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>A spike is a time-boxed investigation, one to three days, into a single question the team can&rsquo;t estimate its way past. It&rsquo;s the right call when unknowns are what&rsquo;s blocking the estimate: several viable options and no data to choose between them, a new technology or integration, performance that&rsquo;s both uncertain and critical, or requirements that stay vague. It isn&rsquo;t for work the team already knows how to do, or for putting off a decision you could make with what you already know.</p>
<p>What it produces is knowledge rather than software: findings, a recommendation with the reasoning, the risks you uncovered and a throwaway prototype. The backlog changes to match. Spikes get a time-box rather than story points, and the findings should reach refinement before anyone estimates the related stories.</p>

<h4 class="relative group">Further Reading
    <div id="further-reading" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#further-reading" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p><strong>Related Articles on This Site:</strong></p>
<ul>
<li><a href="https://jared.lynskey.co.nz/en/posts/2023/2023-09-01-retrospecs/" >Retrospectives: Reflecting on Spike Outcomes</a> - Folding spike learnings into continuous improvement</li>
<li><a href="https://jared.lynskey.co.nz/en/posts/2023/2023-08-27-user-acceptance-testing/" >User Acceptance Testing</a> - Validating that spike-informed decisions meet user needs</li>
<li><a href="https://jared.lynskey.co.nz/en/posts/2024/2024-12-03-decision-docs/" >Decision Documents</a> - Structuring the decisions that come out of spike findings</li>
<li><a href="https://jared.lynskey.co.nz/en/posts/2023/2023-10-08-planning-an-api/" >API Planning</a> - How spikes can inform API design decisions</li>
</ul>
<p><strong>External Resources:</strong></p>
<ul>
<li><a href="https://scaledagileframework.com/spikes/"  target="_blank" rel="noreferrer">Spikes - Scaled Agile Framework (SAFe)</a> - The SAFe guide to spikes at scale</li>
<li><a href="http://www.extremeprogramming.org/rules/spike.html"  target="_blank" rel="noreferrer">Spike Solutions - Extreme Programming</a> - The original XP concept</li>
<li><a href="https://scrumguides.org/"  target="_blank" rel="noreferrer">The Scrum Guide</a> - Where spikes fit into sprint planning</li>
<li><a href="https://martinfowler.com/bliki/TechnicalDebt.html"  target="_blank" rel="noreferrer">Martin Fowler on Technical Debt</a> - How spikes help prevent technical debt</li>
</ul>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-10-18-spike/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
