Effort Estimation¶
The effort package provides types for estimating implementation effort and tracking complexity factors.
Overview¶
Effort estimation combines:
- Person-days estimate - Numeric effort in person-days
- T-shirt sizing - Quick categorical sizing (XS, S, M, L, XL)
- Confidence levels - How certain the estimate is
- Complexity factors - What makes implementation complex
EffortEstimate Type¶
type EffortEstimate struct {
PersonDays int `json:"person_days"`
TShirtSize TShirtSize `json:"tshirt_size,omitempty"`
Confidence Confidence `json:"confidence"`
Note string `json:"note,omitempty"`
}
T-Shirt Sizing¶
Quick categorical sizing for rough estimates:
| Size | Description | Typical Days |
|---|---|---|
XS | Extra Small | 1-2 days |
S | Small | 3-5 days |
M | Medium | 1-2 weeks |
L | Large | 2-4 weeks |
XL | Extra Large | 4+ weeks |
import "github.com/grokify/prism-roadmap/effort"
size := effort.TShirtSizeMedium
days := size.EstimatedDays() // Returns 7-10
Confidence Levels¶
Indicate certainty of estimates:
| Level | Multiplier | When to Use |
|---|---|---|
high | 1.0 | Well-understood work, similar past projects |
medium | 1.3 | Some unknowns, reasonable assumptions |
low | 1.5 | Many unknowns, exploratory work |
Quick Start¶
import "github.com/grokify/prism-roadmap/effort"
estimate := &effort.EffortEstimate{
PersonDays: 15,
TShirtSize: effort.TShirtSizeMedium,
Confidence: effort.ConfidenceMedium,
Note: "Includes API and UI work",
}
// Get adjusted estimate with confidence buffer
adjusted := estimate.AdjustedDays()
// 15 × 1.3 = 19.5 days
ComplexityFactors Type¶
Track what makes implementation complex:
type ComplexityFactors struct {
NewArchitecture bool `json:"new_architecture"`
NewDesignUX bool `json:"new_design_ux"`
NewBillingSKU bool `json:"new_billing_sku"`
Dependencies []Dependency `json:"dependencies,omitempty"`
}
type Dependency struct {
ID string `json:"id"`
Name string `json:"name"`
Type string `json:"type"` // internal, external, vendor
Team string `json:"team,omitempty"`
Status string `json:"status"` // unknown, in_progress, blocked, complete
RiskLevel string `json:"risk_level,omitempty"`
Description string `json:"description,omitempty"`
}
Complexity Score¶
Calculate overall complexity:
complexity := &effort.ComplexityFactors{
NewArchitecture: true, // +0.3
NewDesignUX: true, // +0.2
NewBillingSKU: false, // +0.0
Dependencies: []effort.Dependency{
{Name: "Auth Service", Type: "internal"},
{Name: "Payment Provider", Type: "vendor"},
},
}
score := complexity.ComplexityScore()
// 1.0 (base) + 0.3 + 0.2 + (2 × 0.1) = 1.7
Complexity Weights¶
| Factor | Weight | Description |
|---|---|---|
| Base | 1.0 | Starting score |
| New Architecture | +0.3 | Major architectural changes |
| New Design/UX | +0.2 | Design collaboration required |
| New Billing SKU | +0.2 | Revenue/billing changes |
| Per Dependency | +0.1 | Each external dependency |
Dependency Types¶
| Type | Description | Risk Level |
|---|---|---|
internal | Another internal team | Lower |
external | External API/service | Medium |
vendor | Third-party vendor | Higher |
Integration with RoadmapItem¶
import (
"github.com/grokify/prism-roadmap/rmi"
"github.com/grokify/prism-roadmap/effort"
)
item := &rmi.RoadmapItem{
ID: "feature-1",
Name: "Payment Integration",
Effort: &effort.EffortEstimate{
PersonDays: 20,
TShirtSize: effort.TShirtSizeLarge,
Confidence: effort.ConfidenceLow,
},
Complexity: &effort.ComplexityFactors{
NewArchitecture: false,
NewBillingSKU: true,
Dependencies: []effort.Dependency{
{Name: "Stripe API", Type: "vendor", Status: "unknown"},
},
},
}
// Priority considers effort in denominator
score := item.PriorityScore()
Best Practices¶
Estimation Tips
- Use T-shirt sizes for initial roadmap discussions
- Add person-day estimates when planning sprints
- Lower confidence = higher buffer needed
- Track dependencies early to identify risks
Common Pitfalls
- Don't ignore complexity factors when estimating
- Vendor dependencies often take longer than expected
- New architecture work compounds effort
- Update confidence as you learn more
See Also¶
- Market Signal - Customer demand signals
- Roadmap Items - Complete RMI type
- Prioritization - RICE scoring with effort