KEY INSIGHT
Prioritize features by the ratio of user impact to implementation cost, but filter by whether the feature tests a core hypothesis. Features that sound important but don't validate your main bet are distractions.
The ICE framework (Impact, Confidence, Ease) is a starting point but requires Nigerian market calibration. "Impact" should account for willingness to pay effect, not just engagement. "Ease" must account for local infrastructure constraints—offline functionality, low-bandwidth mode, USSD fallback.
```python
def prioritize_features(features, user_segments):
"""
Prioritization scoring with Nigerian market factors.
Adjust weights based on your product stage.
"""
scored = []
for feature in features:
# Base ICE scores
impact = feature.get('impact', 5) # 1-10 scale
confidence = feature.get('confidence', 5) # 1-10 scale
ease = feature.get('ease', 5) # 1-10 scale
# Nigerian market modifiers
offline_value = feature.get('works_offline', False) * 2
low_bandwidth = feature.get('works_low_bandwidth', False) * 1.5
payment_impact = feature.get('enables_payment', False) * 3
market_modifier = 1 + (offline_value + low_bandwidth + payment_impact) / 10
# Hypothesis validation bonus
validates_core = feature.get('validates_hypothesis', False) * 2
# Calculate weighted score
ice_score = (impact * confidence * ease) / 30
final_score = (ice_score * market_modifier) + validates_core
scored.append({
'name': feature['name'],
'ice_score': ice_score,
'market_score': market_modifier,
'final_score': round(final_score, 2),
'implementation_effort': 'Low' if ease > 7 else 'Medium' if ease > 4 else 'High'
})
return sorted(scored, key=lambda x: -x['final_score'])
# Example feature prioritization
features = [
{'name': 'Pidgin language support', 'impact': 9, 'confidence': 7, 'ease': 3,
'works_low_bandwidth': True, 'validates_hypothesis': True},
{'name': 'Dark mode UI', 'impact': 4, 'confidence': 9, 'ease': 8,
'works_offline': False},
{'name': 'Invoice generation', 'impact': 8, 'confidence': 6, 'ease': 5,
'enables_payment': True, 'validates_hypothesis': True},
{'name': 'Offline mode', 'impact': 7, 'confidence': 5, 'ease': 2,
'works_offline': True},
]
ranked = prioritize_features(features, ['freelancer', 'smb_owner'])
for i, f in enumerate(ranked[:3]):
print(f"{i+1}. {f['name']}: {f['final_score']} ({f['implementation_effort']})")
```
Real failure mode: Feature debt. Every feature you ship carries maintenance cost, documentation burden, and user confusion. A feature that takes three days to build takes thirty days to properly maintain. Ruthlessly cut.
The 10/10/10 rule for hard decisions: If you can't implement a feature for ten days, at ten percent of your current team capacity, with ten users actively requesting it, reconsider whether it belongs in the current version.