GitScrum / Docs
All Best Practices

Technical Spikes and Research Tasks | Sprint Planning

Run time-boxed spikes to answer technical questions before committing. GitScrum tracks spike tasks with findings and follow-on implementation stories.

8 min read

Spikes answer questions before you invest in solutions. GitScrum helps teams track research work and capture learnings for future reference.

When to Spike

Identifying Need

WHEN TO DO A SPIKE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ DO A SPIKE WHEN:                                            β”‚
β”‚ ────────────────                                            β”‚
β”‚                                                             β”‚
β”‚ FEASIBILITY UNKNOWN:                                        β”‚
β”‚ "Can we even do this?"                                    β”‚
β”‚ "Will this technology work for our use case?"            β”‚
β”‚ "Is this technically possible?"                           β”‚
β”‚                                                             β”‚
β”‚ ESTIMATE UNCERTAIN:                                         β”‚
β”‚ "We have no idea how long this will take"                β”‚
β”‚ "Team has never done this before"                        β”‚
β”‚ "Could be 2 days or 2 weeks"                             β”‚
β”‚                                                             β”‚
β”‚ MULTIPLE OPTIONS:                                           β”‚
β”‚ "Should we use Library A or Library B?"                  β”‚
β”‚ "What's the best approach?"                              β”‚
β”‚ "We need to compare options"                             β”‚
β”‚                                                             β”‚
β”‚ INTEGRATION RISK:                                           β”‚
β”‚ "Will this work with our existing system?"               β”‚
β”‚ "How do we connect to this API?"                         β”‚
β”‚ "What's the performance impact?"                         β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ DON'T SPIKE WHEN:                                           β”‚
β”‚ ─────────────────                                           β”‚
β”‚ ❌ Team already knows the answer                           β”‚
β”‚ ❌ It's a familiar type of work                            β”‚
β”‚ ❌ Spike would take as long as just doing it              β”‚
β”‚ ❌ Analysis paralysis - just try it                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Spike Structure

Creating Effective Spikes

SPIKE TEMPLATE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ SPIKE: PDF Generation Approach                             β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ TYPE: Technical Spike                                  β”‚β”‚
β”‚ β”‚ TIME BOX: 2 days                                        β”‚β”‚
β”‚ β”‚ OWNER: @alex                                            β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ QUESTION TO ANSWER:                                      β”‚β”‚
β”‚ β”‚ Which PDF library should we use for invoice            β”‚β”‚
β”‚ β”‚ generation that supports our requirements?             β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ CONTEXT:                                                 β”‚β”‚
β”‚ β”‚ β€’ Need to generate invoices with tables, logos        β”‚β”‚
β”‚ β”‚ β€’ Must support multiple languages (RTL included)      β”‚β”‚
β”‚ β”‚ β€’ Target: < 2 seconds per document                    β”‚β”‚
β”‚ β”‚ β€’ Volume: ~1000 documents/day                          β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ SUCCESS CRITERIA:                                        β”‚β”‚
β”‚ β”‚ ☐ Recommendation with rationale                        β”‚β”‚
β”‚ β”‚ ☐ Proof of concept with sample invoice                β”‚β”‚
β”‚ β”‚ ☐ Performance benchmarks                               β”‚β”‚
β”‚ β”‚ ☐ Estimate for full implementation                    β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ OPTIONS TO EXPLORE:                                      β”‚β”‚
β”‚ β”‚ 1. PDFKit (client-side)                                β”‚β”‚
β”‚ β”‚ 2. Puppeteer (headless Chrome)                         β”‚β”‚
β”‚ β”‚ 3. WeasyPrint (Python)                                 β”‚β”‚
β”‚ β”‚ 4. wkhtmltopdf                                          β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ OUTPUT:                                                  β”‚β”‚
β”‚ β”‚ Document with findings linked to this task            β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ KEY ELEMENTS:                                               β”‚
β”‚ β€’ Clear question (not vague exploration)                 β”‚
β”‚ β€’ Time box (prevents rabbit holes)                        β”‚
β”‚ β€’ Success criteria (know when done)                      β”‚
β”‚ β€’ Expected output (document, prototype, estimate)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Types of Spikes

