Files
marathon/docs/ESTIMATION.md
2026-02-07 18:22:05 +00:00

160 lines
7.3 KiB
Markdown

# Estimation and Prioritization
This document defines how r3t Studios sizes, estimates, and prioritizes work. Our approach is grounded in **Lean Software Development** principles, adapted for indie game development.
---
## Lean Principles as Evaluation Questions
Every sizing and prioritization decision should be evaluated through these questions:
| Principle | Evaluation Questions |
|-----------|---------------------|
| **Eliminate Waste** | Does this reduce waste? Is this the simplest solution? Are we building something nobody needs? |
| **Amplify Learning** | What will we learn from this? Does this reduce uncertainty? Should we prototype first? |
| **Decide as Late as Possible** | Do we have enough information to commit? Can this decision be deferred responsibly? |
| **Deliver as Fast as Possible** | What's the smallest increment that delivers value? What's blocking flow? |
| **Empower the Team** | Do I have what I need to do this? Who else should be involved in this decision? |
| **Build Integrity In** | Are we building quality in from the start? Will this create technical debt? |
| **Optimize the Whole** | Does this improve the whole system or just one part? Are we sub-optimizing? |
---
## Sizing
We use **powers of 2** for effort estimation: `1, 2, 4, 8, 16, 32`
This scale is intentionally coarse. Precision in estimation is waste—we optimize for fast, good-enough decisions.
| Size | Points | Description |
|------|--------|-------------|
| **XS** | 1 | Trivial change. A few lines, minimal risk. Less than 2 hours. |
| **S** | 2 | Small task. Well-understood, limited scope. Half a day. |
| **M** | 4 | Medium task. Some complexity or unknowns. About 1 day. |
| **L** | 8 | Large task. Multiple components or significant complexity. 2-3 days. |
| **XL** | 16 | Very large. Should probably be an epic. ~1 week. |
| **XXL** | 32 | Epic-scale work. Multi-phase refactoring or major features. 2-4 weeks. |
### Sizing Guidelines
**Before assigning a size, ask:**
- *Eliminate Waste*: Is this the smallest scope that delivers value?
- *Deliver Fast*: Can we break this down further?
- *Amplify Learning*: Is there uncertainty that inflates the estimate? Should we prototype/spike first?
- *Optimize the Whole*: Does the estimate account for integration, testing, and platform testing (iOS + macOS)?
**If the size is XL (16) or larger:**
This is epic territory. Break it into phases or sub-tasks. An XL/XXL indicates the work is not well-understood or needs careful sequencing. Consider writing an RFC for XXL work.
---
## Priority
Priority is based on **Cost of Delay**—the impact of not doing this work now.
| Label | Priority | Cost of Delay Profile | Description |
|-------|----------|----------------------|-------------|
| **P0** | Critical | Expedite | Game-breaking bug, crash on launch, data loss, or blocks release. Drop everything. Every hour matters. |
| **P1** | High | Fixed Date / High Value | Release blocker, community-visible bug, or deadline-driven (demo, event, content creator access). Do this sprint. |
| **P2** | Medium | Standard | Normal feature work, engine improvements, content additions. Standard backlog work—prioritize by WSJF. |
| **P3** | Low | Intangible | Nice-to-have, polish, research, experiments. Do when capacity allows or inspiration strikes. |
### Priority Guidelines
**Before assigning a priority, ask:**
- *Eliminate Waste*: Should we do this at all? What happens if we never do it?
- *Amplify Learning*: Does doing this first reduce uncertainty for other work?
- *Decide Late*: Do we need to commit now, or can we learn more first? (Especially important for game design decisions)
- *Optimize the Whole*: Does this unblock other high-value work? Does it improve both engine (Marathon) and game (Aspen)?
---
## WSJF (Weighted Shortest Job First)
For backlog ordering within a priority tier, we use WSJF:
```
WSJF = Cost of Delay / Job Size
```
Where **Cost of Delay** considers:
- **Player Value**: Does this improve player experience, immersion, or enjoyment?
- **Time Criticality**: Content creator previews, demo deadlines, platform submission windows
- **Risk Reduction**: Tech debt payoff, engine stability, enables future content/features
Higher WSJF = do it first.
### Example (Game Dev Context)
| Item | Player Value | Time Criticality | Risk Reduction | CoD | Size | WSJF |
|------|--------------|------------------|----------------|-----|------|------|
| Spatial Audio | 8 | 6 | 4 | 18 | 8 | 2.25 |
| Agent AI Polish | 6 | 2 | 2 | 10 | 16 | 0.63 |
| Fix iOS Crash | 10 | 10 | 8 | 28 | 4 | 7.0 |
| Low-Poly Tree Assets | 4 | 2 | 1 | 7 | 2 | 3.5 |
**Order: iOS Crash (7.0), Tree Assets (3.5), Spatial Audio (2.25), AI Polish (0.63)**
The crash gets fixed first (high value, small effort), then quick content wins, then larger features.
---
## Area Labels and Work Types
Our `area/` labels map to different types of work:
| Area | Typical Work | Considerations |
|------|--------------|----------------|
| **area/core** | Engine foundation | High risk—test thoroughly, affects everything |
| **area/rendering** | Graphics, PBR, cameras | Test on iOS + macOS, check DPI scaling |
| **area/audio** | Spatial audio, sound | Requires device testing, earbuds vs speakers |
| **area/networking** | P2P, CRDT sync | Test with poor connections, edge cases |
| **area/platform** | iOS/macOS specific | Platform-specific testing required |
| **area/simulation** | Agent behaviors, AI | Needs playtesting, emergent behavior testing |
| **area/content** | Art, audio assets, dialogue | Artistic review, asset pipeline testing |
| **area/ui-ux** | Menus, HUD, accessibility | Needs user testing, various screen sizes |
| **area/tooling** | Build, CI/CD, dev tools | Verify on fresh checkout |
| **area/docs** | Technical specs, RFCs | Keep updated as code evolves |
| **area/infrastructure** | Deployment, hosting | Test in staging before production |
| **area/rfc** | Design proposals | Gather feedback before committing |
---
## Quick Reference
### When Sizing
1. Compare to recent similar work
2. Use the Lean questions to validate scope
3. If XL or larger, consider making it an epic with sub-tasks
4. Bias toward smaller—deliver fast, learn, iterate
5. Remember: estimates are for ordering work, not commitments
### When Prioritizing
1. Is it game-breaking (crash/data loss)? If yes, **P0**—do it now
2. Is there a deadline (demo/release)? If yes, **P1**—this sprint
3. Otherwise, score WSJF and order the backlog as **P2**
4. Nice-to-haves and experiments go to **P3**
5. Re-evaluate priorities weekly—inspiration and context change
### For Solo Work
- **Batching**: Group similar work (all rendering tasks, all iOS fixes) to minimize context switching
- **Flow**: Protect deep work time—don't interrupt XL tasks with small P3 items
- **Momentum**: Sometimes doing a quick XS/S task builds momentum for harder work
- **Inspiration**: If you're excited about a P3 item, that's valuable—creative energy matters in game dev
---
## References
- Poppendieck, Mary & Tom. *Lean Software Development: An Agile Toolkit*. Addison-Wesley, 2003.
- Reinertsen, Donald G. *The Principles of Product Development Flow*. Celeritas Publishing, 2009.
- [Cost of Delay - Black Swan Farming](https://blackswanfarming.com/cost-of-delay/)
- [WSJF - Scaled Agile Framework](https://framework.scaledagile.com/wsjf/)