A self-service analytics product that gives a subscription company's finance and product leaders one trusted view of revenue, cost and product performance.
▶ Try the live MVPRead the PRDFinancial model (Excel)Built on synthetic data for a fictional company, StreamCo. No employer data used.
| Problem | Finance and product teams reported different revenue numbers, and monthly variance reporting took ~5 days of manual work. |
| My role | Product Manager, data engineer and BI analyst: discovery, PRD, prioritization, data model, SQL pipeline with quality checks, interactive dashboards, financial model. |
| Tools | SQL (CTEs, window functions) · Python · JavaScript (MVP) · Excel · Jira-style backlog |
| Impact | Working MVP with 3 dashboards + glossary that surfaced a $1.28M (5.1%) FY2025 budget miss, traced mainly to International (−9.6%). Target: reporting cut from 5 days to 2. |
StreamCo is a mid-size subscription business with ~50K customers, 3 product tiers and 4 regions. As it grew, reporting broke down:
| Persona | Core need | Pain today |
|---|---|---|
| FP&A Manager | Budget vs. actual, forecast accuracy | Rebuilds the same Excel model every month |
| Product Manager | Revenue, churn and adoption by tier | Waits on finance for numbers |
| Regional Ops Lead | Regional performance & cost drivers | Sees data only after the month closes |
| Option | Pros | Cons | Decision |
|---|---|---|---|
| A. Clean up existing spreadsheets | Fast, cheap | Doesn't fix definitions or scale | ✗ |
| B. Buy an enterprise BI suite | Feature-rich | Costly, slow rollout, low adoption risk | ✗ |
| C. Governed data model + focused dashboards | Fixes root cause, quick MVP | Needs stakeholder alignment | ✓ MVP |
| Feature | Reach | Impact | Confidence | Effort | Score |
|---|---|---|---|---|---|
| Metric glossary + single revenue model | All users | 3 | 90% | 2 | High → MVP |
| Budget vs. actual dashboard | FP&A, execs | 3 | 80% | 3 | High → MVP |
| Tier/region margin view | Product, ops | 2 | 80% | 3 | Medium → V1 |
| AI anomaly alerts | All users | 2 | 50% | 5 | Low → V2 |
Update scores once the full RICE sheet is final.
| Phase | Scope | Exit criteria |
|---|---|---|
| MVP | Data model, metric glossary, Executive + Budget vs. Actual dashboards | FP&A signs off on revenue numbers |
| V1 | Product performance dashboard, tier/region margin, forecast model | Weekly use by 3 personas |
| V2 | AI anomaly alerts, natural-language questions (→ AskData) | Alert precision target met |
Before any dashboard, I built the data foundation. Every number in FinSight comes from one governed fact table that passes automated quality checks.
All 7 queries run on the real FinSight dataset. Results below are actual outputs. Skills shown: DDL, CTEs, window functions (LAG, RANK, SUM OVER), conditional aggregation, data validation.
Staging layer: cast types, add derived metrics and a surrogate key so every dashboard reads from one governed table.
CREATE TABLE fct_revenue_monthly AS SELECT month || '-' || tier || '-' || region AS row_key, DATE(month || '-01') AS month_start, tier, region, CAST(start_subs AS INTEGER) AS start_subs, CAST(new_subs AS INTEGER) AS new_subs, CAST(churned_subs AS INTEGER) AS churned_subs, CAST(end_subs AS INTEGER) AS end_subs, CAST(revenue AS REAL) AS revenue, CAST(cogs AS REAL) AS cogs, CAST(revenue AS REAL) - cogs AS gross_profit, CAST(budget_revenue AS REAL) AS budget_revenue, revenue - budget_revenue AS variance FROM raw_subscription_monthly;
| rows_loaded | unique_keys | first_month | last_month |
|---|---|---|---|
| 144 | 144 | 2025-01-01 | 2025-12-01 |
The interactive MVP: four tabs (Executive, Product Performance, Budget vs. Actual, Metric Glossary) with region, tier and month filters. Try it below or open it full screen →
FY2026 monthly forecast by tier with Base, Upside and Downside scenarios, a full P&L to EBITDA, and FY2025 budget vs. actual. Change the blue inputs and everything recalculates. Base case: $27.9M revenue (+17.6%) and $5.9M EBITDA; range $25.6M–$29.9M. Download Excel →
| Challenge | How I solved it |
|---|---|
| Finance and product defined "revenue" differently | Ran an alignment session, wrote a metric glossary, and made finance the owner of each definition. |
| Messy data: duplicate customers, missing dates | Added validation rules and a data-quality check before every refresh. |
| Stakeholders asked for 40+ KPIs | Agreed on a "North Star + 5" set; everything else moved to a drill-down page. |
| Scope creep toward AI features in the MVP | Moved AI to V2 using RICE scores, so we shipped trust first. |
Results come from the synthetic StreamCo dataset. Reporting-time savings (5 → 2 days) are a design target.