SPIKE CATEGORIES:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ TECHNICAL SPIKE:                                            β”‚
β”‚ ────────────────                                            β”‚
β”‚ Explore technical approach or feasibility                 β”‚
β”‚                                                             β”‚
β”‚ Examples:                                                   β”‚
β”‚ β€’ "Can we use GraphQL with our current stack?"           β”‚
β”‚ β€’ "How do we integrate with Salesforce API?"             β”‚
β”‚ β€’ "What's the best caching strategy?"                    β”‚
β”‚                                                             β”‚
β”‚ Output: Technical document, prototype, recommendation    β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ FUNCTIONAL SPIKE:                                           β”‚
β”‚ ─────────────────                                           β”‚
β”‚ Explore user needs or requirements                        β”‚
β”‚                                                             β”‚
β”‚ Examples:                                                   β”‚
β”‚ β€’ "What do users actually need from this feature?"       β”‚
β”‚ β€’ "How do competitors solve this?"                       β”‚
β”‚ β€’ "What are the edge cases?"                             β”‚
β”‚                                                             β”‚
β”‚ Output: User research, requirements document, mockups    β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ ESTIMATION SPIKE:                                           β”‚
β”‚ ─────────────────                                           β”‚
β”‚ Reduce uncertainty to enable estimation                   β”‚
β”‚                                                             β”‚
β”‚ Examples:                                                   β”‚
β”‚ β€’ "How much work is the migration?"                      β”‚
β”‚ β€’ "What's involved in upgrading to v3?"                 β”‚
β”‚ β€’ "How complex is this integration?"                     β”‚
β”‚                                                             β”‚
β”‚ Output: Rough estimates, risk assessment, task breakdown β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Running Spikes

Time-Boxing

TIME BOX DISCIPLINE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ WHY TIME BOX:                                               β”‚
β”‚ ─────────────                                               β”‚
β”‚ β€’ Prevents analysis paralysis                             β”‚
β”‚ β€’ Forces decisions with available info                   β”‚
β”‚ β€’ Limits investment in exploration                        β”‚
β”‚ β€’ Keeps sprint predictable                                β”‚
β”‚                                                             β”‚
β”‚ TYPICAL TIME BOXES:                                         β”‚
β”‚ β€’ 1 day: Quick investigation                              β”‚
β”‚ β€’ 2 days: Moderate exploration                            β”‚
β”‚ β€’ 3-5 days: Complex research (rare)                       β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ WHEN TIME BOX ENDS:                                         β”‚
β”‚ ───────────────────                                         β”‚
β”‚                                                             β”‚
β”‚ SCENARIO 1: QUESTION ANSWERED                              β”‚
β”‚ Great! Document findings, close spike                     β”‚
β”‚ Estimate follow-on story                                  β”‚
β”‚                                                             β”‚
β”‚ SCENARIO 2: NEED MORE TIME                                 β”‚
β”‚ ❌ DON'T: Just keep going                                  β”‚
β”‚ βœ… DO: Report what you learned                            β”‚
β”‚ βœ… DO: Decide if more time is worth it                   β”‚
β”‚ βœ… DO: Re-scope if continuing                             β”‚
β”‚                                                             β”‚
β”‚ SCENARIO 3: ANSWER IS "NO"                                 β”‚
β”‚ This is still valuable!                                   β”‚
β”‚ "We learned this approach won't work"                    β”‚
β”‚ Document why, explore alternatives                        β”‚
β”‚                                                             β”‚
β”‚ SPIKE OUTCOME TASK:                                         β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ SPIKE-456: PDF Generation Approach (COMPLETE)          β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ TIME USED: 1.5 days (of 2 day box)                     β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ FINDINGS:                                                β”‚β”‚
β”‚ β”‚ Recommend Puppeteer for PDF generation                 β”‚β”‚
β”‚ β”‚ β€’ Best quality                                         β”‚β”‚
β”‚ β”‚ β€’ Meets performance requirements                       β”‚β”‚
β”‚ β”‚ β€’ Team has JS experience                               β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ POC: Created sample invoice in /spikes/pdf-gen        β”‚β”‚
β”‚ β”‚ Perf: 1.2 seconds per document βœ…                      β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ FOLLOW-ON ESTIMATE:                                      β”‚β”‚
β”‚ β”‚ Full implementation: 5 points                          β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ NEXT: Create story STORY-789 for implementation       β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Documenting Results

