Performance Algorithm
How FounderLab determines revenue, profitability, valuation, and company rankings. Valuation is computed in three distinct contexts — per-unit stored, leaderboard display, and fundraising engine.
REVENUE = BASE_DEMAND × PRICE × PPP_DEMAND_FACTOR × PRICE_COMPETITION_MULT × CONVERSION_RATE × MARKETING_EFFICIENCY × STRATEGY_REWARD × EXECUTION_QUALITY × SHOCK_MULTIPLIER
TAM for the market (scaled from US=10,000 baseline using GlobalMarketConfig.relative_tam) ÷ (active companies + virtual competitors) × market_maturity_factor × strategy_reward.
Per-market price from UnitDecision.market_prices[] for each expansion market, falling back to the home market price. Unit 1: constrained by industry range. Unit 2+: unconstrained.
Adjusts demand based on the market's purchasing_power_index (PPI). If a company charges above the PPI-adjusted ideal price, demand is reduced. Formula: max(0.4, min(1.2, 1 ÷ max(0.5, marketPrice ÷ (homePrice × PPI)))). PPI reference: US=1.0, EU=1.0, UK=0.9, Canada=0.85, China=0.55, India=0.3, Brazil=0.45.
Compares your price to the average price of all competitors in each market. Lower relative price = higher multiplier. Formula: max(0.5, min(1.5, 2.0 − (yourPrice ÷ avgCompetitorPrice))). Priced 20% below average → ~1.2× demand boost; 20% above → ~0.8×.
0.7–1.3 multiplier based on staffing adequacy (employees vs. revenue target).
(Marketing_Spend ÷ CAC) × market_maturity_factor per market, scaled by TAM relative to US baseline.
HOME: 1.0 | DIRECT_EXPORT: 1.1 | DISTRIBUTOR: 1.25 | JOINT_VENTURE: 1.4 | NEW_ENTITY: 1.6. Distributor and JV strategies also apply a margin dilution (30% and 40% respectively).
(Actual_Gross_Margin ÷ Industry_Benchmark) × 100, capped at 100%. >80% = Excellent, 60–80% = Good, 40–60% = Fair, <40% = Needs Work.
Starts at 1.0. Each applicable shock multiplies by (1 ± impact), where impact = severity_factor × sqrt(timeScaleMultiplier). Severity: mild=0.05, moderate=0.12, severe=0.22. W12=1, W6=2. Examples: ECONOMIC_DOWN: (1−impact); VIRAL_MOMENT: (1+impact×1.5); CURRENCY_VOLATILITY: (1−impact×0.8). International shocks (CUSTOMS_DELAY, DISTRIBUTOR_DEFECTION, etc.) are only applied to groups using the matching entry strategy.
Each market's TAM is proportional to the US baseline. The instructor sets the US baseline TAM in Class settings. All other markets are scaled using GlobalMarketConfig.relative_tam.
10,000 (100%) — benchmark market
10,000 (~100%) — comparable purchasing power to US
7,000 (~70%) — large population, lower GDP per capita efficiency
2,500 (~25%) — large population, much lower purchasing power
2,500 (~25%)
2,000 (20%)
2,000 (20%)
1,200 (12%)
1,000 (10%) — home market benchmark in simulation
1,500 (15%)
1,500 (15%)
800 (8%)
(Marketing_Spend ÷ CAC) × TAM_scale_factor × market_maturity_factor × price_competition_mult ÷ sequencing_risk_mult
W12: cycle 0 = 30%, cycle 1 = 60%, cycle 2+ = 100%. W6: cycle 0 = 60%, cycle 1+ = 100% (±15% volatility).
$80 base × strategy_cac_mult × (1 + shock_adjustments). Strategy CAC: HOME=1.0, DIRECT_EXPORT=1.15, DISTRIBUTOR=0.9, JOINT_VENTURE=0.85, NEW_ENTITY=1.0.
REGULATORY_CHANGE: +5% | TALENT_WAR: +8%.
8% baseline − (Support_Spend ÷ 500,000); minimum 2%.
Units sold drives revenue (Units × Price). Customers tracks distinct accounts acquired. Approximately every 10 units sold equates to ~1 new customer, in addition to marketing-driven acquisition. A single customer can purchase multiple units — so revenue can be positive even when the customer count is low.
Penalty multiplier applied if a company skips recommended expansion steps (e.g., entering JOINT_VENTURE without first doing DIRECT_EXPORT). W12: 1.25× penalty, W6: 1.35× penalty, lasting the first 2 cycles in that market.
Valuation is computed in three distinct contexts — the per-unit stored value, the leaderboard/display value, and the fundraising-engine value — each using a different method.
Revenue − COGS (COGS = 35% of revenue in base engine)
Gross Profit − Operating Expenses (marketing, R&D, support, payroll)
Charged on startup loan principal (amortized monthly) AND on any line of credit balance used. Both at the class interest rate, calculated per period.
EBITDA − Interest Expense (startup loan interest + LOC interest)
Recomputed every unit and written to the Company record. Bankrupt (ending cash < 0) → $0. Otherwise: Valuation = Revenue × Multiplier. Multiplier = (8 + R&D_Spend ÷ 100,000) for profitable companies (EBITDA > 0), or 1.5 for loss-making companies (distressed). Then adjusted: × (1 + 0.05 × √(active_markets)) for diversification, and × (1 − avg_operational_complexity ÷ 400) for complexity drag. Example: 4 active markets → +10% (0.05 × 2), not +20%; 80 avg complexity → −20%.
Used on dashboards and the leaderboard, based on CUMULATIVE EBITDA (sum across all processed units) so consistent performers outrank one-hit wonders. Rules in order: (1) Bankrupt → $0. (2) Post-fundraising (total_equity_raised > 0) → the valuation stamped by the funding engine. (3) Sustained losses (cumulative EBITDA ≤ 0) → max(0, Owner_Equity + Cumulative_EBITDA) — losses erode equity dollar-for-dollar. (4) Profitable, pre-fundraising → max(Industry_Multiple × Cumulative_EBITDA, Owner_Equity), floored at owner equity ($100K default).
When a Venture-tier team raises an equity round, the funding engine sets pre-money valuation: Pre-Money = Annualized_Revenue × Revenue_Multiple × (0.5 + Traction_Score × 0.5). Annualized_Revenue = latest unit revenue × 4 (×2 in W6 mode). Revenue_Multiple = 3 + (valuation_multiple_index ÷ 50) × 3 → a 3×–9× band driven by the class Capital Markets Profile. Traction Score (0–1) blends latest revenue, customer growth, and market share. Post-Money = Pre-Money + Amount Raised; equity % sold = Amount Raised ÷ Post-Money × 100. Once the round lands, this valuation overrides the EBITDA-based display valuation.
Software/SaaS = 15× | Manufacturing = 6× | Wholesale = 5× | Professional Services/Consulting = 4× | Retail = 3.5× | Other (default) = 4×. Applied to cumulative EBITDA in the profitable, pre-fundraising display-valuation rule.
The LOC is an automatic safety net that prevents a single bad period from bankrupting a company, while teaching short-term liability management.
If decisions would result in negative ending cash AND the prior unit's ending cash was positive AND no LOC has been used before, the LOC is automatically created. The shortfall amount becomes the LOC limit.
The LOC can only be established once per 'cycle'. Once paid off completely, the mechanism resets and a new LOC can be created if needed again.
Charged at the same rate as the startup loan, calculated per period on the outstanding balance. Appears on the income statement.
LOC balance appears as a current (short-term) liability. Paying it off reduces both cash and the liability simultaneously.
Teams set a loc_payoff amount in the Decisions screen, up to the full outstanding balance.
If ending cash < 0 AND no LOC is available (already used and unpaid, or prior cash was negative), the company is bankrupt. Decision submission warns teams before this occurs.
Each criterion is worth 25% of the total grade.
Company's final valuation relative to the class average. Rewards sustainable profitability and smart capital allocation.
Cumulative net income ÷ cumulative revenue across all units. Measures gross margin quality and cost discipline.
Customer count growth from Unit 1 to the final unit. Rewards consistent customer acquisition and retention.
Number of units with a submitted (not draft or missed) decision ÷ total units. Rewards engagement and consistent participation.
Companies are ranked by ending valuation within their industry/class. Ties broken by: (1) profit margin, (2) customer count. The leaderboard updates after each unit is processed.
Shocks can be injected automatically (based on the Scenario's shock_frequency setting, overridable per class) or manually by instructors using the Shock Control panel (is_instructor_injected = true).
Frequency controlled by scenario shock_frequency (low/medium/high). Class-level shock_frequency_override takes precedence. processUnit applies shocks that match the current unit number.
Instructors inject specific shock types via the Shock Control page, targeting ALL groups, a specific industry, or a single group.
If a shock has a market_id set, it only applies to groups active in that specific market. International shocks (CUSTOMS_DELAY, DISTRIBUTOR_DEFECTION, JV_DISPUTE, etc.) are additionally filtered to only affect groups using the matching entry strategy.
BASIC: market expansion not available; focus on home market only. MARKET_EXPANSION and VENTURE: expansion unlocks after Unit 2, so expansion choices first appear in the Unit 3 decision. Direct Export and Distributor are available from Unit 3; Joint Venture from Unit 5 (unlocks after Unit 4); New Entity from Unit 7 (unlocks after Unit 6). Per-round cap: entry strategies selected + target markets selected ≤ 2, i.e. one market entered with one strategy per round.
When a group does not submit a decision by the processing deadline, the simulation auto-processes that unit with conservative defaults and a revenue penalty.
Default price of $50, zero marketing/R&D/support spend, no headcount change. The group remains active in its home market with baseline demand generating minimal sales and customers.
Revenue, COGS, gross profit, new customers, and valuation are cut by 50%. All costs (payroll, loan repayments, operating expenses) remain at full value, making the penalty financially impactful. Cash is recalculated accordingly.
The unit narrative is prefixed with '⚠️ No decision submitted — 50% revenue penalty applied.'
A red '⚠ Auto-Processed ×N' badge appears next to the company name. Companies auto-processed for every unit sort to the bottom of the leaderboard and rise naturally once they submit their first real decision.
Instructors can enable/disable the penalty and adjust the percentage on a per-unit basis via Class settings (unit_penalty_settings). Already-processed units are locked; upcoming units remain editable mid-simulation.
Balance is critical: aggressive pricing without market support underperforms; strong marketing without adequate staffing creates inefficiency; expansion without proper execution brings hidden complexity costs. Price competitively in each market relative to local purchasing power — a US price applied to India or Brazil will generate far fewer customers than a PPP-adjusted price.
In Unit 1, teams must price within their industry's recommended range. After Unit 1, pricing is unrestricted, but prices far outside the benchmark will incur conversion rate penalties. For expansion markets, teams should also account for purchasing power parity — the MarketPricingPanel in the Decision Center shows PPP-adjusted suggested prices for each active market.
