
Feature Review
- 99 installs
- 325 repo stars
- Updated August 2, 2026
- athola/claude-night-market
Classify product features as proactive vs reactive so architecture, latency, and UX tradeoffs stay explicit before you implement.
About
Feature Review is an agent skill that encodes a lightweight classification system for product features along a proactive versus reactive axis, with concrete implications for latency, resource use, architecture, and perceived UX. Solo and indie builders install it when they are turning ideas into shippable scope and need a shared vocabulary so agents and humans do not mix background jobs with sub-100ms interactions in the same design. The skill explains when anticipation is worth speculative cost, which patterns fit event-driven workers versus request-response APIs, and how mislabeling a feature creates wrong SLAs and angry users. It is especially useful during validate prototyping and build PM, but the same lens applies at ship when reviewing performance budgets and at grow when evaluating suggestion or lifecycle features. It is editorial methodology, not a code generator: output is clearer feature specs and review notes you can hand to implementation skills or your own backlog.
- Two-axis classification: proactive (anticipates intent) vs reactive (responds to input)
- Documents latency tolerance, architecture patterns, and tradeoff tables per class
- Maps examples: auto-save, prefetch, suggestions vs click-driven flows
- Supports consistent review language across specs, PRDs, and agent implementation plans
Feature Review by the numbers
- 99 all-time installs (skills.sh)
- Ranked #1,367 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/athola/claude-night-market --skill feature-reviewAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 99 |
|---|---|
| repo stars | ★ 325 |
| Security audit | 1 / 3 scanners passed |
| Last updated | August 2, 2026 |
| Repository | athola/claude-night-market ↗ |
What it does
Classify product features as proactive vs reactive so architecture, latency, and UX tradeoffs stay explicit before you implement.
Files
Table of Contents
- Philosophy
- When to Use
- When NOT to Use
- Quick Start
- 1. Inventory Current Features
- 2. Score and Classify
- 3. Generate Suggestions
Verification
Run make test-feature-review to verify scoring logic after changes.
- 4. Upload to GitHub
- Workflow
- Phase 1: Feature Discovery (`feature-review:inventory-complete`))
- Phase 2: Classification (`feature-review:classified`))
- Phase 3: Scoring (`feature-review:scored`))
- Phase 4: Tradeoff Analysis (`feature-review:tradeoffs-analyzed`))
- Phase 5: Gap Analysis & Suggestions (`feature-review:suggestions-generated`))
- Phase 6: GitHub Integration (`feature-review:issues-created`))
- Configuration
- Configuration File
- Guardrails
- Required TodoWrite Items
- Integration Points
- Output Format
- Feature Inventory Table
- Suggestion Report
- Feature Suggestions
- High Priority (Score > 2.5))
- Related Skills
- Reference
Feature Review
Review implemented features and suggest new ones using evidence-based prioritization. Create GitHub issues for accepted suggestions.
Philosophy
Feature decisions rely on data. Every feature involves tradeoffs that require evaluation. This skill uses hybrid RICE+WSJF scoring with Kano classification to prioritize work and generates actionable GitHub issues for accepted suggestions.
When To Use
- Roadmap reviews (sprint planning, quarterly reviews).
- Retrospective evaluations.
- Planning new development cycles.
When NOT To Use
- Emergency bug fixes.
- Simple documentation updates.
- Active implementation (use
scope-guard).
Quick Start
1. Inventory Current Features
Discover and categorize existing features:
/feature-review --inventory2. Score and Classify
Evaluate features against the prioritization framework:
/feature-review3. Generate Suggestions
Review gaps and suggest new features:
/feature-review --suggest4. Research-Enriched Scoring
Use tome plugin to adjust scores with external evidence:
/feature-review --research5. Upload to GitHub
Create issues for accepted suggestions:
/feature-review --suggest --create-issuesWorkflow
Phase 1: Feature Discovery (feature-review:inventory-complete)
Identify features by analyzing:
1. Code artifacts: Entry points, public APIs, and configuration surfaces. 2. Documentation: README lists, CHANGELOG entries, and user docs. 3. Git history: Recent feature commits and branches.
Output: Feature inventory table.
Phase 2: Classification (feature-review:classified)
Classify each feature along two axes:
Axis 1: Proactive vs Reactive
| Type | Definition | Examples |
|---|---|---|
| Proactive | Anticipates user needs. | Suggestions, prefetching. |
| Reactive | Responds to explicit input. | Form handling, click actions. |
Axis 2: Static vs Dynamic
| Type | Update Pattern | Storage Model |
|---|---|---|
| Static | Incremental, versioned. | File-based, cached. |
| Dynamic | Continuous, streaming. | Database, real-time. |
See classification-system.md for details.
Phase 3: Scoring (feature-review:scored)
Apply hybrid RICE+WSJF scoring:
Feature Score = Value Score / Cost Score
Value Score = (Reach + Impact + Business Value + Time Criticality) / 4
Cost Score = (Effort + Risk + Complexity) / 3
Adjusted Score = Feature Score * ConfidenceScoring Scale: Fibonacci (1, 2, 3, 5, 8, 13).
Thresholds:
- > 2.5: High priority.
- 1.5 - 2.5: Medium priority.
- < 1.5: Low priority.
See scoring-framework.md for the framework. See multi-metric-evaluation-methodology.md when one model is not enough: it covers how to combine RICE, WSJF, and Kano, where each model fits, and how to reconcile conflicting signals.
Phase 4: Tradeoff Analysis (feature-review:tradeoffs-analyzed)
Evaluate each feature across quality dimensions:
| Dimension | Question | Scale |
|---|---|---|
| Quality | Does it deliver correct results? | 1-5 |
| Latency | Does it meet timing requirements? | 1-5 |
| Token Usage | Is it context-efficient? | 1-5 |
| Resource Usage | Is CPU/memory reasonable? | 1-5 |
| Redundancy | Does it handle failures gracefully? | 1-5 |
| Readability | Can others understand it? | 1-5 |
| Scalability | Will it handle 10x load? | 1-5 |
| Integration | Does it play well with others? | 1-5 |
| API Surface | Is it backward compatible? | 1-5 |
See tradeoff-dimensions.md for criteria.
Phase 4.5: Research Enrichment (feature-review:research-enriched)
Triggered by: --research flag. Requires tome plugin.
Use tome's multi-source research to adjust scoring factors with external evidence. This phase runs between tradeoff analysis and gap analysis.
1. Dispatch research: For each feature, construct research topics and dispatch tome channels (code-search, discourse, papers, triz) in parallel. 2. Synthesize findings: Merge results across channels using tome:synthesize. 3. Calculate deltas: Map findings to scoring factor adjustments using channel-to-factor mapping. 4. Apply deltas: Adjust initial scores by research deltas, clamp to Fibonacci scale, respect max_delta. 5. Present evidence: Show adjustment table with evidence sources and rationale.
See research-enrichment.md for the full enrichment protocol, delta calculation, and graceful degradation behavior.
Graceful degradation: If tome is not installed, prints a warning and proceeds with initial scores unchanged.
Phase 5: Gap Analysis & Suggestions (feature-review:suggestions-generated)
1. Identify gaps: Missing Kano basics. 2. Surface opportunities: High-value, low-effort features. 3. Flag technical debt: Features with declining scores. 4. Recommend actions: Build, improve, deprecate, or maintain.
Phase 6: GitHub Integration (feature-review:issues-created)
1. Generate issue title and body from suggestions. 2. Apply labels (feature, enhancement, priority/*). 3. Link to related issues. 4. Confirm with user before creation.
Deferred capture for high-scoring suggestions: After the user confirms which suggestions to act on, any high-scoring suggestion (score > 2.5) that is not acted on should be preserved as a deferred item. Run once per skipped high-scoring suggestion:
python3 scripts/deferred_capture.py \
--title "<suggestion title>" \
--source feature-review \
--context "RICE score: <score>. <description>"This runs automatically without prompting the user. Suggestions with scores of 2.5 or below do not need to be captured.
Configuration
Feature-review uses opinionated defaults but allows customization.
Configuration File
Create .feature-review.yaml in project root:
# .feature-review.yaml
version: 1.9.3
# Scoring weights (must sum to 1.0)
weights:
value:
reach: 0.25
impact: 0.30
business_value: 0.25
time_criticality: 0.20
cost:
effort: 0.40
risk: 0.30
complexity: 0.30
# Score thresholds
thresholds:
high_priority: 2.5
medium_priority: 1.5
# Tradeoff dimension weights (0.0 to disable)
tradeoffs:
quality: 1.0
latency: 1.0
token_usage: 1.0
resource_usage: 0.8
redundancy: 0.5
readability: 1.0
scalability: 0.8
integration: 1.0
api_surface: 1.0See configuration.md for options.
Guardrails
These rules apply to all configurations:
1. Minimum dimensions: Evaluate at least 5 tradeoff dimensions. 2. Confidence requirement: Review scores below 50% confidence. 3. Breaking change warning: Require acknowledgment for API surface changes. 4. Backlog limit: Limit suggestion queue to 25 items.
Required TodoWrite Items
1. feature-review:inventory-complete 2. feature-review:classified 3. feature-review:scored 4. feature-review:tradeoffs-analyzed 5. feature-review:research-enriched (if --research) 6. feature-review:suggestions-generated 7. feature-review:issues-created (if requested)
Integration Points
- `imbue:scope-guard`: Provides Worthiness Scores for suggestions.
- `sanctum:do-issue`: Prioritizes issues with high scores.
- `superpowers:brainstorming`: Evaluates new ideas against existing features.
- `tome:research`: Multi-source research for score enrichment (optional,
--research).
Output Format
Feature Inventory Table
| Feature | Type | Data | Score | Priority | Status |
|---------|------|------|-------|----------|--------|
| Auth middleware | Reactive | Dynamic | 2.8 | High | Stable |
| Skill loader | Reactive | Static | 2.3 | Medium | Needs improvement |Research-Enriched Table (with --research)
| Feature | Type | Score | Adj. | Priority | Evidence |
|---------|------|-------|------|----------|----------|
| Auth | R/D | 2.8 | 3.1 | High | 3 sources |
| Loader | R/S | 2.3 | 2.3 | Medium | none |
## Research Evidence
### Code Search (GitHub)
- 12 implementations, avg 340 stars
- **Reach**: +1 (broad adoption)
### Discourse (HN/Reddit)
- 47 mentions, 78% positive
- **Impact**: +1 (strong demand)Suggestion Report
## Feature Suggestions
### High Priority (Score > 2.5)
1. **[Feature Name]** (Score: 2.7)
- Classification: Proactive/Dynamic
- Value: High reach
- Cost: Moderate effort
- Recommendation: Build in next sprintRelated Skills
imbue:scope-guard: Prevent overengineering.sanctum:pr-review: Code-level review (different scope: this
skill prioritizes feature ideas, pr-review reviews diffs).
Reference
- [scoring-framework.md](modules/scoring-framework.md): RICE+WSJF hybrid.
- [classification-system.md](modules/classification-system.md): Axes definition.
- [tradeoff-dimensions.md](modules/tradeoff-dimensions.md): Quality attributes.
- [research-enrichment.md](modules/research-enrichment.md): tome-driven score deltas, channel-to-factor mapping, graceful degradation.
- [multi-metric-evaluation-methodology.md](modules/multi-metric-evaluation-methodology.md): Combining RICE, WSJF, and Kano when no single model suffices.
- [configuration.md](modules/configuration.md): Customization options.
Classification System
Features are classified along two orthogonal axes that determine architectural and UX implications.
Axis 1: Proactive vs Reactive
This axis describes when the feature acts relative to user intent.
Proactive Features
Definition: Anticipates user needs and acts before explicit request.
Characteristics:
- Runs in background or ahead of user action
- Requires prediction/inference of user intent
- May consume resources speculatively
- Higher latency tolerance (users don't wait)
Latency Tolerance:
- Background processing acceptable (seconds to minutes)
- User doesn't perceive delay directly
- Can be batched or deferred
Examples:
| Feature | How It's Proactive |
|---|---|
| Auto-save | Saves before user requests |
| Prefetching | Loads data before navigation |
| Suggestions | Offers options before user types |
| Health checks | Monitors before problems occur |
| Cache warming | Prepares data before access |
Tradeoffs:
| Pro | Con |
|---|---|
| Reduces user effort | May waste resources |
| Feels "smart" | Can be wrong/intrusive |
| Prevents problems | Requires more data |
| Smoother UX | Higher complexity |
Architecture Patterns:
- Event-driven / pub-sub
- Background workers
- Predictive models
- Eventual consistency acceptable
Reactive Features
Definition: Responds to explicit user input or system events.
Characteristics:
- Triggered by user action
- Must feel immediate
- Resources used on-demand
- Correctness over speculation
Latency Tolerance:
- Sub-100ms for UI feedback
- Sub-1s for completion
- User actively waiting
Examples:
| Feature | How It's Reactive |
|---|---|
| Form submission | User clicks submit |
| Search | User types query |
| Navigation | User clicks link |
| Validation | User enters input |
| Commands | User invokes action |
Tradeoffs:
| Pro | Con |
|---|---|
| User in control | User must initiate |
| Predictable behavior | No anticipation |
| Lower resource waste | Perceived latency |
| Simpler to implement | Less "magical" UX |
Architecture Patterns:
- Request/response
- Synchronous processing
- Strong consistency
- Direct invocation
Classification Decision Tree
Is the feature triggered by explicit user action?
├── Yes → Is immediate response critical?
│ ├── Yes → REACTIVE
│ └── No → Could be either (consider UX goals)
└── No → Does it require user data/context?
├── Yes → PROACTIVE (with data)
└── No → PROACTIVE (autonomous)Axis 2: Static vs Dynamic
This axis describes how feature data changes over time.
Static Features
Definition: Data changes incrementally through explicit updates.
Characteristics:
- Version-controlled or release-based updates
- Can be cached aggressively
- Deterministic lookups
- Stale data possible but predictable
Update Pattern:
- Deploy-time updates
- Batch processing
- Periodic refresh
- Manual triggers
Storage Models:
| Model | Use Case |
|---|---|
| Files | Configuration, templates |
| Embedded | Constants, schemas |
| CDN | Assets, documentation |
| Read replicas | Reference data |
Lookup Cost: O(1) or O(log n), highly cacheable
Examples:
| Feature | Why It's Static |
|---|---|
| Skill definitions | Updated via deploy |
| Documentation | Published versions |
| Configuration | Changed by admin |
| Templates | Version-controlled |
| Schema definitions | Release-based |
Tradeoffs:
| Pro | Con |
|---|---|
| Fast lookups | Can be stale |
| Simple architecture | Update lag |
| Highly cacheable | Deployment required |
| Predictable performance | Less responsive |
Dynamic Features
Definition: Data changes continuously through ongoing operations.
Characteristics:
- Real-time or near-real-time updates
- Limited caching opportunity
- Query-based lookups
- Consistency challenges
Update Pattern:
- Event-driven updates
- Streaming ingestion
- Live queries
- Continuous sync
Storage Models:
| Model | Use Case |
|---|---|
| Database | Transactional data |
| Cache layer | Hot data |
| Stream | Events, logs |
| Search index | Queryable content |
Lookup Cost: O(log n) to O(n), cache hit-rate varies
Examples:
| Feature | Why It's Dynamic |
|---|---|
| User sessions | Real-time state |
| Search results | Live queries |
| Notifications | Streaming events |
| Analytics | Continuous ingestion |
| Collaboration | Multi-user sync |
Tradeoffs:
| Pro | Con |
|---|---|
| Always fresh | Higher latency |
| Responsive to change | Complex architecture |
| Real-time capable | Consistency challenges |
| User-specific | Harder to cache |
Classification Decision Tree
Does the data change based on user actions in real-time?
├── Yes → DYNAMIC
└── No → Is freshness critical (< 1 hour)?
├── Yes → DYNAMIC
└── No → Could the data be served from cache/CDN?
├── Yes → STATIC
└── No → Consider hybrid (static + refresh)The 2x2 Matrix
Combining both axes creates four feature archetypes:
STATIC DYNAMIC
┌─────────────────────┬─────────────────────┐
│ │ │
PROACTIVE │ Predictive Cache │ Smart Assistant │
│ (prefetch static) │ (live suggestions)│
│ │ │
│ Latency: Low │ Latency: Medium │
│ Complexity: Low │ Complexity: High │
│ │ │
├─────────────────────┼─────────────────────┤
│ │ │
REACTIVE │ Reference Lookup │ Interactive Query │
│ (docs, configs) │ (search, forms) │
│ │ │
│ Latency: Very Low │ Latency: Low │
│ Complexity: Low │ Complexity: Medium│
│ │ │
└─────────────────────┴─────────────────────┘Archetype Details
Predictive Cache (Proactive and Static)
- Example: Prefetching documentation pages
- Pattern: Background worker loads static assets
- Complexity: Low - just scheduling and caching
- Risk: Wasted bandwidth if prediction wrong
Smart Assistant (Proactive and Dynamic)
- Example: AI-powered suggestions based on context
- Pattern: Real-time inference on streaming data
- Complexity: High - ML models, data pipelines
- Risk: Expensive, can be wrong, privacy concerns
Reference Lookup (Reactive and Static)
- Example: Loading skill definitions
- Pattern: Cache-first, fallback to file
- Complexity: Low - simple read operations
- Risk: Stale data if cache not invalidated
Interactive Query (Reactive and Dynamic)
- Example: Search across current repository
- Pattern: Query on demand, may use indexes
- Complexity: Medium - query optimization, indexing
- Risk: Variable latency, consistency windows
Classification for Common Features
| Feature Type | Typical Classification | Notes |
|---|---|---|
| CLI Commands | Reactive and Static | User-invoked, defined behavior |
| Auto-complete | Proactive and Dynamic | Predicts input from context |
| Configuration | Reactive and Static | Loaded on demand, versioned |
| Session state | Reactive and Dynamic | User-driven, real-time |
| Caching layer | Proactive and Static | Anticipates access patterns |
| Notifications | Proactive and Dynamic | Pushed based on events |
| Validation | Reactive and Static | Rules are static, input is dynamic |
| Analytics | Proactive and Dynamic | Background collection |
Using Classification in Review
When reviewing features:
1. Identify current classification - What is it today? 2. Evaluate fit - Does classification match use case? 3. Consider migration - Would different classification improve UX? 4. Note tradeoffs - What would change with different classification?
Red Flags:
- Reactive feature with high latency → Consider proactive alternative
- Dynamic feature rarely changing → Could be static for performance
- Proactive feature often wrong → Consider reactive fallback
- Static feature causing staleness issues → Consider dynamic refresh
Configuration
Feature-review uses opinionated defaults but allows project-specific customization through a YAML configuration file.
Configuration File Location
Create .feature-review.yaml in your project root:
project/
├── .feature-review.yaml # Configuration file
├── src/
└── ...Full Configuration Schema
# .feature-review.yaml
# All values shown are defaults - only specify what you want to change
version: 1 # Schema version (required if file exists)
weights:
value:
reach: 0.25 # How many users affected
impact: 0.30 # How much improvement per user
business_value: 0.25 # OKR/strategic alignment
time_criticality: 0.20 # Cost of delay
cost:
effort: 0.40 # Development time
risk: 0.30 # Uncertainty/unknowns
complexity: 0.30 # Technical difficulty
thresholds:
high_priority: 2.5 # Score > 2.5 = implement soon
medium_priority: 1.5 # Score > 1.5 = roadmap candidate
confidence_warning: 0.5 # Scores below this get flagged
classification:
default_type: reactive # proactive | reactive
default_data: static # static | dynamic
patterns:
proactive_patterns: ["*auto*", "*suggest*", "*predict*", "*prefetch*"]
dynamic_patterns: ["*session*", "*realtime*", "*live*", "*stream*"]
tradeoffs:
quality: 1.0 # Correctness of results
latency: 1.0 # Response time
token_usage: 1.0 # Context efficiency (LLM-specific)
resource_usage: 0.8 # CPU/memory consumption
redundancy: 0.5 # Fault tolerance
readability: 1.0 # Code maintainability
scalability: 0.8 # Growth handling
integration: 1.0 # Ecosystem fit
api_surface: 1.0 # Contract stability
github:
enabled: true
auto_label: true
label_prefix: "priority/"
default_labels: [enhancement, feature-review]
priority_labels:
high: "priority/high"
medium: "priority/medium"
low: "priority/low"
inventory:
scan_paths: ["commands/", "skills/", "agents/", "src/"]
exclude_patterns: ["**/test*", "**/mock*", "**/__pycache__/**"]
output:
format: markdown # markdown | json | yaml
include_rationale: true
include_tradeoffs: true
max_suggestions: 10
backlog:
max_items: 25 # Maximum items (guardrail, cannot exceed 25)
stale_days: 30
auto_archive: false
file: "docs/backlog/feature-queue.md"Minimal Configuration Examples
Startup (Move Fast)
version: 1
thresholds:
high_priority: 2.0
medium_priority: 1.0
tradeoffs:
redundancy: 0.3
scalability: 0.5
backlog:
max_items: 15Enterprise (Stability First)
version: 1
thresholds:
high_priority: 3.0
confidence_warning: 0.7
tradeoffs:
api_surface: 1.5
redundancy: 1.2
readability: 1.2Project-Type Templates
Adjust tradeoff weights based on project type:
| Project Type | Key Weight Adjustments |
|---|---|
| LLM/AI Plugin | token_usage: 1.4, integration: 1.3, api_surface: 1.3 |
| SaaS Product | quality: 1.3, redundancy: 1.2, scalability: 1.3 |
| Internal Tool | latency: 1.3, integration: 1.3, redundancy: 0.5 |
| Mobile App | latency: 1.4, resource_usage: 1.3, quality: 1.3 |
Guardrails (Always Enforced)
These rules apply regardless of configuration:
| Guardrail | Rule |
|---|---|
| Minimum dimensions | At least 5 tradeoff dimensions must have non-zero weight |
| Weight sum | Weights within each category must sum to 1.0 (within 0.01) |
| Confidence | Features below confidence_warning are always flagged |
| Breaking changes | API surface changes require explicit acknowledgment |
| Backlog limit | Maximum 25 items (forces prioritization decisions) |
Environment Variable Overrides
Pattern: FEATURE_REVIEW_ and uppercase path with underscores.
FEATURE_REVIEW_HIGH_PRIORITY=3.0
FEATURE_REVIEW_GITHUB_ENABLED=false
FEATURE_REVIEW_OUTPUT_FORMAT=jsonConfiguration Validation
/feature-review --validate-configInheritance and Overrides
Directory-Level Config
Child configs inherit from parent and override specific values:
project/
├── .feature-review.yaml # Project defaults
├── plugins/
│ └── .feature-review.yaml # Plugin-specific overrides
└── experimental/
└── .feature-review.yaml # Experimental area configCommand-Line Overrides
/feature-review --threshold.high_priority=3.0
/feature-review --weights.value.impact=0.4
/feature-review --github.enabled=falseMigration Guide
From No Configuration
1. Run /feature-review with defaults 2. Review output for misaligned priorities 3. Create minimal .feature-review.yaml with only changed values
From Other Frameworks
| Framework | Mapping Strategy |
|---|---|
| RICE | Set reach: 0.35, impact: 0.35, effort: 0.70 (cost) |
| MoSCoW | Map to thresholds: Must (3.0), Should (2.0), Could (1.0-2.0) |
Research Enrichment
Configure external research via the tome plugin. When enabled, research findings adjust scoring factors with evidence-backed deltas.
research:
enabled: true
channels:
code_search: true # GitHub code search
discourse: true # HN, Reddit, Lobsters
papers: true # arXiv, Semantic Scholar
triz: true # Cross-domain analogical reasoning
evidence_threshold: 0.3 # Minimum evidence to apply delta
max_delta: 2 # Max Fibonacci steps adjustment
timeout_seconds: 120| Channel | Speed | Best For |
|---|---|---|
| code_search | Fast | Measuring ecosystem adoption |
| discourse | Medium | Gauging community demand |
| papers | Slow | Academic validation |
| triz | Slow | Cross-domain innovation |
When the tome plugin is not installed, --research prints a warning and proceeds with initial scores unchanged.
Advanced Patterns
Custom Scoring Dimensions
custom_dimensions:
regulatory_compliance:
weight: 1.5
description: "Meets GDPR/SOC2/HIPAA requirements"
scoring: {5: "Fully compliant", 3: "Minor gaps", 1: "Concerns"}Conditional Configuration
Override weights based on feature classification:
conditional:
proactive:
tradeoffs:
latency: 0.6
resource_usage: 1.2
dynamic:
tradeoffs:
redundancy: 1.2
scalability: 1.2Multi-Metric Evaluation Methodology
How to combine RICE, WSJF, Kano, and related models when prioritizing a feature backlog. Each model encodes a different assumption about what makes a feature worth building. This module shows the formulas, where each model fits, and how to combine them when no single model is enough on its own.
The Models at a Glance
| Model | Origin | Output | Captures |
|---|---|---|---|
| RICE | Intercom (Sean McBride, 2017) | Number | Reach Impact Confidence / Effort |
| WSJF | SAFe (Scaled Agile) | Number | (Value, Time, and Risk) / Effort |
| Kano | Noriaki Kano (1984) | Category | Basic, Performance, Delighter, Indifferent, Reverse |
| MoSCoW | DSDM Consortium (1994) | Bucket | Must, Should, Could, Won't |
| Cost-of-Delay | Don Reinertsen (2009) | $ / week | Value lost per week of delay |
Single-model use is rare in practice. Most teams converge on a hybrid: RICE for a base score, WSJF to raise time- critical items, Kano to gate basics. The rest of this module explains why and how.
Model 1: RICE
RICE = (Reach * Impact * Confidence) / Effort| Factor | Unit | Typical scale |
|---|---|---|
| Reach | users / period | absolute count |
| Impact | satisfaction delta | 0.25, 0.5, 1, 2, 3 |
| Confidence | probability | 0.5, 0.8, 1.0 |
| Effort | person-months | 0.5, 1, 2, 5, 10 |
Best for: large user-facing roadmaps where reach is measurable and a single team can absorb most items.
Worst for: backlogs dominated by infrastructure or compliance work where "reach" is meaningless or every item shares similar reach.
Worked example:
Feature: Auto-save drafts
Reach: 8,000 users / quarter
Impact: 1.0 (significant satisfaction)
Confidence: 0.8
Effort: 2 person-months
RICE = (8000 * 1.0 * 0.8) / 2 = 3200Model 2: WSJF
Weighted Shortest Job First. From SAFe; treats prioritization as a cost-of-delay optimization.
WSJF = Cost_of_Delay / Job_Size
Cost_of_Delay = User_Value + Time_Criticality + Risk_Reduction
Job_Size = Effort estimateEach input uses a Fibonacci scale: 1, 2, 3, 5, 8, 13, 20.
| Factor | Question |
|---|---|
| User_Value | How much does the user/business gain? |
| Time_Criticality | What does delay cost? Does the value decay? |
| Risk_Reduction | Does this open future options or de-risk? |
| Job_Size | How much work? |
Best for: backlogs with strong time pressure and many items where deferral has measurable cost. Common in SAFe-aligned organizations.
Worst for: small teams without explicit cost-of-delay numbers; reduces to "gut feel times Fibonacci".
Worked example:
Feature: GDPR consent banner
User_Value: 5
Time_Criticality: 20 (regulatory deadline)
Risk_Reduction: 13
Job_Size: 3
WSJF = (5 + 20 + 13) / 3 = 12.67Compare with the auto-save example: WSJF would put auto-save at roughly (8 + 3 + 2) / 5 = 2.6, far below the GDPR item, even though RICE might rank them similarly. WSJF surfaces the deadline.
Model 3: Kano
Kano classifies features by user reaction, not score.
| Class | If present | If absent |
|---|---|---|
| Basic | Expected; no joy | Strong dissatisfaction |
| Performance | Linear satisfaction | Linear dissatisfaction |
| Delighter | Joy | No reaction |
| Indifferent | No reaction | No reaction |
| Reverse | Dissatisfaction | Satisfaction |
Source: Noriaki Kano et al., "Attractive Quality and Must-Be Quality" (1984).
Best for: avoiding the most common backlog mistake: shipping a Delighter while a Basic is still missing.
Worst for: numeric ranking. Kano gives categories, not scores. Pair it with RICE or WSJF for the actual ordering.
How to classify: present users with two questions per feature:
Functional: "How would you feel if X were present?"
Dysfunctional: "How would you feel if X were absent?"Each answered on a 5-point scale from "I like it" to "I dislike it". The answer pair maps to a Kano category via a fixed table (see Berger et al. 1993).
When Each Model Fits
Backlog has clear users and reach measurable?
Yes -> RICE base
No -> skip RICE
Items have time-critical deadlines or value decay?
Yes -> WSJF overlay
No -> skip WSJF
Backlog mixes table-stakes and aspirational features?
Yes -> Kano gate
No -> skip Kano
Stakeholders need narrative buckets, not numbers?
Yes -> MoSCoW translation layer
No -> skip MoSCoW| Backlog shape | First model | Second |
|---|---|---|
| Consumer product, many features | RICE | Kano gate |
| Enterprise SaaS with deadlines | WSJF | RICE |
| New product, no users yet | Kano and MoSCoW | RICE later |
| Regulated domain | WSJF | Cost-of-Delay |
| Internal tooling | RICE with reach=team_size | Kano |
The Hybrid Used in This Skill
The feature-review skill combines RICE-like value / cost ratios, WSJF time criticality, and Kano gating. The formula is documented in modules/scoring-framework.md:
Value = weighted_avg(Reach, Impact, Business_Value, Time_Criticality)
Cost = weighted_avg(Effort, Risk, Complexity)
Score = (Value / Cost) * ConfidenceKano enters as a hard gate before scoring. Any feature classified Basic that is absent today is bumped above the ranked list. The Score then orders everything else.
1. Classify every feature with Kano.
2. Pull all missing Basics to the top, ordered by user impact.
3. Score the rest with the Value/Cost formula.
4. Rank by Score; apply confidence multiplier.
5. Sensitivity-check the top 10 with +/- 20% weight perturbation.Worked Example: Combining RICE, WSJF, and Kano
A team scores three candidates for the next sprint.
Candidates:
A: Auto-save drafts
B: GDPR consent banner
C: Dark mode
Step 1 (Kano):
A: Performance (more frequent saves = more value)
B: Basic (legally required; absent today)
C: Delighter
Step 2: Pull Basics. B is bumped to top of queue.
Step 3: Score A and C with hybrid:
A: Value=4.75, Cost=2.67, Conf=0.8 -> 1.42
C: Value=2.25, Cost=2.00, Conf=0.9 -> 1.01
Step 4: WSJF check on B for sizing:
WSJF(B) = (5 + 20 + 13) / 3 = 12.67
Confirms B is the largest cost-of-delay item.
Step 5: Sprint order:
1. B (regulatory Basic)
2. A (Score 1.42)
3. C (Score 1.01)
Sensitivity: vary all weights by +/- 20%. Order is stable
in 18 of 20 perturbations. Fragile case: if Time
Criticality weight drops below 0.10, A and C swap. Action:
keep weight at the documented 0.20.Anti-Patterns
Single-model orthodoxy. Picking RICE because the blog post said so, then shoehorning every item into a "reach" estimate that does not exist. If the model does not fit the input, change the model.
Hidden recalibration. Reweighting Impact from 1.0 to 3.0 mid-quarter to make a favored project rank higher. Track weight history in version control; flag mid-cycle changes.
Confidence rubber-stamping. Every item scored at Confidence 1.0. Confidence 1.0 means "I would bet the quarter on this estimate". Real backlogs cluster around 0.5 to 0.8.
Score inflation by Fibonacci jump. "It feels like an 8" when the difference between 5 and 8 should be a 60% larger investment. Force a comparison: "Is this 60% bigger than the last 5 we shipped?"
Aggregating Kano with a number. Kano is categorical. Adding "Basic = 5, Performance = 3, Delighter = 1" to a score creates the illusion of math.
Ignoring the Pareto front. When two items tie on Score but trade off on different axes (one scales reach, one buys time), report both and let humans pick. Do not break ties with a third decimal place.
Pitfalls Specific to AI/Plugin Backlogs
Reach is a mirage. Plugin reach is bounded by who installs the plugin, not by the addressable market. Use "installed teams" as the reach unit, not "potential users".
Effort underestimates evals. A new skill is not done when the prose is written. Add the cost of subagent test authoring to Effort or the score will overpromise.
Confidence collapses on token-driven features. New context-window or prompt features cannot be confidently estimated until measured against real workloads. Hold Confidence at 0.5 until benchmarks land.
Kano Basics drift. A Delighter (auto-completion) can become a Basic in two release cycles. Re-classify the Basic set quarterly.
Cross-Reference
See modules/scoring-framework.md for the per-factor scales used in this skill, modules/tradeoff-dimensions.md for the quality axes applied after prioritization, and plugins/leyline/skills/evaluation-framework/modules/multi-metric-evaluation-methodology.md for the math behind aggregation rules.
Research Enrichment
External evidence from the tome plugin adjusts feature-review scoring factors. Research findings produce deltas applied to initial human assessments, not replacement scores.
Channel-to-Factor Mapping
Each tome research channel maps to primary and secondary scoring factors:
| Channel | Primary Factor | Secondary Factor | Evidence Produced |
|---|---|---|---|
| code-search | Reach | Complexity | Competitor count, star counts, implementation prevalence |
| discourse | Impact | Business Value | Sentiment score, mention volume, request frequency |
| papers | Impact | Risk | Citation count, novelty assessment, validation level |
| triz | Business Value | Impact | Cross-domain analogy count, inventive principle match |
Score Delta Calculation
Research findings produce an adjustment delta for each factor:
research_delta = findings_consensus * evidence_strength
Where:
findings_consensus: -2 to +2 (direction and magnitude)
evidence_strength: 0.0 to 1.0 (how reliable the findings are)
applied_delta = research_delta * channel_weight
If abs(applied_delta) < evidence_threshold:
applied_delta = 0 (insufficient evidence, discard)Channel Weight
The channel weight reflects how directly a channel's findings map to its primary factor:
| Channel | Weight | Rationale |
|---|---|---|
| code-search | 0.8 | Star counts approximate adoption well |
| discourse | 0.7 | Sentiment is noisy but indicative |
| papers | 0.9 | Peer-reviewed evidence is strong |
| triz | 0.6 | Analogies are suggestive, not conclusive |
Evidence Strength Sources
| Source | Strength | When |
|---|---|---|
| > 10 independent findings | 0.8-1.0 | High-volume channels |
| 5-10 findings | 0.5-0.8 | Moderate evidence |
| 1-5 findings | 0.3-0.5 | Sparse evidence |
| 0 findings | 0.0 | No evidence (discard delta) |
Fibonacci Clamping
Adjusted scores must remain on the Fibonacci scale used by the scoring framework: [1, 2, 3, 5, 8, 13].
FIBONACCI = [1, 2, 3, 5, 8, 13]
def clamp_to_fibonacci(raw_score: float) -> int:
"""Clamp raw score to nearest Fibonacci value."""
return min(FIBONACCI, key=lambda f: abs(f - raw_score))Clamping Rules
1. Calculate raw_adjusted = initial_score + applied_delta 2. Clamp to nearest Fibonacci value 3. Result must differ from initial by at most max_delta Fibonacci steps 4. If the clamped result exceeds max_delta steps from initial, use the value max_delta steps away
Example (max_delta = 2 steps):
- Initial: 5, raw_adjusted: 7 -> clamp: 8 (1 step away) OK
- Initial: 3, raw_adjusted: 11 -> clamp: 8 (3 steps away)
exceeds max_delta -> use 13 (2 steps away from 3) Wait: 13 is 4 steps from 3. So use 8 (2 steps from 3). Correction: count Fibonacci index steps, not arithmetic.
Fibonacci indices: 1=0, 2=1, 3=2, 5=3, 8=4, 13=5
def max_delta_clamp(initial: int, target: int, max_steps: int = 2) -> int:
initial_idx = FIBONACCI.index(initial)
target_idx = FIBONACCI.index(target)
if abs(target_idx - initial_idx) <= max_steps:
return target
direction = 1 if target_idx > initial_idx else -1
return FIBONACCI[initial_idx + direction * max_steps]Graceful Degradation
When the tome plugin is not installed or research fails:
1. Tome not installed: Print warning, skip Phase 4.5 entirely. Initial scores stand unchanged. 2. Individual channel fails: Continue with remaining channels. Only apply deltas from successful channels. 3. All channels fail: Equivalent to tome not installed. Log the failure, proceed with initial scores. 4. Timeout exceeded: Use whatever findings collected so far. Partial results are acceptable.
Detection Protocol
Check for tome availability:
1. Look for plugins/tome/ directory in the project 2. If not found, check for tome in the global plugin path 3. If neither found, activate graceful degradation
Integration with tome Skill Interfaces
Phase 4.5 dispatches research via tome's public skill interfaces:
| Step | Action | tome Skill |
|---|---|---|
| 1 | Classify the project domain | tome:research (domain classifier) |
| 2 | Dispatch parallel research agents | tome:research (agent dispatch) |
| 3 | Synthesize findings | tome:synthesize |
| 4 | (Optional) Refine high-potential areas | tome:dig |
The feature-review skill invokes these via Skill() calls, not direct Python imports. This maintains loose coupling.
Research Topic Construction
For each feature under review, construct research topics:
topic = f"{feature_name} {feature_category} plugin/tool"Example: "auto-save drafts developer tool" or "token optimization LLM CLI"
Synthesis Integration
After tome returns findings, extract deltas:
1. Parse synthesized report for quantitative signals (star counts, mention counts, citation counts) 2. Map quantitative signals to delta values using the channel-to-factor table 3. Extract qualitative signals (sentiment, novelty) for secondary factor adjustments 4. Apply delta calculation formula 5. Clamp to Fibonacci scale with max_delta constraint
Output Enhancement
When research enrichment runs, add to the feature inventory:
## Research Evidence
### Code Search (GitHub)
- Found 12 similar implementations, avg 340 stars
- **Reach adjustment**: +1 (broad ecosystem adoption)
### Discourse (HN/Reddit)
- 47 mentions in last 90 days, 78% positive sentiment
- **Impact adjustment**: +1 (strong community demand)
### Score Adjustments
| Feature | Factor | Initial | Delta | Adjusted | Evidence |
|---------|--------|---------|-------|----------|----------|
| Auth | Reach | 5 | +1 | 8 | 3 sources |
| Auth | Impact | 3 | 0 | 3 | Low |Scoring Framework
Hybrid prioritization combining RICE (Intercom), WSJF (SAFe), and Kano classification, grounded in Multi-Criteria Decision Analysis (MCDA) principles.
Mathematical Foundation
This framework extends standard prioritization models with MCDA best practices:
- Normalization: Logarithmic normalization for score scales (handles non-linear value perception)
- Weighting: Customizable weights with validation requirements
- Trade-offs: Explicit handling through Value/Cost ratio
- Uncertainty: Confidence factor adjusts for estimation risk
- Sensitivity: Weight variations tested for robustness
Documentation: See Multi-Metric Evaluation Methodology for theoretical foundations.
The Formula
Feature Score = (Value Score / Cost Score) * Confidence
Where:
Value Score = weighted_avg(Reach, Impact, Business Value, Time Criticality)
Cost Score = weighted_avg(Effort, Risk, Complexity)
Confidence = 0.0 to 1.0 (how certain are we about estimates?)Validation Requirements
Before using this framework:
validation:
weights:
- Document weight derivation method (AHP, expert judgment, empirical)
- Verify weights sum to 1.0 within each category (value, cost)
- Test sensitivity to ±20% weight variations
- Flag critical weights that significantly change rankings
normalization:
- Method: "logarithmic" (handles non-linear perception)
- Rationale: "Diminishing returns on raw scores"
- Scale_invariance: "Not required (absolute scale used)"
uncertainty:
- Confidence < 0.5: Require research before commitment
- Document basis for confidence assessment
- Consider worst-case scenario for low-confidence itemsValue Factors
Reach (R)
Question: How many users/use-cases does this affect?
| Score | Meaning | Example |
|---|---|---|
| 1 | Very few (<5%) | Niche admin feature |
| 2 | Some (5-15%) | Power user feature |
| 3 | Moderate (15-35%) | Common workflow |
| 5 | Many (35-60%) | Core user journey |
| 8 | Most (60-85%) | Essential feature |
| 13 | Nearly all (>85%) | Universal need |
Impact (I)
Question: How much does this improve the user experience?
| Score | Meaning | Kano Category |
|---|---|---|
| 1 | Minimal improvement | Basic (expected) |
| 2 | Slight improvement | Basic |
| 3 | Noticeable improvement | Performance |
| 5 | Significant improvement | Performance |
| 8 | Major improvement | Performance |
| 13 | Transformative | Delighter |
Business Value (BV)
Question: How does this contribute to business goals/OKRs?
| Score | Meaning | OKR Alignment |
|---|---|---|
| 1 | Tangential | No direct OKR connection |
| 2 | Supporting | Supports an initiative |
| 3 | Contributing | Contributes to Key Result |
| 5 | Advancing | Directly advances Key Result |
| 8 | Critical | Required for Key Result |
| 13 | Strategic | Core to company Objective |
Time Criticality (TC)
Question: What's the cost of delay?
| Score | Meaning | Urgency |
|---|---|---|
| 1 | Can wait indefinitely | Nice to have |
| 2 | Can wait 6+ months | Low urgency |
| 3 | Should do this quarter | Moderate urgency |
| 5 | Should do this month | High urgency |
| 8 | Should do this sprint | Very high urgency |
| 13 | Must do immediately | Blocking/critical |
Cost Factors
Effort (E)
Question: How much work is this?
| Score | Meaning | Time Estimate |
|---|---|---|
| 1 | Trivial | < 1 day |
| 2 | Small | 1-3 days |
| 3 | Moderate | 3-5 days |
| 5 | Large | 1-2 weeks |
| 8 | Very large | 2-4 weeks |
| 13 | Huge | > 1 month |
Risk (Rk)
Question: What could go wrong?
| Score | Meaning | Risk Level |
|---|---|---|
| 1 | Very low risk | Well-understood, no dependencies |
| 2 | Low risk | Minor unknowns |
| 3 | Moderate risk | Some unknowns or dependencies |
| 5 | High risk | Significant unknowns |
| 8 | Very high risk | Many unknowns, critical dependencies |
| 13 | Extreme risk | Uncharted territory |
Complexity (Cx)
Question: How hard is this to build correctly?
| Score | Meaning | Complexity Level |
|---|---|---|
| 1 | Simple | Single component, clear requirements |
| 2 | Straightforward | Few components, clear interfaces |
| 3 | Moderate | Multiple components, some edge cases |
| 5 | Complex | Cross-cutting concerns, many edge cases |
| 8 | Very complex | Architectural changes, distributed state |
| 13 | Extremely complex | Novel algorithms, fundamental changes |
Confidence Scoring
Rate your confidence in the estimates:
| Confidence | Meaning | When to Use |
|---|---|---|
| 0.9-1.0 | High | Clear requirements, similar past work |
| 0.7-0.9 | Moderate | Some unknowns, reasonable estimates |
| 0.5-0.7 | Low | Many unknowns, rough estimates |
| 0.3-0.5 | Very low | Mostly guessing |
| < 0.3 | Speculative | Requires spike/research first |
Guardrail: Features with confidence < 0.5 should be flagged for research before commitment.
Kano Classification
After scoring, classify the feature:
Basic (Must-Have)
- Users expect this; absence causes dissatisfaction
- Doesn't increase satisfaction when present
- Action: validate these exist before anything else
Performance (Linear)
- More is better; satisfaction scales with quality
- Competitive differentiator
- Action: Optimize based on ROI
Delighters (Wow Factors)
- Unexpected features that create joy
- Absence doesn't hurt; presence delights
- Action: Build after basics and key performers
Indifferent
- Users don't care either way
- Action: Deprioritize or cut
Reverse
- Feature that some users actively dislike
- Action: Make optional or remove
Calculation Example
Feature: Auto-save drafts
# Value Factors
Reach: 8 # Most users write drafts
Impact: 5 # Significant UX improvement
Business Value: 3 # Supports retention KR
Time Criticality: 3 # Should do this quarter
Value Score = (8 + 5 + 3 + 3) / 4 = 4.75
# Cost Factors
Effort: 3 # 3-5 days
Risk: 2 # Low risk, understood problem
Complexity: 3 # Moderate, needs state management
Cost Score = (3 + 2 + 3) / 3 = 2.67
# Confidence
Confidence: 0.8 # Similar features built before
# Final Score
Feature Score = (4.75 / 2.67) * 0.8 = 1.42
# Classification
Kano: Performance (more saving = better UX)
Priority: Medium (1.42 is between 1.5-2.5 threshold)Interpreting Scores
| Score Range | Priority | Recommendation |
|---|---|---|
| > 2.5 | High | Schedule for next sprint |
| 1.5 - 2.5 | Medium | Add to roadmap, plan timing |
| 1.0 - 1.5 | Low | Backlog, revisit quarterly |
| < 1.0 | Very Low | Defer indefinitely or reject |
Custom Weights
Default weights can be customized in .feature-review.yaml:
weights:
value:
reach: 0.25 # Equal weighting
impact: 0.30 # Slightly favor user impact
business_value: 0.25 # Equal to reach
time_criticality: 0.20 # Slightly less weight
cost:
effort: 0.40 # Effort matters most
risk: 0.30 # Risk is significant
complexity: 0.30 # Complexity matters
# REQUIRED: Document weight derivation
derivation:
method: "expert_judgment" # or "AHP" or "empirical"
experts: 3
date: "2025-01-07"
rationale: "Impact weighted slightly higher based on user feedback"Guardrails:
- Weights within each category must sum to 1.0
- Document how weights were derived (not arbitrary)
- Run sensitivity analysis before finalizing
- Flag weights that cause ranking instability
Comparison with Pure RICE
| Aspect | RICE | Feature Review |
|---|---|---|
| Value factors | Reach, Impact | Reach, Impact, BV, TC |
| Cost factors | Effort only | Effort, Risk, Complexity |
| Time sensitivity | Not explicit | Time Criticality factor |
| Business alignment | Not explicit | Business Value factor |
| Uncertainty | Confidence | Confidence |
| Classification | None | Kano model |
| MCDA Compliance | Basic | Full (normalization, weighting, sensitivity) |
Feature Review extends RICE with WSJF's time criticality and business value, plus Kano classification for strategic context, all grounded in MCDA best practices.
Sensitivity Analysis
Before committing to prioritization, test robustness:
def priority_sensitivity_analysis(features, weights, variation=0.20):
"""
Tests if rankings are stable to weight variations.
Args:
features: List of features with scores
weights: Current weight configuration
variation: Test ±20% changes
Returns:
Dict with sensitivity metrics
"""
base_ranking = rank_features(features, weights)
sensitivity = {}
for category in ["value", "cost"]:
for factor in weights[category].keys():
# Test weight increase
weights_plus = adjust_weight(weights, factor, +variation)
ranking_plus = rank_features(features, weights_plus)
correlation_plus = spearman_correlation(base_ranking, ranking_plus)
# Test weight decrease
weights_minus = adjust_weight(weights, factor, -variation)
ranking_minus = rank_features(features, weights_minus)
correlation_minus = spearman_correlation(base_ranking, ranking_minus)
sensitivity[factor] = {
"avg_correlation": (correlation_plus + correlation_minus) / 2,
"sensitive": correlation_plus < 0.8 or correlation_minus < 0.8
}
return sensitivityInterpretation:
- Correlation > 0.9: Ranking stable to this weight variation
- Correlation 0.8-0.9: Moderately sensitive
- Correlation < 0.8: Highly sensitive, weight is critical
Tradeoff Dimensions
Quality attributes for evaluating features. Based on ISO 25010 software quality model, CAP/PACELC theorems, and practical engineering concerns.
Overview
Every feature makes tradeoffs. This module provides structured evaluation across nine dimensions, each with specific criteria and scoring guidance.
Scoring Scale: 1-5 for each dimension
| Score | Meaning |
|---|---|
| 1 | Poor - Significant issues |
| 2 | Below average - Notable gaps |
| 3 | Adequate - Meets basic needs |
| 4 | Good - Above expectations |
| 5 | Excellent - Best in class |
Dimension 1: Quality of Results
Question: Does the feature deliver correct, accurate results?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Always correct, handles all edge cases, validated against ground truth |
| 4 | Correct in normal cases, handles most edge cases |
| 3 | Usually correct, some known edge case issues |
| 2 | Occasionally incorrect, multiple edge case failures |
| 1 | Frequently incorrect, unreliable outputs |
Considerations
- Correctness: Does it produce right answers?
- Completeness: Does it handle all expected inputs?
- Precision: How accurate are numerical/search results?
- Recall: Does it find everything it should?
Tradeoff Partners
- Quality often trades against Latency (more checks = slower)
- Quality often trades against Resource Usage (validation costs)
---
Dimension 2: Latency
Question: Does the feature meet timing requirements for its classification?
Evaluation Criteria by Type
For Reactive Features:
| Score | Criteria |
|---|---|
| 5 | < 50ms response, feels instant |
| 4 | 50-100ms response, very responsive |
| 3 | 100-300ms response, acceptable |
| 2 | 300ms-1s response, noticeable delay |
| 1 | > 1s response, frustrating delay |
For Proactive Features:
| Score | Criteria |
|---|---|
| 5 | Completes before needed, no user awareness |
| 4 | Usually ready when needed |
| 3 | Sometimes user waits briefly |
| 2 | Often not ready, visible loading |
| 1 | Rarely ready, defeats purpose |
Considerations
- P50 latency: Typical case
- P99 latency: Worst case (matters for reliability)
- Cold start: First invocation time
- Warm path: Subsequent invocations
Tradeoff Partners
- Latency trades against Quality (PACELC theorem)
- Latency trades against Consistency (eventual vs strong)
---
Dimension 3: Token Usage
Question: Is the feature context-efficient for LLM interactions?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Minimal tokens, highly compressed, efficient prompts |
| 4 | Reasonable tokens, well-structured |
| 3 | Average tokens, some verbosity |
| 2 | High token usage, could be optimized |
| 1 | Excessive tokens, bloated context |
Considerations
- Input tokens: How much context needed?
- Output tokens: How verbose are results?
- Caching potential: Can results be reused?
- Streaming: Can partial results reduce perception?
Measurement
Token Efficiency = Useful Output / Total TokensTarget: > 0.5 for most features
Tradeoff Partners
- Token usage trades against Quality (more context = better results)
- Token usage trades against Readability (compression reduces clarity)
---
Dimension 4: Resource Usage (CPU/Memory)
Question: Is CPU and memory consumption reasonable?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Minimal footprint, efficient algorithms |
| 4 | Low resource usage, well-optimized |
| 3 | Moderate usage, acceptable overhead |
| 2 | High usage, performance impact on system |
| 1 | Excessive usage, causes degradation |
Considerations
- Peak memory: Maximum allocation
- Sustained memory: Ongoing consumption
- CPU intensity: Processing load
- I/O patterns: Disk/network usage
Measurement Guidance
| Resource | Good | Acceptable | Poor |
|---|---|---|---|
| Memory delta | < 10MB | 10-50MB | > 50MB |
| CPU spike | < 100ms | 100-500ms | > 500ms |
| Sustained CPU | < 5% | 5-20% | > 20% |
Tradeoff Partners
- Resources trade against Latency (caching uses memory)
- Resources trade against Scalability (per-user costs)
---
Dimension 5: Redundancy (Fault Tolerance)
Question: Does the feature handle failures gracefully?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Full redundancy, automatic failover, no data loss |
| 4 | Good failover, minimal disruption |
| 3 | Basic error handling, recoverable failures |
| 2 | Some failure handling, may require retry |
| 1 | No redundancy, failures cause data loss or crashes |
Considerations
- Graceful degradation: Does it fail partially vs completely?
- Retry logic: Does it handle transient failures?
- Data durability: Is data protected from loss?
- Recovery time: How fast to recover?
CAP Theorem Implications
For distributed features:
- CP systems: May sacrifice availability for consistency
- AP systems: May sacrifice consistency for availability
Tradeoff Partners
- Redundancy trades against Complexity (more failure modes)
- Redundancy trades against Latency (replication delays)
---
Dimension 6: Readability (Maintainability)
Question: Can others understand and modify this feature?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Self-documenting, clear abstractions, easy to extend |
| 4 | Well-structured, good comments, learnable |
| 3 | Understandable with effort, some complexity |
| 2 | Hard to follow, requires tribal knowledge |
| 1 | Opaque, only original author understands |
Considerations
- Code clarity: Is logic obvious?
- Documentation: Are complex parts explained?
- Naming: Are variables/functions descriptive?
- Structure: Is code well-organized?
Measurement Proxies
- Cyclomatic complexity < 10
- Functions < 50 lines
- Clear separation of concerns
- Test coverage > 80%
Tradeoff Partners
- Readability trades against Token Usage (verbose = clearer)
- Readability trades against Resource Usage (abstractions have cost)
---
Dimension 7: Scalability
Question: Will the feature handle 10x load?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Linear or sub-linear scaling, handles massive load |
| 4 | Good scaling, handles significant growth |
| 3 | Adequate scaling, may need attention at 5x |
| 2 | Poor scaling, issues at 2-3x load |
| 1 | Doesn't scale, breaks under modest increase |
Considerations
- Horizontal scaling: Can add more instances?
- Vertical scaling: Can add more resources?
- Bottlenecks: Where does it fail first?
- State management: How is state distributed?
Scaling Patterns
| Pattern | Scalability | Complexity |
|---|---|---|
| Stateless | Excellent | Low |
| Cached | Very good | Medium |
| Sharded | Good | High |
| Stateful single | Poor | Low |
Tradeoff Partners
- Scalability trades against Complexity (distributed systems are hard)
- Scalability trades against Redundancy (more nodes = more failure modes)
---
Dimension 8: Integration (Interoperability)
Question: Does the feature play well with existing systems?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | smooth integration, follows all conventions, composable |
| 4 | Good integration, minor adaptations needed |
| 3 | Integrates with effort, some friction |
| 2 | Difficult integration, significant workarounds |
| 1 | Isolated, doesn't integrate without major changes |
Considerations
- API consistency: Matches existing patterns?
- Data formats: Uses standard formats?
- Dependencies: Minimal coupling?
- Extension points: Can be extended/wrapped?
Integration Checklist
- [ ] Uses project's standard data formats
- [ ] Follows naming conventions
- [ ] Integrates with existing logging/metrics
- [ ] Works with existing auth/permissions
- [ ] Compatible with existing tooling
Tradeoff Partners
- Integration trades against Innovation (conventions limit novelty)
- Integration trades against Optimization (generic > specialized)
---
Dimension 9: API Surface
Question: Is the API backward compatible and well-designed?
Evaluation Criteria
| Score | Criteria |
|---|---|
| 5 | Stable API, versioned, excellent documentation, no breaking changes |
| 4 | Good API, rare breaking changes with migration path |
| 3 | Adequate API, occasional breaking changes |
| 2 | Unstable API, frequent breaking changes |
| 1 | No stable API, constant churn |
Considerations
- Breaking changes: How often do consumers break?
- Deprecation policy: Are changes communicated?
- Versioning: Is there a versioning strategy?
- Documentation: Is the contract clear?
API Design Checklist
- [ ] Additive changes only (no removal)
- [ ] Optional new fields with defaults
- [ ] Deprecation warnings before removal
- [ ] Semantic versioning
- [ ] Clear error contracts
Tradeoff Partners
- API stability trades against Innovation (can't change freely)
- API stability trades against Quality (may keep suboptimal designs)
---
Composite Scoring
Calculate overall tradeoff score:
Tradeoff Score = Σ(dimension_score * dimension_weight) / Σ(weights)Default Weights
| Dimension | Default Weight | Rationale |
|---|---|---|
| Quality | 1.0 | Core requirement |
| Latency | 1.0 | User experience |
| Token Usage | 1.0 | LLM efficiency |
| Resource Usage | 0.8 | Important but secondary |
| Redundancy | 0.5 | Context-dependent |
| Readability | 1.0 | Maintainability |
| Scalability | 0.8 | Future-proofing |
| Integration | 1.0 | Ecosystem fit |
| API Surface | 1.0 | Contract stability |
Guardrail
Minimum 5 dimensions must be evaluated. Cannot skip all tradeoff analysis.
---
Using Tradeoffs in Review
For Existing Features
1. Score each dimension 2. Identify dimensions below 3 3. Determine if improvement is feasible 4. Prioritize based on impact
For Proposed Features
1. Estimate scores for each dimension 2. Compare against existing features 3. Identify which tradeoffs are acceptable 4. Document accepted tradeoffs explicitly
Red Flag Combinations
| Pattern | Concern | Action |
|---|---|---|
| High Quality and High Latency | May frustrate users | Optimize or classify as Proactive |
| Low Readability and Low API Surface | Maintenance nightmare | Refactor before extending |
| High Token and Low Quality | Wasteful | Optimize prompts |
| Low Redundancy and High Integration | Cascading failures | Add fault tolerance |
Related skills
FAQ
Is Feature Review safe to install?
skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.