Capturing Learnings

SPIKE DOCUMENTATION:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ SPIKE OUTPUT TEMPLATE:                                      β”‚
β”‚                                                             β”‚
β”‚ # PDF Generation Spike - Findings                         β”‚
β”‚                                                             β”‚
β”‚ ## Question                                                β”‚
β”‚ Which PDF library should we use for invoice generation?  β”‚
β”‚                                                             β”‚
β”‚ ## Options Evaluated                                       β”‚
β”‚                                                             β”‚
β”‚ | Library    | Performance | Quality | RTL | Complexity | β”‚
β”‚ |------------|-------------|---------|-----|------------| β”‚
β”‚ | PDFKit     | Fast        | Medium  | ❌  | Low        | β”‚
β”‚ | Puppeteer  | Medium      | High    | βœ…  | Medium     | β”‚
β”‚ | WeasyPrint | Slow        | High    | βœ…  | Low        | β”‚
β”‚ | wkhtmltopdf| Medium      | Medium  | βœ…  | Low        | β”‚
β”‚                                                             β”‚
β”‚ ## Recommendation                                          β”‚
β”‚ **Puppeteer** - Best balance of quality and performance  β”‚
β”‚                                                             β”‚
β”‚ ### Rationale                                              β”‚
β”‚ - Best visual quality (uses Chrome rendering)            β”‚
β”‚ - Meets performance SLA (1.2s per doc)                   β”‚
β”‚ - Team familiar with JavaScript                          β”‚
β”‚ - Active community and maintenance                       β”‚
β”‚                                                             β”‚
β”‚ ## Proof of Concept                                        β”‚
β”‚ Location: `/spikes/pdf-generation/`                       β”‚
β”‚ Sample output: `/spikes/pdf-generation/sample-invoice.pdf`β”‚
β”‚                                                             β”‚
β”‚ ## Risks                                                   β”‚
β”‚ - Chrome dependency adds memory overhead                  β”‚
β”‚ - Need to manage Chrome process lifecycle                β”‚
β”‚                                                             β”‚
β”‚ ## Implementation Estimate                                 β”‚
β”‚ - Setup Puppeteer: 1 point                               β”‚
β”‚ - Invoice template: 2 points                             β”‚
β”‚ - Testing + edge cases: 2 points                         β”‚
β”‚ **Total: 5 points**                                       β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ LINK: Attach document to spike task                       β”‚
β”‚ Future teams can reference this research                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Spike in Workflow

Planning for Spikes

SPIKES IN SPRINT:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ BEFORE SPRINT:                                              β”‚
β”‚ ──────────────                                              β”‚
β”‚ In refinement, identify stories with uncertainty         β”‚
β”‚ "We can't estimate STORY-456 - need spike first"        β”‚
β”‚                                                             β”‚
β”‚ DURING PLANNING:                                            β”‚
β”‚ ────────────────                                            β”‚
β”‚ Include spike in sprint backlog                           β”‚
β”‚ Time-box is the "estimate"                                β”‚
β”‚ Story that depends on spike goes to next sprint          β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ SPRINT BACKLOG:                                             β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ Sprint 14 Backlog                                      β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ STORIES:                                                 β”‚β”‚
β”‚ β”‚ β€’ STORY-789: User login (5 pts)                       β”‚β”‚
β”‚ β”‚ β€’ STORY-790: Password reset (3 pts)                   β”‚β”‚
β”‚ β”‚ β€’ STORY-791: Dashboard widgets (8 pts)                β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ SPIKES:                                                  β”‚β”‚
β”‚ β”‚ β€’ SPIKE-456: PDF generation approach (2 days)         β”‚β”‚
β”‚ β”‚ β€’ SPIKE-457: SSO integration feasibility (1 day)      β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ NOTE: PDF story (STORY-792) planned for Sprint 15    β”‚β”‚
β”‚ β”‚ pending spike results                                  β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ AFTER SPIKE:                                                β”‚
β”‚ ────────────                                                β”‚
β”‚ 1. Document findings                                      β”‚
β”‚ 2. Create/refine follow-on story                          β”‚
β”‚ 3. Estimate based on learnings                            β”‚
β”‚ 4. Add to backlog for next sprint                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related Solutions