Sometimes they are called “spikes”, or “technical discoveries”, and sometimes just “features”.
Considerations
The most important aspects are ensuring you have iterations that deliver value and keep the train moving forward. That means whatever you’re designing won’t just mull and land in a huge high-risk, complicated piece. That also doesn’t mean you’re delivering half-baked capabilities. Big features can always deliver value in a piecemeal way, so you just have to find where those are. At a very high level my basic breakdown tends to be “Now”, “Next”, and “Later” for bucketing iterations. That’s general enough to make it easy to classify but sufficiently informative until you need concrete deadlines.
How do you start? Here’s some basic questions I like to ask myself:
- What’s the easy part? What’s the hard part?
- What’s well-defined and what’s “fuzzy”?
- What are the integration points? Interchange formats (HTTP, JSON, gRPC, files on disk, …), authentication boundaries. etc.
- How can we deliver value for each step in a milestone?
- If this is a paid/premium feature, how does the licensing and/or tiering work?
- Can I build this myself? What can’t I build and who do I need to involve?
- What can help me that’s off the shelf? Don’t use a dependency to implement your core business.
- How do I measure success? How do I measure failure?
Templates
GitLab has a few high-level templates that can help out too (Note these are the plaintext links since much of the docs are markdown comments)