KEY INSIGHT
Build quarterly roadmaps with monthly commitments and weekly reviews. The further you project, the less you know. A 12-month roadmap is a hypothesis, a 3-month roadmap is a plan.
Roadmap structure that survives Nigerian business reality:
**Quarter 1 (Now-Q2):** Revenue foundation. Core product, payment integration, first 500 paying users. No major rewrites. Ship weekly, gather revenue data, optimize for conversion.
**Quarter 2 (Q2-Q3):** Engagement expansion. Features that increase daily active usage. User cohorts, onboarding optimization, retention mechanics. If you don't have revenue data by now, pivot.
**Quarter 3 (Q3-Q4):** Scale infrastructure. Model upgrades, capacity planning, team expansion for support. This phase is expensive—you need solid revenue to fund it.
**Quarter 4 (Q4+):** Market expansion. New user segments, regional growth (Ghana, Kenya), or enterprise tier.
```python
from datetime import datetime, timedelta
def generate_roadmap(launch_date, quarters=4):
"""
Generate roadmap timeline from launch date.
Each quarter is approximately 13 weeks.
"""
current_quarter = datetime.now().quarter
current_year = datetime.now().year
milestones = []
for q in range(1, quarters + 1):
quarter_name = f"Q{q}"
year = current_year if q <= (4 - current_quarter + 1) else current_year + 1
# Calculate quarter start
month_start = ((q - 1) * 3) + 1
quarter_start = datetime(year, month_start, 1)
quarter_end = quarter_start + timedelta(days=90)
milestones.append({
'quarter': quarter_name,
'dates': f"{quarter_start.strftime('%b %Y')} - {quarter_end.strftime('%b %Y')}",
'focus': roadmap_focus(q),
'key_deliverables': roadmap_deliverables(q)
})
return milestones
def roadmap_focus(quarter):
"""Define focus area per quarter"""
focuses = {
1: "Revenue Foundation",
2: "Engagement & Retention",
3: "Infrastructure Scale",
4: "Market Expansion"
}
return focuses.get(quarter, "Optimize")
def roadmap_deliverables(quarter):
"""Define key deliverables per quarter"""
deliverables = {
1: [
"Core product with payment integration",
"First 100 paying users",
"Basic analytics dashboard",
"Support channel (WhatsApp or email)"
],
2: [
"Onboarding flow optimization",
"User cohort analysis",
"Retention mechanics (streaks, reminders)",
"Social features if applicable"
],
3: [
"Model upgrade (7B to larger if needed)",
"Load testing and capacity planning",
"Customer support escalation flow",
"Mobile optimization"
],
4: [
"Enterprise tier (if SMB traction exists)",
"Regional expansion (Ghana pilot)",
"API for developers",
"Partnership integrations"
]
}
return deliverables.get(quarter, [])
roadmap = generate_roadmap(datetime.now(), quarters=4)
for m in roadmap:
print(f"\n{m['quarter']}: {m['focus']}")
print(f" Dates: {m['dates']}")
for d in m['key_deliverables']:
print(f" - {d}")
```
Real failure mode: Roadmap commitment bias. Once something's on the roadmap, operators feel pressure to ship it regardless of changing conditions. Treat the roadmap as a living document. If a feature no longer serves current priorities, cut it.