Ignition — Predictive Scoring Engine
A scoring engine that predicts product-adoption outcomes across 5 weighted dimensions and self-calibrates against real results. Built to decide where to spend the next month of work.
The Problem
I wanted to predict which products would achieve explosive adoption — not just “good” growth, but the kind of rapid, viral traction that makes or breaks a product. The question: can you score a product across measurable dimensions and predict its adoption trajectory with real accuracy?
The Architecture
Ignition scores products across 5 weighted pillars, each containing multiple features:
| Pillar | Weight (v7) | What It Measures |
|---|---|---|
| Foundation | 0.00 | Team, funding, timing |
| Product | 0.10 | UX, speed, delight, activation |
| Distribution | 0.11 | Virality, channels, network effects |
| Environment | 0.31 | Market timing, frustration, wave alignment |
| Moat | 0.38 | Network effects, switching costs, data lock-in |
The surprise: Moat is the strongest predictor (weight 0.38, pillar correlation r=0.73). Who the team is (Foundation) matters almost nothing for adoption prediction — what matters is whether the product creates structural advantages that compound.
18-table SQLite schema with full audit trail, change tracking, and calibration history.
7-signal wave detection: Tracks search velocity, incumbent frustration, technology maturity, regulatory shifts, investment patterns, creator density, and cultural indicators. Fires alerts when 4+ signals accelerate simultaneously >15% week-over-week.
Weight Learning
The system doesn’t use static weights. It learns from outcomes:
- Score a product across all pillars
- Record the actual outcome (dead, slow_burn, spike_and_die, steady_growth, explosion)
- Run weight optimization to minimize prediction error
- Accept new weights only if correlation improves by 3%+ (prevents overfitting to noise)
v7 calibration (current): correlation 0.799, tier accuracy 65%, ±1 tier accuracy 93%.
Outcome distribution across 671 cases:
- 151 steady_growth, 137 spike_and_die, 137 dead, 126 slow_burn, 120 explosion
Key Decisions
Why environment-normalized scoring: LLM-generated batch cases systematically inflated certain features (incumbent_frustration +20pp, wave_strength +8-20pp). Rather than discarding the data, I applied global scale normalization (0.67x and 0.87x) anchored to hand-scored ground truth. This preserved the valuable signal while correcting the bias.
Why honest accuracy reporting: The system reports 65% exact tier accuracy, not 93%. The 93% is ±1 tier. Both numbers are useful, but leading with the exact number keeps the system honest. If I only reported the forgiving metric, I’d lose the pressure to improve.
Why slow_burn is structurally hard: slow_burn outcomes overlap with both steady_growth and spike_and_die in their IQR ranges. This isn’t a model failure — it’s a real property of the data. Products that grow slowly look statistically similar to products that either die or take off. The model is honest about this ambiguity.
What I Learned
-
Calibration must compute from scratch. An early bug read stale accuracy values from a
calibration_summarytable instead of recomputing. The system appeared to be improving when it wasn’t. Apples-to-apples comparison on every calibration run is non-negotiable. -
Feature importance surprises you. I expected Product quality to be the top predictor. It’s not even close — Moat and Environment dominate. The data says: it matters less how good your product is than whether the market conditions and structural advantages are in your favor.
-
671 cases is enough to learn, not enough to be certain. The correlation is strong (0.80) but the confidence intervals on individual predictions are wide. I could add more cases, but the marginal accuracy gain decreases with each batch. The honest answer is: this system is useful for relative ranking, not absolute prediction.